188
LỜI MỞ ĐẦU Theo khung chương trình của Bộ Giáo Dục và Đào Tạo, Ngôn ngữ Lập trình Pascal là một phần quan trọng trong học phần Tin học Đại cương thuộc các khối ngành Khoa học Tự nhiên, đặc biệt là ngành Công nghệ Thông tin. Nhằm đáp ứng yêu cầu học tập của học sinh, sinh viên bước đầu làm quen với công việc lập trình, chúng tôi đã biên soạn bộ Giáo Trình Bài tập Pascal nhằm giúp cho sinh viên có một tài liệu học tập, rèn luyện tốt khả năng lập trình, tạo nền tảng vững chắc cho các môn học tiếp theo trong chương trình đào tạo Cử nhân Công nghệ Thông tin . Giáo trình bai gồm rất nhiều bài tập từ đơn giản đến phức tạp. Các bài tập này được biên soạn dựa trên khung chương trình giảng dạy môn Tin học Đại cương. Bên cạch đó, chúng tôi cũng bổ sung một số bài tập dựa trên cơ sở một số thuật toán chuẩn với các cấu trúc dữ liệu được mở rộng nhằm nâng cao kỹ năng, phương pháp lập trình cho sinh viên. Nội dung của giáo trình được chia thành 10 chương. Trong mỗi chương đều có phần tóm tắt lý thuyết, phần bài tập mẫu và cuối cùng là phần bài tập tự giải để bạn đọc tự mình kiểm tra những kiến thức và kinh nghiệm đã học. Trong phần bài tập mẫu, đối với những bài tập khó hoặc có thuật toán phức tạp, chúng tôi thường nêu ra ý tưởng và giải thuật trước khi viết chương trình cài đặt. Xin chân thành cảm ơn các đồng nghiệp ở Khoa Công nghệ Thông tin Trường Đại học Khoa học Huế đã giúp đỡ, đóng góp ý kiến để hoàn chỉnh nội dung giáo trình này.

Giao Trinh Pascal Toan Tap

Embed Size (px)

DESCRIPTION

Giao Trinh Pascal Toan Tap

Citation preview

II

Gio trnh bi tp Pascal

LI M U

Theo khung chng trnh ca B Gio Dc v o To, Ngn ng Lp trnh Pascal l mt phn quan trng trong hc phn Tin hc i cng thuc cc khi ngnh Khoa hc T nhin, c bit l ngnh Cng ngh Thng tin.

Nhm p ng yu cu hc tp ca hc sinh, sinh vin bc u lm quen vi cng vic lp trnh, chng ti bin son b Gio Trnh Bi tp Pascal nhm gip cho sinh vin c mt ti liu hc tp, rn luyn tt kh nng lp trnh, to nn tng vng chc cho cc mn hc tip theo trong chng trnh o to C nhn Cng ngh Thng tin .

Gio trnh bai gm rt nhiu bi tp t n gin n phc tp. Cc bi tp ny c bin son da trn khung chng trnh ging dy mn Tin hc i cng. Bn cch , chng ti cng b sung mt s bi tp da trn c s mt s thut ton chun vi cc cu trc d liu c m rng nhm nng cao k nng, phng php lp trnh cho sinh vin.

Ni dung ca gio trnh c chia thnh 10 chng. Trong mi chng u c phn tm tt l thuyt, phn bi tp mu v cui cng l phn bi tp t gii bn c t mnh kim tra nhng kin thc v kinh nghim hc. Trong phn bi tp mu, i vi nhng bi tp kh hoc c thut ton phc tp, chng ti thng nu ra tng v gii thut trc khi vit chng trnh ci t.

Xin chn thnh cm n cc ng nghip Khoa Cng ngh Thng tin Trng i hc Khoa hc Hu gip , ng gp kin hon chnh ni dung gio trnh ny.

Chng ti hy vng sm nhn c nhng kin ng gp, ph bnh ca bn c v ni dung, cht lng v hnh thc trnh by gio trnh ny ngy mt hon thin hn.

Hu, Thng 07 Nm 2004

CC TC GI

Chng 1

CC THNH PHN C BN CA

NGN NG LP TRNH PASCAL

Pascal l mt ngn ng lp trnh bc cao do Niklaus Wirth, gio s in ton trng i hc k thut Zurich (Thy S) xut nm 1970. ng ly tn Pascal k nim nh ton hc v nh trit hc ngi Php ni ting Blaise Pascal.

1. Cc tp tin cn thit khi lp trnh vi Turbo Pascal

lp trnh c vi Turbo Pascal, ti thiu cn 2 file sau:

TURBO.EXE: Dng son tho v dch chng trnh.

TURBO.TPL: Th vin cha cc n v chun chy vi TURBO.EXE.

Ngoi ra, mun lp trnh ho th phi cn thm cc tp tin:

GRAPH.TPU: Th vin ho.

*.BGI: Cc file iu khin cc loi mn hnh tng ng khi dng ho.

*.CHR: Cc file cha cc font ch ha.

2. Cc bc c bn khi lp mt chng trnh Pascal

Bc 1: Son tho chng trnh.

Bc 2: Dch chng trnh (nhn phm F9), nu c li th phi sa li.

Bc 3: Chy chng trnh (nhn phm Ctrl-F9).

3. Cu trc chung ca mt chng trnh Pascal

{ Phn tiu }

PROGRAM Tn_chng_trnh;

{ Phn khai bo }

USES ......;

CONST .....;

TYPE .......;

VAR ........;

PROCEDURE ............;

FUNCTION ..............;

...............

{ Phn thn chng trnh }

BEGIN

...........

END.

V d 1: Chng trnh Pascal n gin nht

BEGIN

Write(Hello World!);

END.

V d 2:

Program Vidu2;

Const PI=3.14;

Var R,S:Real;

Begin

R:=10;

{Bn knh ng trn}

S:=R*R*PI; {Din tch hnh trn}

Writeln(Dien tich hinh tron = , S:0:2); { In ra mn hnh }

Readln;

End.

4. Mt s phm chc nng thng dng

F2:

Lu chng trnh ang son tho vo a.

F3:

M file mi hoc file tn ti trn a son tho.

Alt-F3:ng file ang son tho.

Alt-F5:Xem kt qu chy chng trnh.

F8:

Chy tng cu lnh mt trong chng trnh.

Alt-X:

Thot khi Turbo Pascal.

Alt-: Dch chuyn qua li gia cc file ang m.

F10:

Vo h thng Menu ca Pascal.

5. Cc thao tc c bn khi son tho chng trnh

5.1. Cc phm thng dng

Insert: Chuyn qua li gia ch v ch chn.

Home: a con tr v u dng.

End: a con tr v cui dng.

Page Up: a con tr ln mt trang mn hnh.

Page Down: a con tr xung mt trang mn hnh.

Del: Xo k t ngay ti v tr con tr.

Back Space ((): Xa k t bn tri con tr.

Ctrl-PgUp: a con tr v u vn bn.

Ctrl-PgDn: a con tr v cui vn bn.

Ctrl-Y: Xa dng ti v tr con tr.

5.2. Cc thao tc trn khi vn bn

Chn khi vn bn: Shift + Ctrl-KY: Xo khi vn bn ang chn

Ctrl-Insert: a khi vn bn ang chn vo Clipboard

Shift-Insert: Dn khi vn t Clipboard xung v tr con tr.

6. Cc thnh phn c bn ca ngn ng Pascal

6.1. T kha

T kho l cc t m Pascal dnh ring phc v cho mc ch ca n. (Chng hn nh: BEGIN, END, IF, WHILE,...)

Ch : Vi Turbo Pascal 7.0 tr ln, cc t kho trong chng trnh s c hin th khc mu vi cc t khc.

6.2. Tn (nh danh)

nh danh l mt dy k t dng t tn cho cc hng, bin, kiu, tn chng trnh con... Khi t tn, ta phi ch mt s im sau:

Khng c t trng tn vi t kho

K t u tin ca tn khng c bt u bi cc k t c bit hoc ch s.

Khng c t tn vi k t space,cc php ton.

V d: Cc tn vit nh sau l sai

1XYZ

Sai v bt u bng ch s.

#LONG

Sai v bt u bng k t c bit.

FOR

Sai v trng vi t kho.

KY TU

Sai v c khong trng (space).

LAP-TRINHSai v du tr (-) l php ton.

6.3. Du chm phy (;)

Du chm phy c dng ngn cch gia cc cu lnh. Khng nn hiu du chm phy l du kt thc cu lnh.

V d:

FOR i:=1 TO 10 DO Write(i);

Trong cu lnh trn, lnh Write(i) c thc hin 10 ln. Nu hiu du chm phy l kt thc cu lnh th lnh Write(i) ch thc hin 1 ln.

6.4. Li gii thch

Cc li bn lun, li ch thch c th a vo bt k ch no trong chng trnh cho ngi c d hiu m khng lm nh hng n cc phn khc trong chng trnh. Li gii thch c t gia hai du ngoc { v } hoc gia cm du (* v *).

V d:

Var a,b,c:Rea; {Khai bo bin}

Delta := b*b 4*a*c; (* Tnh delta gii phng trnh bc 2 *)BI TP THC HNH

1. Khi ng Turbo Pascal.

2. Nhp vo on chng trnh sau:

Uses Crt;

Begin

Writeln(***********************************************************);

Writeln(* CHUONG TRINH PASCAL DAU TIEN CUA TOI *);

Writeln(* Oi! Tuyet voi!... *);

Writeln(***********************************************************);

Readln;

End.

3. Dch v chy chng trnh trn.

4. Lu chng trnh vo a vi tn BAI1.PAS.

5. Thot khi Pascal.

6. Khi ng li Turbo Pascal.

7. M file BAI1.PAS.

8. Chn thm vo dng: CLRSCR; vo sau dng BEGIN

9. Dch v chy th chng trnh.

10. Lu chng trnh vo a.

11. Thot khi Pascal.

12. Vit chng trnh in ra mn hnh cc hnh sau:

* ******** *******

*** ** ** ** **

** ** ** ** **

** ** ******** * *

********* ** ** **

** ** ** ** ** **

** ** ******** ********

Chng 2

CC KIU D LIU C BN

KHAI BO HNG, BIN, KIU, BIU THC V CU LNH

I. CC KIU D LIU C BN

1. Kiu logic

- T kha: BOOLEAN

- min gi tr: (TRUE, FALSE).

- Cc php ton: php so snh (=, ) v cc php ton logic: AND, OR, XOR, NOT.

Trong Pascal, khi so snh cc gi tr boolean ta tun theo qui tc: FALSE < TRUE.

Gi s A v B l hai gi tr kiu Boolean. Kt qu ca cc php ton c th hin qua bng di y:

ABA AND BA OR BA XOR BNOT A

TRUETRUETRUETRUEFALSEFALSE

TRUEFALSEFALSETRUETRUEFALSE

FALSETRUEFALSETRUETRUETRUE

FALSEFALSEFALSEFALSEFALSETRUE

2. Kiu s nguyn

2.1. Cc kiu s nguyn

Tn kiuPhm viDung lng

Shortint-128 ( 1271 byte

Byte0 ( 2551 byte

Integer-32768 ( 327672 byte

Word0 ( 655352 byte

LongInt-2147483648 ( 21474836474 byte

2.2. Cc php ton trn kiu s nguyn

2.2.1. Cc php ton s hc:

+, -, *, / (php chia cho ra kt qu l s thc).

Php chia ly phn nguyn: DIV (V d : 34 DIV 5 = 6).

Php chia ly s d: MOD (V d: 34 MOD 5 = 4).

2.2.2. Cc php ton x l bit:

Trn cc kiu ShortInt, Integer, Byte, Word c cc php ton:

NOT, AND, OR, XOR.

ABA AND BA OR BA XOR BNOT A

111100

100110

010111

000001

SHL (php dch tri): a SHL n ( a ( 2n SHR (php dch phi): a SHR n ( a DIV 2n3. Kiu s thc

3.1. Cc kiu s thc

:

Tn kiuPhm viDung lng

Single1.5(10-45 ( 3.4(10+384 byte

Real2.9(10-39 ( 1.7(10+386 byte

Double5.0(10-324 ( 1.7(10+3088 byte

Extended3.4(10-4932 ( 1.1(10+493210 byte

Ch : Cc kiu s thc Single, Double v Extended yu cu phi s dng chung vi b ng x l s hoc phi bin dich chng trnh vi ch th {$N+} lin kt b gi lp s.

3.2. Cc php ton trn kiu s thc: +, -, *, /

Ch : Trn kiu s thc khng tn ti cc php ton DIV v MOD.

3.3. Cc hm s hc s dng cho kiu s nguyn v s thc:

SQR(x):

Tr v x2

SQRT(x):

Tr v cn bc hai ca x (x(0)

ABS(x):

Tr v |x|

SIN(x):

Tr v sin(x) theo radian

COS(x):

Tr v cos(x) theo radian

ARCTAN(x):Tr v arctang(x) theo radian

LN(x):

Tr v ln(x)

EXP(x):

Tr v ex

TRUNC(x):

Tr v s nguyn gn vi x nht nhng b hn x.

INT(x):

Tr v phn nguyn ca x

FRAC(x):

Tr v phn thp phn ca x

ROUND(x):

Lm trn s nguyn x

PRED(n):

Tr v gi tr ng trc n

SUCC(n):

Tr v gi tr ng sau n

ODD(n):

Cho gi tr TRUE nu n l s l.

INC(n):

Tng n thm 1 n v (n:=n+1).

DEC(n):

Gim n i 1 n v (n:=n-1).

4. Kiu k t

- T kho: CHAR.

- Kch thc: 1 byte.

- biu din mt k t, ta c th s dng mt trong s cc cch sau y:

t k t trong cp du nhy n. V d 'A', '0'.

Dng hm CHR(n) (trong n l m ASCII ca k t cn biu din). V d CHR(65) biu din k t 'A'.

Dng k hiu #n (trong n l m ASCII ca k t cn biu din). V d #65.

- Cc php ton: =, >, >=, 0

d/ e

Bi tp 2.5: Vit chng trnh tnh sin tch tam gic theo cng thc sau:

S =

vi p =

(a+b+c)

Bi tp 2.6: Vit chng trnh tnh khong cch t mt im I(xi,yi) n ng thng c phng trnh D: Ax + By + C = 0.

Gi :

Cng thc tnh khong cch: h =

Bi tp 2.7: Vit chng trnh tch mt s n thnh 2 s a, b sao cho tch P=a*b2 t cc i vi n c nhp vo t bn phm.

Gi :

Gi x l s th hai th s th nht l: (n-x). Theo ta c: P(x) = x2.(n-x).

Hm P t cc i khi P(x) = -3x2 + 2nx = 0 ( x = 2n/3.

Bi tp 2.8: Mn hnh ha ca mt my tnh c phn gii: 640x480. Bit rng, mi im trn mn hnh chim 1 byte. Hi cn bao nhiu byte lu tr ton b mn hnh ha ?

C 2 sinh vin vit chng trnh tnh s byte lu tr mn hnh ha:

Program Sinhvien1;

Vara,b:integer;

s:Word;

Begin

a:=640; b:=480;

s:=a*b;

writeln(s); readln;

End.

Program Sinhvien2;

Vara,b:Word;

s: LongInt;

Begin

a:=640; b:=480;

s:=a*b;

writeln(s); readln;

End.

Hy cho bit 2 chng trnh trn cho kt qu ng hay sai? Ti sao?

Bi tp 2.9: Mn hnh ha ca mt my tnh c phn gii: 640x480. Bit rng, mi im trn mn hnh chim 1 byte. Hi cn bao nhiu byte lu tr mt vng c kch thc bng 1/10 mn hnh ha ?

C 2 sinh vin vit chng trnh gii bi ton ny nh sau:

Program Sinhvien1;

Vara,b:Word;

s: LongInt;

Begin

a:=640; b:=480;

s:=a;

s:=s*b;

s:=s DIV 10;

writeln(s); readln;

End.

Program Sinhvien2;

Vara,b:Word;

s: LongInt;

Begin

a:=640; b:=480;

s:=a*b DIV 10;

writeln(s); readln;

End.

Hy cho bit 2 chng trnh trn cho kt qu ng hay sai? Ti sao?

Chng 3

CC CU LNH C CU TRC

I. CU LNH R NHNH

1.1. Lnh IF

C php:

(1)IF B THEN S;

(2)IF B THEN S1 ELSE S2;

S thc hin:

Ch : Khi s dng cu lnh IF th ng trc t kho ELSE khng c c du chm phy (;).

1.2. Lnh CASE

C php:

Dng 1Dng 2

CASE B OF

Const 1: S1;

Const 2: S2;

...

Const n: Sn;

END;CASE B OF

Const 1: S1;

Const 2: S2;

...

Const n: Sn;

ELSE Sn+1;

END;

Trong :

B: Biu thc kiu v hng m c nh kiu nguyn, kiu logic, kiu k t, kiu lit k.

Const i: Hng th i, c th l mt gi tr hng, cc gi tr hng (phn cch nhau bi du phy) hoc cc on hng (dng hai du chm phn cch gia gi tr u v gi tr cui).

Gi tr ca biu thc v gi tr ca tp hng i (i=1n) phi c cng kiu.

Khi gp lnh CASE, chng trnh s kim tra:

- Nu gi tr ca biu thc B nm trong tp hng const i th my s thc hin lnh Si tng ng.

- Ngc li:

+ i vi dng 1: Khng lm g c.

+ i vi dng 2: thc hin lnh Sn+1.

II. CU LNH LP

2.1. Vng lp xc nh

C hai dng sau:

(Dng tin

FOR := TO DOS;

(Dng li

FOR := DOWNTO DOS;

S thc hin vng lp FOR:

Ch : Khi s dng cu lnh lp FOR cn ch cc im sau:

Khng nn tu tin thay i gi tr ca bin m bn trong vng lp FOR v lm nh vy c th s khng kim sot c bin m.

Gi tr Max v Min trong cu lnh FOR s c xc nh ngay khi vo u vng lp. Do cho d trong vng lp ta c thay i gi tr ca n th s ln lp cng khng thay i.5.3.2. Vng lp khng xc nh

Dng REPEATDng WHILE

Repeat

S;

Until B;While B Do S;

ngha:

Dng REPEAT: Lp li cng vic S cho n khi biu thc B=TRUE th dng.

Dng WHILE: Trong khi biu thc B=TRUE th tip tc thc hin cng vic S.

BI TP MU

Bi tp 3.1: Vit chng trnh nhp vo mt s nguyn v kim tra xem s va nhp l s chn hay s l.

Uses crt;

Var x:integer;

Begin

Write('Nhap vao mot so nguyen : '); Readln(x);

If x MOD 2=0 Then

Writeln('So vua nhap vao la so chan')

Else

Writeln('So vua nhap vao la so le');

Readln;

End.

Bi tp 3.2: Vit chng trnh gii phng trnh bc nht ax+b=0

Uses Crt;

Var a,b,x : real;

Begin

Write('a = '); Readln(a);

Write('b = '); Readln(b);

If a = 0 Then { Nu a bng 0 }

If b = 0 Then { Trng hp a = 0 v b = 0 }

Writeln('Phuong trinh co vo so nghiem')

Else { Trng hp a=0 v b ( 0 }

Writeln('Phuong trinh vo nghiem')

Else { Trng hp a ( 0 }

Begin

x:= -b/a;

Writeln('Phuong trinh co nghiem la :',x:0:2);

End;

Readln;

End.Bi tp 3.3: Vit chng trnh nhp vo tui ca mt ngi v cho bit ngi l thiu nin, thanh nin, trung nin hay lo nin. Bit rng: nu tui nh hn 18 l thiu nin, t 18 n 39 l thanh nin, t 40 n 60 l trung nin v ln hn 60 l lo nin.

Uses crt;

Var tuoi:Byte;

Begin

Write(Nhap vao tuoi cua mot nguoi:');Readln(tuoi);

Case tuoi Of

1..17:Writeln(Nguoi nay la thieu nien');

18..39:Writeln(Nguoi nay la thanh nien');

40..60:Writeln(Nguoi nay la trung nien');

Else

Writeln(Nguoi nay la lao nien');

End;

Readln;

End.

Bi tp 3.4: Vit chng trnh tnh tng S = 1+2+...+N.

Cch 1: Dng vng lp FOR.

Program TinhTong;

Uses crt;

Var N,i,S:integer;

Begin

Clrscr;

Write('Nhap vao gia tri cua N :'); Readln(N);

S:=0;

For i:=1 to N do S:=S+i;

Writeln('Ket qua la :',S);

Readln;

End.

Cch 2: Dng vng lp REPEAT.

Program TinhTong;

Uses crt;

Var N,i,S:integer;

Begin

Clrscr;

Write('Nhap vao gia tri cua N :'); Readln(N);

S:=0; i:=1;

Repeat

S:=S+i;

i:=i+1;

Until i>N;

Writeln('Ket qua la :',S);

Readln;

End.

Cch 3: Dng vng lp WHILE.

Program TinhTong;

Uses crt;

Var N,i,S:integer;

Begin

Clrscr;

Write('Nhap vao gia tri cua N :'); Readln(N);

S:=0; i:=1;

While iEpsilon Do

Begin

Pi:=Pi+s*t;

s:=-s; i:=i+1;

t:=4/(2*i+1);

End;

Writeln('So Pi = ',Pi:0:4);

Readln;

End.

Bi tp 3.8:Vit chng trnh nhp vo s nguyn N. In ra mn hnh tt c cc c s ca N.

tng:

Cho bin i chy t 1 ti N. Nu N MOD i=0 th vit i ra mn hnh.

Uses Crt;

Var N,i : Integer;

Begin

Clrscr;

Write('Nhap so nguyen N= '); Readln(N);

For i:=1 To N Do

If N MOD i=0 ThenWrite(i:5);

Readln;

End.

Bi tp 3.9:Vit chng trnh tm USCLN v BSCNN ca 2 s a, b c nhp vo t bn phm.

tng:

- Tm USCLN: Ly s ln tr s nh cho n khi a=b th dng. Lc : USCLN=a.

- BSCNN(a,b) = a*b DIV USCLN(a,b).

Uses crt;

Var a,b,aa,bb:integer;

Begin

Write('Nhap a : '); Readln(a);

Write('Nhap b : '); Readln(b);

aa:=a; bb:=b;

While aabb Do

Begin

If aa>bb Then aa:=aa-bb Elsebb:=bb-aa;

End;

Writeln('USCLN= ',aa);

Writeln('BSCNN= ',a*b DIV aa);

Readln;

End.

Bi tp 3.10: Vit chng trnh tm cc s c 3 ch s sao cho: = a3 + b3 + c3.

tng:

Dng phng php vt cn. Ta bit rng: a c th c gi tr t 1(9 (v a l s hng trm), b,c c th c gi tr t 0(9. Ta s dng 3 vng lp FOR lng nhau duyt qua tt c cc trng hp ca a,b,c.

ng vi mi b abc, ta s kim tra: Nu 100.a + 10.b + c = a3 + b3 + c3 th in ra b abc .

Uses crt;

Var a,b,c : Word;

Begin

For a:=1 To 9 Do

For b:=0 To 9 Do

For c:=0 To 9 Do

If (100*a + 10*b + c)=(a*a*a + b*b*b + c*c*c) ThenWriteln(a,b,c);

Readln;

End.

Bi tp 3.11: Vit chng trnh nhp vo s t nhin N ri thng bo ln mn hnh s c phi l s nguyn t hay khng.

tng:

N l s nguyn t nu N khng c c s no t 2 ( N div 2. T nh ngha ny ta a ra gii thut:

- m s c s ca N t 2 ( N div 2 lu vo bin d.

- Nu d=0 th N l s nguyn t.

Uses crt;

Var N,i,d : Word;

Begin

If N0 th: ly ra ch s cui cng ca N tnh bng php ton MOD 10, sau b bt i ch s cui cng ca N bng php ton DIV 10.Bi tp 3.24: Vit chng trnh in ra mn hnh tt c cc s nguyn t t 2 n N. Vi N c nhp t bn phm.

Bi tp 3.25: Vit chng trnh phn tch mt s ra tha s nguyn t. V d: N=100 s in ra mn hnh:

100|2

50|2

25|5

5|5

1|

Bi tp 3.26: S hon thin l s t nhin c tng cc c ca n (khng k chnh n) bng chnh n. Vit chng trnh kim tra xem mt s c nhp vo t bn phm c phi l s hon thin hay khng? V d: 6, 28 l cc s hon thin.

Gi :

- Tnh tng cc c s ca N: t 1 ( N div 2 lu vo bin S.

- Nu S=N th N l s hon thin.

Bi tp 3.27: Vit chng trnh in ra cc s nguyn t 1 n N2 theo hnh xon c vi N c nhp vo t bn phm. V d, vi N=5 ta c:

12345

161718196

152425207

142322218

131211109

Chng 4

CHNG TRNH CON: TH TC V HM

I. KHI NIM V CHNG TRNH CON

Chng trnh con (CTC) l mt on chng trnh thc hin trn vn hay mt chc nng no . Trong Turbo Pascal, c 2 dng CTC:

Th tc (PROCEDURE): Dng thc hin mt hay nhiu nhim v no .

Hm (FUNCTION): Tr v mt gi tr no (c kiu v hng, kiu string hoc kiu con tr). Hm c th s dng trong cc biu thc.

Ngoi ra, trong Pascal cn cho php cc CTC lng vo nhau.

II. CU TRC CHUNG CA MT CHNG TRNH C S DNG CTC

PROGRAM Tn_chng_trnh;

USES CRT;

CONST ............;

TYPE ............;

VAR ............;

PROCEDURE THUTUC[(Cc tham s)];

[Khai bo Const, Type, Var]

BEGIN

..............

END;

FUNCTION HAM[(Cc tham s)]:;

[Khai bo Const, Type, Var]

BEGIN

..............

HAM:=;

END;

BEGIN {Chng trnh chnh}

...................

THUTUC[(...)];

...................

A:= HAM[(...)];

...................

END.

Ch : Trong qu trnh xy dng CTC, khi no th nn dng th tc/hm?

Dng hmDng th tc

- Kt qu ca bi ton tr v 1 gi tr duy nht (kiu v hng, kiu string hoc kiu con tr).- Li gi CTC cn nm trong cc biu thc tnh ton.- Kt qu ca bi ton khng tr v gi tr no hoc tr v nhiu gi tr hoc tr v kiu d liu c cu trc (Array, Record, File).- Li gi CTC khng nm trong cc biu thc tnh ton.

V d 1: Vit CTC tnh n! = 1.2...n.

tng: V bi ton ny tr v 1 gi tr duy nht nn ta dng hm.

Function GiaiThua(n:Word):Word;

Var P, i:Word;

Begin

P:=1;

For i:=1 To n Do P:=P*i;

GiaiThua:=P;

End;

V d 2: Vit chng trnh con tm im i xng ca im (x,y) qua gc ta .

tng: V bi ton ny tr v ta im i xng (xx,yy) gm 2 gi tr nn ta dng th tc.

Procedure DoiXung(x,y:Integer; Var xx,yy:Integer);

Begin

xx:=-x;

yy:=-y;

End;

CH : Trong 2 v d trn:

n, x, y c gi l tham tr (khng c t kha var ng trc) v sau khi ra khi CTC gi tr ca n khng b thay i.

xx, yy c gi l tham bin (c t kha var ng trc) v sau khi ra khi CTC gi tr ca n b thay i.

III. BIN TON CC V BIN A PHNG

Bin ton cc: l cc bin c khai bo trong chng trnh chnh. Cc bin ny c tc dng mi ni trong ton b chng trnh.

Bin a phng: l cc bin c khai bo trong cc CTC. Cc bin ny ch c tc dng trong phm vi CTC m thi.

Ch : Trong mt CTC, nu bin ton cc trng tn vi bin a phng th bin a phng c u tin hn.

V d:

Program KhaoSatBien;

Var a,b: Integer;{bin ton cc}

Procedure ThuBien;

Var a: Integer;{bin a phng}

Begin

a:=10;

Writeln(A=,a,B=,b);

End;

Begin

a:=50;

b:=200;

ThuBien;

{A=10 B=200}

Writeln(A=,a,B=,b);

{A=50 B=200}

End.

IV. QUI

4.1. Khi nim qui

Trong mt chng trnh, mt CTC c th gi mt CTC khc vo lm vic. Nu nh CTC gi li chnh n th gi l s qui.

4.2. Phng php thit k gii thut qui

Tham s ha bi ton

Tm trng hp suy bin.

Phn tch cc trng hp chung (a v cc bi ton cng loi nhng nh hn).

V d: Vit hm qui tnh n! = 1.2...n.

Tham s ha: n! = Factorial(n);

Factorial(0) = 1

(trng hp suy bin)

Factorial(n) = n*Factorial(n-1)

(trng hp chung)

Function Factorial(N:integer):Longint;

Begin

If N=0 Then Factorial:=1

ElseFactorial:=N*factorial(N-1); { li gi qui }

End;

4.3. Gii thut quay lui

Bi ton:

Hy xy dng cc b gi tr gm n thnh phn (x1,...,xn) t mt tp hu hn cho trc sao cho cc b tha mn yu cu B cho trc no .

Phng php chung

Gi s xc nh c k-1 phn t u tin ca dy: x1,...,xk-1. Ta cn xc nh phn t th k. Phn t ny c xc nh theo cch sau:

- Gi s Tk: tp tt c cc gi tr m phn t xk c th nhn c. V tp Tk hu hn nn ta c th t nk l s phn t ca Tk theo mt th t no , tc l ta c th thnh lp mt nh x 1-1 t tp Tk ln tp {1, 2, ..., nk}.

- Xt j({1, 2, ..., nk}. Ta ni rng j chp nhn c nu ta c th b sung phn t th j trong Tk vi t cch l phn t xk vo trong dy x1,...,xk-1 c dy x1,...,xk.

- Nu k=n: B (x1,...,xk) tha mn yu cu B, do b ny c thu nhn.

- Nu kb Then a:=a-b Else b:=b-a;

End;

UCLN:=a;

End;

Function NGUYENTO(n:Word):Boolean;

Var d,i:Word;

Begin

d:=0;

For i:=2 To n DIV 2 Do

If n MOD i=0 Then d:=d+1;

NGUYENTO:=d=0;

End;

END.

By gi, ta c th vit mt chng trnh c s dng Unit MYTOOL.

Uses Crt, MyTool;

Var a,b:Integer;

Begin

CLRSCR;

Write(10,5,CHUONG TRINH MINH HOA);

Write(Nhap a = ); Readln(a);

Write(Nhap b = ); Readln(b);

Writeln(UCLN cua ,a, va ,b, la:,UCLN(a,b));

Write(Nhap m = ); Readln(m);

If NGUYENTO(m) Then

Writeln(m, la so nguyen to!)

Else

Writeln(m, khong phai la so nguyen to!)

Readln;

End.

BI TP MUBi tp 4.1: Vit hm tm Max ca 2 s thc x,y.

Var a,b:Real;

Function Max(x,y:Real):Real;

Begin

If x>y Then Max:=x Else Max:=y;

End;

Begin

Write(Nhap a=); Readln(a);

Write(Nhap b=); Readln(b);

Writeln(So lon nhat trong 2 so la: , Max(a,b));

Readln;

End.

Bi tp 4.2: Vit hm LOWCASE( c:char):char; i ch ci hoa c thnh ch thng.

tng:

Trong bng m ASCII, s th t ca ch ci hoa nh hn s th t ca ch ci thng l 32. V vy ta c th dng 2 hm CHR v ORD chuyn i.

Uses crt;

Var ch:Char;

Function LOWCASE(c:Char):Char;

Begin

If c IN [A..Z] Then LOWCASE:=CHR(ORD(c)+32)

Else LOWCASE:=c;

End;

Begin

Write(Nhap k tu ch=); Readln(ch);

Writeln(Ky tu hoa la: , LOWCASE(ch));

Readln;

End.Bi tp 4.3: Vit th tc hon i hai ga tr x,y cho nhau.

Var a,b:Real;

Function Swap(Var x,y:Real);

Var Tam:Real;

Begin

Tam:=x; x:=y; y:=Tam;

End;

Begin

Write(Nhap a=); Readln(a);

Write(Nhap b=); Readln(b);

Swap(a,b);

Writeln(Cac so sau khi hoan doi: a=, a:0:2, b=,b:0:2);

Readln;

End.

Bi tp 4.4: Vit hm XMU(x:Real;n:Byte):Real; tnh gi tr xn.

Varx:Real;

n:Byte;

Function XMU(x:Real;n:Byte):Real;

Var i:Byte; S:Rea;

Begin

S:=1;

For i:=1 To n Do S:=S*x;

XMU:=S;

End;

Begin

Write(Nhap x=); Readln(x);

Write(Nhap n=); Readln(n);

Writeln(x mu n = , XMU(x,n):0:2);

Readln;

End.Bi tp 4.5: Vit th tc KHUNG(x1,y1,x2,y2:Integer); v mt khung hnh ch nht c nh trn bn tri l (x1,y1) v nh di bn phi l (x2,y2).

tng:

Dng cc k t m rng trong bng m ASCII:((#179), ((#196), ((#218), ((#192), ((#191), ((#217).

Uses crt;

Procedure Khung(x1,y1,x2,y2:Integer);

Var i,j:Integer;

Begin

Gotoxy(x1,y1); Write(#218); {V (}

Gotoxy(x1,y2); Write(#192); {V (}

{V 2 vin ngang ca khung}

For i:=x1+1 To x2-1 do

Begin

Gotoxy(i,y1); Write(#196);

Gotoxy(i,y2); Write(#196);

End;

Gotoxy(x2,y1); Write(#191); {V (}

Gotoxy(x2,y2); Write(#217); {V (}

{V 2 vin dc ca khung}

For j:=y1+1 To y2-1 do

Begin

Gotoxy(x1,j); Write(#179);

Gotoxy(x2,j); Write(#179);

End;

End;

Begin

Clrscr;

Khung(10,5,40,20);

Readln;

End.

Bi tp 4.6: Vit th tc PHANTICH(n:Integer); phn tch s nguyn n ra tha s nguyn t.

Uses crt;

Var n:Integer;

Procedure PHANTICH(n:Integer);

Var i:Integer;

Begin

i:=2;

While n1 Do

Begin

While n MOD i=0 Do

Begin

Writeln(n:5,'|',i:2);

n:=n Div i;

End;

i:=i+1;

End;

Writeln(n:5,'|');

End;

Begin

Write('Nhap n='); Readln(n);

PHANTICH(n);

Readln;

End.

BI TP T GII

Bi tp 4.7: Vit 2 hm tm Max , min ca 3 s thc.

Bi tp 4.8: Vit hm PERFECT(n:Word):Boolean; kim tra s nguyn n c phi l s hon thin hay khng?

Bi tp 4.9:Vit th tc FILL(x1,y1,x2,y2:Integer; ch:Char); t mt vng mn hnh hnh ch nht c nh trn bn tri l (x1,y1) v nh di bn phi l (x2,y2) bng cc k t ch.

Bi tp 4.10: Vit hm tm BSCNN ca 2 s nguyn a,b c khai bo nh sau:

Function BSCNN (a,b:word ):word ;

Bi tp 4.11: Vit th tc ti gin phn s a/b , vi a, b l 2 s nguyn.

Bi tp 4.12: Vit cc hm quy tnh:

S1 = 1+2 +3+......+n ;

S2 = 1+1/2 + .....+ 1/n ;

S3 = 1-1/2 +......+ (-1)n+1 1/n

S4 = 1 + sin(x) + sin2(x) + ......+ sinn (x)

Bi tp 4.13: Vit hm quy tnh Ckn bit :

Cnn =1 , C0n = 1 , Ckn = Ck-1n-1 + Ckn-1.

Bi tp 4.14: Cho m , n nguyn dng . Lp hm quy tnh:

A(m,n) =

Bi tp 4.15: Lp hm qui tnh dy Fibonaci:

F(n) =

Bi tp 4.16: Vit hm qui tm USCLN ca 2 s.

Bi tp 4.17: Vit th tc in ra mn hnh s o ngc ca mt s nguyn cho trc theo 2 cch: qui v khng qui.

Bi tp 4.18: Vit chng trnh in ra mn hnh cc hon v ca n s nguyn u tin.

Bi tp 4.19: Xy dng mt Unit SOHOC.PAS cha cc th tc v hm thc hin cc chc nng sau:

- Gii phng trnh bc nht.

- Gii phng trnh bc hai.

- Tm Max/Min ca 2 s a,b.

- Tm USCLN v BSCNN ca 2 s nguyn a,b.

- Kim tra s nguyn dng n c phi l s nguyn t hay khng?

- Kim tra s nguyn dng n c phi l s hon thin hay khng?

- i mt s nguyn dng n sang dng nh phn.

- In ra mn hnh bng cu chng t 2 ( 9.

Sau , t vit cc chng trnh c s dng Unit SOHOC va c xy dng trn.

Chng 5

D LIU KIU MNG (ARRAY)

I. KHAI BO MNG

C php:

TYPE = ARRAY [ch s] OF ;

VAR :;

hoc khai bo trc tip:

VAR

: ARRAY [ch s] OF ;

V d:

TYPEMangnguyen = Array[1..100] of Integer;

Matrix = Array[1..10,1..10] of Integer;

MangKytu = Array[Byte] of Char;

VAR

A: Mangnguyen;

M: Matrix;

C: MangKytu;

hoc:

VAR

A: Array[1..100] of Integer;

C: Array[Byte] of Char;

II. XUT NHP TRN D LIU KIU MNG

- truy cp n phn t th k trong mng mt chiu A, ta s dng c php: A[k].

- truy cp n phn t (i,j) trong mng hai chiu M, ta s dng c php: M[i,j].

- C th s dng cc th tc READ(LN)/WRITE(LN) i vi cc phn t ca bin kiu mng.

BI TP MU

Bi tp 5.1:Vit chng trnh tm gi tr ln nht ca mt mng cha cc s nguyn gm N phn t.

tng:

- Cho s ln nht l s u tin: Max:=a[1].

- Duyt qua cc phn t a[i], vi i chy t 2 ti N: Nu a[i]>Max th thay Max:=a[i];

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

VarA:Mang;

N,i,Max:Integer;

Begin

{Nhp mng}

Write(Nhap N=); Readln(N);

For i:=1 To N Do

Begin

Write(A[,i,]=); Readln(A[i]);

End;

{Tm phn t ln nht}

Max:=A[1];

For i:=2 To N Do

If MaxN.

Nu x=A[i] th v tr cn tm l i, ngc li th kt qu tm l 0 (khng tm thy).

Uses Crt;

Type Mang = ARRAY[1..50] Of Integer;

VarA:Mang;

N,i,x:Integer;

Function TimKiem(x, N: Integer; A:Mang):Integer;

Var i:Integer;

Begin

I:=1;

While (I