
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 viÖc> lÆp, ta ph¶i cã mét lÖnh lµm thay ®æi mét biÕn trong biÓu
1

thøc Boolean ®Ó thay ®æi gi¸ trÞ biÓu thøc nh»m dõng vßng lÆp l¹i v× nÕu kh«ng
vßng lÆp sÏ ch¹y m·i kh«ng dõng
VD : TÝnh A = 1 + 1/2 + 1/3 + ... + 1/N
Dïng REPEAT vµ cho I ch¹y thuËn
A:=0;I:=1;
REPEAT
A := A + 1/I;
I := I + 1;
UNTIL I>N;
Writeln('Tæng = ',A:10:8);
Dïng WHILE vµ cho I ch¹y ngîc
A:=0;I:=N;
WHILE I>0 DO
BEGIN
A := A + 1/I;
I := I - 1;
END;
Bµi 1:{ NhËp sè nguyªn d¬ng N. Sau ®ã nhËp N sè nguyªn d¬ng. T×m sè lín nhÊt,
nhá nhÊt vµ tÝnh trung b×nh cña c¸c phÇn tö}
var i,a,n:integer;{Khai b¸o i,a,n kiÓu integer}
max,min,tong:integer;{Khai b¸o max,min,tong kiÓu integer}
begin
write('N = ');readln(n);{NhËp N}
min:=maxint;{G¸n min b»ng maxint}
max:=0;tong:=0;{G¸n max vµ tæng b»ng 0}
for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn n}
begin
write('So thu ',i,' : ');readln(a);{§äc sè thø i vµo biÕn a}
if min>a then min:=a;{NÕu min>a th× g¸n min b»ng a}
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.
2

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}
end;
readln;
end.
Bµi 3:
{ NhËp 2 sè nguyªn d¬ng. T×m íc chung lín nhÊt vµ béi chung nhá nhÊt cña 2 sè ®ã
Híng dÉn
UCLN(a,b) = UCLN(a,a-b) nÕu a>b
= UCLN(a,b-a) nÕu b>a
BCNN(a,b) = a*b div UCLN(a,b)}
var a,b:integer;{a,b kiÓu integer}
3

tich:longint;{tich kiÓu longint}
begin
write('A, B = ');readln(a,b);{§äc a,b}
tich:=a*b;{G¸n tich b»ng a*b}
while a<>b do{Trong khi a<>b th×}
if a>b then a:=a-b else b:=b-a;{NÕu a>b th× g¸n a=a-b ngîc l¹i g¸n b=b-a}
writeln('UCLN = ',a);{XuÊt UCLN (a hoÆc b)}
writeln('BCNN = ',tich div b);{XuÊt BCNN}
readln;
end.
Bµi 4:
{ Dïng REPEAT ... UNTIL in ra mµn h×nh b¶ng nh©n N (tõ Nx1 tíi Nx10)}
var i,n:integer;{Khai b¸o i,n kiÓu integer}
begin
write('N = ');readln(n);{§äc N}
i:=0;{G¸n i b»ng 0}
repeat
inc(i);{T¨ng i}
writeln(n:2,' x ',i:2,' = ',n*i:3);{XuÊt n,i,n*i}
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)}
4

else write('Tan 90 khong ton tai');{Ngîc l¹i xuÊt Tan kh«ng tån t¹i}
writeln;
end;
readln;
end.
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
Híng dÉn
Ph¶i dïng kiÓu longint ®Ó tÝnh v× sè rÊt lín }
uses crt;
var
i,n:longint;{Khai b¸o i,n kiÓu longint}
begin
clrscr;{Xo¸ mµn h×nh}
n:=1;{G¸n n b»ng 1}
for i:=1 to 12 do{Cho i ch¹y tõ 1 ®Õn 12}
begin
n:=n*i;{G¸n n b»ng n*i}
writeln(i,' ! = ',n);{XuÊt ra N}
end;
readln;
end.
Bµi 7:
{ NhËp sè nguyªn d¬ng N (N<10).
a. In ra mµn h×nh c¸c chØnh hîp lÆp chËp 3 cña N phÇn tö
b. In ra mµn h×nh c¸c chØnh hîp kh«ng lÆp chËp 3 cña N phÇn tö.
c. In ra mµn h×nh c¸c tæ hîp chËp 3 cña N.
Híng dÉn
ChØnh hîp lÆp :
i=1->N j=1->N k=1->N : XuÊt i,j,k
ChØnh hîp kh«ng lÆp :
i=1->N j=1->N k=1->N :
NÕu i<>j<>k th× xuÊt
5