Nhờ trợ giúp về giải pháp trích chọn 2 ô dữ liệu từ một cột thỏa mãn điều kiện.

Liên hệ QC

testht06

Thành viên mới
Tham gia
12/2/12
Bài viết
15
Được thích
0
- Chào các bạn, mình có bài toán trong excel nhưng chưa tìm ra cách tính, rất mong các bạn trợ giúp. Bài toán như sau:
+ Cho một mảng các giá trị (dạng một cột hoặc hàng dữ liệu) là chuỗi nhị phân
+ Chọn ra các cặp giá trị thỏa mãn điều kiện cho trước. Ví dụ: Tổng XOR của cặp này = 1
Cụ thể: với cột như sau
0000
0001
0010
0011
0100

Thì chọn được các cặp (0000,0001);(0010,0011)

Rất mong nhận được sự giúp đỡ. Chân thành cảm ơn các bạn
 
- Chào các bạn, mình có bài toán trong excel nhưng chưa tìm ra cách tính, rất mong các bạn trợ giúp. Bài toán như sau:
+ Cho một mảng các giá trị (dạng một cột hoặc hàng dữ liệu) là chuỗi nhị phân
+ Chọn ra các cặp giá trị thỏa mãn điều kiện cho trước. Ví dụ: Tổng XOR của cặp này = 1
Cụ thể: với cột như sau
0000
0001
0010
0011
0100

Thì chọn được các cặp (0000,0001);(0010,0011)

Rất mong nhận được sự giúp đỡ. Chân thành cảm ơn các bạn
Bài này làm bằng lập trình VBA không có vấn đề, còn nếu dùng công thức tôi chỉ bạn 1 cách
Xem hình:

Capture.JPG

- Bố trí dữ liệu thành 1 bảng tra tại cột A và dòng 1
- Công thức tại B2: =IF($A2=B$1,"",1*OR(AND(1*$A2,NOT(1*B$1)),AND(NOT(1*$A2),1*B$1)))
- Kéo fill sang phải và xuống dưới
 
Tiếp tục vơi giải pháp chọn 2 ô dữ liệu

Cảm ơn bạn ndu96081631. Mình đã thử cách của bạn, tuy nhiên giải pháp của bạn hơi khác với vấn đề của mình một chút.Mình mô tả thêm vấn đề của mình một tí. Ví dụ mình có các xâu nhị phân như sau:
0000
0001
0010
0011
0100
0101

- Chọn ra các cặp với tiêu chuẩn XOR 2 phần tử trong cặp = a. Như vậy
+ Với a=1, thì được {0000,0001}; {0010,0011};{0100,0101}
+ Với a=2, thì được {0000,0010}; {0011,0001};
+ Với a=3, thì được {0000,0011}; {0001,0010};
...vv

Từ giải pháp của bạn ở trên, mình nghĩ rằng có thể lập một bảng giống như trong giải pháp của bạn, sau đó thực hiện:
+ Lần lượt XOR từng cặp với nhau để xác định giá trị của phép XOR (mỗi ô tương ứng với dòng và cột là giá trị XOR tương ứng của cặp này)
+ Với mỗi giá trị của phép XOR (mỗi Ô của bảng) thì chọn ra cặp tương ứng ở dòng và cột của ô đó

Mình sẽ thử giải pháp này. Chân thành cảm ơn bạn nhiều
 
Cảm ơn bạn ndu96081631. Mình đã thử cách của bạn, tuy nhiên giải pháp của bạn hơi khác với vấn đề của mình một chút.Mình mô tả thêm vấn đề của mình một tí. Ví dụ mình có các xâu nhị phân như sau: 0000 0001 0010 0011 0100 0101 - Chọn ra các cặp với tiêu chuẩn XOR 2 phần tử trong cặp = a. Như vậy + Với a=1, thì được {0000,0001}; {0010,0011};{0100,0101} + Với a=2, thì được {0000,0010}; {0011,0001}; + Với a=3, thì được {0000,0011}; {0001,0010}; ...vv Từ giải pháp của bạn ở trên, mình nghĩ rằng có thể lập một bảng giống như trong giải pháp của bạn, sau đó thực hiện: + Lần lượt XOR từng cặp với nhau để xác định giá trị của phép XOR (mỗi ô tương ứng với dòng và cột là giá trị XOR tương ứng của cặp này) + Với mỗi giá trị của phép XOR (mỗi Ô của bảng) thì chọn ra cặp tương ứng ở dòng và cột của ô đó Mình sẽ thử giải pháp này. Chân thành cảm ơn bạn nhiều
Cũng dễ thôi! Vẫn với cách bố trí dữ liệu như tôi trình bày ở trên, giờ gõ công thức này vào cell B2 nhé:
PHP:
=SUMPRODUCT((MID(Sheet1!$A2,{1,2,3,4},1)*NOT(1*MID(Sheet1!B$1,{1,2,3,4},1)))+(NOT(1*MID(Sheet1!$A2,{1,2,3,4},1))*MID(Sheet1!B$1,{1,2,3,4},1)))
 

File đính kèm

  • XOR.xls
    35 KB · Đọc: 4
Lần chỉnh sửa cuối:
Cảm ơn bạn ndu96081631 nhiều.
- Mình đã thử theo công thức của bạn, tuy nhiên kết quả của phép XOR chưa chính xác: Ví dụ 0000 xor với 0011 phải bằng 0011
hoặc 0010(2) xor 0101(5) phải bằng 0111 (7); 0001 (1) xor 0011(3) = 0010 (2)
- Mình không thấy có phép toán cộng XOR trong excel nhỉ?
 
Cảm ơn bạn ndu96081631 nhiều. - Mình đã thử theo công thức của bạn, tuy nhiên kết quả của phép XOR chưa chính xác: Ví dụ 0000 xor với 0011 phải bằng 0011
Xin lỗi, tôi nhầm! Cứ tưởng XOR xong thì cộng mấy số 1 lại với nhau... Hoá ra là đổi BIN TO DEC Ẹc... Ẹc... Sửa công thức thành:
Mã:
=SUMPRODUCT(2^({3,2,1,0})*(MID($A2,{1,2,3,4},1)<>MID(B$1,{1,2,3,4},1)))
Kiểm tra lại nhé
 

File đính kèm

  • XOR.xls
    31.5 KB · Đọc: 4
Lần chỉnh sửa cuối:
- Chạy tốt rồi bạn ạ. Trên cơ sở cấu trúc bảng này mình cũng dùng thêm cách là:
+ bước 1: Cắt từng bít tương ứng của 2 xâu nhị phân, cộng lại rồi MOD cho 2
+ bước 2: Ghép từng kết quả trong bước 1 thành xâu nhị phân và chuyển xâu nhị phân này thành số thập phân
Cụ thể:
=BIN2DEC(CONCATENATE(MOD(MID($A2;1;1)+MID(B$1;1;1);2);MOD(MID($A2;2;1)+MID(B$1;2;1);2);MOD(MID($A2;3;1)+MID(B$1;3;1);2);MOD(MID($A2;4;1)+MID(B$1;4;1);2)))

- Ý tưởng chắc cũng giống của bạn, chỉ khác công thức. Tuy nhiên công thức của bạn gọn hơn, mình sẽ dùng theo công thức của bạn.
- Với cả bài toán của mình còn phức tạp hơn tí, phải dùng đến 8bit (tức là tới 255)

Một lần nữa, chân thành cảm ơn bạn nhiều
 
Lần chỉnh sửa cuối:
- Với cả bài toán của mình còn phức tạp hơn tí, phải dùng đến 8bit (tức là tới 255)
Muốn mấy Bit cũng được cả mà
Ví dụ 8 bit thì công thức sẽ vầy:
Mã:
=SUMPRODUCT(2^([COLOR=#ff0000][SIZE=3]8[/SIZE][/COLOR]-ROW($1:$[COLOR=#ff0000][SIZE=3]8[/SIZE][/COLOR]))*(MID($A2,ROW($1:$[COLOR=#ff0000][SIZE=3]8[/SIZE][/COLOR]),1)<>MID(B$1,ROW($1:$[COLOR=#ff0000][SIZE=3]8[/SIZE][/COLOR]),1)))
Mấy bit thì cứ thay số 8 thành số ấy
 
- OK, quá tuyệt vời bạn ạ. Mình không thạo excel lắm nên làm hơi thủ công, thiết lập công thức cũng hơi khó khăn!.
- Như vậy là bước 1 (Tính bảng phân phối phép XOR tương ứng đã xong), mình đang làm tiếp phần: Trích chọn từng cặp tương ứng với tiêu chuẩn "Tổng xor của cặp = a"

- Chắc là trong Sheet2 của file này mình tham chiếu đến bảng phân phối trong Sheet1. Xong rồi:
+ Với mỗi a=(1,2,...,n), tìm giá trị ô tương ứng = a trong bảng ở sheet1 để chọn ra cặp tương ứng ở hàng và cột (có 255 giá trị thì sẽ có 255 div 2 = 128 cặp)
+ Có thể hiển thị kết quả dạng hàng và cột. Cột đầu là ứng với giá trị a, còn hàng là từng cặp tương ứng có tổng Xor = a

1 cặp xi,ỵj; xk,yl....
2
3
4
5

Mình cũng đang loay hoay với phần này, mãi chưa xong.

Nhờ bạn giúp mình thêm phần này nhé. Thanks nhiều
 
Mình cũng đang loay hoay với phần này, mãi chưa xong.

Nhờ bạn giúp mình thêm phần này nhé. Thanks nhiều
Thôi thì bạn cứ đưa file thật của bạn lên đây, ghi rõ yêu cầu + kết quả mà bạn mong muốn đạt được để mọi người trợ giúp dễ dàng hơn
 
Ok, đây là cấu trúc file của mình
View attachment tinhtoan_trogiup.xls

Trong đó:
+ Sheet1 là bảng tính XOR từng cặp
+ Sheet2 là bảng gồm: Cột là giá trị yêu cầu đối với tổng xor (a= 0,1,2,3...); hàng là các cặp tương ứng có tổng xor =a
Mong bạn và mọi người giúp đỡ
 
Ok, đây là cấu trúc file của mình
View attachment 77518

Trong đó:
+ Sheet1 là bảng tính XOR từng cặp
+ Sheet2 là bảng gồm: Cột là giá trị yêu cầu đối với tổng xor (a= 0,1,2,3...); hàng là các cặp tương ứng có tổng xor =a
Mong bạn và mọi người giúp đỡ
Trích lọc rồi nối chuổi kiểu này nếu dùng công thức sẽ rất phức tạp. Dùng lập trình VBA sẽ dễ dàng hơn
Tôi xây dựng hàm theo code sau:
PHP:
Function FindXOR(ByVal sArray, ByVal Res As Long)
  Dim Arr(), tmpArr, n1 As Long, n2 As Long, k As Long
  On Error Resume Next
  tmpArr = Convert2Array(sArray)
  If Res = 0 Then
    ReDim Arr(UBound(tmpArr))
    For k = 0 To UBound(tmpArr)
      Arr(k) = tmpArr(k) & "-" & tmpArr(k)
    Next
  Else
    For n1 = 0 To UBound(tmpArr) - 1
      For n2 = n1 + 1 To UBound(tmpArr)
        If (tmpArr(n1) Xor tmpArr(n2)) = Res Then
          ReDim Preserve Arr(k)
          Arr(k) = tmpArr(n1) & "-" & tmpArr(n2)
          k = k + 1
        End If
      Next
    Next
  End If
  If k Then FindXOR = Arr
End Function
Trong đó cần thêm 1 hàm hổ trợ chuyển mảng (hoặc Range) thành mảng 1 chiều
PHP:
Function Convert2Array(ByVal sArray, Optional IgnoreBlanks As Boolean = True)
  Dim tmpArr, Arr(), Item, n As Long
  On Error Resume Next
  tmpArr = sArray
  ReDim Arr(0)
  If TypeName(tmpArr) <> "Variant()" Then
    Arr(0) = tmpArr
    Convert2Array = tmpArr
  Else
    For Each Item In tmpArr
      If IgnoreBlanks = False Or Len(Trim(CStr(Item))) > 0 Then
        ReDim Preserve Arr(n)
        Arr(n) = Item
        n = n + 1
      End If
    Next
    Convert2Array = Arr
  End If
End Function

Capture.JPG

Mời xem file
-----------------------
Mod vui lòng sửa lại tiêu đề cho phù hợp với câu hỏi liên quan đến XOR
 

File đính kèm

  • tinhtoan_trogiup.xls
    56 KB · Đọc: 5
- Vấn đề của mình đã được trợ giúp giải quyết trọn vẹn. Chân thành cảm ơn bạn ndu96081631
 
Nhờ trợ giúp thêm vấn đề phát sinh

- Chào bạn ndu96081631 và mọi người.
Vấn đề của mình có thêm phát sinh như sau, nhưng mình vẫn chưa xử lý được. Mong được trợ giúp thêm.
- Cũng với bài như trên, nhưng các giá trị cặp xor tương ứng với a, ví dụ: x xor x'. Các giá trị trong cặp này có qua biến đổi thêm bằng một hàm f, tức là sẽ có đầu ra f(x) và f(x'). Cần tính thêm xor đầu ra qua f tương ứng với x và x'.
Ví dụ:
+ a=1, các cặp 0000 - 0001; 0010 - 0011;....
+ các cặp f là: f(0000)-f(0001); f(0010) - f(0011).
Mính đính kèm file đã mô tả thêm hàm f.

Rất mong nhận thêm được sự trợ giúp
 

File đính kèm

  • tinhtoan_trogiup1.xls
    56.5 KB · Đọc: 1
- Chào bạn ndu96081631 và mọi người.
Vấn đề của mình có thêm phát sinh như sau, nhưng mình vẫn chưa xử lý được. Mong được trợ giúp thêm.
- Cũng với bài như trên, nhưng các giá trị cặp xor tương ứng với a, ví dụ: x xor x'. Các giá trị trong cặp này có qua biến đổi thêm bằng một hàm f, tức là sẽ có đầu ra f(x) và f(x'). Cần tính thêm xor đầu ra qua f tương ứng với x và x'.
Ví dụ:
+ a=1, các cặp 0000 - 0001; 0010 - 0011;....
+ các cặp f là: f(0000)-f(0001); f(0010) - f(0011).
Mính đính kèm file đã mô tả thêm hàm f.

Rất mong nhận thêm được sự trợ giúp
Chưa hiểu lắm!
Thôi bạn điều kết quả chính xác vào luôn trong file đi
 
File đã điền một số kết quả làm ví dụ

- Mình điền một số kết quả vào file làm ví dụ đây rồi. Nhờ bạn trợ giúp nhé
 

File đính kèm

  • tinhtoan_trogiup1.rar
    12.2 KB · Đọc: 6
- Mình điền một số kết quả vào file làm ví dụ đây rồi. Nhờ bạn trợ giúp nhé

Sao vẫn thấy nó lơ mơ quá ta
Có lúc hình như.. hiểu hiểu, có lúc lại thấy hết.. hiểu
Có ai hiểu được yêu cầu này vui lòng giải thích hoặc làm giúp với
 
Mô tả thêm về bài toán

- Hi bạn ndu96081631. Mình mô tả thêm một chút như thế này:
+ Trong phần trước đã tính và trích lọc được các cặp nhị phân (x1-x2) thõa mãn điều kiện tổng XOR = a và lập ra được bảng các giá trị a và các cặp (xi-xj) tương ứng.

+ Trong bài toán của mình, mỗi cặp (xi-xj) này còn qua phép biến đổi f (hàm f), để có f(xi). Tức là với mỗi xi sẽ có f(xi) tương ứng. Và phải tính được với cặp xi XOR xj = a thì tương ứng f(xi) XOR f(xj) = ?- Như vậy với phần bảng tính giá trị a và các cặp xi XOR xj = a, cần lập thêm bảng tương ứng f(xi) XOR f(xj).

- Thông thường khai báo một mảng A[], xong hàm f gán tương ứng là A[xi]=f(xi) thì khi tìm được xi-xj, là có ngay A[xi]=f(xi)-A[xj]=f(xj).

Trong excel, hàm f này tương ứng với bảng gồm 2 cột (x, f(x)) và các dòng là các giá trị tương ứng. Khi phần trên đã tính được xi-xj rồi, tham chiếu đến bảng hàm f này để lấy f(xi)-f(xj) tương ứng, nhưng mình gặp khó trong việc sử dụng công thức hoặc lập trình vba.

Mong bạn giúp thêm nhé
 
Chào bạn ndu96081631 và mọi người, nhờ mọi người tiếp tục xem giúp mình vụ này nhé.
 
Web KT

Bài viết mới nhất

Back
Top Bottom