Vòng lặp trong Pascal

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>

doc10 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2080 | Lượt tải: 1download
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 l­u ý 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) nh­ng 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 nh­ng 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:

  • docVòng lặp trong Pascal.doc
Tài liệu liên quan