Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Viết chương trình kiểm tra số chẵn lẻ dựa trên hệ số nhị phân

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    8

    Mặc định Viết chương trình kiểm tra số chẵn lẻ dựa trên hệ số nhị phân

    Viết chương trình kiểm tra số chẵn lẻ dựa trên hệ số nhị phân, em không hiểu lắm đề bài, anh (chị) giúp em phân tích bài này và share code luôn cho em nha, em xin cảm ơn.
    Không Có Gì Hạnh Phúc Hơn Lập Trinh.

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Số lẻ hệ 10 thì ở bit hệ 2 của nó , bit cuối cùng (bit thứ 0) sẽ là: 1 , số chẵn sẽ là 0
    Tương ứng với vị trí 2^0 = 1 .-->Số lẻ
    Hệ 10: số 1 -> Hệ 2: 1
    ..............3 ->.........11
    ..............5 ->.........101
    Vân vân.
    Lật tài liệu ra xem cấu tạo số nhị phân tương ứng với số thập phân thế nào. Rồi làm.
    Xem tài liệu lập trình C có công cụ gì đụng đến bit nhị phân thì áp dụng xem
    Đã được chỉnh sửa lần cuối bởi clchicken : 18-01-2012 lúc 10:10 AM.
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    11 2011
    Nơi ở
    /home/tancuong
    Bài viết
    32

    Mình chỉ phân tích thôi:
    - Để ý trong hệ thập phân số lẽ là số có chữ số tận là các chữ số lẽ (1,3,5,7,9); số chẵn là số có chữ số tận là các chữ số chẵn (0,2,4,6,8). Ví dụ: các số 123, 567, 431, ... là các số lẽ; còn các số 124, 568, 90 là các số chẵn
    - Hệ nhị phân (chỉ gồm 2 chữ số 0 và 1) nghĩa là chữ số cuối cùng của các số chỉ có thể là một trong hai số 0 và 1. Mà ta luôn biết rằng số 1 là số lẽ, số 0 là số chẵn nên số nào có chữ số tận cùng là số 0 là số chẵn và số có chữ số tận cùng là số 1 là số lẽ ví dụ 10011, 1111, 10101 là các số lẽ; các số 1110, 1010, 10000 là các số chẵn.

    Ý tưởng giải thuật: Dùng phép toán and logic(&) để kiểm tra:
    C Code:
    1. if (so & 1 == 0) printf("số chẵn");
    2. else printf("số lẽ");
    Forum học lập trình ASM: Assembly Việt

  4. #4
    Ngày gia nhập
    10 2011
    Bài viết
    552

    @ tancuong :
    C++ Code:
    1. if (so & 1 == 0)
    Phải có ngoặc đàng hoàng. Vì thứ tự ưu tiên của phép toán ko phải từ trái sang đâu.
    Đã được chỉnh sửa lần cuối bởi clchicken : 18-01-2012 lúc 10:39 AM.
    Um Mani Padme Hum...!!

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Code trên C/C++ thì chỉ cần vầy thôi

    if (n & 1) lẻ
    else chẵn

    Không cần phải so sánh với 0

  6. #6
    Ngày gia nhập
    10 2011
    Bài viết
    8

    Mặc định Viết chương trình kiểm tra số chẵn lẻ dựa trên hệ số nhị phân

    em không hiểu lắm cái lệnh (n&1), anh (chị) "chạy tay" cái lệnh đó giúp em được không ạ.
    Không Có Gì Hạnh Phúc Hơn Lập Trinh.

  7. #7
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi HacAmThienThan Xem bài viết
    em không hiểu lắm cái lệnh (n&1), anh (chị) "chạy tay" cái lệnh đó giúp em được không ạ.
    Bạn tìm hiểu thêm
    Toán tử bitwise
    Hướng dẫn C++: https://www.youtube.com/watch?v=BwLodoQdoY4&list=PL1c9Uxlo-mplJDRGdONNupgo5OCBTyGGn

  8. #8
    Ngày gia nhập
    10 2011
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi beautifulsoul84hung Xem bài viết
    Bạn tìm hiểu thêm
    Toán tử bitwise
    Mấy cái toán đó thì em biết rồi ạ, nhưng em không biết lệnh (n&1) hoạt động bên trong như thế nào? em cần được giải thích rõ ràng và chạy tay ạ, em xin cảm ơn.
    Không Có Gì Hạnh Phúc Hơn Lập Trinh.

  9. #9
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Vẽ lên giấy số nhị phân độ dài cỡ 4 5 bit gì đấy, siêng thì vẽ cỡ chục 15 bit cho sướng
    Sau đó AND với 00001 (thêm bit 0 vào ở trước cho đủ độ dài bằng nhau) xem nó ra cái gì
    Um Mani Padme Hum...!!

  10. #10
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Nếu bạn phải hỏi cách chạy tay xem (n&1) là cái gì thì bạn chưa hiểu thế nào là thuật toán BIT AND. Và có lẽ bạn cũng chưa hiểu điều kiện Boolean (true/false) trong C được thể hiện như thế nào.

    BIT AND

    & là toán tử AND bằng bit. Tức là đem từng bit của vế bên trái ra AND với bit cùng bậc của bên phải.

    1 là số nguyên chỉ có bit ở bậc 0 set (1), tất cả bit còn lại đều là off (0).

    đem n BIT AND với 1 là biểu thức xét xem bit hàng 0 của n có set hay không. Bởi vì các bit hàng khác của số 1 là 0 nên BIT AND với chúng là 0.

    xét số 18 (ngắt đoạn 4 bit cho dễ đọc)
    [0000 0000 0000 0000 0000 0000 0001 0010] & [0000 0000 0000 0000 0000 0000 0000 0001]
    = [0000 0000 0000 0000 0000 0000 0000 0000] --- >(số 0)

    xét số 19 (để ý chỗ đỏ là chỗ 2 bits cùng set)
    [0000 0000 0000 0000 0000 0000 0001 0011] & [0000 0000 0000 0000 0000 0000 0000 0001]
    = [0000 0000 0000 0000 0000 0000 0000 0001] --- >(số 1)

    ===> Lúc muốn xem một số chẵn hay lẻ, chỉ cần xem bit 0 của nó có set hay không

    Thể loại Boolean

    Khi xét điều kiện true/false (if/while/for và ?: ), C coi tất cả các biểu thức đưa về giá trị 0 là false và các giá trị khác 0 đều được coi là true.

    (n & 1) là một biểu thức

    Biểu thức này cho ra trị 0 nếu bit 0 của n không set (số chẵn) và cho ra trị 1 nếu bit 0 của n set (số lẻ)

    Bởi vậy để xem số chẵn lẻ chỉ cần

    if (n&1) ---> lẻ
    else ---> chẵn

    tb. như đã nói trên, căn bản về các toán tử có tính cách logic của bạn chưa vững. Cần phải học kỹ hơn.

Các đề tài tương tự

  1. Code thuật toán quicksort trên C++. Làm sao in số chẵn trước, số lẻ sau?
    Gửi bởi trungthuan trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 8
    Bài viết cuối: 17-08-2010, 11:43 PM
  2. Tính TBC trên Cây NPTK. Đếm và tính tổng số chẵn trong cây?
    Gửi bởi hoangedward trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 03-01-2010, 12:11 PM
  3. Sắp xếp mảng trên C| Chẵn lên đầu, 0 ở giữa, lẻ ở cuối
    Gửi bởi huhuhuhu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 08-07-2009, 06:46 PM
  4. Sắp xếp mảng theo chẵn lẽ và tăng dần trên C?
    Gửi bởi interpol_trinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 14
    Bài viết cuối: 21-04-2009, 10:11 PM
  5. đếm số chẵn ở vị trí biên trên ma trận
    Gửi bởi clementboy03 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 05-04-2009, 08:27 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn