Rèn luyện sử dụng Mod, Div trong Pascal và scratch

Like Tweet Pin it Share Share Email

Mod, div là hai phép toán cho số nguyên được ứng dụng rất nhiều trong lập trình, trong bài viết này mình sẽ cùng học tập chia sẻ cách sử dụng Mod, Div trong Pascal và scratch qua một ví dụ cụ thể như sau:

Bài toán: Viết chương trình nhập vào một số nguyên dương n (n< 2 tỉ). Xuất ra số các chữ số của số nguyên đó và tổng các chữ số của số nguyên đó.

Ví dụ: Nếu người dùng nhập vào số: 123456 thì kết quả xuất ra: Số các chữ số là: 6. Tổng các chữ số cảu số nguyên vừa nhập là: 21

Gợi ý: Để giải quyết bài toán này ta cần tìm cách để tách ra các chữ số của số nguyên nhập vào sau đó đếm cộng dồn để tính tổng các chữ số của số đó, vậy vấn đề quan trong nhất là làm sao để tách lấy được từng chữ số của số nguyên đó! ta hãy cũng tím hiểu

Giới thiệu hai phép toán Mod và Div

Mod: Là phép toán chia lấy phần dư.

Div: Là phép toán chia lấy phần nguyên.

Ví dụ: 13 div 5 = 2 và 13 mod 5 = 3 (vì 13 chia cho 5 được 2 dư 3)

Ủa nó có liên quan gì đâu đến việc lấy ra các chữ số của một số nguyên nhỉ! Có đấy các bạn, các bạn xem thử nhé: 123456 mod 10 = 6, lấy được số 6 cuối cùng rồi, 123456 div 10 = 12345 bỏ đi chữ số cuối cùng rồi, 12345 mod 10 = 5 lại lấy được chữ số 5 ra rồi nhé, …vậy là bạn đã hiểu cách dùng hai phép toán Mod, Div để tách lấy được các chữ số của một số nguyên chưa nào. Ta chỉ cần lập trình để đếm và cộng dồn các chữ số đó là OK phải không nào.

Ứng dụng mod, div trong Pascal cho bài toán trên

Ta hãy cùng code bài toán trên bằng Pascal theo cách sử dụng mod, div nhé.

Dữ liệu vào file: Dem _CS.inp Dữ liệu ra file: Dem_CS.out
Chứa số n

VD: 12456

– Dòng 1: ghi số các chữ số

– Dòng 2: Ghi tổng các chữ số

5

18

Ý nghĩa của chương trình như sau:

Nếu n = 0 thì cho biến đếm là 1 còn nếu không thì cho biến đếm là 0. Đây là đoạn mã để xử lý trường hợp đặc biệt n = 0, nếu trường hợp này xảy ra thì chương trình sẽ không thực hiện vòng lặp phía sau và kết luận ngay số có 1 chữ số và tổng các chữ số bằng 0. Tùy theo thuật toán mà thường xuất hiện các trường hợp đặc biệt, ta cần lập trình để xử lý riêng các trường hợp này

Vòng lặp While: Có nhiệm vụ lặp lại việc

  • Tách từng chữ số của số nguyên ra (từ phải sang trái) – Dùng phép toán mod
  • Sau khi tách được bỏ bớt chữ số đó – Dùng phép toán Div

Liệu trong Scratch có hai hàm Mod và Div không?

Mình tự đặt ra câu hỏi này ngay khi nghĩ đến bài toán, chúng ta thử lục tìm trong “Các phép toán” của Scratch xem nào.

Thấy rồi hàm Mod đây rồi:

Không thấy Div các bạn ơi, làm sao đây! Ta không thấy trong Scratch có phép toán Div nhưng đã là ngôn ngữ lập trình thì chắc chắn phải có cách xây dựng phép toán DIV mình suy nghĩ như vậy và cuối cùng tìm ra cách xây dựng phép toán này trong Scratch như sau:

Xây dựng Div trong Scratch

Tôi lần tìm thì phát hiện ra phép toán “Làm tròn xuống” và nghĩ ngay phép toán này có thể giúp xây dựng được phép toán Div giống như Pascal. OK như vậy là ta đã có đủ hai phép rồi nhé.

Việc còn lại các bạn chỉ cần lập trình Scratch bằng cách kéo thả theo thuật toán như trong Pascal mà thôi. Các bạn tự code nhé.

Không cần Mod và Div liệu có giải quyết được bài toán này?

Câu trả lời là được nhé, mình có ý tưởng thế này trong Pascal ta hãy chuyển số nhập vào sang dạng chuỗi sau đó can thiệp vào từng phần tử của chuỗi vậy là OK rồi.

Còn trong Scratch thì còn đơn giản hơn nữa vì biến trong Scratch chung cả số và chuỗi vì vậy chẳng cần chuyển gì nữa cứ vậy mà tách từng chữ số ra mà đếm và công dồn thôi.

Cách này có vẻ đơn giản hơn rất nhiều tuy nhiên mình không khuyến khích các bạn làm bằng cách này mà hãy làm bằng cách sử dụng Div và Mod nó “toán học” hơn phải không các bạn.

Xin chào các bạn, hẹn gặp lại trong bài tiếp theo, Các bạn nhớ xem phần 3: 50 bài tập scratch nhé, có rất nhiều bài toán hay đó.

Comments (0)

Trả lời

Your email address will not be published. Required fields are marked *