Professional Documents
Culture Documents
Giao Trinh Pascal Hay Tuyet
Giao Trinh Pascal Hay Tuyet
Giao Trinh Pascal Hay Tuyet
--------
L Cng
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.
Duy Xuyn, Thng 04 Nm 2012
CC TC GI
L Cng
Chng 1
CC THNH PHN C BN CA
NGN NG LP TRINH 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.
L Cng
Readln;
End.
4. Mt s phm chc nng thng dng
F2:
F3:
Alt-F3:
Alt-F5:
F8:
Alt-X:
Alt-<S th t ca file ang m>: Dch chuyn qua li gia cc file ang m.
F10:
L Cng
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
**
**
**
**
L Cng
**
**
********
**
**
********
L Cng
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:
A
B
A AND B
A OR B
A XOR B
NOT A
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
TRUE
FALSE
FALSE
TRUE
TRUE
FALSE
FALSE
TRUE
FALSE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
TRUE
2. Kiu s nguyn
2.1. Cc kiu s nguyn
Tn kiu
Phm vi
Dung lng
Shortint
1 byte
-128 127
Byte
1 byte
0 255
Integer
2 byte
-32768 32767
Word
2 byte
0 65535
LongInt
4 byte
-2147483648 2147483647
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.
A
B
A AND B
A OR B
A XOR B
NOT A
1
1
1
1
0
0
1
0
0
1
1
0
0
1
0
1
1
1
0
0
0
0
0
1
n
SHL (php dch tri): a SHL n a 2
SHR (php dch phi): a SHR n a DIV 2n
3. Kiu s thc
3.1. Cc kiu s thc:
Tn kiu
Phm vi
Dung lng
Single
4 byte
1.510-45 3.410+38
-39
+38
Real
6 byte
2.910 1.710
-324
+308
Double
8 byte
5.010 1.710
7
L Cng
Extended
10 byte
3.410-4932 1.110+4932
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 (x0)
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: =, >, >=, <, <=,<>.
* Cc hm trn kiu k t:
- UPCASE(ch): Tr v k t in hoa tng ng vi k t ch. V d: UPCASE('a') = 'A'.
- ORD(ch): Tr v s th t trong bng m ASCII ca k t ch. V d ORD('A')=65.
- CHR(n): Tr v k t tng ng trong bng m ASCII c s th t l n. V d: CHR(65)='A'.
- PRED(ch): cho k t ng trc k t ch. V d: PRED('B')='A'.
- SUCC(ch): cho k t ng sau k t ch. V d: SUCC('A')='B'.
II. KHAI BO HNG
- Hng l mt i lng c gi tr khng thay i trong sut chng trnh.
- C php:
CONST <Tn hng> = <Gi tr>;
hoc:
CONST <Tn hng>: = <Biu thc hng>;
V d:
CONST Max = 100;
Name = 'Tran Van Hung';
8
L Cng
Continue = FALSE;
Logic = ODD(5); {Logic =TRUE}
Ch : Ch cc hm chun di y mi c cho php s dng trong mt biu thc hng:
ABS
CHR HI LO
LENGTH
ODD ORD
PTR
ROUND PRED SUCC SIZEOF
SWAP TRUNC
III. KHAI BO BIN
- Bin l mt i lng m gi tr ca n c th thay i trong qu trnh thc hin chng trnh.
- C php:
VAR <Tn bin>[,<Tn bin 2>,...] : <Kiu d liu>;
V d:
VAR
x, y: Real; {Khai bo hai bin x, y c kiu l Real}
a, b: Integer; {Khai bo hai bin a, b c kiu integer}
Ch : Ta c th va khai bo bin, va gn gi tr khi u cho bin bng cch s dng c php
nh sau:
CONST <Tn bin>: <Kiu> = <Gi tr>;
V d:
CONST x:integer = 5;
Vi khai bo bin x nh trn, trong chng trnh gi tr ca bin x c th thay i. (iu ny khng
ng nu chng ta khai bo x l hng).
IV. NH NGHA KIU
- Ngoi cc kiu d liu do Turbo Pascal cung cp, ta c th nh ngha cc kiu d liu mi da trn
cc kiu d liu c.
- C php:
TYPE <Tn kiu> = <M t kiu>;
VAR <Tn bin>:<Tn kiu>;
V d:
TYPE Sothuc = Real;
Tuoi = 1..100;
ThuNgay = (Hai,Ba,Tu, Nam, Sau, Bay, CN)
VAR
x :Sothuc;
tt : Tuoi;
Day: ThuNgay;
V. BIU THC
Biu thc (expression) l cng thc tnh ton m trong bao gm cc php ton, cc hng, cc
bin, cc hm v cc du ngoc n.
V d: (x +sin(y))/(5-2*x)
biu thc s hc
(x+4)*2 = (8+y)
biu thc logic
Trong mt biu thc, th t u tin ca cc php ton c lit k theo th t sau:
Li gi hm.
Du ngoc ()
Php ton mt ngi (NOT, -).
Php ton *, /, DIV, MOD, AND.
Php ton +, -, OR, XOR
Php ton so snh =, <, >, <=, >=, <>, IN
VI. CU LNH
9
L Cng
L Cng
1
a.b. sin( ) vi a,b l di 2 cnh v l gc kp gia 2
2
cnh a v b.
Program Tinh_dien_tich_tam_giac;
Var a,b,goc,dientich: Real;
Begin
Write('Nhap vao do dai canh thu nhat: '); Readln(a);
Write('Nhap vao do dai canh thu hai: '); Readln(b);
Write('Nhap vao goc giua hai canh: '); Readln(goc);
Dientich:=a*b*sin(goc)/2;
Writeln('Dien tich cua tam giac la: ',Dientich:0:2);
Readln;
End.
Bi tp 2.2: Vit chng trnh tnh n x , x>0.
tng:
Ta c:
x xn en
ln x
Program Tinh_can_bac_n_cua_x;
Var x,S: Real;
n: Word;
Begin
Write('Nhap vao n= '); Readln(n);
Write('Nhap vao x= '); Readln(x);
S:=EXP(1/n*LN(x));
Writeln('S = ',S:0:2);
Readln;
End.
Bi tp 2.3:Vit chng trnh nhp vo 2 s a, b. Sau hon i gi tr ca 2 s :
a/ Cho php dng bin trung gian.
Program Swap;
Var a,b,tam: Integer;
Begin
Write('Nhap vao a= '); Readln(a);
Write('Nhap vao b= '); Readln(b);
tam:=a; {tam ly gi tr ca a}
11
L Cng
a:=b;
{a ly gi tr ca b}
b:=tam; {b ly li gi tr ca tam}
Writeln('a = ',a, b = ,b);
Readln;
End.
b/ Khng c php dng bin trung gian.
Program Swap;
Var a,b: Integer;
Begin
Write('Nhap vao a= '); Readln(a);
Write('Nhap vao b= '); Readln(b);
a:=a+b; {a ly tng gi tr ca a+b}
b:=a-b; {b ly gi tr ca a}
a:=a-b;
{a ly li gi tr ca b}
Writeln('a = ',a, b = ,b);
Readln;
End.
BI TP T GII
Bi tp 2.4:Vit chng trnh nhp vo cc s nguyn: a, b, x, y, ... sau in ra mn hnh kt qu ca
cc biu thc sau:
x y
(a 4)(b 2c 3)
2
r
a/ 2 x
b/
c/ xy , x>0
d/ e |a sin (x) x|
9(a 1)
y
2h
Bi tp 2.5: Vit chng trnh tnh sin tch tam gic theo cng thc sau:
S=
p( p a)( p b)( p c)
vi p =
1
(a+b+c)
2
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 =
A.xi B. y i C
A2 B 2
Bi tp 2.7: Vit chng trnh tch mt s n thnh 2 s a, b sao cho tch P=a*b 2 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;
Var a,b:integer;
s:Word;
Begin
12
L Cng
a:=640; b:=480;
s:=a*b;
writeln(s); readln;
End.
Program Sinhvien2;
Var a,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;
Var a,b:Word;
s: LongInt;
Begin
a:=640; b:=480;
s:=a;
s:=s*b;
s:=s DIV 10;
writeln(s); readln;
End.
Program Sinhvien2;
Var a,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?
13
L Cng
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;
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 1
Dng 2
CASE B OF
CASE B OF
Const 1: S1;
Const 1: S1;
Const 2: S2;
Const 2: S2;
...
...
Const n: Sn;
Const n: Sn;
END;
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 nhC hai dng sau:
Dng tin
FOR <bin m>:=<gi tr Min> TO <gi tr Max> DOS;
Dng li
FOR <bin m>:=<gi tr Max> DOWNTO <gi tr Min> DO S;
S thc hin vng lp FOR:
Dng li
Dng tin
Bin
m:=Max
Bin m:=Min
Bin m<=Max
+
S;
INC(Bin
m);
Bin m>=Max
Thot
S;
DEC(Bin
m);
Thot
14
L Cng
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.
Repeat
While
S
B
+
S;
Thot
Thot
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
15
L Cng
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;
16
L Cng
L Cng
L Cng
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 Then Write(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 aa<>bb Do
Begin
If aa>bb Then aa:=aa-bb Else bb:=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 abc sao cho: abc = a3 + b3 + c3.
tng:
Dng phng php vt cn. Ta bit rng: a c th c gi tr t 19 (v a l s hng trm), b,c c
th c gi tr t 09. Ta s dng 3 vng lp FOR lng nhau duyt qua tt c cc trng hp ca
a,b,c.
19
L Cng
L Cng
Bi tp 3.13: Vit chng trnh nhp vo t bn phm: gi, pht, giy. Cng thm mt s giy cng
c nhp t bn phm. Hy in ra kt qu sau khi cng xong.
Gi :
- Gi s giy c cng thm l: ss. Gn giy:=giy+ss.
- Nu giy60 th: pht:=pht + giy DIV 60 v giy:=giy MOD 60.
- Nu pht60 th: gi:=gi + pht DIV 60 v pht:=pht MOD 60.
Bi tp 3.14: Vit chng trnh tm Max, Min ca 4 s: a, b, c, d.
Bi tp 3.15: Vit chng trnh nhp vo ngy, thng, nm. My s hin ln ngy, thng, nm hm
sau.
Gi :
Bin lun theo thng. Gom thng thnh 3 nhm: thng c 31 ngy (1,3,5,7,8,10,12), thng c 30
ngy (4,6,9,11) v thng 2 (c 28 hoc 29 ngy ty theo nm nhun).
Dng lnh la chn:
CASE thang OF
1,3,5,7,8,10,12: ..........
4,6,9,11: .....................
2: ................................
END;
Bi tp 3.16: Vit chng trnh in ra mn hnh cc gi tr ca bng m ASCII t 0255.
Gi :
Cho bin i chy t 0 255. In ra mn hnh i v CHR(i).
Bi tp 3.17: Vit chng trnh in ra mn hnh cc s nguyn t 1 n 100 sao cho c 10 s th
xung dng.
Gi :
Cho bin i chy t 1 100. In ra mn hnh i v kim tra: nu i MOD 10=0 th WRITELN.
Bi tp 3.18: Vit chng trnh in ra mn hnh bng cu chng.
Gi :
Dng 2 vng lp FOR lng nhau: i l s bng cu chng (2...9), j l s th t trong tng bng
cu chng (1...10).
For i:=2 To 9 Do
For j:=1 To 10 Do Writeln(i,x,j,=,i*j);
Bi tp 3.19: Vit chng trnh tnh cc tng sau:
S0 = n! = 1*2*...*n
{n giai tha}
S1 = 1 + 1/2 + ... + 1/n
S2 = 1 + 1/2! + ... + 1/n!
S3 = 1 + x + x2/2! + x3/3! + ... + xn/n!
S4 = 1 - x + x2/2! - x3/3! + ... + (-1)nxn/n!
S5 = 1 + sin(x) + sin2(x) + ... + sinn(x).
Bi tp 3.20: Vit chng trnh tm li gii cho bi ton sau:
Trong gi va th va g,
21
L Cng
Mt trm ci cng bn ba ci u.
Hi c my g my th?
Bi tp 3.21: Vit chng trnh nhp vo mt s nguyn dng. Hy thng bo ln mn hnh s
c bao nhiu ch s v tng cc ch s ca s .
Gi :
Dng vng lp WHILE. Trong khi N>0 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.22: 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.23: 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 |
22
L Cng
Chng 4
CHNG TRINH CON: TH TC V HM
I. KHI NIM V CHNG TRINH 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 TRINH 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)]:<Kiu d liu>;
[Khai bo Const, Type, Var]
BEGIN
..............
HAM:=<Gi tr>;
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 hm
Dng th tc
- Kt qu ca bi ton tr v 1 gi tr duy - Kt qu ca bi ton khng tr v gi tr
nht (kiu v hng, kiu string hoc kiu no hoc tr v nhiu gi tr hoc tr v
con tr).
kiu d liu c cu trc (Array, Record,
- Li gi CTC cn nm trong cc biu thc File).
tnh ton.
- 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;
23
L Cng
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.
24
L Cng
L Cng
L Cng
Begin
.............
End;
END.
Ch :
Tn ca Unit phi trng vi tn file.
L Cng
L Cng
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.
Var x: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).
29
L Cng
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 n<>1 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);
30
L Cng
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 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.9: Vit hm quy tnh Ckn bit :
Cnn =1 , C0n = 1 , Ckn = Ck-1n-1 + Ckn-1.
Bi tp 4.10: Cho m , n nguyn dng . Lp hm quy tnh:
n 1 , m 0
A(m 1,1) , n 0
A(m,n) =
A( m 1, A(m, n 1)) , m 0 n 0
F(n) =
F (n 1) F (n 2) , n 2
Bi tp 4.12: Vit hm qui tm USCLN ca 2 s.
Bi tp 4.13: 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.14: Vit chng trnh in ra mn hnh cc hon v ca n s nguyn u tin.
Bi tp 4.15: 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.
31
L Cng
Chng 5
D LIU KIU MNG (ARRAY)
I. KHAI BO MNG
C php:
TYPE <Kiu mng> = ARRAY [ch s] OF <Kiu d liu>;
VAR <Bin mng>:<Kiu mng>;
hoc khai bo trc tip:
VAR
<Bin mng> : ARRAY [ch s] OF <Kiu d liu>;
V d:
TYPE Mangnguyen = 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;
Var A: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 Max<A[i] Then Max:=A[i];
32
L Cng
{In kt qu ra mn hnh}
Writeln(Phan tu lon nhat cua mang: , Max);
Readln;
End.
Bi tp 5.2:Vit chng trnh tnh tng bnh phng ca cc s m trong mt mng gm N phn t.
tng:
Duyt qua tt c cc phn t A[i] trong mng: Nu A[i]<0 th cng dn (A[i])2 vo bin S.
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
Var A:Mang;
N,i,S:Integer;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
{Tnh tng}
S:=0;
For i:=1 To N Do
If A[i]<0 Then S:=S+A[i]*A[i];
{In kt qu ra mn hnh}
Writeln(S= , S);
Readln;
End.
Bi tp 5.3: Vit chng trnh nhp vo mt mng gm N s nguyn. Sp xp li mng theo th t
tng dn v in kt qu ra mn hnh.
tng:
Cho bin i chy t 1 n N-1, ng thi cho bin j chy t i+1 n N: Nu A[i]>A[j] th i ch
A[i], A[j].
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
Var A:Mang;
N,i,j,Tam:Integer;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
33
L Cng
{Sp xp}
For i:=1 To N-1 Do
For j:=i+1 To N Do
If A[i]>A[j] Then
Begin
Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam;
End;
{In kt qu ra mn hnh}
Writeln(Ket qua sau khi sap xep:);
For i:=1 To N Do Write(A[i]:5);
Readln;
End.
Bi tp 5.4: Vit chng trnh nhp vo mt mng A gm N s nguyn v nhp thm vo mt s
nguyn X. Hy kim tra xem phn t X c trong mng A hay khng?
tng:
Dng thut ton tm kim tun t. So snh x vi tng phn t ca mng A. Thut ton dng li
khi x=A[i] hoc i>N.
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;
Var A:Mang;
N,i,x:Integer;
Function TimKiem(x, N: Integer; A:Mang):Integer;
Var i:Integer;
Begin
I:=1;
While (I <= N) and (X<>A[I]) do I:=I+1;
If I <= N Then Timkiem:=I Else Timkiem:=0;
End;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
Write(Nhap X=); Readln(x);
{Kt qu tm kim}
If TimKiem(X,N,A)<>0 Then
Writeln(Vi tri cua X trong mang la:, TimKiem(X,N,A))
Else Writeln(X khong co trong mang.);
Readln;
End.
34
L Cng
Bi tp 5.5: Gi s mng A c sp xp theo th t tng dn. Vit hm kim tra xem phn t
X c trong mng A hay khng?
tng:
So snh x vi phn t gia mng A[giua]. Nu x=A[giua] th dng (v tr cn tm l ch s ca
phn t gia ca mng). Ngc li, nu x>A[giua] th tm on sau ca mng [giua+1,cuoi],
ngc li th tm on u ca mng [dau,giua-1].
Sau y l hm ci t cho thut ton ny:
Function TimKiemNhiPhan(X, N: Integer; A: Mang):Integer;
Var dau,cuoi,giua:Integer;
Found:Boolean;
Begin
dau:=1; {im mt tri ca khong tm kim}
cuoi:=N; {im mt phi ca khong tm kim}
Found:=False; {cha tm thy}
While (dau <=cuoi) and (Not Found) Do
Begin
giua:=(dau + cuoi) Div 2;
If X = A[giua] Then Found:=True { tm thy}
Else
If X > A[giua] Then dau:=giua+1
Else cuoi:=giua-1;
End;
If Found Then TimKiemNhiPhan:= giua Else TimKiemNhiPhan:=0;
End;
Bi tp 5.6: Vit chng trnh tm ma trn chuyn v ca ma trn A.
tng:
Dng mng 2 chiu lu tr ma trn. Gi B l ma trn chuyn v ca ma trn A, ta c: Bij = Aji.
Uses Crt;
Type Mang = ARRAY[1..10,1..10] Of Integer;
Var A,B:Mang;
m,n,i,j:Integer;
Begin
{Nhp ma trn}
Write(Nhap s dng m=); Readln(m);
Write(Nhap s ct n=); Readln(n);
For i:=1 To m Do
For j:=1 To n Do
Begin
Write(A[,i,j,]=); Readln(A[i,j]);
End;
{Tm ma trn chuyn v}
For i:=1 To m Do
For j:=1 To n Do B[i,j]:=A[j,i];
{In ma trn chuyn v ra mn hnh}
35
L Cng
For i:=1 To m Do
Begin
For j:=1 To n Do Write(B[i,j]:5);
Writeln;
End;
Readln;
End.
Bi tp 5.7: Cho mt mng 2 chiu A cp mxn gm cc s nguyn v mt s nguyn x. Vit chng
trnh thc hin cc cng vic sau:
a/ m s ln xut hin ca x trong A v v tr ca chng.
b/ Tnh tng cc phn t ln nht ca mi dng.
Uses Crt;
Type Mang = ARRAY[1..10,1..10] Of Integer;
Var A:Mang;
m,n,i,j,x,dem,S,max:Integer;
Begin
{Nhp ma trn}
Write(Nhap s dng m=); Readln(m);
Write(Nhap s ct n=); Readln(n);
For i:=1 To m Do
For j:=1 To n Do
Begin
Write(A[,i,j,]=); Readln(A[i,j]);
End;
{Nhp x}
Write(Nhap x=); Readln(x);
{m s ln xut hin ca x v v tr ca x}
dem:=0;
Writeln(Vi tri cua x trong mang A: );
For i:=1 To m Do
For j:=1 To n Do
If x=A[i,j] Then
Begin
Write(i,j, ; );
dem:=dem+1;
End;
Writeln(So lan xuat hien cua x trong mang A la: ,dem);
{Tnh tng cc phn t ln nht ca mi dng}
S:=0;
For i:=1 To m Do {duyt qua tng dng}
Begin
{Tm phn t ln nht ca dng th i}
36
L Cng
Max:=A[i,1];
For j:=2 To n Do {duyt tng phn t ca dng th i}
If max<A[i,j] Then max:=A[i,j];
{Cng max vo bin S}
S:=S+max;
End;
Writeln(Tong cac phan tu lon nhat cua moi dong la: ,S);
Readln;
End.
Bi tp 5.8: Gii phng trnh bng phng php chia nh phn.
tng:
Gi s cn tm nghim ca phng trnh f(x)=0 trn on [a,b] vi y=f(x) ng bin v n tr
trn on [a,b]. Ta gii nh sau:
Gi m l trung im ca on [a,b]. Nu f(m)*f(a)<0 th gii hn on tm nghim thnh [a,m].
Tng t i vi on [m,b]. Qu trnh ny lp li cho n khi f(m)<, lc ny ta c 1 nghim gn
ng l m.
Gi s f(x) l mt a thc: f(x) = a 0 + a1x + a2x2 + ... + anxn. Lc ny, ta c th dng mng mt
chiu lu tr cc h s ai ca a thc.
Uses Crt;
Type HESO=Array[0..20] Of Real;
Var a:HESO;
n:Byte;
Min,Max,epsilon:Real;
Procedure NhapDaThuc;
Var i:Byte;
Begin
Write('Bac cua da thuc: n= '); Readln(n);
Writeln('Nhap cac he so cua da thuc:');
For i:=0 To n Do
Begin
Write('a[',i,']='); Readln(a[i]);
End;
Writeln('Nhap doan tim nghiem:[a,b]');
Write('a= '); Readln(Min);
Write('b= '); Readln(Max);
Write('Nhap sai so cua phuong trinh: '); Readln(epsilon);
End;
{Tnh gi tr ca a thc}
Function f(x:Real):Real;
Var S,tam:Real;
i:Byte;
Begin
S:=a[0]; tam:=1;
For i:=1 To n Do
Begin
37
L Cng
tam:=tam*x;
S:=S+a[i]*tam;
End;
f:=S;
End;
Procedure TimNghiem(Min,Max:real);
Var m:Real;
Begin
If f(Min)*f(Max)>0 Then Writeln('Phuong trinh vo nghiem.')
Else If abs(f(Min))<epsilon Then Writeln('Nghiem la x=',min:0:2)
Else If abs(f(Max))<epsilon Then Writeln('Nghiem la x=',max:0:2)
Else
Begin
m:=(Min+Max)/2;
If abs(f(m))<=epsilon Then Writeln('Nghiem la x=',m:0:2)
Else If f(Min)*f(m)<0 Then TimNghiem(Min,m)
Else TimNghiem(m,Max);
End;
End;
Begin
NhapDaThuc;
TimNghiem(Min,Max);
Readln;
End.
Bi tp 5.9: Vit chng trnh nhp vo s t nhin N (N l), sau in cc s t 1 n n 2 vo
trong mt bng vung sao cho tng cc hng ngang, hng dc v 2 ng cho u bng nhau (bng
ny c gi l Ma phng).
V d: Vi N=3 v N=5 ta c
Bc
2 7 6
3 16 9 22 15
9 5 1
20 8 21 14 2
4 3 8
Ty 7 25 13 1 19 ng
24 12 5 18 6
11 4 17 10 23
Nam
Phung php:
Xut pht t bn phi ca nm gia. i theo hng ng bc in cc s 1, 2, ...
Khi in s, cn ch mt s nguyn tc sau:
- Nu vt ra pha ngoi bn phi ca bng th quay tr li ct u tin.
- Nu vt ra pha ngoi bn trn ca bng th quay tr li dng cui cng.
- Nu s in k chia ht cho N th s tip theo s c vit trn cng mt hng vi k nhng
cch 1 v pha bn phi.
Uses Crt;
Var A:Array[1..20,1..20] Of Word;
n,i,j,k:Word;
Begin
Write('Nhap N= '); Readln(n);
38
L Cng
Clrscr;
{nh v xut pht}
i:=n DIV 2 + 1;
j:=n DIV 2 + 2;
{in cc s k t 1 n n*n}
For k:=1 To n*n Do
Begin
A[i,j]:=k;
If k MOD n=0 Then j:=j+2
Else Begin
{i theo hng ng bc}
j:=j+1; i:=i-1;
End;
If j>n Then j:=j MOD n;
If i=0 Then i:=n;
End;
{In kt qu ra mn hnh}
For i:=1 To n Do
Begin
For j:=1 To n Do write(a[i,j]:4);
Writeln;
End;
Readln;
End.
Bi tp 5.10: Vit chng trnh nhp vo 2 mng s nguyn A, B i din cho 2 tp hp (khng th
c 2 phn t trng nhau trong mt tp hp). Trong qu trnh nhp, phi kim tra: nu phn t va
nhp vo c trong mng th khng b sung vo mng. In ra mn hnh cc phn t l giao ca 2 tp
hp A, B.
tng:
Duyt qua tt c cc phn t aiA. Nu aiB th vit ai ra mn hnh.
Uses Crt;
Type Mang=ARRAY[1..50] Of Integer;
Var A,B:Mang;
n,m:Byte;
Function KiemTra(x:Integer; n:Byte; A:Mang):Boolean;
Var i:Byte; Found:Boolean;
Begin
Found:=False;
i:=1;
While (i<=n) AND (not Found) Do
If x=A[i] Then Found:=True Else i:=i+1;
KiemTra:=Found;
End;
Procedure NhapMang(Var n:Byte; Var A:Mang);
Var ch:Char;
x:Integer;
Begin
n:=0;
39
L Cng
Repeat
Write('x='); Readln(x);
If not KiemTra(x,n,A) Then
Begin
n:=n+1; A[n]:=x;
End;
Writeln('An ESC de ket thuc nhap!');
ch:=Readkey;
Until ch=#27;
End;
Procedure GiaoAB(n:Byte; A:Mang;m:Byte; B:Mang);
Var i:Byte;
Begin
For i:=1 To n Do
If KiemTra(A[i],m,B) Then Write(A[i]:4);
End;
Begin
Clrscr;
Writeln('Nhap mang A: ');
NhapMang(n,A);
Writeln('Nhap mang B: ');
NhapMang(m,B);
Writeln('Giao cua 2 mang A&B la: ');
GiaoAB(n,A,m,B);
Readln;
End.
Bi tp 5.11: Cho mt mng s nguyn gm n phn t. Tm dy con gm m phn t (m n) sao cho
dy con ny c tng ln nht. (Dy con l dy cc phn t lin tip nhau trong mng).
Uses Crt;
Type Mang=ARRAY[1..50] Of Integer;
Var A:Mang;
n,m,i,j,k:Byte;
S,Max:Integer;
Begin
Write('So phan tu cua mang: n= '); Readln(n);
For i:=1 To n Do
Begin
Write('a[',i,']='); Readln(a[i]);
End;
Write('Nhap so phan tu cua day con: m= '); Readln(m);
k:=1; {V tr phn t u tin ca dy con}
{Gi s m phn t u tin ca mng A l dy con c tng ln nht}
Max:=0;
For i:=1 To m Do Max:=Max+A[i];
{Tm cc dy con khc}
For i:=2 To n-m+1 Do
Begin
{Tnh tng ca dy con th i}
S:=0;
For j:=i To i+m-1 Do S:=S+A[j];
40
L Cng
41
L Cng
BI TP T GII
Bi tp 5.13: Nhp vo mt mng cc s nguyn.
a/ Xp li mng theo th t gim dn.
b/ Nhp vo mt s nguyn t bn phm. Chn s vo mng sao cho mng vn c th t gim
dn. (khng c xp li mng)
Gi :
- Tm v tr cn chn: i.
- y cc phn t t v tr i ti n sang phi 1 v tr.
- Gn: A[i]=x;
Bi tp 5.14: Cho 2 mng s nguyn: Mng A c m phn t, mng B c n phn t.
a/ Sp xp li cc mng theo th t gim dn.
b/ Trn 2 mng li thnh mng C sao cho mng C vn c th t gim dn (Khng c xp li
mng C).
Gi :
- Dng 2 ch s i,j duyt qua cc phn t ca 2 mng A, B v k l ch s cho mng C.
- Trong khi (i<=m) v (j<=n) th:
{Tc l khi ng thi c 2 dy A, B u cha duyt ht}
+ Nu A[i]>B[j] th: C[k]:=A[i]; i:=i+1;
+ Ngc li: C[k]:=B[j]; j:=j+1;
- Nu dy no ht trc th em phn cn li ca dy kia b sung vo cui dy C.
Bi tp 5.15: Vit chng trnh tnh tng v tch 2 ma trn vung A, B cp n.
Gi :
Cng thc tnh tng 2 ma trn: Cij = Aij + Bij
n
A
k 1
ik
* Bkj
Bi tp 5.16: Vit chng trnh nhp vo 2 dy s nguyn (a) n v (b)m, mn. Kim tra xem dy {b}
c phi l dy con ca dy {a} khng?
Bi tp 5.17: Vit chng trnh nhp vo mt dy s nguyn a 1, a2, ..., an. Tm trong dy {a} mt dy
con tng dn di nht (c s phn t ln nht) v in ra mn hnh dy con .
Bi tp 5.18: Cho mng 2 chiu A cp mxn. Vit chng trnh sp xp li mng A theo yu cu sau:
a/ Cc phn t trn mi dng c sp xp theo th t gim dn.
b/ Cc dng c sp xp li theo th t tng dn ca tng cc phn t trn mi dng.
42
L Cng
Chng 6
XU K T (STRING)
I. KHAI BO KIU STRING
TYPE TnKiu = STRING[Max];
VAR
Tn bin : TnKiu;
hoc khai bo bin trc tip:
VAR
Tn bin : STRING[Max];
Trong Max l s k t ti a c th cha trong chui (Max [0,255]). Nu khng c khai bo
[Max] th s k t m mc nh trong chui l 255.
V d:
Type
Hoten = String[30];
St80 = String[80];
Var
Name : Hoten;
Line : St80;
St : String; {St c ti a l 255 k t}
II. TRUY XUT D LIU KIU STRING
- C th s dng cc th tc xut nhp Write, Writeln, Readln truy xut cc bin kiu String.
- truy xut n k t th k ca xu k t, ta s dng c php sau: Tnbin[k].
III. CC PHP TON TRN XU K T
3.1. Php ni xu: +
3.2. Cc php ton quan h: =, <>, <, <=, >, >=.
Ch : Cc php ton quan h c so snh theo th t t in.
IV. CC TH TC V HM V XU K T
4.1. Hm ly chiu di ca xy k t
LENGTH(St : String):Integer;
4.2. Hm COPY(St : String; Pos, Num: Byte): String;
Ly ra mt xu con t trong xu St c di Num k t bt u t v tr Pos .
4.3. Hm POS(SubSt, St :String):Byte;
Kim tra xu con SubSt c nm trong xu St hay khng? Nu xu SubSt nm trong xu St th hm
tr v v tr u tin ca xu con SubSt trong xu St, ngc li hm tr v gi tr 0.
4.4. Th tc DELETE(Var St:String; Pos, Num: Byte);
Xo trong xu St Num k t bt u t v tr Pos.
4.5. Th tc INSERT(SubSt: String; Var St: String; Pos: Byte);
Chn xu SubSt vo xu St bt u ti v tr Pos.
4.6. Th tc STR(Num; Var St:String);
i s nguyn hay thc Num thnh dng xu k t, kt qu lu vo bin St.
4.7. Th tc VAL(St:String; Var Num; Var Code:Integer);
i xu s St thnh s v gn kt qu lu vo bin Num. Nu vic chuyn i thnh cng th bin
Code c gi tr l 0, ngc li bin Code c gi tr khc 0 (v tr ca li).
BI TP MU
Bi tp 6.1: Vit chng trnh nhp vo mt xu k t t bn phm. i xu k t sang ch in hoa
ri in kt qu ra mn hnh.
V d :Xu abcdAbcD s cho ra xu ABCDABCD.
Uses Crt;
Var St:String;
i:Byte;
43
L Cng
Begin
Write(Nhap xau St: ); Readln(St);
For i:=1 to length(St) do St[i]:=Upcase(St[i]);
Write(Xau ket qua: , St);
Readln;
End.
Bi tp 6.2: Vit chng trnh nhp vo mt xu k t t bn phm. i xu k t sang ch
thng ri in kt qu ra mn hnh.
V d :Xu abCdAbcD s cho ra xu abcdabcd.
Uses Crt;
Var St:String;
i:Byte;
Begin
Write(Nhap xau St: ); Readln(St);
For i:=1 to length(St) do
If St[i] IN [A..Z] Then St[i]:=CHR(ORD(St[i])+32);
Write(Xau ket qua: , St);
Readln;
End.
Bi tp 6.3: Vit chng trnh m s k t ch s trong mt xu k t c nhp vo t bn phm.
Uses Crt;
Var St:String;
i,d:Byte;
Begin
Write(Nhap xau St: ); Readln(St);
For i:=1 to length(St) do
If St[i] IN [0..9] Then d:=d+1;
Write(So ky tu chu so trong xau: , d);
Readln;
End.
Bi tp 6.4: Vit chng trnh nhp mt xu t bn phm. In ra xu sau khi xa ht cc k t trng
tha trong xu. (K t trng tha l cc k t trng u xu, cui xu v nu gia xu c 2 k t
trng lin tip nhau th c 1 k t trng tha).
Uses Crt;
Var St:String;
Procedure XoaTrangThua(Var St:String);
Begin
{Xa cc k t trng u xu}
While St[1]=#32 Do Delete(St,1,1);
{Xa cc k t trng cui xu}
While St[Length(St)]=#32 Do Delete(St,Length(St),1);
{Xa cc k t trng gia xu}
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1);
End;
Begin
Write(Nhap xau St: ); Readln(St);
44
L Cng
XoaTrangThua(St);
Write(Xau sau khi xoa cac ky tu trang thua: , St);
Readln;
End.
Bi tp 6.5: Vit chng trnh lit k cc t ca mt xu k t c nhp vo t bn phm, mi t
phi c vit trn mt dng.
Uses Crt;
Var St:String;
Procedure XoaTrangThua(Var St:String);
Begin
{Xa cc k t trng u xu}
While St[1]=#32 Do Delete(St,1,1);
{Xa cc k t trng cui xu}
While St[Length(St)]=#32 Do Delete(St,Length(St),1);
{Xa cc k t trng gia xu}
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1);
End;
Begin
Write(Nhap xau St: ); Readln(St);
XoaTrangThua(St);
St:=St+#32;
Writeln(Liet ke cac tu trong xau: );
While POS(#32,St)<>0 Do
Begin
Writeln(Copy(St,1,POS(#32,St)));
Delete(St,1,POS(#32,St));
End;
Readln;
End.
Bi tp 6.6: Vit chng trnh nhp vo mt xu k t t bn phm. Tm xu o ngc ca xu
ri in kt qu ra mn hnh theo 2 cch: qui v khng qui.
tng:
- Nu xu St c 1 k t th xu o = St.
- Ngc li: Xu o = K t cui + qui(Phn cn li ca xu St).
Uses Crt;
Var St:String;
{Gii thut khng qui}
Function XauDao(St:String):String;
Var S:String;
i:Byte;
Begin
S:=;
For i:=Length(St) DowTo 1 Do S:=S+St[i];
XauDao:=S;
End;
45
L Cng
L Cng
L Cng
L Cng
Readln;
End.
BI TP T GII
Bi tp 6.11: Vit chng trnh nhp vo mt xu k t t bn phm. Tm v in ra mn hnh mt t
c di ln nht trong xu.
Gi :
Tch tng t so snh (xem bi tp 5).
Bi tp 6.12: Vit chng trnh nhp mt xu k t St t bn phm v mt k t ch. In ra mn hnh
xu St sau khi xa ht cc k t ch trong xu .
Gi :
While POS(ch,st)<>0 Do Delete(st,POS(ch,st),1);
Bi tp 6.13: Vit chng trnh nhp mt xu vo t bn phm v thng bo ln mn hnh xu c
phi i xng khng theo 2 cch: qui v khng qui. (V d: abba, abcba l cc xu i xng).
Gi :
- Nu xu Length(st)<=1 th st l xu i xng
- Ngc li:
+ Nu st[1]<>st[Length(st)] th st khng i xng
+ Ngc li: Gi qui vi xu st sau khi b i k t u v k t cui.
Bi tp 6.14: Vit chng trnh o ngc th t cc t trong mt xu c nhp vo t bn phm.
V d: Xu Nguyen Van An s thnh An Van Nguyen.
Gi :
Tch tng t ni vo u xu mi (xem bi tp 5).
Bi tp 6.15: Vit chng trnh nhp vo 2 xu k t s1 v s2. Kim tra xem xu s2 xut hin bao
nhiu ln trong xu s1. (Lu : length(s2)<= length(s1)).
Gi :
Dng hm POS kim tra v th tc DELETE xa bt sau mi ln kim tra.
Bi tp 6.16: Vit chng trnh nhp vo mt dng vn bn, hiu chnh vn bn theo nhng yu cu
sau y v in vn bn sau khi hiu chnh ra mn hnh:
a. Xa tt c cc k t trng tha.
b. Trc cc du cu khng c cc k t trng, sau cc du cu c mt k t trng.
c. u cu in hoa.
Bi tp 6.17: Vit chng trnh thc hin php nhn 2 s nguyn ln.
Gi :
- Vit hm nhn mt s ln vi s c 1 ch s.
- p dng hm tnh tng 2 s ln (xem bi tp 10).
Bi tp 6.18: Vit chng trnh nn v gii nn mt xu k t .
V d: Xu AAAABBBCDDDDDDDEEF sau khi nn s tr thnh 4A3BC7D2EF.
Bi tp 6.19: Vit chng trnh nhp vo h tn y ca cc hc vin mt lp hc (khng qu 50
ngi). Hy sp xp li h tn ca cc hc vin theo th t Alphabet (Nu tn trng nhau th xp
th t theo h lt, nu h lt cng trng nhau th xp th t theo h). In ra mn hnh danh sch ca
lp hc sau khi a sp xp theo th t Alphabet.
Gi :
- Dng mng xu k t lu tr h tn hc vin.
- o ngc cc t ca h tn trc khi sp xp.
49
L Cng
Chng 7
KIU BN GHI (RECORD)
I. KHAI BO D LIU KIU RECORD
TYPE TnKiu = RECORD
Field1 : Kiu1;
Field2 : Kiu2;
...
FieldN: KiuN;
END;
VAR
Bin : TnKiu;
V d:
TYPE HocSinh = Record
Hoten : String[20];
Tuoi : Integer;
DiemTB : real;
End;
VAR HS : HocSinh;
II. XUT NHP D LIU KIU RECORD
Khng th dng cc th tc xut/nhp, cc php ton so snh i vi cc bin kiu record m
ch c th s dng thng qua tng trung ca bin record .
2.1. Truy nhp trc tip: TnbinRecord.Field
2.2. S dng cu lnh WITH
WITH TnbinRecord DO
BEGIN
X l Field1;
X l Field2;
...
X l FieldN;
END;
2.3. Gn bin Record: Ta c th gn 2 bin Record cng kiu vi nhau.
BI TP MU
Bi tp 7.1: Vit chng trnh thc hin php cng 2 s phc.
Uses Crt;
Type Complex = Record
a,b:Real;
End;
Var c1,c2,c3:Complex;
dau:string;
Begin
Writeln(Nhap so phuc c1:);
Write(Phan thuc a = ); Readln(c1.a);
50
L Cng
Write(Phan ao b = ); Readln(c1.b);
Writeln(Nhap so phuc c2:);
Write(Phan thuc a = ); Readln(c2.a);
Write(Phan ao b = ); Readln(c2.b);
{Tnh tng 2 s phc}
c3.a := c1.a + c2.a;
c3.b := c1.b + c2.b;
{In kt qu ra mn hnh}
Writeln(Tong cua 2 so phuc:);
If c1.b>=0 Then dau:=+i else dau:=-i;
Writeln(c1 = , c1.a:0:2, dau, abs(c1.b):0:2); {S phc c1}
If c2.b>=0 Then dau:=+i else dau:=-i;
Writeln(c2 = , c2.a:0:2, dau, abs(c2.b):0:2); {S phc c2}
Writeln(La so phuc:);
If c3.b>=0 Then dau:=+i else dau:=-i;
Writeln(c3 = , c3.a:0:2, dau, abs(c3.b):0:2); {S phc c3}
Readln;
End.
Bi tp 7.2: Vit chng trnh qun l im thi Tt nghip ca sinh vin vi 2 mn thi: C s v
chuyn ngnh. Ni dung cng vic qun l bao gm:
Nhp im cho tng sinh vin.
Uses Crt;
Const Max=200;
Type SinhVien=Record
Hoten:string[30];
DiemCS,DiemCN:Byte;
End;
Var SV:ARRAY[1..Max] Of SinhVien;
n:Byte;
c:Char;
Procedure NhapDanhSach;
Var ch:Char;
Begin
Clrscr;
Writeln('NHAP DANH SACH SINH VIEN');
n:=0;
Repeat
n:=n+1;
With SV[n] Do
Begin
Write('Ho ten: '); Readln(Hoten);
51
L Cng
L Cng
Clrscr;
Writeln('CHUONG TRINH QUAN LY DIEM THI TOT NGHIEP SINH VIEN');
Writeln('1. Nhap danh sach sinh vien');
Writeln('2. In danh sach sinh vien');
Writeln('3. Thong ke so sinh vien thi dau');
Writeln('4. danh sach sinh vien thi lai');
Writeln('<ESC>: Thoat');
c:=Readkey;
Case c Of
'1': NhapDanhSach;
'2': InDanhSach;
'3': ThongKeSVThiDau;
'4': DanhSachSVThilai;
End;
Until c=#27;
End.
Bi tp 7.3: Vit chng trnh nhp vo n nh ca mt a gic li S.
a/ Tnh din tch ca S bit:
1 n
dt(S)= | ( xi yi 1 xi 1 yi ) |
2 i 1
trong : (xi,yi) l ta nh th i ca a gic S.
b/ Nhp vo thm mt im P(x,y). Hy kim tra xem P nm trong hay ngoi a gic S.
tng:
Ni P vi cc nh ca a gic S th ta c n tam gic: Si= PPiPi+1, vi Pn+1=P1.
n
Nu
dt(S ) = dt(S) th P S.
i 1
Uses Crt;
Type Toado=Record
x,y:integer;
end;
Mang=array[0..30] of Toado;
Var n:Byte;
A:Mang;
P:ToaDo;
Procedure NhapDinh(var n:Byte; Var P:Mang);
Var i:Byte;
Begin
Write('Nhap so dinh cua da giac n = '); readln(n);
For i:=1 to n do
Begin
Write('P[',i,'].x = ');readln(P[i].x);
Write('P[',i,'].y = ');readln(P[i].y);
End;
End;
Function DienTichDaGiac(n:Byte;P:Mang):real;
Var i,j:integer;
s:real;
53
L Cng
Begin
s:=0;
for i:= 1 to n do
begin
if i=n then j:=1 else j:=i+1;
s:=s+((P[i].x*P[j].y-P[j].x*P[i].y));
end;
DienTichDaGiac:=abs(s)/2;
end;
Function DienTichTamGiac(A,B,C:ToaDo):real;
Begin
DienTichTamGiac:=abs(A.x*B.y-B.x*A.y+B.x*C.y-C.x*B.y+C.x*A.y-A.x*C.y)/2;
End;
Function KiemTra(PP:ToaDo;n:Byte;P:Mang):Boolean;
Var i,j:integer;
s:real;
begin
s:=0;
For i:=1 to n do
begin
if i=n then j:=1 else j:=i+1;
s:=s+DienTichTamGiac(PP,P[i],P[j]);
end;
If round(s)=round(DienTichDaGiac(n,P)) then KiemTra:=true
else KiemTra:=false;
end;
Begin
NhapDinh(n,A);
Writeln('S=',DienTichDaGiac(n,A):0:2);
Readln;
Writeln('Nhap diem P:');
Write('P.x = ');readln(P.x);
Write('P.y = ');readln(P.y);
If KiemTra(P,n,A) Then Writeln('Diem P nam trong da giac S.')
Else Writeln('Diem P nam ngoai da giac S.');
Readln;
End.
BI TP T GII
Bi tp 7.4: Vit chng trnh nhn hai s phc c1, c2.
Bi tp 7.5: Vit chng trnh qun l im thi hc phn ca sinh vin bao gm cc trng sau: H
tn, im Tin, im ngoi ng, im trung bnh, Xp loi. Thc hin cc cng vic sau:
a/ Nhp vo danh sch sinh vin ca mt lp (khng qu 30 ngi), bao gm: H tn, im Tin,
im Ngoi ng. Tnh im trung bnh v Xp loi cho tng sinh vin.
b/ In ra mn hnh danh sch sinh vin ca lp theo dng sau:
H tn
Trn Vn An
L Th Bo
............................
im Tin
8
7
............
im Ngoi ng
9
5
.....................
im T.Bnh
8.5
6.0
............
Xp loi
Gii
T.Bnh
..............
54
L Cng
c/ In ra mn hnh danh sch nhng sinh vin phi thi li (n mt trong hai mn).
d/ In ra danh sch nhng sinh vin xp loi Gii.
e/ Tm v in ra mn hnh nhng sinh vin c im trung bnh cao nht lp.
f/ Sp xp li danh sch sinh vin theo th t Alphabet.
g/ Sp xp li danh sch sinh vin theo th t gim dn ca im trung bnh.
h/ Vit chc nng tra cu theo tn khng y ca sinh vin. V d: Khi nhp vo tn Phuong
th chng trnh s tm v in ra mn hnh thng tin y ca nhng sinh vin c tn Phuong
(chng hn nh: Pham Anh Phuong, Do Ngoc Phuong, Nguyen Nam Phuong...).
Bi tp 7.6: Vit chng trnh qun l sch th vin gm cc trng sau: M s sch, Nhan , Tn
Tc gi, Nh Xut bn, Nm xut bn.
a/ Nhp vo kho sch ca th vin (gm tt c cc trng).
b/ In ra mn hnh tt c cc cun sch c trong th vin.
c/ Tm mt cun sch c m s c nhp vo t bn phm. Nu tm thy th in ra mn hnh thng
tin y ca cun sch , ngc li th thng bo khng tm thy.
c/ Tm v in ra mn hnh tt c cc cun sch c cng tc gi c nhp vo t bn phm.
d/ Lc ra cc cun sch c xut bn trong cng mt nm no .
e/ Tm v in ra mn hnh cc cun sch m nhan c cha t bt k c nhp vo t bn phm.
55
L Cng
Chng 8
D LIU KIU FILE
I. KHAI BO
Type <Tn kiu File> = File of <Kiu phn t>;
Var
<Tn bin File> : <Tn kiu File>;
hoc khai bo trc tip:
Var
<Tn bin File> : File of <Kiu phn t>;
V d:
Type
L Cng
Repeat
Write(Nhp tn tp: );readln(st);
Assign(F,st);
{$I-} (*Chuyn vic kim tra vo ra cho ngi dng*)
Reset(F);
Ok:=IOResult;
{$I+}
if not OK then writeln(Khng m c );
Until OK;
End;
2.1.4. c d liu t file
C php: Read(F, x);
Chc nng: c mt phn t d liu t file F v tr con tr file v gn cho cc bin x.
2.1.5. Ghi d liu ln file
C php: Write(F, Value);
Chc nng: Ghi gi tr Value vo file F ti v tr hin thi ca con tr file.
2.1.6. Di chuyn con tr file
C php: Seek(F, n);
Chc nng: Di chuyn con tr file n phn t th n (phn t u tin c th t l 0).
2.1.7. ng file
C php: Close(F);
Chc nng: Cp nht mi sa i trn file F v kt thc mi thao tc trn file ny.
2.1.8. Xo file
C php: Erase(F);
Chc nng: Xo file trn a c tn gn c gn cho bin file F (file cn xo l file ang
ng).
2.1.9. i tn file
C php: Rename(F, NewFile);
Chc nng: i tn ca file ang gn cho bin file F thnh tn file mi l NewFile.
2.2. Cc hm chun
2.2.1. Hm tr v v tr con tr file
C php: Filepos(F);
Ch : Con tr u file tng ng v tr 0.
2.2.2. Hm kim tra cui file
C php: EOF(F);
Chc nng: Hm tr v gi tr True nu con tr file ang cui file, ngc li hm tr v gi tr
False.
2.2.3. Hm tr v kch thc ca file
C php: FileSize(F);
Chc nng: Hm tr v s lng phn t c trong file.
III. FILE VN BN (TEXT FILE)
Thnh phn c bn l k t, song c th c cu trc thnh cc dng, mi dng c kt thc
bi CR v LF, CR c m ASCII l 13 v LF c m 10. Cui file s c du kt thc file Ctrl-Z c m
l 26.
Do cc dng c di thay i nn khng tnh trc c v tr ca mt dng trong file. V vy
file dng Text ch c th oc x l mt cch tun t.
3.1. Khai bo
Var <Tn bin file>: Text;
3.2. Cc th tc v hm ch tc ng trn file dng text
3.2.1. Th tc Append
57
L Cng
C php: Append(F);
Chc nng: M file tn ti b sung ni dung vo cui file.
3.2.2. Th tc Readln
C php: Readln(F,x);
Chc nng: c mt dng t v tr con tr file v gn cho bin x. Thc hin xong, con tr file s
chuyn v u dng tip theo. Bin x c th nhn cc kiu: Char, String hoc kiu s.
3.2.3. Th tc Writeln
C php: Writeln(F, x);
Chc nng: Ghi gi tr x vo file v tr con tr file. Kt thc th tc, con tr file s chuyn v
u dng sau.
Ch :
My in c xem l mt file dng text, v bin c m sn trong Unit Printer cho file ny l
LST. V vy in mt dng St ra my in ta c th dng lnh Writeln(LST,St).
3.2.4. Th tc Flush
C php: Flush(F);
Chc nng: Cp nht ni dung ca file c tn gn cho bin file F m khng cn dng th tc
Close v vn c th thao tc trn file.
3.2.5. Th tc SetTextBuf
C php: SetTextBuf(F, x);
Chc nng: Thay i vng nh m dnh cho file dng text vi kch thc cho bi bin x. Mc
nh vng nh ny l 128 byte.
Ch :
Th tc ny phi c gi trc cc th tc m file: Reset, Rewrite, Append.
3.2.6. Hm EOLn
C php: EOLn(F);
Chc nng: Hm tr v gi tr True nu con tr ang cui mt dng, ngc li hm tr v gi tr
False.
Ch :
Cc th tc v hm khng s dng c i vi file dng text: Seek, FilePos, FileSize.
Sau y l cc thao tc c bn khi xut nhp file:
Ghi d liu vo file
c d liu t file
ASSIGN(f,FileName);
ASSIGN(f,FileName);
REWRITE(f);
RESET(f);
...
...
WRITE(f,value);
While Not EOF(f) Do
...
Begin
CLOSE(f);
READ(f,x);
...
End;
...
CLOSE(f);
IV. FILE KHNG NH KIU (FILE VT L)
4.1. Khi nim
File khng nh kiu l file khng xc nh kiu ca mi thnh phn trong file, m c hiu l
mt dy byte, mi phn t c kch thc k byte, quy nh bi ngi lp trnh. File khng nh kiu
tng hp vi mi kiu file.
4.2. Khai bo
Var <Tn bin File>: File;
58
L Cng
L Cng
sv.hoten:= Bhoten;
write('Ngay sinh (dd/mm/yyyy): ');
readln(sv.ngaysinh);
write('Quequan: ');
readln(sv.quequan);
write('Diem trung binh: ');
readln(sv.diemtb);
if sv.diemtb<5 then
sv.xeploai:='D'
else
if sv.diemtb<6.5 then
sv.xeploai:='C'
else
if sv.diemtb<8 then
sv.xeploai:='B'
else
sv.xeploai:='A';
write(f,sv);
end;
inc(i);
until Bhoten = '';
close(f);
end.
Bi tp 8.2: In ton b ni dung ca file SINHVIEN.DAT ra mn hnh, nu c, ngc li th thng
bo File khong ton tai.
Program Vi_du_2;
Type
St20 = String[20];
St10 = String[10];
SinhVien = record
Hoten: St20;
Ngaysinh,Quequan: St10;
DiemTb: real;
Xeploai: Char;
end;
Var
f: File of SinhVien;
Sv: sinhvien;
Bhoten:st20;
i:word;
Begin
assign(f,'Sinhvien.dat');
{$I-}
reset(f);
{$I+}
if IOResult <> 0 then
Begin
writeln('File khong ton tai');
exit;
End;
60
L Cng
L Cng
end;
end;
close(f);
writeln('Danh sach nay gom ',n,' sinh vien');
readln;
end.
Bi tp 8.4: Thng tin v im ca sinh vin c h tn l Bhoten, ngy sinh l Bngay v qu qun l
Bquequan b sai lch. Hy sa im v xp loi ca sinh vin ny vi d liu nhp t bn phm.
Program Vi_du_4;
Type
St20 = String[20];
St10 = String[10];
SinhVien = record
Hoten: St20;
Ngaysinh,Quequan: St10;
DiemTb: real;
Xeploai: Char;
end;
Var
f: File of SinhVien;
filename:String;
Sv: sinhvien;
Bhoten:st20;
Bngaysinh,Bquequan:St10;
Begin
assign(f,'sinhvien.dat');
{$I-}
reset(f);
{$I+}
if IOResult <>0 then
begin
writeln('File khong ton tai');
exit;
end;
write('Ho ten sinh vien: ');
readln(bhoten);
write('Ngay sinh: ');
readln(Bngaysinh);
write('Que quan: ');
readln(bquequan);
while not Eof(f) do
begin
read(f,sv);
with sv do
if (hoten=bhoten) and ((ngaysinh=bngaysinh) and (quequan=bquequan))
then
begin
write('Nhap dtb can sua: ');
readln(diemtb);
if diemtb <5 then
62
L Cng
xeploai:='D'
else
if diemtb <6.5 then
xeploai:='C'
else
if diemtb <8 then
xeploai:='B'
else
xeploai:='A';
n:=filepos(f);
seek(f,n-1);
write(f,sv);
exit;
end;
end;
Close(f);
readln;
End.
Bi tp 8.5: In ra mn hnh ton b ni dung ca mt file vn bn, tn file c c nhp t bn
phm khi thc hin chng trnh.
Program Vidu_5;
Var
f: Text;
filename,St: String;
Begin
write(Nhap ten file: );
readln(filename);
assign(f,filename);
{$I-}
reaset(f);
{$I+}
if IOResult <> 0 then
begin
writeln(File khong ton tai);
halt;
end;
writeln(Noi dung cua file ,filename)
while not Eof(f) do
begin
readln(f,st);
writeln(st);
end;
close(f);
readln;
End.
Bi tp 8.6: m s dng, s k t trng xt hin trong mt file vn bn c trn a, tn file c
nhp t bn phm khi chy chng trnh.
Program Vidu_6;
Var
f: Text;
63
L Cng
filename,St: String;
NLines,NStr: word;
i: byte;
Begin
write(Nhap ten file: );
readln(filename);
assign(f,filename);
reaset(f);
NBl:=0;
NStr:=0;
while not Eof(f) do
begin
readln(f,st);
inc(NStr);
for i:= 1 to length(St) do
if St[i] = #32 then
inc(NBl);
end;
Close(f);
writeln(So dong : ,NStr);
writeln(So ky tu trang: , NBl)
readln;
End.
Bi tp 8.7: Sao chp ni dung ca file SINHVIEN.DAT vo file vn bn SINHVIEN.TXT sao cho
mi sinh vin lu trong mt dng.
Program Vidu_7;
Type
St20 = String[20];
St10 = String[10];
SinhVien = record
Hoten: St20;
Ngaysinh,Quequan: St10;
DiemTb: real;
Xeploai: Char;
end;
Var
f: File of SinhVien;
g:Text;
St:String;
Sv: sinhvien;
Bdiem: String[5];
Begin
assign(f,'sinhvien.dat');
{$I-}
reset(f);
{$I+}
if IOResult <>0 then
begin
writeln('File khong ton tai');
exit;
64
L Cng
end;
rewrite(g);
while not Eof(f) do
begin
read(f, Sv);
with Sv do
begin
Str(diemtb,bdiem:5:2);
St:= hoten+#32+ngaysinh+#32+quequan+#32+Bdiem;
writeln(g,St);
end;
end;
Close(f);
Close(g);
readln;
End.
Bi tp 8.8: Mt ma trn mxn s thc c cha trong mt file vn bn c tn MT.INP gm: dng
u cha hai s m, n; m dng tip theo ln lt cha m hng ca ma trn. Hy vit chng trnh c
d liu t file MT.INP, tnh tng ca tng hng ma trn v ghi ln file vn bn c tn KQ.OUT trong
, dng u cha s m, dng th hai cha m tng ca m hng (m,n<=200).
MT.INP
KQ.OUT
54
5
3 8 1 5
15 4 8 12 12
5 7 8 0
4 3 1 6
2 4 1 7
3 6 8 -5
Program Vidu_8;
Var
f,g: Text;
S:array[byte] of real;
m,n,i,j: byte;
Begin
assign(f,MT.INP);
reset(f);
readln(f,m,n);
fillchar(S,m,0);
for i:= 1 to m do
begin
for j:=1 to n do
begin
read(f,x);
S[i]:=S[i]+x;
end;
readln(f);
end;
close(f);
assign(g,KQ.OUT);
rewrite(g);
writeln(g,m);
65
L Cng
for i:= 1 to m do
write(g,S[i]:0:2,#32);
close(g);
End.
Ch :
Chng trnh trn khng kim tra s tn ti ca file MT.INP, nu cn c th kim tra
tng t cc v d trn.
Tng ca mi hng c lu trong mng mt chiu S (phn t S[i] lu tng ca hng i)
Bi tp 8.9: Cho 3 ma trn s nguyn A = (a j)mxn, B = (bjk)nxp, C = (ckl)pxq, c cha trong file
MATRIX.INP gm: dng u cha 4 s m, n, p, q. m+n+p dng tip theo ln lt cha m hng ma
trn A, n hng ma trn B v p hng ma trn C. Vit chng trnh c d liu t file MATRIX.INP v
tnh ma trn tch D = AxBxC ri ghi ln file vn bn c tn MATRIX.OUT trong : Dng u cha
m, q; m dng tip theo cha m hng ca ma trn D.
n
d il aij * b jk * c kl
j 1 k 1
Program Vidu_9;
Var
f,g: Text;
A, B, C, D:array[1..100,1..100] of integer;
m,n,p,q,i,j,k,l,r,s: byte;
Begin
assign(f,MATRIX.INP);
reset(f);
readln(f,m,n,p,q);
fillchar(D,mxq,0);
for i := 1 to m do
begin
for j:= 1 to n do read(f,A[i,j]);
readln(f);
end;
for j:= 1 to n do
begin
for k:=1 to p do read(f,B[j,k]);
readln(f);
end;
for k:= 1 to p do
begin
for l:=1 to q do read(f,C[k,l]);
readln(f);
end;
close(f);
assign(g,MATRIX.OUT);
rewrite(g);
writeln(g,m,#32,q);
for i:= 1 to m do
begin
for l:=1 to q do
begin
66
L Cng
for j:= 1 to n do
for k:=1 to p do
D[i,l] := D[i,l] + A[i,j]*B[j,k]*C[k,l];
write(g,D[i,l], #32);
end;
writeln(g);
end;
close(g);
readln;
End.
Ch : Cng thc tnh gi tr ca cc phn t ma trn D = (dil)mxq nh sau:
Bi tp 8.10: Mt ma trn mxn s thc c cha trong mt file vn bn c tn DULIEU.INP gm:
dng u cha hai s m, n; m dng tip theo ln lt cha m hng ca ma trn. Hy vit chng
trnh c d liu t file DULIEU.INP, cho bit cc hng ca ma trn c tng phn t trn hng
ln nht. Kt qu ghi ln file vn bn c tn DULIEU.OUT , trong dng u cha gi tr ln nht
ca tng cc phn t trn mt hng, dng th hai cha ch s cc hng t gi tr tng ln nht
(m,n<=100).
Chng hn
DULIEU.INP
DULIEU.OUT
65
34
3 6 8 12 2
256
7 5 6 10 6
82451
35613
10 12 3 1 8
88891
Program Vi_du_10;
Var
f,g: Text;
S:array[1..100] of real;
T: Set of byte;
GTMax: real;
m,n,i,j: byte;
Begin
assign(f,DULIEU.INP);
reset(f);
readln(f,m,n);
fillchar(S,m,0);
for i:= 1 to m do
begin
S:=0;
for j:=1 to n do
begin
read(f,x);
S[i]:=S[i]+x;
end;
readln(f);
end;
close(f);
T:=[1];
67
L Cng
GTMax:=S[1];
for i:= 2 to m do
if S[i] > GtMax then
begin
T:=[i];
GtMax:= S[i];
end
else
if S[i] = GTMax then
T:= T+[i];
assign(g,DULIEU.OUT);
rewrite(g);
writeln(g,GTMax:0:2);
for i:=1 to 100 do
if i in T then
write(g,i,#32);
readln;
End.
Ch :
Chng trnh trn dng mng S lu tng gi tr cc phn t trn mi hng. C th, S[i] l tng
gi tr cc phn t trn hng th i ca ma trn cho.
Tp T , GTMax ln lt l tp cha cc ch s cc hng v gi tr ln nht ca cc phn t trn
mi hng ti thi im ang xt. Xut pht ta xem hng th nht c tng gi tr ln nht. Khi xt
hng th i c cc trng hp sau:
- S[i] > GTMax: S[i] mi l tng ln nht v lc ny ch c hng i t c gi tr ny
- S[i] = GTMax: c thm hng i t gi tr ln nht.
- S[i] < GTMax: khng c g thay i
Bi tp 8.11: Vit chng trnh sao chp ni dung ca mt file cho trc vo file khc, tn ca file
ngun v file ch c nhp t bn phm khi chy chng trnh.
Program Sao_chep_File;
const
bufsize = 200;
var
f,g: file;
File_nguon, file_dich: String;
Buf: array[1..63000] of Byte;
No_read, Temp: integer;
Begin
write(Nhap ten file nguon: );
readln(file_nguon);
assign(f,file_nguon);
reset(f);
write(Nhap ten file dich: );
readln(file_dich);
assign(g,file_dich);
rewrite(g);
Temp:= filesize(f);
while Temp > 0 do
begin
if bufsize < =Temp then
68
L Cng
No_read:= bufsize
else
No_read:= Temp;
BlockRead((f, Buf, No_read);
BlockWrite(g,Buf, No_Read);
Temp:=Temp No_read;
end;
close(g);
End.
BI TP T GII
Bi tp 8.12: Vit chng trnh i tn mt file c trn a.
Gi :
Dng th tc Rename.
Bi tp 8.13: Vit chng trnh xa mt file c trn a.
Gi :
Dng th tc Erase.
Bi tp 8.14: Vit chng trnh ni 2 file vn bn c trn a thnh mt file th 3 vi tn file
c nhp vo t bn phm.
Gi :
- M file 1 v file 2 c d liu, m file 3 ghi d liu.
- Ln lt c tng phn t trong file 1 v 2 lu vo file 3.
- ng c ba file li.
Bi tp 8.15: Vit chng trnh thc hin cc cng vic sau:
1. To ra 2 file s nguyn v sp xp chng theo th t tng dn.
2. Hy ni 2 file li vi nhau thnh file th 3 sao cho file mi vn c th t tng dn.
Gi :
Xem gii thut bi tp 5.15.
Bi tp 8.18: Ti mt ca hng, ngi ta qun l cc hot ng MUA/BN trong nm bng cng
mt loi ho n. Mi ho n l mt bn ghi gm cc trng:
SoHoadon (s ho n); Thang (thng mua/bn); Mahang (m hng mua/bn); Loai (nhn
mt trong hai gi tr M(mua) hoc B (bn)
Nh vy cn c vo trng Loai ta bit l ho n mua hay ho n bn. Vit chng trnh cho
php nhp vo mt dy cc ho n v lu vo file c tn Hoadon.dat, qu trnh nhp dng khi
SoHoadon = 0. Tnh s d trong thng n (n c nhp t bn phm khi thc hin chng trnh) . Bit
rng s d trong mt thng c tnh theo cng thc:
S d = Tng bn - Tng mua,
trong tng bn, tng mua ln lt l tng s tin bn, mua trong thng .
Yu cu:
Khi nhp ch kim tra Loai ch nhn mt trong hai gi tr M hoc B v thng ch nhn gi
tr t 1 n 12.
Khng c s dng mng.
Hng dn: Khai bo file lu cc ho n, mi ho n l mt bn ghi nh sau
Type
Hoadon = record
SoHoadon: word;
Thang: byte;
Mahang: string[5];
Loai: char;
end;
69
L Cng
Var
f: file of hoadon;
Bi tp 8.19: Ngi ta qun l cc u sch ca mt th vin bng mt bn ghi gm c cc trng:
Masach, Tensach, Tentacgia, Nhaxb (nh xut bn), Namxb (nm xut bn), SoLuong. Vit chng
trnh cho php thc hin cc thao tc sau:
a. Nhp vo cc u sch c trong th vin v lu vo file c tn Sach.dat, qu trnh nhp dng
khi m sch a vo l mt xu rng.
b. Duyt v in ra tn cc quyn sch c xut bn sau nm m (m c nhp t bn phm khi
thc hin chng trnh).
c. B sung sch vo th vin theo yu cu: nu sch c th ch tng s lng sch b sung,
ngc li thm mt u sch mi vo file.
Ch :
-
L Cng
Y i A i, j * X j
j 1
L Cng
Chng 9
D LIU KIU CON TR
I. KHAI BO
Type
<Tn kiu con tr> = ^ <Kiu ca bin ng>;
Var
<Tn bin>:<Tn kiu con tr>;
V d 1:
Type
TroNguyen : ^integer;
Var
p, q: TroNguyen;
Sau khai bo ny cc bin p v q l cc bin con tr c th tr n cc bin ng c kiu integer.
Chng trnh s cp pht 4 byte cho mi bin con tr. Cn vng nh ca cc bin ng cha c
cp pht.
V d 2:
Type
TroSv = ^ Sinhvien;
Sinhvien = Record
Hoten: String[20];
Diem: real;
Tiep: TroSv;
End;
Var
p: TroSv;
Trong v d ny, p l bin tr c th tr n cc bn ghi c kiu Sinhvien, trong bn ghi ny li c
trng Tiep l mt bin tr c th tr n bin ng khc cng c kiu Sinhvien.
II. LM VIC VI BIN NG
2.1. Cp pht vng nh
Dng th tc New theo c php:
New(<bin tr>);
Php gn gia hai bin tr c thc hin nu chng c cng kiu. Sau php gn p:=q; cc con tr
p v q cng tr n mt a ch. Do mi thay i ca p^ cng lm thay i q^. Nh vy, cn phn
bit hai php gn p:=q v p^:=q^. Ngoi ra, cc con tr cng kiu c th c so snh vi nhau bng
cc ton t quan h = v <>.
Turbo Pascal cng khai bo sn mt con tr khng tr ti mt bin ng no gi l con tr Nil.
Gi tr con tr Nil l tng hp vi mi kiu con tr. Nil c th c gn cho bin con tr ch ra
rng con tr y hin khng c s dng. Chng ta cng c th s dng Nil trong cc php so snh.
2.2. Gii phng vng nh
Dng th tc Dispose(p);
Trong p l mt bin con tr. Th tc Dispose cho php tr li b nh ng c cp pht
bi th tc New.
III. DANH SCH NG
3.1. Khi nim
Chng ta tng lm quen vi kiu mng, lu danh sch gm nhiu thnh phn c cng kiu.
Mi thnh phn l mt bin tnh v s lng thnh phn ca danh sch l c nh. y chng ta
72
L Cng
cp n mt dng danh sch ng theo ngha: mi thnh phn l mt bin ng v s lng thnh
phn ca danh sch c th thay i. Mi bin ng trong danh sch c gi l mt nt.
3.2. Khai bo
khai bo mt danh sch ng trc ht ta khai bo kiu ca mi nt trong danh sch.
Type <Tr nt> = ^ <Nt>;
<Nt> = Record
Data: DataType;
Next: <Tr Nt>;
End;
Var First: <Tr Nt>;
First l a ch ca nt u tin trong danh sch, da vo trng Tiep ca nt ny ta bt c a
ch ca nt th hai, c nh vy ta bit c a ch ca tt c cc nt trong danh sch. Danh sch
dng ny c gi l danh sch lin kt n.
3.3. Cc thao tc thng gp trn danh sch lin kt n
Trong phn ny chng ta gi thit rng mi nt trong danh sch c hai trng: trng Info (lu ni
dung ca bin ng) v trng Next (lu a ch ca nt tip theo). ta c khai bo danh sch nh sau
Type TroNut = ^Nut;
Nut = Record
Info: data; {data l kiu d liu nh ngha trc}
Next: TroNut;
End;
Var First:TroNut;
3.3.1. Khi to danh sch
First:=Nil;
3.3.2. B sung mt nt vo u danh sch
{1. To ra nt mi}
New(p);
p^.Info:=X;
{2. B sung vo u danh sch}
p^.Next:=First;
First:=p;
3.3.3. B sung mt nt vo cui danh sch
Xut pht danh sch khng c nt no c. Nt mi thm vo s nm cui danh sch. Khi ta cn
hai bin con tr First v Last ln lt tr n cc nt u v cui danh sch.
Procedure Khoitao;
var p: TroNut;
Begin
First:= nil; Last:= nil;
While <cn thm nt mi vo danh sch> do
Begin
New(p);
Readln(p^.Info);
p^.Next:= Nil;
If First = Nil then
First:= p
Else
73
L Cng
Last^.next:= p;
Last:= p;
End;
End;
3.3.4. Duyt danh sch
Duyt danh sch l thm v x l tng nt trong danh sch.
Procedure Duyet;
Var p: Tronut;
Begin
p:= First;
While p <> nil do
Begin
<X l p>;
p:= p^.Next; {duyt qua nt tip theo}
End;
End;
3.3.5. B sung mt nt vo sau nt c tr bi p
Th tc sau thc hin vic b sung mt nt c ni dung x vo sau nt c tr bi p.
Procedure Bosung(p,x);
Var q: TroNut;
Begin
New(q);
q^.info:=x;
if first = nil then
begin
q^.next := nil;
first := q;
end
else
begin
q^.next:= p^.next;
p^.next:= q;
end;
End;
3.3.6. Xo mt nt khi danh sch
Th tc sau thc hin vic xa mt nt tr bi p ra khi danh sch.
Procedure Xoa(p);
Var q: TroNut;
Begin
if First = nil then
exit;
if p = First then
First := First^.next
else
begin
q:= First;
While q^.next <> p do
q:= q^.next;
q^.next:= p^.next;
end;
74
L Cng
Dispose(p);
End;
BI TP MU
Bi tp 9.1: Trong cc bi tp t 9.1 n 9.4, dng danh sch lin kt n lu mt dy s nguyn.
Nt u tin trong danh sch c tr bi First. Cho khai bo mi nt trong danh sch nh sau:
Type TroNut = ^ Nut;
Nfut = Record
GiaTri: Integer;
Tiep: TroNut;
End;
Var First: TroNut;
Vit chng trnh thc hin cc yu cu sau:
a. Nhp dy cc s nguyn v lu vo danh sch c nt u tr bi First, qu trnh nhp dng khi d
liu a vo khng phi l s nguyn.
b. In gi tr cc nt ln hn 0.
Program Vi_du_1;
Type TroNut = ^ Nut;
Nut = Record
GiaTri: Integer;
Tiep: TroNut;
End;
Var First: TroNut;
p: pointer;
Procedure Nhap;
Var
n:integer;
kq:boolean;
last,p: tronut;
begin
first:=nil;
last:= nil;
repeat
write(Nhap gia tri mot nut Ket thuc bang ky tu Q: );
{$I-}
readln(n);
{$I+}
kq:= IOResult=0;
if kq then
begin
new(p);
p^.Giatri:=n;
p^.Tiep:=nil;
if first = nil then
first:= p;
else
last^.Tiep:= p;
last:=p;
end;
75
L Cng
L Cng
Var
p,q: Tronut;
begin
new(p);
p^.Giatri:= m;
if (first = nil) or (first^.Giatri < m ) then
begin
p^.Tiep:=nil;
first:= p;
end
else
begin
q:= first;
while (q^.Tiep <> nil) and ((q^.Tiep)^.Giatri < m) do
q:= q^.Tiep;
p^.Tiep:= q^.tiep;
q^.Tiep:= p;
end;
end;
b. Procedure InitList thc hin vic to danh sch c tnh cht trn bng cch nhp d liu t
bn phm v qu trinh nhp dng khi nhn phm ESC (yu cu: s dng th tc Insert).
Procedure InitList;
Var
m: integer;
Begin
first:= nil;
repeat
write(Nhap gia tri cua mot nut: );
readln(m);
insert(first,m);
until readkey = #27;
end;
c. Procedure List(First: TroNut) in dy gi tr cc nt trong danh sch.
Procedure List(First: Tronut);
Var
p:Tronut;
begin
p:= first;
while p <> nil do
begin
write(p^.Giatri);
p:=p^.Tiep;
end;
end;
d. Procedure DeleteZero( Var First: TroNut) thc hin vic xo tt c cc nt c gi tr 0
trong danh sch.
Procedure DeleteZero(Var First: TroNut);
var
p,q: Tronut;
77
L Cng
begin
p:= first;
while (p <> nil) and (p^.Giatri < 0) do
begin
q:= p;
p:= p^.Tiep;
end;
while (p <> nil) and (p^.Giatri = 0) do
begin
q^.Tiep:= p^.Tiep;
dispose(p);
p:= q^.Tiep;
end;
end;
e. Function TroMax(First: TroNut): TroNut tr v a ch ca nt u tin t gi tr ln nht
(tnh t u danh sch, nu c, ngc li hm tr v gi tr Nil).
Function Tromax(First: TroNut);
var
p.q: Tronut;
m:integer;
begin
if first = nil then
TroMax:= nil
else
begin
p:= first;
m:= p^.Giatri;
q:= p^.Tiep;
while (q <> nil) do
begin
if q^.Giatri > m then
begin
p:= q;
m:= p^.Giatri;
end;
q:= q^.Tiep;
end;
TroMax:=p;
end;
end;
Bi tp 9.4: Gi s danh sch khc rng. Vit cc th tc v hm sau:
a. Function GiaTriMax(First: TroNut): integer tr v gi tr ln nht ca nt c trong danh
sch.
Function GiaTriMax(First: TroNut): integer;
var
m: integer;
p, q: Tronut;
begin
p:= first;
m:= p^.Giatri;
78
L Cng
q:= p^.Tiep;
while q<> nil do
begin
if q^.Giatri > m then
m:=q^.Giatri;
q:= q^.Tiep;
GiaTriMax:= m;
end;
b. Function GiaTriMin(First: TroNut): Integer tr v gi tr nh nht ca nt c trong danh sch.
Function GiaTriMax(First: TroNut): integer;
var
m: integer;
p,q: Tronut;
begin
p:= first;
m:= p^.Giatri;
q:= p^.Tiep;
while q<> nil do
begin
if q^.Giatri < m then
m:=q^.Giatri;
q:= q^.Tiep;
GiaTriMin:= m;
end;
Bi tp 9.5: Cho danh sch lin kt n c nt u tr bi First, c khai bo nh sau
Type
TroNut = ^nut;
Nut = Record
Info: real;
Next: TroNut;
End;
Var
First: Tronut;
Vit cc th tc v hm sau:
a. Function Search(First: TroNut; k: word): TroNut tr v a ch ca nt th k (nu c, ngc
li, hm tr v gi tr Nil).
Function Search(First: TroNut; k: word): Tronut;
Var
d: word;
p: Tronut;
Begin
d:=0;
p:=first;
while (p <> nil) do
begin
inc(d);
if d = k then
break;
p:= p^.next;
end;
79
L Cng
Search:= p;
End;
b. Procedure Delete_K(Var First: TroNut; k: word) thc hin vic xo nt th k trong danh
sch (nu c).
Procedure Delete_K(Var first: Tronut; k:word);
var
d: word;
p,q: Tronut;
begin
d:=1;
p:= first;
while (p<> nil) and (d <k) do
begin
q:= p;
p:= p^.Next;
inc(d);
end;
if p <> nil then
begin
if p = first then
first:= first^.next
else
q^.next:= p^.next;
dispose(p);
end;
end;
c. Procedure DeleteList thc hin vic xo tt c cc nt trong danh sch.
Procedure DeleteList;
var
p: Tronut;
begin
while first <> nil do
begin
p:= first;
first:= first^.next;
dispose(p);
end;
end;
Bi tp 9.6: Cho file vn bn c tn NGUYEN.INP lu cc s nguyn, gia cc s trong file cch
nhau mt k t trng hoc du xung dng. Vit chng trnh thc hin cc yu cu sau:
a. Ly d liu t file NGUYEN.INP v lu vo danh sch lin kt n c nt u tr bi First.
b. Tnh tng gi tr cc nt, tng gi tr cc nt dng, tng gi tr cc nt m, s nt c gi tr m, s
nt c gi tr dng. Cc kt qu tnh c s lu vo file vn bn c tn KETQUA.OUT, dng u
cha 3 gi tri tng, dng th hai cha hai gi tr cn li.
Program Vi_du_6;
type
Contro = ^ Nut;
Nut = Record
info: integer;
80
L Cng
next: Contro;
end;
var
first: Contro;
Procedure Lay_du_lieu;
var
p: Contro;
so: integer;
f: text;
Begin
assign(f, NGUYEN.INP);
reset(f);
first:= nil;
while not Eof(f) do
begin
read(f, so);
new(p);
p^.info:= so;
p^.next:= first;
first:= p;
end;
close(f);
End;
Procedure Tinh_toan;
var
f:text;
p: Contro;
T, T_duong, T_am: longint;
N_duong, N_am: word;
begin
assign(f,KETQUA.OUT);
rewrite(f);
p:= first;
T:= 0;
T_duong: =0;
T_am:= 0;
N_duong:= 0;
N_am:= 0;
while p <> nil do
begin
T:= T + p^.info;
if p^.info > 0 then
begin
T_duong:= T_duong + p^.info;
inc(N_duong);
end;
if p^.info < 0 then
begin
T_am:= T_am + p^.info;
inc(N_am);
81
L Cng
end;
p:= p^.next;
end;
writeln(f, T,#32,T_duong,#32,T_am);
writeln(f,N_duong,#32,N_am);
close(f);
end;
Begin
Lay_du_lieu;
Tinh_toan;
End.
Bi tp 9.7: Ngi ta lu thng tin cc bnh nhn ca bnh vin X trong danh sch lin kt n c
nt u tr bi First, mi bnh nhn tng ng vi mt nt trong danh sch c khai bo nh sau:
Type St20 = String[20];
St5 = String[5];
St2 = String[2];
TroBN = ^BenhNhan;
BenhNhan = Record
MaBN: St5;
{M bnh nhn}
Hoten: St20;
{H tn bnh nhn}
Tuoi: byte;
{Tui}
Tiep: TroBN;
End;
Ch : Hai k t u ca m bnh nhn l m ca khoa iu tr.
Vit cc th tc v hm sau:
a. Procedure BoSungBN(Var First: TroBN; Bma: St5; Bten: St20; Btuoi: byte) b sung bnh
nhn c m l Bma, h tn l Bten, tui l Btuoi vo cui danh sch c nt u tr bi First (Lu
: Kim tra Bma cha c trong danh sch mi b sung).
Procedure BoSungBN(var First: TroBN; Bma: St5; Bten: St20; Btuoi:byte);
var
p,q: TroBN;
begin
p:= first;
while (p <> nil) and (p^.MaBN <> Bma) do
begin
q:= p;
p:= p^.tiep;
end;
if p = nil then
begin
new(p);
p^.MaBn:= Bma;
p^.Hoten:= Bten;
p^.tuoi:= Btuoi;
p^.Tiep:= nil;
if first = nil then
first:= p
else
82
L Cng
q^.tiep:= p;
end;
b. Procedure KhoiTao(Var First: TroBN) nhp d liu cho danh sch c nt u tr bi First, qu
trnh nhp dng khi m bnh nhn a vo l xu rng (Yu cu s dng th tc BoSungBN).
Procedure KhoiTao(Var First: TroBN);
var
bma:St5;
bten: st20;
btuoi: byte;
begin
first:= nil;
repeat
write(Nhap ma benh nhan: );
readln(bma);
if bma <> then
begin
write(Ho ten benh nhan: );
readln(bten);
write(Tuoi: );
readln(btuoi);
BosungBN(first, bma, bten, btuoi);
end;
until bma = ;
end;
c. Function SoBN(First: TroBN; BKhoa: St2): word tr v s lng bnh nhn iu tr ti khoa
c m BKhoa.
Function SoBN(First: TroBN; BKhoa: St2): word;
Var
p: TroBN;
dem:word;
Begin
dem:= 0;
p:= first;
while p <> nil do
begin
if copy(p^.MaBN,1,2) = BKhoa then inc(dem);
p:= p^.tiep;
end;
SoBN:= dem;
End;
d. Procedure LietKe(First: TroBN; n: byte) in thng tin ca cc bnh nhn c tui nh hn hoc
bng n.
Procedure LietKe(First: TroBN; n: byte);
Var
p: TroBN;
Begin
p:= first;
83
L Cng
L Cng
L Cng
e. Procedure XoaDL(Var First: TroDL; Tel: St6) xa i l c s in thoi Tel ra khi danh
sch.
Procedure XoaDL(Var First: TroDL; Tel: St6);
Var
p,q: TroDL;
Begin
p:= first;
while (p <> nil) and (p^.SoDT <> Tel) do
begin
q:= p;
p:= p^.next;
end;
if p <> nil then
begin
if p = first then
first:= first^.next
else
q^.next:= p^.next;
dispose(p);
end;
End;
BI TP T GII
Bi tp 9.9: Dng danh sch mc ni biu din mt a thc Pn(x) = anxn + an-1xn-1 +...+ a0. Trong
, mi s hng ca a thc c xc nh bi 2 thnh phn: h s ai v s m i.
Nh vy, ta c th xy dng cu trc d liu cho a thc nh sau:
TYPE DATHUC = ^SOHANG;
SOHANG = Record
HeSo: Real;
SoMu: Integer;
Next: DATHUC;
End;
Vit chng trnhthc hin cc cng vic sau:
1. Vit th tc nhp vo mt a thc.
2. Vit th tc sp xp li cc s hng ca a thc theo th t s m gim dn.
3. Vit th tc/hm cng 2 a thc.
4. Vit hm tnh gi tr ca a thc theo gi tr X.
Bi tp 9.10: Cho mt file vn bn trong c cha cc t. Cc du phn cch t l: k t trng, du
chm, du phy, du chm phy, du hai chm, du than, du hi. Mi t u bt u bng mt k t
trong tp ['A'..'Z'].
1. Vit th tc cho php c cc t trong file vn bn cho v lu cc t vo mng cc danh
sch mc ni:
TuDien : ARRAY['A'..'Z'] OF DanhSach;
Trong kiu DanhSach c cho nh sau:
TYPE DanhSach = RECORD
Tu : String[10];
Next : DanhSach;
END;
Mi danh sch mc ni trong t in u phi c sp th t (tng dn), v cc t c lu trong
t in phi khc nhau.
86
L Cng
L Cng
88
L Cng
Chng 10
HA
I. MN HINH TRONG CH HA ( GRAPHIC)
Hnh nh trong ch ha c to ra bng cc im nh (Pixel), s im nh ca mn hnh
ha ty thuc vo tng loi CARD mn hnh v MODE qui nh cho mn hnh .
Vic lp trnh trong ch ha cn phi xc nh c loi mn hnh ang s dng v chng
trnh phi vn hnh c trn nhiu loi mn hnh khc nhau.
Ta ca mt im nh trn mn hnh ha cng ging nh trong ch vn bn (TEXT) vi
im nh u tin trn gc tri mn hnh l (0,0), ta nh di phi ty thuc vo phn gii
ca mn hnh, CARD mn hnh v MODE mn hnh.
(0,0)
(MaxX,MaxY)
d dng c ch ha trn mn hnh, ta cn phi c cc File sau:
GRAPH.TPU Cha cc lnh ha
* .BGI
Cha Font mn hnh
* .CHR
Cha Font k t
II. KHI TO V THOT KHI CH HA
2.1. Khi to ch ha
Th tc INITGRAPH(Gd,Gm:Integer; Path:String);
trong :
- Gd: Ch CARD mn hnh.
Thng thng, mt chng trnh phi c chy trn nhiu loi mn hnh khc nhau nn ta c th
khai bo:
Gd = Detect
(=0)
Vi hng Detect, my s t ng tm CARD mn hnh tng ng chy chng trnh.
- Gm: Ch MODE mn hnh.
Trong trng hp khai bo Gd = Detect th khng cn thit phi khai bo Gm v my tnh s t
xc nh loi CARD mn hnh v thit lp ch MODE mn hnh tng ng vi CARD mn hnh
.
- Path: ng dn n ni cha cc file *.BGI. Nu Path = th ta hiu l cc file *.BGI nm
trong th mc hin hnh.
Hm GRAPHRESULT:Integer;
Hm ny tr v kt qu ca vic khi ng ha.
= 0 : Thnh cng.
<>0 : B li.
Tn ca li c xc nh bi hm GRAPHERRORMSG(Er:Integer):String;
Hm ny cho ra mt xu k t thng bo li ca ha xc nh bi i s Er.
* Hng s GrOK = 0: Vic khi ng ha c li.
V d:
Uses Graph;
Procedure ThietLapDoHoa;
var gd,gm,Gr:integer;
Begin
89
L Cng
DetectGraph(Gd,Gm);
InitGraph(gd,gm,'C:\TP\BGI');
Gr:=GraphResult;
If Gr<>GrOK then
Begin
writeln('Loi Do hoa: ',GraphErrorMsg(Gr));
Halt(1);
End;
End;
BEGIN
ThietLapDoHoa;
...
END.
Ch : Ta c th khi to mode ho vi ch 256 mu bng cch s dng hm
InstallUserDriver(Name:String;Ptr:Pointer):Integer; vi iu kin trn a phi c file
SVGA256.BGI.
Procedure ThietLapDoHoa;
var gd,gm,Gr:integer;
Begin
Gd:= InstallUserDriver(SVGA256,NIL);
Gm:=2; {Mode 640x480x256}
InitGraph(gd,gm,'C:\TP\BGI');
End;
2.2. Thot khi ch ha
Th tc CLOSEGRAPH;
Sau y l cu trc chung ca mt chng trnh ha:.
Uses Crt,Graph;
Procedure ThietLapDoHoa;
var gd,gm,Gr:integer;
Begin
DetectGraph(Gd,Gm);
InitGraph(gd,gm,'C:\TP\BGI');
Gr:=GraphResult;
If Gr<>GrOK then
Begin
writeln('Loi Do hoa: ',GraphErrorMsg(Gr));
Halt(1);
End;
End;
BEGIN
ThietLapDoHoa;
...
CloseGraph;
END.
III. TA V CON TR TRN MN HINH HA
3.1. Hm GetMaxX:Integer;
Cho ta ct ln nht ca mn hnh.
3.2. Hm GetMaxY:Integer;
Cho ta dng ln nht ca mn hnh.
3.3. Th tc MOVETO(x,y:Integer);
90
L Cng
L Cng
L Cng
(x2,y2)
C np
Khng c np
Top = TRUE: Hnh hp c np.
Top = FALSE: Hnh hp khng c np.
8.4.V hnh Ellip
Th tc FILLELLIPSE(x,y:Integer; Rx,Ry:Word);
8.5. V hnh qut trn
Th tc PIESLICE(x,y:Integer; g1,g2,R:Word);
V hnh qut trn c tm (x,y), gc u g1, gc cui g2, bn knh R.
8.6. V hnh qut Ellip
th tc SECTOR(x,y:Integer; g1,g2,Rx,Ry:Word);
8.7. Lm loang mu mt vng kn
Th tc FLOODFILL(x,y:Integer; Color:Word);
Trong :
(x,y): im nm trong vng kn.
Color: mu mun t.
8.8. V a gic
i vi mt a gic bt k c N nh, ta phi khai bo N+1 nh v ng gp khc vi ta
im u trng vi ta im cui.
v a gic ta dng th tc: DRAWPOLY(Np:Word; Var P);
trong :
Np: s nh ca a gic + 1
P: cha ta cc nh, l mt mng c Np thnh phn c kiu d liu l PointType c
nh ngha trong Unit Graph nh sau:
TYPE
PointType = Record
x,y: Integer;
End;
IX. CC K THUT TO HINH CHUYN NG
9.1. K thut lt trang mn hnh
CARD mn hnh c nhiu trang, mi trang c nh s 0,1,2,...
v hnh ln mt trang mn hnh, ta dng th tc:
SETACTIVEPAGE(Page:Word);
Trong , Page l s ca trang mn hnh. Th tc ny c t trc khi c lnh v ln mn hnh.
a trang mn hnh ra mn hnh, ta dng th tc:
SETVISUALPAGE(Page:Word);
Page: trang mn hnh mun xem.
93
L Cng
L Cng
Procedure WriteStr(dx,dy:Integer;st:String);
Var i,j:Integer;
Begin
settextstyle(5,0,8);
j:=16;
(* Viet chu bong *)
for i:=0 to 15 do
begin
setcolor(j);
outtextxy(dx+i,dy+i,st);
inc(j);
end;
setcolor(40);
outtextxy(dx+i,dy+i,st);
End;
Begin
gd:=INSTALLUSERDRIVER('SVGA256',NIL);
GM:=4;
initgraph(gd,gm,'c:\bp\BGI');
WriteStr(1,100,' Pham Anh Phuong');
readln;
CloseGraph;
End.
Bi tp 10.2: V cc hnh ch nht ngu nhin trn mn hnh.
Uses Crt,Graph;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;
Function RandColor:Byte;
Begin
RandColor:=Random(MaxColors - 1)+1;
End;
Procedure DeMo;
Var x1,y1,x2,y2:Integer;
Begin
Randomize;
Repeat
x1:=Random(GetMaxX);
y1:=Random(GetMaxY);
x2:=Random(GetMaxX - x1) + x1;
y2:=Random(GetMaxX - y1) + y1;
SetColor(RandColor);
Rectangle(x1,y1,x2,y2);
Delay(500);
Until KeyPressed;
95
L Cng
End;
BEGIN
ThietLapDohoa;
DeMo;
CloseGraph;
END.
Bi tp 10.3: V mt kim ng h quay quanh tm O(x0,y0).
Uses crt,Graph;
Var x0,y0:word;
Alpha,Beta,R:real;
Procedure VeDgt(x0,y0:word; R,Alpha:real);
Begin
Line(x0,y0,x0+Round(R*Cos(Pi*Alpha/180)),
y0-Round(R*Sin(Pi*Alpha/180)));
End;
BEGIN
ThietLapDoHoa;
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
R:=100;
Alpha:=90;
Beta:=6;
SetWriteMode(XORPut);
VeDgt(x0,y0,R,Alpha);
Repeat
VeDgt(x0,y0,R,Alpha);
Alpha:=Alpha - Beta;
VeDgt(x0,y0,R,Alpha);
Delay(250);
Until KeyPressed;
CloseGraph;
END.
Bi tp 10.4: Vit chng trnh to Menu cho php chn v thc hin cc chc nng bng cch di
chuyn mi tn trn cc hp sng, cc th tc thc hin xong quay tr li Menu chnh. Nhn ESC
thot khi chng trnh.
USES crt,graph;
Const mau1 =15;
mau2 =8;
maumn=7;
XTop=200;
YTop=100;
Dy=32;
Dx=250;
Type MANG_MENU=Array[1..20] of string;{dung luu cac dong menu }
MANG_THUTUC=Array[1..20] of Procedure;{dung luu cac thu tuc}
var DongMN:MANG_MENU;
ThuTuc:MANG_THUTUC;
SoDong:byte;
Procedure Wait;
96
L Cng
Var ch:Char;
BEGIN
ch:=ReadKey;
END;
{$F+}
Procedure Modun1;
BEGIN
Line(50,50,200,300);
Wait;
END;
Procedure Modun2;
BEGIN
Circle(200,200,100);
Wait;
END;
Procedure Modun3;
Begin
Ellipse(200,300,0,360,100,150);
Wait;
End;
Procedure Modun4;
BEGIN
Rectangle(50,50,200,300);
Wait;
END;
Procedure Modun5;
BEGIN
OutTextXY(50,50,Chao mung cac ban den voi chuong trinh do hoa);
Wait;
END;
Procedure Modun6;
BEGIN
OutTextXY(50,50,Day la Menu do hoa);
Wait;
END;
Procedure Thoat;
BEGIN
Halt;
END;
{$F-}
Procedure ThietLapDoHoa;
var gd,gm:integer;
Begin
Gd:=0;
InitGraph(gd,gm,'C:\BP\BGI');
End;
Procedure Box(x1,y1,x2,y2:integer; MauVienTren,MauVienduoi,MauNen:byte);
{Ve nut menu}
Var i:Byte;
begin
97
L Cng
setfillstyle(1,MauNen);
bar(x1,y1,x2,y2);
setcolor(MauVienTren);
For i:=0 to 1 do
Begin
moveto(x1-i,y2+i);
lineto(x1-i,y1-i);
lineto(x2+i,y1-i);
End;
setcolor(MauVienDuoi);
For i:=0 to 1 do
Begin
moveto(x2+i,y1-i);
lineto(x2+i,y2+i);
lineto(x1-i,y2+i);
End;
end;
Procedure Ve_menu(Xdau,Ydau,DeltaX,DeltaY:Word;
chon,SoDong:Byte;DongMN:MANG_MENU);
Var i:Byte;
Begin
for i:=1 to SoDong do
begin
if i=chon then
Box(Xdau,Ydau+i*DeltaY+6,Xdau+DeltaX,YDau+i*DeltaY+DeltaY,
mau2,mau1,maumn)
Else
Box(Xdau,Ydau+i*DeltaY+6,Xdau+DeltaX,YDau+i*DeltaY+DeltaY,
mau1,mau2,maumn);
OutTextxy(Xdau+20,Ydau+15+i*DeltaY,DongMN[i]);
end;
End;
Procedure PullDown(x,y,DeltaX,DeltaY:Word;SoDong:Byte;
DongMenu:MANG_MENU;ThuTuc:MANG_THUTUC);
Var sott,LuuSott,Chon,i:Byte;
OK:Boolean;
Function Select(Xdau,Ydau,DeltaX,DeltaY:Word;SoDong:Byte):Byte;
var ch:char; j:Byte;
Begin
While True do
Begin
If KeyPressed then
Begin
ch:=readkey;
case ch of
#13: Begin {ENTER}
select:=Sott;
Exit;
98
L Cng
End;
#72:Begin
LuuSott:=Sott;
Sott:=Sott-1;
if Sott<1 then Sott:=SoDong;
Select:=Sott;
Box(XTop,YTop+LuuSoTT*DeltaY+6,
Xdau+DeltaX,Ydau+LuuSoTT*DeltaY+DeltaY,
Mau1,Mau2,maumn);
Outtextxy(Xdau+20,Ydau+15+LuuSoTT*DeltaY,
DongMN[LuuSoTT]);
Box(Xdau,Ydau+SoTT*DeltaY+6,
Xdau+DeltaX,Ydau+SoTT*DeltaY+DeltaY,
Mau2,Mau1,maumn);
Outtextxy(Xdau+20,Ydau+15+SoTT*DeltaY,
DongMN[SoTT]);
End;
#80:
Begin
LuuSott:=Sott;
Sott:=Sott+1;
if Sott>SoDong then Sott:=1;
Select:=Sott;
Box(Xdau,Ydau+LuuSoTT*DeltaY+6,
Xdau+DeltaX,Ydau+LuuSoTT*DeltaY+DeltaY,
Mau1,Mau2,maumn);
Outtextxy(Xdau+20,Ydau+15+LuuSoTT*DeltaY,
DongMN[LuuSoTT]);
Box(Xdau,Ydau+SoTT*DeltaY+6,
Xdau+DeltaX,Ydau+SoTT*DeltaY+DeltaY,
Mau2,Mau1,maumn);
Outtextxy(Xdau+20,Ydau+15+SoTT*DeltaY,
DongMN[SoTT]);
End;
#27: {ESC}
Begin
OK:=False; Exit;
End;
end; { of case key }
End;
End;
End;
Begin {PullDown}
Sott:=1; OK:=TRUE;
Ve_menu(X,Y,DeltaX,DeltaY,Sott,SoDong,DongMenu);
While OK do { lap khong dieu kien }
Begin
Chon:=select(x,y,DeltaX,DeltaY,SoDong);
For i:=1 to SoDong do
If (i=Chon)and OK Then
99
L Cng
Begin
ClearDevice;
ThuTuc[i];
ClearDevice;
Ve_Menu(X,Y,DeltaX,DeltaY,Sott,SoDong,DongMenu);
End;
end;{ of While }
End;
BEGIN
SoDong:=7;
DongMN[1]:='VE DOAN THANG ';
DongMN[2]:='VE DUONG TRON';
DongMN[3]:='VE ELLIPSE';
DongMN[4]:='VE HINH CHU NHAT';
DongMN[5]:='VIET LOI CHAO';
DongMN[6]:='VIET DONG QUANG CAO';
DongMN[7]:='THOAT KHOI CHUONG TRINH';
ThuTuc[1]:=Modun1;
ThuTuc[2]:=Modun2;
ThuTuc[3]:=Modun3;
ThuTuc[4]:=Modun4;
ThuTuc[5]:=Modun5;
ThuTuc[6]:=Modun6;
ThuTuc[7]:=Thoat;
ThietLapDoHoa;
SetBKcolor(LightBlue);
PullDown(XTop,YTop,DX,DY,SoDong,DongMN,ThuTuc);
CloseGraph;
END.
Bi tp 10.5: V hai hnh
L Cng
End;
Procedure HinhCa2;
Begin
SetColor(15);
PieSlice(Xc,Yc,15,345,R); {Ve bung ca}
SetColor(0);
Circle(Xc + R div 2 ,Yc - R div 2,4); {Mat ca}
End;
{$F-}
Begin
gd:=4;
InitGraph(gd,gm,);
Xc:=GetMaxX div 2;
Yc:=GetMaxY div 2;
R:=50; i:=0;
Hinh[0]:=HinhCa1;
Hinh[1]:=HinhCa2;
page1:=0; page2:=1;
Repeat
SetVisualPage(page1);
SetActivePage(page2);
i:=1-i;
Hinh[i]; Delay(200);
page1:=1-page1;
page2:=1-page2;
Until KeyPressed;
CloseGraph;
End.
Bi tp 10.6: Vit chng trnh to mt dng ch chy ngang qua mn hnh.
Uses crt,graph;
Var gd,gm:integer;
Procedure Run(s:string);
var page:byte;x,y:integer;
Begin
page:=1;
x:=getmaxx;y:=getmaxy div 3;
Settextjustify(0,1);
Setwritemode(xorput);
Setactivepage(page);
Repeat
Outtextxy(x,y,s);
Setvisualpage(page);
page:=not page;
setactivepage(page);
delay(10);
Outtextxy(x+1,y,s);
x:=x-1;
if x<-textwidth(s) then x:=getmaxx;
Until (keypressed) and (readkey=#27);
end;
101
L Cng
Begin
gd:=4;
Initgraph(gd,gm,'C:\BP\bgi');
setcolor(14);
settextstyle(1,0,5);
Run('Pham Anh Phuong');
Closegraph;
End.
Bi tp 10.7: Vit chng trnh v m hnh chic a bay chuyn ng ngu nhin trn mn hnh.
Uses crt; Graph;
Const r = 20; StartX = 100; StartY = 50;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;
Procedure Move(Var x,y:Integer);
Var Step:Integer;
Begin
Step:=Random(2*r);
If Odd(Step) Then Step:=-Step;
x:=x+Step;
Step:=Random(r);
If Odd(Step) Then Step:=-Step;
y:=y+Step;
End;
Procedure VeDiaBay;
Begin
Ellipse(StartX,StartY,0,360,r,(r div 3)+2);
Ellipse(StartX,StartY-4,190,357,r,r div 3);
Line(StartX+7,StartY-6,StartX+10,StartY-12);
Line(StartX-7,StartY-6,StartX-10,StartY-12);
Circle(StartX+10,StartY-12,2);
Circle(StartX-10,StartY-12,2);
End;
Procedure Play;
Var x1,y1,x2,y2,size:Word;
x,y:Integer;
P:Pointer;
Begin
VeDiaBay;
x1:=StartX - (r+1);
y1:=StartY - 14;
x2:=StartX + r + 1;
y2:=StartY + (r div 3) + 3;
(* Lu v xa nh *)
size:=ImageSise(x1,y1,x2,y2);
GetMem(p,size);
102
L Cng
GetImage(x1,y1,x2,y2,P^);
PutImage(x,y,P^,XORPut); { Xa nh }
x:=GetMaxX div 2;
y:=GetMaxY div 2;
(* Di chuyn a bay *)
Repeat
PutImage(x,y,P^,XORPut); { V a bay }
Delay(200);
PutImage(x,y,P^,XORPut); { Xa a bay }
Move(x,y);
Until KeyPressed;
FreeMem(p,size); { Gii phng vng nh }
End;
BEGIN
ThietLapDoHoa;
Play;
CloseGraph;
END.
Bi tp 10.8: Vit chng trnh v a gic u c n nh.
tng:
Khi v mt a gic u N nh, cc nh ny nm trn mt ng trn (O,R) ng thi khong
cch gia hai nh v tm to thnh mt gc nhn khng i c gi tr l 2*Pi/N.
Gi s nh th nht ca a gic nm trn ng thng to vi tm mt gc 00, nh th hai to
mt gc 2*Pi/N v nh th i s to mt gc l 2*Pi(i-1)/N.
Mt cch tng qut, ta to mt mng cha ta cc nh.
Const Max = <Gi tr>;
Type
Mang = ARRAY[1..Max] of PointType;
Var
P:Mang;
Gi s chn P0: PointType l ta tm ca a gic th nh th i ca a gic s to mt gc l:
Angle:=2*Pi*(i-1)/N
Nhng nu a gic ny c nh u tin to mt gc bng A0 th:
Angle:=2*Pi*((i-1)/N + A0/360)
V ta cc nh ny trn mn hnh l:
P[i].x := P0.x + R*cos(Angle)
P[i].y := P0.y - R*sin(Angle)
Ta xy dng th tc t ng lu cc nh ca a gic u vo mng P. Trong : P0 l ta
tm, A0 l gc bt u, R l bn knh, N l s nh (3<N<Max).
Uses Crt,Graph;
Const Max = 10;
Type Mang = Array[1..Max] of PointType;
Var A0,R:real;
N:Byte;
P0:PointType; P:Mang;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;
Procedure TaoDinh(R,A0:real;N:Byte;P0:PointType;Var P:MANG);
103
L Cng
var i:Byte;
Angle:real;
Begin
If (n<3)or(n>=Max) then
Begin
Writeln('Khong tao duoc tap dinh!');
Exit;
End;
For i:=1 to n do
With P[i] do
Begin
Angle:=2*Pi*((i-1)/n + A0/360);
x:=P0.x + Round(R*Cos(Angle));
y:=P0.y - Round(R*Sin(Angle));
End;
P[n+1]:=p[1];
End;
BEGIN
Write(Nhap so dinh cua da giac deu: n= ); Readln(N);
ThietLapDoHoa;
P0.x:=GetMaxX div 2;
P0.y:=GetMaxY div 2;
A0:=90;
R:=GetMaxY div 4;
TaoDinh(R,A0,5,P0,P);
DrawPoly(5,P);
CloseGraph;
END.
Bi tp 10.9: Vit chng trnh v th hm s sau: f(x) = ax2 + bx + c.
tng:
Bc 1: Xc nh on cn v [Min,Max].
Bc 2: t gc ta ln mn hnh (x0,y0).
Chia t l v trn mn hnh theo h s k.
Chn s gia dx trn on cn v.
Bc 3: Chn im xut pht: x = Min, tnh f(x).
i qua ta mn hnh v lm trn:
x1:=x0 + Round(x.k);
y1:=y0 - Round(y.k);
Di chuyn n (x1,y1): MOVETO(x1,y1);
Bc 4: Tng x ln: x:=x + dx;
i qua ta mn hnh v lm trn:
x2:=x0 + Round(x.k);
y2:=y0 - Round(y.k);
V n (x2,y2): LINETO(x2,y2);
Bc 5: Lp li bc 4 cho n khi x > Max th dng.
Uses Crt,Graph;
var a,b,c,Max,Min:real;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
104
L Cng
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;
Function F(x:real):real;
Begin
F:=a*x*x + b*x + c;
End;
Procedure VeDoThi(Min,Max:real);
var x1,y1:integer;
dx,x,k:real;
x0,y0:word;
Begin
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
K:=GetMaxX/30;
dx:=0.001;
x:=Min;
x1:=x0 + Round(x*k);
y1:=y0 - Round(F(x)*k);
Moveto(x1,y1);
While x<Max do
Begin
x:=x+dx;
x1:=x0 + Round(x*k);
y1:=y0 - Round(F(x)*k);
LineTo(x1,y1);
End;
End;
BEGIN
Write(Nhap a= ); Readln(a);
Write(Nhap b= ); Readln(b);
Write(Nhap c= ); Readln(c);
ThietLapDoHoa;
Min:=-10; Max:=10;
{V trc ta }
Line(GetMaxX Div 2,1,GetMaxX Div 2,GetMaxY);
Line(1,GetMaxY Div 2,GetMaxX,GetMaxY Div 2);
VeDoThi(Min,Max);
Repeat Until KeyPressed;
CloseGraph;
END.
Bi tp 10.10: V hnh bng hoa.
tng:
Dng ta cc. Gi s ta c ta cc trong :
Trc cc: Ox
Gc quay:
th ta cc ca mt im trong mt phng l cp (x,y) vi:
x = f().Cos()
y = f().Sin()
Trong : f() l phng trnh do ta qui nh.
105
L Cng
V d:
f() = k.Cos(n) : Hnh bng hoa.
L Cng
R:=15; chuky:=4*Pi;
VeHinh(chuky);
repeat until KeyPressed;
CloseGraph;
END.
Bi tp 10.11: Vit chng trnh v cung Koch. Cc bc pht sinh ca cung Koch c thc hin
trong hnh sau:
(a) K0
(b) K1
(c) K2
Bt u t ng ngang K0 c di bng 1.
to cung bc-1(gi l K 1), chia ng thnh ba phn v thay on gia bng tam gic u
c cnh di 1/3. By gi, ton b ng cong c di 4/3.
Cung bc-2 K2 c c bng cnh dng tip cc tam gic u t 4 on ca K1. V mi on
c di tng 4/3 ln nn ton b cung di ra 4/3 ln.
tng:
T hnh (b) ta thy rng, u tin hng v quay tri 60 0, ri quay phi 1200, cui cng quay tri
0
60 tr v hng ban u.
Uses Crt,Graph;
Var n:Integer;
Goc,length:real;
Procedure ThietLapDohoa;
Var gd,gm:integer;
Begin
gd:=0;
InitGraph(gd,gm,'D:\bp\bgi');
End;
Procedure Koch(dir,len:real;n:integer);
const rads=0.017453293;
Begin
If n>0 Then
Begin
Koch(dir,len/3,n-1);
dir:=dir+60; {Quay phi 60 }
Koch(dir,len/3,n-1);
dir:=dir-120; {Quay tri 120 }
Koch(dir,len/3,n-1);
dir:=dir+60; {Quay phi 60 }
Koch(dir,len/3,n-1);
End
else LineRel(Round(len*cos(rads*dir)),Round(len*sin(rads*dir)));
end;
Begin
ThietLapDoHoa;
107
L Cng
n:=4;
Goc:=180;
Length:=150;
Moveto(300,200);
Koch(Goc,Length,n);
Repeat until keypressed;
Closegraph;
END.
Bi tp 10.12: Vit chng trnh to ra C-cung da trn s tinh ch tng t ca mt on thng theo
hnh sau:
C0
C1
C2
C3
tng:
c dng pht sinh k tip, mi on thng c thay bi mt hnh gy gm 2 on ngn hn
to vi nhau mt gc 900. Cc on mi c di bng 1/ 2 ln on bc trc.
Xt hng v mt u ca on thng. v hnh gy, hng v quay tri 45 0, v mt on, quay
phi 900, v on th hai v sau tr v hng c bng cch quay gc 450.
Uses graph,crt;
Procedure ThietLapDohoa;
Var gd,gm,gr:integer;
Begin
gd:=0;
Initgraph(gd,gm,'D:\bp\bgi');
End;
PROCEDURE VeC_Cung;
Var n:Integer;
Goc,length:real;
Procedure Rong(dir,len:real;n:integer);
const d=0.7071067;
rads=0.017453293;
begin
if n>1 then
begin
dir:=dir+45;
Rong(dir,len*d,n-1);
dir:=dir-90;
Rong(dir,len*d,n-1);
dir:=dir+45;
end
else LineRel(Round(len*cos(rads*dir)),Round(len*sin(rads*dir)));
end;
Begin
108
L Cng
n:=15;
Goc:=0;
Length:=130;
Moveto(200,200);
Rong(Goc,Length,n);
repeat until keypressed;
End;
BEGIN
ThietLapDoHoa;
VeC_Cung;
Closegraph;
END.
C Cung
Bi tp 10.13: Vit chng trnh v tp Mandelbrot - l mt hnh trong mt phng phc. Tp
Mandelbrot c pht sinh theo cng thc sau:
z z2 + c (*)
Tp hp Mandelbrot l tp bao gm nhng s phc c sao cho z2+c vn hu hn vi mi ln lp.
tng:
Ta chn s phc c nh c v tnh biu thc z2+c vi z l s phc bin i.
Nu chn z = 0 th z2+c = c. Thay z vo cng thc (*) ta c c2+c.
Tip tc thay z bng gi tr mi, ta li c: (c2+c)2+c, ...
C nh vy, ta thu c mt dy v hn cc s z.
Uses crt,graph;
Const row=1;
col=1;
Var x1,y1,x2,y2,kx,ky:real;
Gioihan:Byte;
x0,y0:word;
Diemduoi,Diemtren:Integer;
Procedure ThietLapDohoa;
Var gd,gm,gr:integer;
Begin
gd:=0;
Initgraph(gd,gm,'D:\bp\bgi');
End;
Procedure KhoiTao;
Begin
Diemduoi:=GetMaxX;
Diemtren:=GetMaxY;
x1:=-2; y1:=-1.25;
x2:=0.5; y2:=1.25;
kx:=(x2-x1)/diemduoi;
ky:=(y2-y1)/diemtren;
Gioihan:=50;
End;
109
L Cng
Procedure ManDelbrot;
var dong,cot,dem:integer;
P0,Q0,Modun,x,y,Aux:real;
Begin
cot:=0;
While cot<=diemduoi do
Begin
P0:=x1+cot*kx;
dong:=0;
While dong<=(diemtren div 2) do
Begin
Q0:=y1+dong*ky;
x:=0; y:=0;
dem:=1; Modun:=1;
While (dem<=gioihan)and(modun<4) do
Begin
Aux:=x;
x:=x*x-y*y +P0;
y:=2*y*Aux + Q0;
Modun:=x*x + y*y;
dem:=dem+1;
End;
If Modun<4 Then
Begin
PutPixel(cot,dong,3);
PutPixel(cot,diemtren-dong,3);
End;
dong:=dong+row;
End;
cot:=cot+col;
End;
End;
Begin
ThietLapDohoa;
KhoiTao;
Mandelbrot;
readln;
CloseGraph;
End.
Tp MandelBrot
Bi tp 10.14: Vit chng trnh m phng php quay mt tam gic quanh gc ta .
tng:
Sin( )
Cos ( )
L Cng
Uses crt,Graph;
Type ToaDo=Record
x,y:real;
End;
var k,Alpha,goc:real;
P,PP,PPP,P1,P2,P3:ToaDo;
x0,y0:word;
ch:char;
Procedure ThietLapDohoa;
Var gd,gm,gr:integer;
Begin
gd:=0;
Initgraph(gd,gm,'D:\bp\bgi');
End;
Procedure VeTruc;
Begin
Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);
Line(0,GetMaxY div 2,GetMaxX,GetMaxY div 2);
End;
Procedure VeHinh(P1,P2,P3:ToaDo);
Begin
Line(x0+Round(P1.x*k),y0-Round(P1.y*k),
x0+Round(P2.x*k),y0- Round(P2.y*k));
Line(x0+Round(P2.x*k),y0-Round(P2.y*k),
x0+Round(P3.x*k),y0- Round(P3.y*k));
Line(x0+Round(P3.x*k),y0-Round(P3.y*k),
x0+Round(P1.x*k),y0- Round(P1.y*k));
End;
Procedure QuayDiem(P:ToaDo;Alpha:real; var PMoi:ToaDo);
Begin
PMoi.x:=P.x*cos(Alpha)-P.y*sin(Alpha);
PMoi.y:=P.x*sin(Alpha)+P.y*cos(Alpha);
End;
Procedure QuayHinh(P1,P2,P3:ToaDo;Alpha:real;
var P1Moi,P2Moi,P3Moi:ToaDo);
Begin
QuayDiem(P1,Alpha,P1Moi);
QuayDiem(P2,Alpha,P2Moi);
QuayDiem(P3,Alpha,P3Moi);
End;
BEGIN
ThietLapDoHoa;
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
k:=GetMaxX/50;
Vetruc;
P.x:=5; P.y:=3; PP.x:=2; PP.y:=6; PPP.x:=6; PPP.y:=-4;
111
L Cng
c/ y =
Bi tp 10.20: Hnh v cung Koch da trn 3 cnh ca tam gic u nh hnh sau:
112
L Cng
113
L Cng
MC LC
Li m u...................................................................................................................................1
Chng 1: CC THNH PHN C BN CA NGN NG LP TRINH
PASCAL.......................................................................................................................................2
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...........................................................................................................6
II. Khai bo hng........................................................................................................................8
III. Khai bo bin........................................................................................................................8
IV. nh ngha kiu.....................................................................................................................9
V. Biu thc..................................................................................................................................9
VI. Cu lnh.................................................................................................................................9
Bi tp mu................................................................................................................................11
Bi tp t gii............................................................................................................................12
Chng 3: CC CU LNH C CU TRC
I. Lnh r nhnh........................................................................................................................15
II. Lnh lp................................................................................................................................16
Bi tp mu................................................................................................................................17
Bi tp t gii............................................................................................................................24
Chng 4: CHNG TRINH CON: TH TC V HM
I. Khi nim v chng trnh con............................................................................................27
II. Cu trc chung ca mt chng trnh c s dng CTC..................................................27
III. Bin ton cc v bin a phng.....................................................................................28
IV. qui...................................................................................................................................29
V. To th vin (UNIT).............................................................................................................31
Bi tp mu................................................................................................................................33
Bi tp t gii............................................................................................................................36
Chng 5: D LIU KIU MNG
I. Khai bo mng.......................................................................................................................38
II. Xut nhp trn d liu kiu mng.....................................................................................38
Bi tp mu................................................................................................................................38
Bi tp t gii............................................................................................................................50
Chng 6: XU K T
I. Khai bo kiu xu k t........................................................................................................53
II. Truy xut d liu kiu String..............................................................................................53
III. Cc php ton trn xu k t............................................................................................53
IV. Cc th tc v hm v xu k t.......................................................................................53
Bi tp mu................................................................................................................................54
Bi tp t gii............................................................................................................................60
Chng 7: KIU BN GHI
I. Khai bo d liu kiu bn ghi..............................................................................................63
II. Xut nhp d liu kiu bn ghi..........................................................................................63
Bi tp mu................................................................................................................................63
Bi tp t gii............................................................................................................................68
Chng 8: KIU FILE
I. Khai bo ................................................................................................................................70
II. Cc th tc v hm chun...................................................................................................70
III. File vn bn.........................................................................................................................72
114
L Cng
115