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>
10 trang |
Chia sẻ: tlsuongmuoi | Lượt xem: 2190 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Vòng lặp trong Pascal, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
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
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
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 DO
; BEGIN
UNTIL ; ;
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 cho ®Õn khi 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 cã gi¸ trÞ TRUE th× ®i thùc hiÖn ®î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 lÆp, ta ph¶i cã mét lÖnh lµm thay ®æi mét biÕn trong biÓu 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.
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*2b 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}
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 ab do{Trong khi ab 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 i18 then write('Tan ',i*5:2,' = ',sin(x)/cos(x):0:5){NÕu i18 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.
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 ijk th× xuÊt
Tæ hîp
i=1->N-2 j=i+1->N-1 k=j+1->N : XuÊt i,j,k}
var
i,j,k,n:byte;{i,j,k,n kiÓu byte}
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(ij)and(jk)and(ik)then write(i,j,k,' ');{NÕu ijk th× xuÊt míi xuÊt i,j,k}
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
= j+12 nÕu i>=6
x = ((i-1)mod 5)*16+1;}
uses crt;
var i,j,x,y:byte;{i,j,x,y kiÓu byte}
begin
clrscr;{Xo¸ mµn h×nh}
for i:=1 to 10 do{Cho i ch¹y tõ 1 ®Õn 10 (i lµ b¶ng)}
for j:=1 to 10 do{Cho j ch¹y tõ 1 ®Õn 10}
begin
if i<6 then y:=j+1 else y:=j+12;{TÝnh y theo CT ë phÇn thuËt to¸n}
x:=((i-1)mod 5)*16+1;{TÝnh x theo CT ë phÇn thuËt to¸n}
gotoxy(x,y);{Nh¶y tíi vÞ trÝ x,y}
write(i,' x ',j,' = ',i*j);
end;
readln;
end.
Bµi 9:
{ ViÕt ch¬ng tr×nh gi¶i bµi to¸n :
Tr¨m tr©u, tr¨m bã cá
Tr©u ®øng ¨n n¨m
Tr©u n»m ¨n ba
Lô khô tr©u giµ 3 con 1 bã
Hái mçi lo¹i cã mÊy con
Híng dÉn
§iÒu kiÖn trªn tho¶ khi :
100 = (std*5+stn*3+stg3)
vµ std+stn+stg3*3=100
Trong ®ã
std : Sè tr©u ®øng <=20
stn : Sè tr©u n»m <=33
stg3 : Sè bã cá tr©u giµ ¨n<=33}
var std,stn,stg3:byte;{std,stn,stg3 kiÓu byte}
begin
clrscr;
for std:=1 to 20 do{Cho std ch¹y tõ 1 ®Õn 20}
for stn:=1 to 33 do{Cho stn ch¹y tõ 1 ®Õn 33}
for stg3:=1 to 33 do{Cho stg3 ch¹y tõ 1 ®Õn 33}
if(std*5+stn*3+stg3=100)and(std+stn+stg3*3=100)then{NÕu §K ®Ò bµi tho¶}
begin
writeln('So trau dung : ',std);{XuÊt std}
writeln('So trau nam : ',stn);{XuÊt stn}
writeln('So trau gia : ',stg3*3);{XuÊt stg}
writeln;
end;
readln;
end.
Bµi 10:
{ T×m tÊt c¶ c¸c sè cã 3 ch÷ sè sao cho
abc = A^3 + B^3 + C^3}
var a,b,c:byte;{a,b,c kiÓu byte}
begin
writeln('Cac so can tim la : ');
for a:=1 to 9 do{Cho a ch¹y}
for b:=0 to 9 do{Cho b ch¹y}
for c:=0 to 9 do{Cho c ch¹y}
if a*100+b*10+c=a*a*a+b*b*b+c*c*c then writeln(a,b,c);{NÕu §K tho¶ th× xuÊt a,b,c}
readln;
end.
Bµi 11:
{ NhËp sè nguyªn N.
a. In ra mµn h×nh N sè nguyªn d¬ng lÎ ®Çu tiªn lµ béi cña 3
b. In ra mµn h×nh sè nguyªn ch½n ®Çu tiªn chia hÕt cho 3 d 2, chia 5 d 4
c. In ra mµn h×nh c¸c sè chÝnh ph¬ng nhá h¬n hoÆc b»ng N*N
Híng dÉn
a. DÔ thÊy d·y lµ cÊp sè céng. Sè nguyªn ®Çu tiªn lµ 3, c«ng sai lµ 6
Sè nguyªn d¬ng lÎ thø i lµ béi cña 3
3+(i-1)*6
b. D·y lµ cÊp sè céng. Sè nguyªn ®Çu tiªn lµ 14, c«ng sai lµ 3*5*2=30. Sè thø i sÏ cã c«ng thøc
14+(i-1)*30;
c. DÔ dµng nhËn ra ®ã lµ nh÷ng sè i*i(i<=N)}
var i,n:integer;{Khai b¸o i,n kiÓu integer}
begin
write('N = ');readln(n);{§äc N} writeln('Cau a');
for i:=1 to n do write(3+(i-1)*6:5);{Cho i ch¹y vµ in ra n phÇn tö theo CT ë thuËt to¸n}
writeln;writeln('Cau b');
for i:=1 to n do write(14+(i-1)*30:5);{Cho i ch¹y vµ in ra n phÇn tö theo CT ë thuËt to¸n}
writeln;writeln('Cau c');
for i:=1 to n do write(i*i:5);{Cho i ch¹y vµ in ra n phÇn tö theo CT ë thuËt to¸n}
readln;
end.
Bµi 12:
{ NhËp mét sè N kiÓu longint.
a. In ra mµn h×nh sè ch÷ sè cña nã.
b. TÝnh sè M b»ng c¸ch lÊy ngîc l¹i sè N
VD : N = 1234
Cã 4 ch÷ sè
M = 4321
Híng dÉn
LÇn lît c¾t tõng ch÷ sè cña N tõ tr¸i qua N = N div 10. T¨ng sè ch÷ sè lªn 1 vµ kÕt hîp
ch÷ sè ®ã vµo tríc M}
var
n,m:longint;{N, M kiÓu longint}
scs:byte;{scs kiÓu byte}
begin
write('N = ');readln(n);{§äc N}
m:=0;scs:=0;{G¸n m vµ scs b»ng 0}
while n>0 do{Trong khi n>0 th×}
begin
m:=m*10+n mod 10;{KÕt hîp ch÷ sè hµng ®¬n vÞ cña N vµo sau M}
inc(scs);{T¨ng sè ch÷ sè lªn 1}
n:=n div 10;{C¾t bá ch÷ sè hµng ®¬n vÞ cña N}
end;
writeln('So chu so : ',scs);{XuÊt sè ch÷ sè}
writeln('M = ',m);{XuÊt M}
readln;
end.
Bµi 13:{ NhËp chiÒu dµi, chiÒu réng cña mét hcn. H·y vÏ ra mµn h×nh
VD : a=4 b=6
a. * * * * * *
* * * * * *
* * * * * *
* * * * * *
b.* * * * * *
* *
* *
* * * * * *}
uses crt;
var
i,j,a,b:byte;{i,j,a,b kiÓu byte}
begin
clrscr;{Xo¸ mµn h×nh}
write('A, B = ');readln(a,b);{§äc a,b}
writeln('Cau a');
for i:=1 to a do{Cho a ch¹y tõ 1 ®Õn a}
begin
for j:=1 to b do write('* ');{In ra b kÝ tù '* '}
writeln;
end;
writeln('Cau b');
for j:=1 to b do write('* ');writeln;{In ra b kÝ tù '* '}
for i:=1 to a-2 do{Cho i ch¹y tõ 1 ®Õn a-2}
begin
write('* ');
for j:=1 to b-2 do write(' ');{In ra b kÝ tù ' '}
writeln('*');
end;
for j:=1 to b do write('* ');{In ra b kÝ tù '* '}
readln;
end.
Bµi 14:
{ NhËp ®é cao h cña mét tam gi¸c. In ra mµn h×nh c¸c tam gi¸c cã d¹ng
* ***** *
** **** ***
*** *** *****
**** ** *******
***** * *********
h=5}
uses crt;
var
i,j,h:byte;{i,j,h kiÓu byte}
begin
clrscr;{Xo¸ mµn h×nh}
write('H = ');readln(h);{NhËp H}
writeln('Cau a');
for i:=1 to h do{Cho i ch¹y tõ 1 ®Õn h}
begin
for j:=1 to i do write('*');{In ra i kÝ tù '*' cña dßng i}
writeln;
end;
readln;
writeln('Cau b');
for i:=h downto 1 do{Cho i ch¹y tõ h xuèng 1}
begin
for j:=1 to i do write('*');{In ra i kÝ tù '*' cña dßng i}
writeln;
end;
readln;
writeln('Cau c');
for i:=1 to h do{Cho i ch¹y tõ 1 ®Õn h}
begin
for j:=1 to h-i do write(' ');{In ra h-i kÝ tù ' '}
for j:=1 to 2*i-1 do write('*');{In ra 2*i-1 kÝ tù '*'}
writeln;
end;
readln;
end.
Bµi 15:
{ T×m c¸c sè tù nhiªn nhá h¬n 1000 sao cho nã b»ng tæng c¸c íc cña nã (kh«ng kÓ chÝnh nã)
Híng dÉn
Cho i ch¹y tõ 2 ®Õn 1000
- TÝnh tæng c¸c íc cña i
- NÕu tæng = i th× xuÊt i}
var
i,j,tong:integer;{i,j,tong kiÓu integer}
begin
writeln('Cac so can tim');
for i:=2 to 1000 do{Cho i ch¹y tõ 2 ®Õn 1000}
begin
tong:=0;{G¸n tong b»ng 0}
for j:=1 to i div 2 do{Cho j ch¹y tõ 1 ®Õn i div 2}
if i mod j=0 then tong:=tong+j;{NÕu i chia hÕt cho j th× céng j vµo tong}
if tong=i then writeln(i);{NÕu tong=i th× xuÊt i}
end;
readln;
end.
Bµi 16:
{ NhËp sè N. KiÓm tra N xem nã cã ph¶i lµ sè nguyªn tè kh«ng
Híng dÉn
Cho i ch¹y tõ 2 ®Õn trunc(sqrt(n)).
- NÕu trong lóc ch¹y N mod i=0 th× N kh«ng nguyªn tè
- Ngîc l¹i N nguyªn tè}
var
i,n:integer;{i,n kiÓu integer}
kq:boolean;{kq kiÓu boolean}
begin
write('N = ');readln(n);{§äc N}
kq:=true;{G¸n kq b»ng true}
for i:=2 to trunc(sqrt(n))do{Cho i ch¹y tõ 2 ®Õn trunc(sqrt(N))}
if n mod i=0 then{NÕu n chia hÕt cho i th×}
begin
kq:=false;{G¸n kq=false}
break;{BÎ g·y vßng lÆp b»ng lÖnh Break (kh«ng cho vßng lÆp ch¹y tiÕp}
end;
if kq then writeln('So nguyen to')else write('Khong la so nguyen to');{NÕu kq th× N lµ
sè nguyªn tè ngîc l¹i th× kh«ng}
readln;
end.
Các file đính kèm theo tài liệu này:
- Vòng lặp trong Pascal.doc