VinaOnline.net

Bài tập số lần lặp không xác định : Minh họa chi tiết

Bài tập số lần lặp không xác định nhằm củng cố kiến thức vòng lặp While … do. Bạn nên tham khảo các bài viết trước để có kiến thức về lặp trình pascal. Bài tập số lần lặp không xác định sẽ bổ sung hai bài toán được ứng dụng trong vòng lặp While … do.

I. Bài tập số lần lặp không xác định : Tìm ước số chung lớn nhất

Ý tưởng thực hiện

– Nếu a=b thì UCLN(a,b) = a

– Khi a <> b

* Nếu a>b thì a = a-b

* Ngược lại, thì b = b-a

Ví dụ

– a = 5, b = 10

=> UCLN(5,10) = UCLN(5,5) = 5

– a = 5, b = 13

=> UCLN(a,b) = UCLN(5,8) = UCLN(5,3) = UCLN(2,3) = UCLN(2,1) = UCLN(1,1) = 1

 Program ucln;

Uses crt;

Var a,b:integer;

BEGIN

ClrScr;

Write(‘Nhap a: ‘);Readln(a);

Write(‘Nhap b: ‘);Readln(b);

While a<>b do

If a>b Then

a:=a-b

Else

b:=b-a;

Write(‘Uoc chung lon nhat cua a va b: ‘,a);

Readln;

END.

II. Bài tập số lần lặp không xác định : Đổi số thập phân thành nhị phân

Bài tập số lần lặp không xác định : Đổi số thập phân thành nhị phân

Ý tưởng thực hiện

Thực hiện phép chia số thập phân cho 2.

– Thu được kết quả của phép chia (phần nguyên). Nếu kết quả chưa bằng 0 thì tiếp tục lấy kết quả chia cho 2.

– Số dư của phép chia chính là dãy nhị phân cần tìm (lấy ngược từ cuối về đầu)

Giải thích hình minh họa

13 chia 2 được 6, dư 1

6 chia 2 được 3, dư 0

3 chia 2 được 1, dư 1

1 chia 2 được 0, dư 1

Hàm / phép tính sử dụng trong chương trình

mod: Lấy phần dư của phép chia.

Ví dụ:

(6 mod 2) = 0; (6 mod 4) = 2

div: Lấy phần nguyên của phép chia.

Ví dụ:

(6 div 2) = 3; (6 div 4) = 1

STR(number, s): Đổi số number thành chuỗi và gán vào s.

Ví dụ:

STR(10,s): Đổi số 10 thành chuỗi ’10’ và gán vào biến s; s lúc này chứa giá trị ’10’.

– CONCAT(s1,s2): Ghép hai chuỗi.

Ví dụ:

s1=’ab’

s2=’CD’

CONCAT(s1,s2) = ‘abCD’

CONCAT(s2,s1) = ‘CDab’

Chú ý:

– Bạn nên quan tâm thứ tự chuỗi trong hàm CONCAT. CONCAT(s1,s2) <> CONCAT(s2,s1).

Program NhiPhan;

Uses Crt;

Var n: Byte;

t,s: String;

BEGIN

ClrScr;

Write(‘Nhap so: ‘); Readln(n);

s:=”;

While n>0 do

Begin

STR((n mod 2),t);    // Đổi số dư thành chuỗi và gán vào biến

s:=CONCAT(t,s);    // Gán biến t vào s (tương đương s:= t+s; chú ý t đứng trước s)

n:= (n div 2);      // Tiếp tục thực hiện phép chia.

End;

Writeln(‘Day nhi phan: ‘,s);

Readln;

END.

Chú ý:

– Phần dư của phép chia sẽ đổi thành chuỗi để thực hiện ghép chuỗi. Nếu không thực hiện công việc này sẽ xảy ra: 1 + 0 = 1; 1 + 1 = 2.

Lời kết

Khi bạn có nền tảng về lập trình pascal thì bài viết này nhằm nhấn mạnh sự khác biệt giữa hai vòng lặp While … do và For. Chúc bạn trở thành cao thủ lập trình.

Leave a Comment