Hàm mod trả về số chia nếu chia chẵn. (1 người xem)

  • Thread starter Thread starter cantl
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

cantl

!!! Giải thoát !!!
Thành viên bị đình chỉ hoạt động
Tham gia
6/8/08
Bài viết
1,815
Được thích
1,163
Giới tính
Nam
Chào các bác,
Em muốn kết quả trả về của hàm mod như sau:
Mod (4,2) = 2 thay vì 0 thì như thế nào?
Em không muốn dùng hàm if. Bởi vì cuộc đời em bắt đầu từ 1 chuỗi "nếu như".
 
Chào các bác,
Em muốn kết quả trả về của hàm mod như sau:
Mod (4,2) = 2 thay vì 0 thì như thế nào?
Em không muốn dùng hàm if. Bởi vì cuộc đời em bắt đầu từ 1 chuỗi "nếu như".
Thấy hơi bị kỳ, Mod phải bằng 0 chứ, còn bằng 2 là Div rồi.
 
Trước hết phải sửa lại tiêu đề. Ghi tiêu đề Hàm MOD thì chả ai hiểu gì đâu, ở đó mà súc tích.
 
Tiêu đề vô nghĩa cần phải sửa, nếu không sẽ bị xóa. Vô nghĩa ở chỗ không chứa ý cần hỏi, bất lịch sự ở chỗ cộc lốc.
 
Trước hết phải sửa lại tiêu đề. Ghi tiêu đề Hàm MOD thì chả ai hiểu gì đâu, ở đó mà súc tích.
Đã sửa bác ạ.
Đôi khi mình cũng muốn bắt đầu trở lại, thay chữ "nếu như" bằng chữ "ngược ngạo"?

View attachment 295376
Bác hiểu nhầm chút, nếu chia mà mod trả về 0 thì cho nó bằng số chia cơ.
Bài đã được tự động gộp:

Em mới sửa, ổn chưa bác ạ?
 
Thông thường người ta sẽ trừ số bị chia 1 đơn vị sau đó cộng số dư 1 đơn vị.
 
Ôi thật là bá đạo. Không ngờ lại giản dị đến thế bác ạ.
=MOD(6-1,2)+1
Mong muốn của bác chỉ là nghịch đảo giá trị
một số nguyên chia dư cho 2, gồm các giá trị: số chẳn là 0 và số lẻ là 1 và -1
Và bác muốn đảo giá trị với số chẳn là 1 và -1 và số lẻ là 0
Phương pháp bù trừ đương nhiên sẽ làm được điều này.
 
Mong muốn của bác chỉ là nghịch đảo giá trị
một số nguyên chia dư cho 2, gồm các giá trị: số chẳn là 0 và số lẻ là 1 và -1
Và bác muốn đảo giá trị với số chẳn là 1 và -1 và số lẻ là 0
Phương pháp bù trừ đương nhiên sẽ làm được điều này.
Tớ cũng chưa hiểu lắm, nhưng nghĩ mãi không ra được công thức. Nghịch đảo này tớ cũng phải tìm hiểu thêm.
 
Nếu số chia không phải 2 thì có gọi là nghịch đảo không?
 
Có thể nghịch đảo bất kì một số chia dư trừ số 0

@cantl
Bài toán của bác cũng có thể dùng nghịch đảo số bị chia như sau
(-x mod 2) + 2
 
Bạn cho tôi những thí dụ cho số chia bằng 3, số dư lần lượt là 0, 1, 2 chuyển thành 3, 1, 2
Mong muốn của bác là chuyển dịch giá trị, không phải nghịch đảo như phép chia dư cho 2

-MOD(-x,3)+3
Bài đã được tự động gộp:

Không được bạn ạ. Tìm số dư 3 / 2. Thay 3 vào thì công thức trên sẽ: 3 =MOD(-3,2)+2. Mà 3 / 2 dư 1, có thể nhầm chỗ nào chăng?
Bác đọc phần miêu tả dưới đây để thực hiện. Ở trên tôi dùng toán tử Mod trong VBA để kiểm thử. Toán tử Mod Vba và Hàm Mod Excel khác nhau ở giá trị trả về.

 
Lần chỉnh sửa cuối:
Mong muốn của bác là chuyển dịch giá trị, không phải nghịch đảo như phép chia dư cho 2
Không phải mong muốn của tôi mà là yêu cầu của chủ đề này không chỉ có số 2. Bài 14 tôi hỏi rất rõ ràng "số chia bằng 3" và bạn khẳng định "Có thể nghịch đảo bất kì một số chia dư trừ số 0" (bài 15), nên tôi mới lấy ra thí dụ ở bài 17

HeSanbi đã viết:
Công thức bạn cho ở bài 15 cũng sai với ngay cả số chia bằng 2, tới bài 19 mới đúng
1696432703332.png
 
Không phải mong muốn của tôi mà là yêu cầu của chủ đề này. Bài 14 tôi hỏi rất rõ ràng "số chia bằng 3" và bạn khẳng định "Có thể nghịch đảo bất kì một số chia dư trừ số 0" (bài 15), nên tôi mới lấy ra thí dụ ở bài 17
#19 tôi đã giải thích, bác đã kiểm thử nhầm thì lỗi do Bác đọc bài viết.

Nếu VBA là: -4 mod 2 + 2
Thì Excel: Mod(4,-2) + 2

Phương pháp trên tôi chỉ nghịch đảo giá trị trả về, khi áp dụng cần tuân theo nguyên tắc của hàm Excel.

Hàm Mod Excel dùng dấu của số chia dư để trả về giá trị, nên khác hoàn toàn với toán tử Mod VBA
 
Thôi toi rồi các bác ạ. Giờ phép chia số âm 3/-2 và -3/2 thì số dư nào đúng như ảnh sau. Sao giống như lỗ hổng của toán học ấy.
Em loạn rồi.
 

File đính kèm

  • Screenshot_20231004-221840_Excel.jpg
    Screenshot_20231004-221840_Excel.jpg
    37.7 KB · Đọc: 13
Công thức bạn cho ở bài 15 cũng sai với ngay cả số chia bằng 2, tới bài 19 mới đúng
Nếu bác đọc kĩ bài #15 thì sẽ khác
Bài đã được tự động gộp:

Thôi toi rồi các bác ạ. Giờ phép chia số âm 3/-2 và -3/2 thì số dư nào đúng như ảnh sau. Sao giống như lỗ hổng của toán học ấy.
Em loạn rồi.
Hãy "Bình tĩnh". Mod Excel dùng dấu số chia dư Divisor làm dấu trả kết quả nha bác.
 
#19 tôi đã giải thích, bác đã kiểm thử nhầm thì lỗi do Bác đọc bài viết.
Bài 19 mới viết thì sau bài đó mới gọi là nhầm. Còn bài 16, 17 nói về bài 15 thì không gọi là nhầm.
Bạn nghịch đảo số bị chia, mà toàn nói về số chia. Tôi hỏi số chia, bạn vẫn khẳng định số chia.
Ngoài ra, chủ đề hỏi trong box công thức, bạn lại trả lời bằng hàm VBA mà không báo trước.
 
Mod excel thì link MS trên tớ hiểu nó chọn dấu rồi, nhưng thực tế thì ảnh bài 23, kết quả nào đúng về toán học nhỉ? :wallbash::wallbash::wallbash:
Hàm MOD của Excel họ đã định nghĩa để người dùng áp dụng theo nguyên tắc của họ đặc ra.
Hàm thì được định nghĩa. Còn toán tử thì mới tuân theo nguyên tắc toán học.
 
Thôi toi rồi các bác ạ. Giờ phép chia số âm 3/-2 và -3/2 thì số dư nào đúng như ảnh sau. Sao giống như lỗ hổng của toán học ấy.
Em loạn rồi.
Đọc định nghĩa hàm Mod của Excel do MS viết:

1696434574941.png

Với bài toán chia -3 chia 2, thương số là -1, dư 1 vì -3 -(2 * int(-3/2)) = 1. Lưu ý dư 1 cùng dấu với số bị chia 2

Với bài toán 3 chia -2, thương số là -1, dư -1 vì 3 - (-2) * int(3/(-2)) = -1. Lưu ý dư -1 cùng dấu với số bị chia -2

Tóm lại, đúng với toán hay không không cần biết, phải đúng với định nghĩa mod của MS.
 
Theo toán thì:
MOD(a,b) = a-b*QUOTIENT(a,b)

Nhưng Microsoft định nghĩa hơi khác. Họ định nghĩa rằng:
MOD(a,b) = a-b*INT(a/b)

Tôi chỉ nói hàm bảng tính. VBA vốn là của Access, có một số trường hợp Access làm việc khác với Excel.
 
Hay quá, hàm mod em dùng bao năm mà không hiểu gì về nó hết cả. :D :D :D

Cảm ơn các bác nhé!!!
 
Nhức đầu quá, hãy nghỉ đơn giản để đời đẹp hơn
Thớt này đang rỗi, chắc vừa bị bồ đá, cho nên đi tim những chuyện rắc rối cho nó đỡ buồn, sinh nghĩ quẩn, tự tử hay uông thuốc kock thích gì đó.
 
Thớt này đang rỗi, chắc vừa bị bồ đá, cho nên đi tim những chuyện rắc rối cho nó đỡ buồn, sinh nghĩ quẩn, tự tử hay uông thuốc kíck thích gì đó.

Trong định nghĩa của MS về Mod
Mod(n, d) = n - d * Int(n / d)
May mà chưa thấy vấn đề với Int, nếu thấy thì tự tử chắc luôn.
 
Căn bản con toán tính chỉ số mảng 1 chiều thành 2 chiều.
Bác giải thích chi tiết về
...
cho em hiểu với ạ.
mảng a1(1 To 110) đổi thành a2(1 To 6, 1 To 20)
a2((i - 1) \ UBound(a2, 2) + 1, ((i - 1) Mod UBound(a2, 2)) + 1) = a1(i)
Con toán trên tính phần tử tương ứng (dòng và cột) để chép a1(i) qua a2(?, ?)

Thử code này thì biết
Sub t()
Dim a1(1 To 110)
Dim a2(1 To 6, 1 To 20)
For i = 1 To UBound(a1)
a2((i - 1) \ UBound(a2, 2) + 1, ((i - 1) Mod UBound(a2, 2)) + 1) = a1(i)
' tính dòng thì chia, tính cột thì mod
Debug.Print i, (i + -1) \ UBound(a2, 2) + 1, ((i - 1) Mod UBound(a2, 2)) + 1
Next i
End Sub
 
Một trong những cái sai lầm của người "tự học" môn giải tích số (numerical analysis), môn này bao gồm cả lập trình, là họ nghĩ rằng chỉ cần học code, biết sử dụng abc, xyz,... là đủ.
Tất cả (tôi nói tất cả, không phải chỉ đa số) những người giỏi lập trình đều biết cách đặt dữ liệu để test kiến thức của mình.
Ví dụ thắc mắc về hàm MOD thì họ tự dựng được một bảng để test xem mình hiểu hàm này đến mức nào. Nếu về sau này thấy rằng có sự lạ của MOD mà mình trước đó chưa biết thì chẳng những họ cập nhật kiến thức về cái sự lạ ấy, mà còn phải tự đặt câu hỏi "tại sao test của mình thiếu phần ấy?"

Nếu bạn đặt đủ dữ liệu để test thì có thể sẽ hiểu tại sao MS định nghĩa hàm MOD như thế.
 

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

Back
Top Bottom