Vòng Lặp
I. Vòng lặp có số bớc lặp các định
Trớc hết chúng ta xét ví dụ sau :
Giả sử ta phải viết ra màn hình các số từ 0 đến 24, mỗi số chiếm 1 dòng
Việc này có thể thực hiện bằng 25 lệnh Writeln
Writeln(0)
Writeln(1)
..........
Writeln(24)
Cách viết này rõ ràng là dài dòng và tẻ nhạt trong khi nó có quy luật
Chúng ta có thể thay thế bằng lệnh Writeln(I) trong đó I là một biến nguyên bất kì nhận giá trị từ
0..24
FOR I:=0 TO 24 DO Writeln(I)
Vòng lặp này cho I chạy từ 0 đến 24 với mỗi giá trị của I, máy sẽ thực hiện công việc viết sau chữ
DO (làm), ở đây là Writeln(I)
Mẫu viết tổng quát :
FOR Biến_điều_khiển:=Giá_trị_đầu TO Giá_trị_cuối DO <việc>
Và ngợc lại ta có mẫu :
FOR Biến_điều_khiển:=Giá_trị_đầu DOWNTO Giá_trị_cuối DO <việc>
II. Vòng lặp có số bớc lặp không xác định
Có 2 kiểu vòng lặp không xác định
REPEAT WHILE <biểu thức Boolean>DO
<công việc>; BEGIN
UNTIL <Biểu thức Boolean>; <công việc>;
END;
Trong lệnh REPEAT ... UNTIL ... máy tính sẽ lặp đi lặp lại chu kì sau : thực hiện <công việc> cho
đến khi <biểu thức Boolean> có giá trị TRUE. Giữa REPEAT và UNTIL không cần dùng BEGIN và
END
Còn trong vòng lặp WHILE ... DO máy tính sẽ lặp đi lặp lại chu kì sau : chừng nào <biểu thức
Boolean> có giá trị TRUE thì đi thực hiện <công việc> đợc đặt giữa BEGIN và END
Cả hai vòng lặp đều có số lần lặp không xác định trớc. Cần phải lu ý là trong khi thực hiện <công
if max<a then max:=a;{Nếu max<a thì gán max bằng a}
inc(tong,a);{Tăng tổng lên a đơn vị}
end;
writeln('Max = ',max);{Xuất max}
writeln('Min = ',min);{Xuất min}
writeln('Trung binh : ',tong/n:0:2);{Xuất trung bình}
readln;
end.
Bài 2:
{ Năm nay con a tuổi, cha b tuổi. Dùng WHILE tính xem sau mấy năm nữa hoặc trớc
đây mấy năm tuổi cha gấp đôi tuổi con
Hớng dẫn
Nếu a*2=b thì ở hiện tại
Nếu a*2<b thì ở tơng lai
Nếu a*2>b thì ở trong quá khứ}
var a,b,so:integer;{a,b,so kiểu integer}
begin
write('Nhap tuoi con, tuoi cha : ');readln(a,b);{Nhập tuổi con, tuổi cha}
if a=b*2 then write('Hien tai tuoi cha gap doi con'){Nếu a=b thì ở hiện tại}
else if a*2<b then{Ngợc lại nếu a*2<b thì}
begin
so:=0;{Gán so bằng 0}
while (a+so)*2<b+so do inc(so);{Trong khi (a+so)*2<b+so thì tăng số lên}
writeln('Sau ',so,' nam nua tuoi cha gap doi tuoi con');{Xuất ra sau "so" nam nua}
end
else
begin
so:=0;{Gán so bằng 0}
while (a-so)*2>b-so do inc(so);{Trong khi (a-so)*2<b-so thì tăng số lên}
writeln('Truoc day ',so,' nam tuoi cha gap doi tuoi con');{Xuất ra truoc do "so" nam}
until i=10;
readln;
end.
Bài 5:{ In ra màn hình các giá trị sin, cos, tan của các góc 0, 5, 10, 15 ... 90
Hớng dẫn
Dùng hàm sin(x) cos(x) nhng phải đổi số độ sang radian (X có đơn vị là radian) bằng
CT Radian = pi*Số độ / 180
Tính tang dựa vào CT tan=sin/cos nhng nhớ tan90 không tồn tại}
const pi=3.14;{Khai báo hằng pi=3.14}
var i:integer;{i kiểu integer}
x:real;{x kiểu real}
begin
for i:=0 to 18 do{Cho i chạy từ 0 đến 18 (i*5 tơng ứng số độ)}
begin
x:=pi*i*5/180;{Đổi i*5 độ sang x radian}
write('Sin ',i*5:2,' = ',sin(x):0:5,' ');{Xuất sin}
write('Cos ',i*5:2,' = ',cos(x):0:5,' ');{Xuất cos}
if i<>18 then write('Tan ',i*5:2,' = ',sin(x)/cos(x):0:5){Nếu i<>18 thì xuất sin(x)/cos(x)}
else write('Tan 90 khong ton tai');{Ngợc lại xuất Tan không tồn tại}
writeln;
end;
readln;
end.
3
Bài 6:
{ Biết N! = 1x2x3x..xN
In ra màn hình giai thừa các số từ 1 tới 12
1! = 1
2! = 2
3! = 6
begin
write('N = ');readln(n);{Đọc N}
writeln('Cac chinh hop lap :');
for i:=1 to n do{Cho i chạy từ 1 đến N}
for j:=1 to n do{Cho j chạy từ 1 đến N}
for k:=1 to n do{Cho k chạy từ 1 đến N}
write(i,j,k,' ');
readln;
writeln('Cac chinh hop khong lap :');
for i:=1 to n do{Cho i chạy từ 1 đến N}
for j:=1 to n do{Cho j chạy từ 1 đến N}
for k:=1 to n do{Cho k chạy từ 1 đến N}
if(i<>j)and(j<>k)and(i<>k)then write(i,j,k,' ');{Nếu i<>j<>k thì xuất mới xuất i,j,k}
4
readln;
writeln('Cac to hop :');
for i:=1 to n-2 do{Cho i chạy từ 1 đến N-2}
for j:=i+1 to n-1 do{Cho j chạy từ i+1 đến N-1}
for k:=j+1 to n do{Cho k chạy từ j+1 đến N}
write(i,j,k,' ');
readln;
end.
Bài 8:
{ In ra màn hình bảng cửu chơng từ 1->10
Hớng dẫn
Dùng hàm GOTOXY(x,y) để di chuyển tới toạ độ cột x dòng y trên màn hình
Ta chia chiều ngang màn hình thành 5 cột, chiều dọc màn hình thành 2 hàng. Từ hàng
2..11 ta in bảng 1,2,3,4,5. Từ hàng 13..22 ta in bảng 6,7,8,9,10
Khi ta tới hàng i x j thì toạ độ bắt đầu sẽ là
y = j+1 nếu i<6
stg3 : Số bó cỏ trâu già ăn<=33}
5