Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: một bài tập đơn giản với số thực

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    140

    Mặc định một bài tập đơn giản với số thực

    các anh chỉ giúp em bài này sai chổ nào
    C Code:
    1. #include<stdio.h>
    2. void main()
    3. {
    4. float a=2.1;
    5. if(a==2.1)
    6.  printf("ket qua dung");
    7. else
    8.  printf("ket qua sai");
    9. getch();
    10. }
    tại sao lại cho kết quả là sai niếu thay 2.1 bằng 2.0 thì cho kết quả là đúng
    nhân tiện hỏi luôn anh nào biết hàm làm tròn trong turbo c viết như thế nào
    ví dụ : 2.1234 -làm tròn ->2.1

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    153

    Mình đã test thử bài của bạn nhưng chưa phát hiện ra lỗi nhưng bạn dùng lệnh getch() mà ko include thư viện conio vào mà máy nó không báo lỗi à?Mình sẽ trả lời cho bạn việc nó báo lỗi sau vì chưa có thời gian nghiên cứu.

    Bạn có thể thử gán biến cho như sau :
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. void main()
    4. {
    5. float a = 2.1;
    6. float b;
    7. b=a;
    8.  
    9. if(a == b)
    10. {
    11.  printf("ket qua dung");
    12.  }
    13.  
    14.     else
    15.    {
    16.         printf("ket qua sai");
    17.  
    18.    }
    19. getch();
    20. }
    Còn về hàm làm tròn trong C thì mình không nhớ lắm, bạn thử search trên google xem hoặc tìm trong thư viện math của nó.

    Nếu để in ra có thể thực hiện như sau:
    C Code:
    1. printf("%4.2f",numberFloat);
    ttecak ?

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    140

    <quote>
    Mình đã test thử bài của bạn nhưng chưa phát hiện ra lỗi nhưng bạn dùng lệnh getch() mà ko include thư viện conio vào mà máy nó không báo lỗi à?Mình sẽ trả lời cho bạn việc nó báo lỗi sau vì chưa có thời gian nghiên cứu.
    </quote>

    em biên dịch bằng chương trình turbo c3.1 không thấy nó báo lổi conio
    còn cái if(a==2.1) niếu ta dùng kiểu số nguyên thì vẫn so sánh được không lổi, không hiểu vì sao lại không dùng được với số thực,
    hàm làm tròn trong turbo c em kiếm không ra.

  4. #4
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Tại sao lại không so sánh kiểu số thực được? Vấn đề này Dr đã nêu ra một lần, với một bài viết rất chi tiết nhưng không rõ là nó nằm ở đâu nữa. Chán

    Hãy xem một chút các chú thích mà Dr đưa ra sau đây.
    C Code:
    1. float a=2.1; //2.1 ở đây được gán kiểu float
    2. if(a==2.1)   //2.1 ở đây là một hằng kiểu decimal

    Trong máy tính, nó hoàn toàn không hiểu được số 2.1 như bạn. Mà nó phải chuyển sang số nhị phân. Khi chuyển sang số nhị phân thì cái phần dấu chấm động sẽ chuyển sang dạng sau:
    Code:
    0.1 x 2 = 0.2 => 0.0
    0.2 x 2 = 0.4 => 0.00
    0.4 x 2 = 0.8 => 0.000
    0.8 x 2 = 1.6 => 0.0001     (1.6 -1 = 0.6)
    0.6 x 2 = 1.2 => 0.00011    (1.2 -1 = 0.2)
    0.2 x 2 = 0.4 => 0.000110   (Quay lại dòng thứ 2)
    0.4 x 2 = 0.8 => 0.0001100
    Như vậy với số 2.1 khi chuyển sang nhị phân sẽ là một số dạng vô hạn tuần hoàn. Kiểu float và decimal có độ dài dấu chấm động khác nhau, nên nó sẽ là 2 số khác nhau. Kết quả sai là máy tính làm đúng đó.

    Như vậy bạn đã hiểu tại sao lại không thể so sánh được rồi chứ? Với các số có dạng: x.0, x.5, x.25, thì có thể so sánh trực tiếp như của bạn được đấy.

    Bạn thử với code sau xem:
    C Code:
    1. #include<stdio.h>
    2. void main()
    3. {
    4.     float a=2.1;
    5.     float b=2.1;
    6.     if(a==b)
    7.      printf("ket qua dung");
    8.     else
    9.      printf("ket qua sai");
    10.     getch();
    11. }

    Best regards!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bài giải thích của Dr quả thực rất hay, mình cũng chịu T_T, không nghĩ so sánh thế là không được, có lẽ mấy vấn đề nào hay thì chúng ta nên stick lên 1 số vấn đề thường gặp cũng hay nhỉ !

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

    Mặc định một bài tập đơn giản với số thực

    mấy cái này là do compiler ra hết,thầy tui nói vậy..Phần mềm nào mà ko có lỗi.Comlier cũng vậy.tuy là các nhà lập trình ra compiler rất cao thủ trong việc coding nhưng mà họ lại mắc một số lỗi cố hữu (khách quan mà ra).Trong C thì đó chính là số thực.Các ngôn ngữ và compiler sau này thì đã khắc phục đc nhược điểm trên rồi.Giống như nhập một mảng số thực đó cũng fải xài biến tạm thôi.Thông cảm!!!

  7. #7
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Trích dẫn Nguyên bản được gửi bởi khoadangnguyen Xem bài viết
    mấy cái này là do compiler ra hết,thầy tui nói vậy..Phần mềm nào mà ko có lỗi.Comlier cũng vậy.tuy là các nhà lập trình ra compiler rất cao thủ trong việc coding nhưng mà họ lại mắc một số lỗi cố hữu (khách quan mà ra).Trong C thì đó chính là số thực.Các ngôn ngữ và compiler sau này thì đã khắc phục đc nhược điểm trên rồi.Giống như nhập một mảng số thực đó cũng fải xài biến tạm thôi.Thông cảm!!!
    Ngôn ngữ nào không mắc lỗi này vậy cậu? Thầy nào nói vậy thế? Tò mò quá!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

  1. Cung cấp giấy ik plus, Paper One, Plus A+, Double A, Giấy Thái Lan, Giấy Bãi Bằng, bìa màu, băng dính, mica các loại
    Gửi bởi dungptvietthanh trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 07-06-2013, 04:05 PM
  2. Chung cư Đại Thanh giảm sốc 10tr/vnđ cho các căn hộ. giảm và liên tục giảm…!!
    Gửi bởi lanthanh91 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 09-10-2012, 10:27 AM
  3. Trả lời: 0
    Bài viết cuối: 06-08-2012, 07:01 PM
  4. Trả lời: 0
    Bài viết cuối: 04-08-2012, 03:08 PM
  5. Trả lời: 0
    Bài viết cuối: 24-05-2012, 04:04 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