Video Ngôn Ngữ C - 46 - Phép toán chia lấy dư (modulus)

c
video

(Lê Trần Đạt) #1

#Đăng ký khóa học C++ cơ bản 2016 ( NEW ) tại đây :
#Thông tin về khóa học xem tại đây :

-Sự khác biệt giữa 2 khóa học cũ và mới :
+Khóa học C++ cơ bản 2016 là khóa học mới, được đầu tư nhiều hơn từ nội dung, phương pháp học, cách học hiệu quả.
+Trong khóa học còn có nhiều kiến thức mới như thực hành trên HackerRank, thực hành trên Codefights và Đạt nghĩ mọi người nên học khóa học mới, bởi vì đây là kiến thức mới, phù hợp với hiện tại… Mặt khác âm thanh cũng tốt hơn nhiều so với khóa học cũ giúp đỡ việc lắng nghe và hiểu được tốt hơn.


Tổng hợp các video hướng dẫn lập trình C của Lê Trần Đạt
Video Ngôn Ngữ C - 22 - Chương trình tính lãi suất tiền gửi
(MiN) #2
    int sobichia2 = 0, sochia2, sodu = 0;

    printf("Nhap so bi chia:\n");
    scanf("%d", &sobichia2);
    printf("Nhap so chia:\n");
    scanf("%d", &sochia2);

    sodu = sobichia2 % sochia2;

    if (sochia2 == 0)
    {
        printf("Phep tinh ko thuc hien duoc. So chia phai la mot so khac 0!!!\n\n");
    }
    else
        printf("%0.1d : %0.1d co so du la %0.1d", sobichia2, sochia2, sodu);

Mọi người cho mình hỏi … mình muốn viết một phép toán chia in ra màn hình số dư của phép toán đó … ý tưởng của mình là trong trường hợp có 1 người dùng máy tính nào đó … nhập vào số bị chia và số chia dưới dạng số thập phân (7,5 hoặc 3,5 sao sao đó) … thì làm thế nào để máy tính có thể chuyển nó về dạng 2 số nguyên chia nhau … vì thực chất mà nói … khi 7,5/3,5 viết ra phân số và nhân nghịch đảo thì thành 1 phân số mới … suy cho cùng cái phân số mới đó vẫn chỉ là 1 phép chia của 2 số nguyên mà thôi !!!

Có ai chỉ mình viết thêm câu lệnh nào khiến cho máy tính hiểu được như mình không … vì mình mới học thôi nên không biết cách !!!


(Lê Trần Đạt) #3

À là vì trong bài này, Minh đã khai báo tất cả các biến là kiểu int. Kiểu int không thể chứa được số thực. Tức là số có phần lẻ.

Hình như trong bài này có nói về vấn đề mà @TBM_2512 đang thắc mắc nè


(MiN) #4

Nhưng mà anh Đạt ơi … em hiểu ý anh nhưng nếu khai báo kiểu khác số nguyên thì trong phép chia khi người dùng họ nhập vào 1 số thực cũng tương tự như họ nhập 1 phân số thôi … quy cho cùng dù là số thập phân chia cho nhau cuối cùng con người mình vẫn biến đổi nó thành 1 phép chia của 2 số nguyên thôi … em muốn máy tính cũng có thể hiểu như mình vậy đó … !!!

Em có thử khai báo kiểu double nhưng chương trình không chạy … với lại trong clip ép kiểu của anh em cũng xem rồi … nếu chỉ in ra thôi như trong clip thì được nhưng chương trình của em là do người dùng nhập vào … em đang tính tới trường hợp nếu họ nhập vào 2 số thập phân để chia nhau nhưng muốn biết số dư của phép tính đó !!!

Qua vấn đề liệu có phải mình sẽ kết luận 1 điều là … cứ phép chia thì tất cả mọi trường hợp đều qui về số nguyên để máy tính thực hiện không ???


(Dang Viet Tuan) #6

Mình có ý tưởng thế này. Ban đầu bạn đổi 2 số thập phân đó qua phân số. Khi đó mình sẽ có 2 phân số chia nhau. Nhân nghịch đảo sẽ được một phân số mới. Sau đó lấy tử chia mẫu lấy phần dư.


(MiN) #7

Đó … bạn Đang Viet Tuan hiểu ý mình rồi đó … trước sau gì thì con người mình cũng biết rõ bản chất của phép chia 2 số thập phân cũng là 2 số nguyên thôi … nhưng ý mình ở đây là mình làm sao cho chương trình nó sẽ thay người dùng làm việc đó đó … vì người dùng họ chỉ cần nhập số thập phân thôi … còn lại cái bạn nói chính là việc của chương trình do mình lập trình nên !!!


(Dang Viet Tuan) #8

Mình tìm thấy cái này trên Youtube. Mong có thể giúp được bạn. Nhưng mình nghĩ người ta biết cái bản chất đó từ trước rùi. Vì số nguyên có trước số thập phân mà bạn. Người ta sinh ra số thập phân để khắc phục cái hệ quả có số dư của phép chia mà. Và sau này có thêm số phức cũng để khắc phục các hệ quả trong giải phương trình và một số thứ khác.


(Lê Trần Đạt) #9

Cái này không đúng. Có những số thực lẻ vô cùng, ta không thể nhập số lẻ vô cùng. Điểm thứ 2 là việc biến đổi từ số thực sang phân số rất tốn kém tài nguyên. Việc này ngôn ngữ C không hỗ trợ. Và anh cũng không biết ngôn ngữ lập trình nào hỗ trợ việc này.

Cái này em phải tự nghĩ ra thuật toán và thực hiện nó, máy tính không thể hiểu được điều này.

Em gửi code lên anh xem thử.

Em viết ra chức năng mà em muốn thực hiện, và code mà em đang cố làm chức năng đó.

Không, máy tính phân biệt rõ ràng số nguyên và số thực. Vì số thực dùng một cấu trúc dữ liệu hoàn toàn khác với số nguyên.


(Đỗ Trung Quân) #10

Nhân cả tử và mẫu với 10^n. n = tổng các số của số có nhiều số sau dấu phẩy hơn.

   7.3/5.76 = 730/576  // chỗ này n =2 
   => rút gọn phân số.

(Lê Trần Đạt) #11

Thực hiện các phép toán này rất tốn kém. Và khi có càng có nhiều phần tử sau dấu phẩy thì độ chính xác càng giảm. Trong lập trình game người ta không dùng luôn float hay double. Mà họ dùng cách khác để thể hiện số thực. Ví dụ để thể hiện số 123.456 thì mình cần
int 123 (Phần nguyên)
int 456 (Phần lẻ)

Để kéo thằng bạn làm game vào giải thích :smiley:


(Dang Viet Tuan) #12

Anh Đạt cho em hỏi tại sao làm game lại tránh dùng số thực vậy? Em viết game trên Unity vẫn dùng số thực được mà.


(Lê Trần Đạt) #13

Vì chi phí tính toán cao, độ chính xác thấp. Dùng 2 số int để thay thế cho dùng 1 số thực chính xác cao hơn.


(Tóc Xoăn Đoàn) #14

mình muốn làm bài đổi cơ hệ thập phân sang hệ nhị phân, cần lấy các giá trị dư từ dưới lệ để xuata ra màn hình thì lây làm sao? giúp mình với. cám ơn mọi người


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?