Chương trình con trong Pascal

Khái niệm về chương trình con (Sub-program) Trong khi lập trình chúng ta thường gặp những đoạn chương trình lặp đi lặp lại nhiều lần ở những chỗ khác nhau. Để tránh rườm rà những đoạn chương trình này được thay thế bằng các chương trình con tương ứng. Khi cần, ta chỉ cần gọi tên chương trình con đó ra. Lý do thứ hai để xây dựng chương trình con: Một vấn đề lớn và phức tạp sẽ tương ứng với một chương trình có thể rất lớn và dài. Do đó việc sửa chữa chương trình sẽ rất khó khăn. Ta có thể phân tích nó thành các vấn đề nhỏ hơn, để dễ kiểm tra, sau đó ghép lại thành một chương trình lớn.

doc9 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 2946 | Lượt tải: 3download
Bạn đang xem nội dung tài liệu Chương trình con trong Pascal, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CH¦¥NG TR×NH CON I. Kh¸i niÖm vÒ ch­¬ng tr×nh con (Sub-program) Trong khi lËp tr×nh chóng ta th­êng gÆp nh÷ng ®o¹n ch­¬ng tr×nh lÆp ®i lÆp l¹i nhiÒu lÇn ë nh÷ng chç kh¸c nhau. §Ó tr¸nh r­êm rµ nh÷ng ®o¹n ch­¬ng tr×nh nµy ®­îc thay thÕ b»ng c¸c ch­¬ng tr×nh con t­¬ng øng. Khi cÇn, ta chØ cÇn gäi tªn ch­¬ng tr×nh con ®ã ra. Lý do thø hai ®Ó x©y dùng ch­¬ng tr×nh con: Mét vÊn ®Ò lín vµ phøc t¹p sÏ t­¬ng øng víi mét ch­¬ng tr×nh cã thÓ rÊt lín vµ dµi. Do ®ã viÖc söa ch÷a ch­¬ng tr×nh sÏ rÊt khã kh¨n. Ta cã thÓ ph©n tÝch nã thµnh c¸c vÊn ®Ò nhá h¬n, ®Ó dÔ kiÓm tra, sau ®ã ghÐp l¹i thµnh mét ch­¬ng tr×nh lín. II. PROCEDURE vµ FUNCTION (Thñ tôc vµ Hµm) Trong Pascal cã hal lo¹i CTC : - PROCEDURE (thñ tôc) - FUNCTION (hµm) Sù kh¸c nhau c¬ b¶n vµ duy nhÊt cña hai lo¹i CTC nµy lµ FUNCTION tr¶ l¹i mét gi¸ trÞ kÕt qu¶ v« h­íng th«ng qua tªn function vµ do ®ã nã cã thÓ sö dông nh­ mét biÕn, h»ng biÓu thøc. Cßn PROCEDURE kh«ng tr¶ l¹i kÕt qu¶ th«ng qua tªn cña biÓu thøc nªn procedure kh«ng thÓ viÕt trong biÓu thøc. VD : C¸c PROCEDURE c¬ b¶n cña Pascal - Writeln - Readln _ Textcolor C¸c FUNCTION c¬ b¶n - Sin(x) : tr¶ vÒ gi¸ trÞ kiÓu thùc - Chr(i) : tr¶ vÒ gi¸ trÞ kiÓu Char III. CÊu tróc cña mét ch­¬ng tr×nh con {PhÇn khai b¸o cña ch­¬ng tr×nh chÝnh} VAR ..... CONST .... {C¸c ch­¬ng tr×nh con} PROCEDURE Tªn_thñ_tôc (Khai b¸o c¸c tham sè, nÕu cÇn); {PhÇn khai b¸o trong CTC} BEGIN ..... END; FUNCTION Tªn_Hµm (khai b¸o c¸c tham sè nÕu cÇn):kiÓu d÷ liÖu; {PhÇn khai b¸o trong CTC} BEGIN ..... END; {Ch­¬ng tr×nh chÝnh} BEGIN ..... END. IV. ChuyÓn tham sè cho ch­¬ng tr×nh con Cã 2 c¸ch chuyÓn tham sè : - Tham trÞ (value parameter) - Tham biÕn (variable parameter) VD : PROCEDURE Thidu(i,j:integer; VAR x,y:real); Tham trÞ : i,j Tham biÕn : x,y Sù kh¸c nhau gi÷a tham trÞ vµ tham biÕn : - Tham trÞ cã thÓ lµ h»ng, biÕn, biÓu thøc. Cßn tham biÕn chØ cã thÓ lµ biÕn - NÕu tham trÞ lµ biÕn th× gi¸ trÞ nã sÏ kh«ng thay ®æi sau khi CTC thùc hiÖn. Cßn tham biÕn sÏ thay ®æi gi¸ trÞ nÕu trong CTC cã lÖnh lµm thay ®æi gi¸ trÞ cña nã VD : * Hµm SIN (X) Trong nµy X lµ tham trÞ vµ ta cã thÓ viÕt - KQ := SIN (1); X=1 - KQ := SIN (Y*2); X=Y*2 - KQ := SIN (X); X=X Vµ sau khi thùc hiÖn gi¸ trÞ cña X vÉn kh«ng thay ®æi. * Hµm DEC (X) Trong nµy X lµ tham biÕn, ta chØ cã thÓ viÕt - DEC (X); X lµ biÕn kiÓu nguyªn Kh«ng thÓ viÕt - DEC (5); X lµ h»ng - DEC (Y*2); X lµ biÓu thøc Sau khi gäi hµm gi¸ trÞ cña X sÏ thay ®æi (gi¶m ®i 1) V. FUNCTION vµ c¸ch lùa chän Trong FUNCTION b¾t buéc ph¶i cã lÖnh g¸n gi¸ trÞ cho tªn hµm Tªn_hµm := Chóng ta chØ nªn dïng FUNCTION khi vµ chØ khi nã ®ång thêi tho¶ c¸c ®iÒu kiÖn sau : - NÕu ta muèn nhËn l¹i mét vµ chØ mét kÕt qu¶ - KÕt qu¶ ®ã ph¶i lµ kiÓu v« h­íng Cßn nÕu kh«ng tho¶ m·n th× chóng ta nªn dïng PROCEDURE VD : CTC tÝnh b×nh ph­¬ng cña mét sè FUNCTION Binh_Phuong (X:real):real; BEGIN Binh_Phuong := X*X; END; NÕu dïng procedure PROCEDUR Binh_Phuong (X:Real; VAR kq:real); BEGIN kq := X*X; END; Khi kiÓm tra xem tæng b×nh ph­¬ng cña a vµ b cã b»ng c kh«ng : - NÕu lµ FUNCTION ta viÕt : IF Binh_Phuong(a)+Binh_Phuong(b) = Binh_phuong(c) THEN - NÕu lµ PROCEDURE ta viÕt Binh_Phuong (a,kqa); Binh_Phuong (b,kqb); Binh_Phuong (c,kqc); IF kqa+kqb=kqc THEN Râ rµng c¸ch dïng FUNCTION cã lîi h¬n VI. BiÕn toµn côc vµ biÕn côc bé 1. BiÕn toµn côc Lµ c¸c biÕn ®­îc khai b¸o trong ch­¬ng tr×nh chÝnh. C¸c biÕn nµy ®Òu cã t¸c dông ë mäi n¬i trong ch­¬ng tr×nh. 2. BiÕn côc bé Lµ c¸c biÕn ®­îc khai b¸o trong ch­¬ng tr×nh con. C¸c biÕn nµy chØ cã t¸c dông trong ch­¬ng tr×nh con ®ã. Khi ch­¬ng tr×nh con kÕt thóc, c¸c biÕn nµy còng mÊt t¸c dông theo. 3. Chó ý NÕu trong CTC cã khai b¸o biÕn (h»ng) trïng víi tªn biÕn (h»ng) trong ch­¬ng tr×nh chÝnh th× ch­¬ng tr×nh con sÏ ­u tiªn xö lý biÕn (h»ng) trong ch­¬ng tr×nh chÝnh. Vµ khi tho¸t khái ch­¬ng tr×nh con ®ã. Gi¸ trÞ cña biÕn trong ch­¬ng tr×nh vÉn gi÷ nguyªn gi¸ trÞ tr­íc khi gäi CTC. VD : CONST I=5; PROCEDURE THU; VAR I : INTEGER; BEGIN I := 6;Writeln(I); END; BEGIN Writeln(I);THU;Writeln(I); END. Trªn mµn h×nh sÏ xuÊt hiÖn 5 Gi¸ trÞ biÕn toµn côc 6 Gi¸ trÞ biÕn ®Þa ph­¬ng 5 Gi¸ trÞ biÕn toµn côc VII. TÝnh ®Ö quy cña ch­¬ng tr×nh con Trong PROCEDURE vµ FUNCTION cã thÓ cã lêi gäi chÝnh nã. TÝnh chÊt nµy gäi lµ ®Ö quy. VD : TÝnh N! qua ®Þnh nghÜa N! = 1.2.3...(n-1).n hoÆc ®Þnh nghÜa theo ®Ö quy N! = 1 khi N=0 = (n-1)!.n khi N>=1 Khi ®ã hµm GIAI_THUA cã thÓ ®Þnh nghÜa nh­ sau FUNCTION GIAI_THUA (n:integer):integer; BEGIN IF n=0 THEN GIAI_THUA := 1 ELSE GIAI_THUA := n*GIAI_THUA(n-1); END; Bµi tËp 1:{ NhËp a,b,c lµ hÖ sè cña mét hµm sè bËc 2. Sau ®ã ta nhËp X liªn tôc, øng víi mçi gi¸ trÞ cña X, ta in ra gi¸ trÞ cña Y t­¬ng øng. Ch­¬ng tr×nh kÕt thóc khi ta nhËp 0 H­íng dÉn ViÕt ch­¬ng tr×nh con tÝnh Y t­¬ng øng X} uses crt; var a,b,c,x:real;{a,b,c,x kiÓu real} function y(x:real):real; begin y:=a*x*x+b*x+c;{TÝnh y theo x} end; begin clrscr;{Xo¸ mµn h×nh} write('A, B, C = ');readln(a,b,c);{NhËp a,b,c} repeat write('X = ');readln(x);{NhËp X} if x0 then writeln('Y = ',y(x):0:2);{NÕu x0 th× in ra Y t­¬ng øng} until x=0; end. Bµi tËp 2: { NhËp N. Sau ®ã nhËp N to¹ ®é A,B cña N ®­êng th¼ng. In ra mµn h×nh ®­êng th¼ng cã ®é dµi lín nhÊt. H­íng dÉn ViÕt hµm tÝnh ®é dµi ®o¹n th¼ng víi tham sè lµ 2 to¹ ®é} uses crt; var max,xa,ya,xb,yb:real;{max,xa,ya,xb,yb kiÓu real} i,n:integer;{i,n kiÓu integer} function dodai(xa,ya,xb,yb:real):real; begin dodai:=sqrt(sqr(xa-xb)+sqr(ya-yb));{G¸n dodai b»ng ®é dµi ®o¹n AB} end; begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{NhËp N} max:=0;{G¸n max b»ng 0} for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N} begin write('XA, YA, XB, YB = ');readln(xa,ya,xb,yb);{§äc to¹ ®é A,B} if max<dodai(xa,ya,xb,yb)then max:=dodai(xa,ya,xb,yb);{NÕu max nhá h¬n ®é dµi AV th× cËp nhËt max} end; writeln('Do dai doan thang dai nhat : ',max:0:2);{XuÊt max} readln; end. Bµi tËp 3: { NhËp N. Sau ®ã nhËp N sè h¹ng. TÝnh UCLN vµ BCNN cña N sè ®ã. H­íng dÉn ViÕt hµm tÝnh UCLN,BCNN gi÷a 2 sè UCLN (A1..An) = UCLN( UCLN(A1..An-1) ,An) BCNN (A1..An) = BCNN( BCNN(A1..An-1) ,An)} uses crt; var a,i,n:integer;{a,i,n kiÓu integer} u,b:integer;{u,b kiÓu integer (biÕn l­u UCNN,BCNN)} function ucln(a,b:integer):integer; begin 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} ucln:=a;{G¸n ucln b»ng a} end; function bcnn(a,b:integer):integer; begin bcnn:=a*b div ucln(a,b);{TÝnh bcnn} end; begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{§äc N} write('So thu 1 : ');readln(a);{§äc phÇn tö thø 1 vµo a} u:=a;b:=a;{G¸n u,b b»ng a} for i:=2 to n do{Cho i ch¹y tõ 2 ®Õn n} begin write('So thu ',i,' : ');readln(a);{NhËp sè thø i vµo a} u:=ucln(u,a);{G¸n u b»ng UCLN cña u vµ a} b:=bcnn(b,a);{G¸n b b»ng BCNN cña u vµ b} end; writeln('UCLN = ',u); writeln('BCNN = ',b); readln; end. { NhËp N. In ra mµn h×nh c¸c sè nguyªn tètõ 1 ®Õn N H­íng dÉn ViÕt hµm NGUYENTO(N) tr¶ vÒ gi¸ trÞ TRUE nÕu N nguyªn tè} uses crt; var i,n:integer;{i,n kiÓu integer} function nt(n:integer):boolean; var i:integer;{Khai b¸o i kiÓu integer} begin for i:=2 to trunc(sqrt(n))do{Cho i ch¹y tõ 2 ®Õn trunc(sqrt(n))} if n mod i=0 then begin nt:=false;exit;end;{NÕu n chia hÕt cho i th× g¸n nt=false;tho¸t khái CT con b»ng exit} nt:=true;{G¸n nt b»ng TRUE} end; begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{§äc N} for i:=2 to n do{Cho i ch¹y tõ 2 ®Õn N} if nt(i)then write(i:5);{NÕu i ntè th× xuÊt I} readln; end. Bµi tËp 4: { NhËp sè N. Sau ®ã nhËp N phÇn tö. In ra phÇn tö cã sè ­íc lµ lín nhÊt H­íng dÉn ViÕt hµm TINH(N) tr¶ vÒ sè ­íc cña N L­u ý r»ng sè 0 cã sè ­íc lín nhÊt trong tÊt c¶ mäi sè} uses crt; var i,n:integer;{i,n kiÓu integer} a,max,luua:integer;{a,max,luua kiÓu integer} function tinh(n:integer):integer; var i,souoc:integer;{Khai b¸o i,souoc kiÓu integer} begin if n=0 then tinh:=maxint{NÕu N=0 th×} else{Ng­îc l¹i} begin souoc:=0;{G¸n souoc b»ng 0} for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N} if n mod i=0 then inc(souoc);{NÕu n chia hÕt cho i th× t¨ng souoc} tinh:=souoc;{G¸n tinh b»ng souoc} end; end; begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{§äc N} max:=0;{G¸n max b»ng 0} for i:=1 to n do{Cho i ch¹y tõ 1 ®Õn N} begin write('So thu ',i,' : ');readln(a);{NhËp sè thø i vµo a} if max<tinh(a)then{nÕu max < sè ­íc cña a th×} begin max:=tinh(a);{CËp nhËt max} luua:=a;{G¸n luua b»ng a} end; end; writeln('So co nhieu uoc nhat la :',luua);{XuÊt luua} if luua=0 then write('Co vo so uoc')else writeln('Co ',max,' uoc');{NÕu luua=0 th× xuÊt cã v« sè ­íc ng­îc l¹i xuÊt max} readln; end. Bµi tËp 5: { ViÕt ch­¬ng tr×nh hiÖn ra Menu sau 0 - Thoat 1 - Tinh dien tich hinh chu nhat 2 - Tinh dien tich hinh tron 3 - Tinh dien tich hinh thang Hay an mot so de chon : Sau ®ã øng víi mçi sè b¹n h·y viÕt thñ tôc tÝnh diÖn tÝch t­¬ng øng} uses crt; var ch:char;{ch kiÓu char} procedure hcn; var a,b:real;{Khai b¸o a,b kiÓu real} begin write('A, B = ');readln(a,b);{§äc a,b} writeln('Dien tich hcn la : ',a*b:0:2);{XuÊt dt} readln; end; procedure htron; var r:real;{Khai b¸o r kiÓu real} begin write('R = ');readln(r);{§äc r} writeln('Dien tich hinh tron : ',r*r*3.14:0:2);{XuÊt dt} readln; end; procedure hthang; var a,b,h:real;{Khai b¸o a,b,h kiÓu real} begin write('Nhap day lon, day be, chieu cao : ');readln(a,b,h);{§äc a,b,h} writeln('Dien tich hinh thang : ',(a+b)*h/2:0:2);{XuÊt dt} readln; end; begin repeat clrscr;{Xo¸ mµn h×nh} writeln('0 - Thoat'); writeln('1 - Tinh dien tich hcn'); writeln('2 - Tinh dien tich hinh tron'); writeln('3 - Tinh dien tich hinh thang'); write('Hay an mot so de chon :'); repeat ch:=readkey;until(ch='1')or(ch='2')or(ch='3')or(ch='0');{NhËn ch ®Õn khi nµo ch='0'..'3'} clrscr;{Xo¸ mµn h×nh} case ch of '1':hcn; '2':htron; '3':hthang; end; until ch='0'; end. Bµi tËp 6:{ ViÕt thñ tôc ®Ö quy ®¶o c¸c ch÷ sè cña mét sè. VD : §äc vµo sè : 12345 In ra : 54321 H­íng dÉn PROCEDURE dao(n:integer); NÕu N>0 th× XuÊt n mod 10; Gäi ®Ö quy dao(n div 10)} uses crt; var n:integer;{n kiÓu integer} procedure dao(n:integer); begin if n>0 then{NÕu n>0 th×} begin write(n mod 10);{In ra hµng ®¬n vÞ cña n} dao(n div 10);{Gäi thñ tôc dao(n div 10)} end; end; begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{§äc N} dao(n); readln; end. Bµi tËp 7: { D·y sè Fibonaci lµ d·y sè F1,F2...Fn ®­îc t¹o ra víi c«ng thøc F1 = F2 = 1 Fn = Fn-1 + Fn-2 (n>2) H·y nhËp sè N. TÝnh Fn H­íng d©n ViÕt hµm ®Ö quy FIBO(N) tr¶ vÒ gi¸ trÞ Fn} uses crt; var n:integer;{n kiÓu integer} function fibo(n:longint):longint; begin if n<3 then fibo:=1{NÕu n<3 th× g¸n fibo=1} else fibo:=fibo(n-1)+fibo(n-2);{Ng­îc l¹i g¸n fibo = ...} end; begin clrscr;{Xo¸ mµn h×nh} write('N = ');readln(n);{§äc N} writeln(fibo(n));{XuÊt fibo(n)} readln; end. Bµi tËp 8:{ ViÕt thñ tôc BCC(x,y,k:byte) in ra mµn h×nh b¶ng cöu ch­¬ng k t¹i vÞ trÝ x,y} uses crt; procedure bcc(x,y,k:byte); var i:byte;{Khai b¸o i kiÓu byte} begin for i:=1 to 10 do{Cho i ch¹y tõ 1 ®Õn 10} begin gotoxy(x,y+i-1);{nh¶y tíi vÞ trÝ x,y+i-1} write(k,' x ',i,' = ',k*i);{XuÊt k x i} end; end; begin clrscr; bcc(5,5,3); bcc(20,10,9); readln; end.

Các file đính kèm theo tài liệu này:

  • docChương trình con trong Pascal.doc