You are on page 1of 144

LI M U

Theo khung chng trnh ca B Gio Dc v o To, Ngn ng Lp trnh


Pascal l mt phn quan trng trong hc phn Tin hc i cng thuc cc khi ngnh
Khoa hc T nhin, c bit l ngnh Cng ngh Thng tin.
Nhm p ng yu cu hc tp ca hc sinh, sinh vin bc u lm quen vi cng
vic lp trnh, chng ti bin son b Gio Trnh Bi tp Pascal nhm gip cho
sinh vin c mt ti liu hc tp, rn luyn tt kh nng lp trnh, to nn tng vng
chc cho cc mn hc tip theo trong chng trnh o to C nhn Cng ngh Thng
tin .
Gio trnh bai gm rt nhiu bi tp t n gin n phc tp. Cc bi tp ny c
bin son da trn khung chng trnh ging dy mn Tin hc i cng. Bn cch
, chng ti cng b sung mt s bi tp da trn c s mt s thut ton chun vi
cc cu trc d liu c m rng nhm nng cao k nng, phng php lp trnh cho
sinh vin.
Ni dung ca gio trnh c chia thnh 10 chng. Trong mi chng u c phn
tm tt l thuyt, phn bi tp mu v cui cng l phn bi tp t gii bn c t
mnh kim tra nhng kin thc v kinh nghim hc. Trong phn bi tp mu, i vi
nhng bi tp kh hoc c thut ton phc tp, chng ti thng nu ra tng v gii
thut trc khi vit chng trnh ci t.
Xin chn thnh cm n cc ng nghip Khoa Cng ngh Thng tin Trng i
hc Khoa hc Hu gip , ng gp kin hon chnh ni dung gio trnh ny.
Chng ti hy vng sm nhn c nhng kin ng gp, ph bnh ca bn c v
ni dung, cht lng v hnh thc trnh by gio trnh ny ngy mt hon thin hn.
Hu, Thng 07 Nm 2004
CC TC GI
Gio trnh bi tp Pascal
Chng 1
CC THNH PHN C BN CA
NGN NG LP TRNH PASCAL
Pascal l mt ngn ng lp trnh bc cao do Niklaus Wirth, gio s in ton trng
i hc k thut Zurich (Thy S) xut nm 1970. ng ly tn Pascal k nim nh
ton hc v nh trit hc ngi Php ni ting Blaise Pascal.
1. Cc tp tin cn thit khi lp trnh vi Turbo Pascal
lp trnh c vi Turbo Pascal, ti thiu cn 2 file sau:
TURBO.EXE: Dng son tho v dch chng trnh.
TURBO.TPL: Th vin cha cc n v chun chy vi TURBO.EXE.
Ngoi ra, mun lp trnh ho th phi cn thm cc tp tin:
GRAPH.TPU: Th vin ho.
*.BGI: Cc file iu khin cc loi mn hnh tng ng khi dng ho.
*.CHR: Cc file cha cc font ch ha.
2. Cc bc c bn khi lp mt chng trnh Pascal
Bc 1: Son tho chng trnh.
Bc 2: Dch chng trnh (nhn phm F9), nu c li th phi sa li.
Bc 3: Chy chng trnh (nhn phm Ctrl-F9).
3. Cu trc chung ca mt chng trnh Pascal
{ Phn tiu }
PROGRAM Tn_chng_trnh;
{ Phn khai bo }
USES ......;
CONST .....;
TYPE .......;
VAR ........;
PROCEDURE ............;
FUNCTION ..............;
...............
{ Phn thn chng trnh }
BEGIN
...........
END.
V d 1: Chng trnh Pascal n gin nht
BEGIN
2
Gio trnh bi tp Pascal
Write(Hello World!);
END.
V d 2:
Program Vidu2;
Const PI=3.14;
Var R,S:Real;
Begin
R:=10; {Bn knh ng trn}
S:=R*R*PI; {Din tch hnh trn}
Writeln(Dien tich hinh tron = , S:0:2); { In ra mn hnh }
Readln;
End.
4. Mt s phm chc nng thng dng
F2: Lu chng trnh ang son tho vo a.
F3: M file mi hoc file tn ti trn a son tho.
Alt-F3: ng file ang son tho.
Alt-F5: Xem kt qu chy chng trnh.
F8: Chy tng cu lnh mt trong chng trnh.
Alt-X: Thot khi Turbo Pascal.
Alt-<S th t ca file ang m>: Dch chuyn qua li gia cc file ang m.
F10: Vo h thng Menu ca Pascal.
5. Cc thao tc c bn khi son tho chng trnh
5.1. Cc phm thng dng
Insert: Chuyn qua li gia ch v ch chn.
Home: a con tr v u dng.
End: a con tr v cui dng.
Page Up: a con tr ln mt trang mn hnh.
Page Down: a con tr xung mt trang mn hnh.
Del: Xo k t ngay ti v tr con tr.
Back Space (): Xa k t bn tri con tr.
Ctrl-PgUp: a con tr v u vn bn.
3
Gio trnh bi tp Pascal
Ctrl-PgDn: a con tr v cui vn bn.
Ctrl-Y: Xa dng ti v tr con tr.
5.2. Cc thao tc trn khi vn bn
Chn khi vn bn: Shift + <Cc phm >
Ctrl-KY: Xo khi vn bn ang chn
Ctrl-Insert: a khi vn bn ang chn vo Clipboard
Shift-Insert: Dn khi vn t Clipboard xung v tr con tr.
6. Cc thnh phn c bn ca ngn ng Pascal
6.1. T kha
T kho l cc t m Pascal dnh ring phc v cho mc ch ca n. (Chng hn
nh: BEGIN, END, IF, WHILE,...)
Ch : Vi Turbo Pascal 7.0 tr ln, cc t kho trong chng trnh s c hin th
khc mu vi cc t khc.
6.2. Tn (nh danh)
nh danh l mt dy k t dng t tn cho cc hng, bin, kiu, tn chng
trnh con... Khi t tn, ta phi ch mt s im sau:
Khng c t trng tn vi t kho
K t u tin ca tn khng c bt u bi cc k t c bit hoc ch s.
Khng c t tn vi k t space,cc php ton.
V d: Cc tn vit nh sau l sai
1XYZ Sai v bt u bng ch s.
#LONG Sai v bt u bng k t c bit.
FOR Sai v trng vi t kho.
KY TU Sai v c khong trng (space).
LAP-TRINH Sai v du tr (-) l php ton.
6.3. Du chm phy (;)
Du chm phy c dng ngn cch gia cc cu lnh. Khng nn hiu du
chm phy l du kt thc cu lnh.
V d:
FOR i:=1 TO 10 DO Write(i);
Trong cu lnh trn, lnh Write(i) c thc hin 10 ln. Nu hiu du chm phy l
kt thc cu lnh th lnh Write(i) ch thc hin 1 ln.
4
Gio trnh bi tp Pascal
6.4. Li gii thch
Cc li bn lun, li ch thch c th a vo bt k ch no trong chng trnh
cho ngi c d hiu m khng lm nh hng n cc phn khc trong chng trnh.
Li gii thch c t gia hai du ngoc { v } hoc gia cm du (* v *).
V d:
Var a,b,c:Rea; {Khai bo bin}
Delta := b*b 4*a*c; (* Tnh delta gii phng trnh bc 2 *)
BI TP THC HNH
1. Khi ng Turbo Pascal.
2. Nhp vo on chng trnh sau:
Uses Crt;
Begin
Writeln(***********************************************************);
Writeln(* CHUONG TRINH PASCAL DAU TIEN CUA TOI *);
Writeln(* Oi! Tuyet voi!... *);
Writeln(***********************************************************);
Readln;
End.
3. Dch v chy chng trnh trn.
4. Lu chng trnh vo a vi tn BAI1.PAS.
5. Thot khi Pascal.
6. Khi ng li Turbo Pascal.
7. M file BAI1.PAS.
8. Chn thm vo dng: CLRSCR; vo sau dng BEGIN
9. Dch v chy th chng trnh.
10. Lu chng trnh vo a.
11. Thot khi Pascal.
12. Vit chng trnh in ra mn hnh cc hnh sau:
* ******** *******
*** ** ** ** **
** ** ** ** **
** ** ******** * *
********* ** ** **
** ** ** ** ** **
** ** ******** ********
5
Gio trnh bi tp Pascal
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
-128 127
1 byte
Byte
0 255
1 byte
Integer
-32768 32767
2 byte
Word
0 65535
2 byte
LongInt
-2147483648 2147483647
4 byte
2.2. Cc php ton trn kiu s nguyn
2.2.1. Cc php ton s hc:
+, -, *, / (php chia cho ra kt qu l s thc).
Php chia ly phn nguyn: DIV (V d : 34 DIV 5 = 6).
Php chia ly s d: MOD (V d: 34 MOD 5 = 4).
2.2.2. Cc php ton x l bit:
Trn cc kiu ShortInt, Integer, Byte, Word c cc php ton:
NOT, AND, OR, XOR.
6
Gio trnh bi tp Pascal
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
SHL (php dch tri): a SHL n a 2
n
SHR (php dch phi): a SHR n a DIV 2
n
3. Kiu s thc
3.1. Cc kiu s thc
:
Tn kiu Phm vi Dung lng
Single
1.5 10
-45
3.4 10
+38
4 byte
Real
2.9 10
-39
1.7 10
+38
6 byte
Double
5.0 10
-324
1.7 10
+308
8 byte
Extended
3.4 10
-4932
1.1 10
+4932
10 byte
Ch : Cc kiu s thc Single, Double v Extended yu cu phi s dng chung vi b
ng x l s hoc phi bin dich chng trnh vi ch th {$N+} lin kt b gi lp
s.
3.2. Cc php ton trn kiu s thc: +, -, *, /
Ch : Trn kiu s thc khng tn ti cc php ton DIV v MOD.
3.3. Cc hm s hc s dng cho kiu s nguyn v s thc:
SQR(x): Tr v x
2
SQRT(x): Tr v cn bc hai ca x (x 0)
ABS(x): Tr v |x|
SIN(x): Tr v sin(x) theo radian
COS(x): Tr v cos(x) theo radian
ARCTAN(x): Tr v arctang(x) theo radian
LN(x): Tr v ln(x)
EXP(x): Tr v e
x
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).
7
Gio trnh bi tp Pascal
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:
CONSTMax = 100;
Name = 'Tran Van Hung';
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}
8
Gio trnh bi tp Pascal
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:
CONSTx: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
6.1. Cu lnh n gin
- Cu lnh gn (:=): <Tn bin>:=<Biu thc>;
- Cc lnh xut nhp d liu: READ/READLN, WRITE/WRITELN.
- Li gi hm, th tc.
9
Gio trnh bi tp Pascal
6.2. Cu lnh c cu trc
- Cu lnh ghp: BEGIN ... END;
- Cc cu trc iu khin: IF.., CASE..., FOR..., REPEAT..., WHILE...
6.3. Cc lnh xut nhp d liu
6.3.1. Lnh xut d liu
xut d liu ra mn hnh, ta s dng ba dng sau:
(1) WRITE(<tham s 1> [, <tham s 2>,...]);
(2) WRITELN(<tham s 1> [, <tham s 2>,...]);
(3) WRITELN;
Cc th tc trn c chc nng nh sau:
(1) Sau khi xut gi tr ca cc tham s ra mn hnh th con tr khng xung dng.
(2) Sau khi xut gi tr ca cc tham s ra mn hnh th con tr xung u dng tip
theo.
(3) Xut ra mn hnh mt dng trng.
Cc tham s c th l cc hng, bin, biu thc. Nu c nhiu tham s trong cu lnh
th cc tham s phi c phn cch nhau bi du phy.
Khi s dng lnh WRITE/WRITELN, ta c hai cch vit: khng qui cch v c qui
cch:
- Vit khng qui cch: d liu xut ra s c canh l pha bn tri. Nu d liu l s
thc th s c in ra di dng biu din khoa hc.
V d:
WRITELN(x); WRITE(sin(3*x));
- Vit c qui cch: d liu xut ra s c canh l pha bn phi.
V d:
WRITELN(x:5); WRITE(sin(13*x):5:2);
Cu lnh Kt qu trn mn hnh
Writeln('Hello');
Writeln('Hello':10);
Writeln(500);
Writeln(500:5);
Writeln(123.457)
Writeln(123.45:8:2)
Hello
Hello
500
500
1.2345700000E+02
123.46
6.3.2. Nhp d liu
nhp d liu t bn phm vo cc bin c kiu d liu chun (tr cc bin kiu
BOOLEAN), ta s dng c php sau y:
READLN(<bin 1> [,<bin 2>,...,<bin n>]);
Ch : Khi gp cu lnh READLN; (khng c tham s), chng trnh s dng li ch
ngi s dng nhn phm ENTER mi chy tip.
10
Gio trnh bi tp Pascal
6.4. Cc hm v th tc thng dng trong nhp xut d liu
Hm KEYPRESSED: Hm tr v gi tr TRUE nu nh c mt phm bt k
c nhn, nu khng hm cho gi tr l FALSE.
Hm READKEY: Hm c chc nng c mt k t t b m bn phm.
Th tc GOTOXY(X,Y:Integer): Di chuyn con tr n ct X dng Y.
Th tc CLRSCR: Xo mn hnh v a con tr v gc trn bn tri mn hnh.
Th tc CLREOL: Xa cc k t t v tr con tr n ht dng.
Th tc DELLINE: Xo dng ti v tr con tr v dn cc dng pha di ln.
Th tc TEXTCOLOR(color:Byte): Thit lp mu cho cc k t. Trong
color [0,15].
Th tc TEXTBACKGROUND(color:Byte): Thit lp mu nn cho mn hnh.
BI TP MU
Bi tp 2.1: Vit chng trnh nhp vo di hai cnh ca tam gic v gc gia hai
cnh , sau tnh v in ra mn hnh din tch ca tam gic.
tng:
Cng thc tnh din tch tam gic: S =
) sin( . .
2
1
b a
vi a,b l di 2 cnh v l gc
kp gia 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:
1 1
ln x
n
n n
x x e

Program Tinh_can_bac_n_cua_x;
Var x,S: Real;
n: Word;
Begin
11
Gio trnh bi tp Pascal
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}
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:
a/
x y
x
y
+
+ 2
b/
( )( )
( )
a b c
r
h
a
+ +

4 2 3
2
9 1
c/ x
y
, x>0 d/ e
| sin ( ) | a x x +
2
12
Gio trnh bi tp Pascal
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
2
(a+b+c)
Bi tp 2.6: Vit chng trnh tnh khong cch t mt im I(x
i
,y
i
) n ng thng c
phng trnh D: Ax + By + C = 0.
Gi :
Cng thc tnh khong cch: h =
2 2
. .
B A
C y B x A
i i
+
+ +
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) = x
2
.(n-x).
Hm P t cc i khi P(x) = -3x
2
+ 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
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:
13
Gio trnh bi tp Pascal
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?
14
Gio trnh bi tp Pascal
Chng 3
CC CU LNH C CU TRC
I. CU LNH R NHNH
1.1. Lnh IF
C php:
(1) IF B THEN S;
(2) IF B THEN S1 ELSE S2;
S thc hin:
Ch : Khi s dng cu lnh IF th ng trc t kho ELSE khng c c du chm
phy (;).
1.2. Lnh CASE
C php:
Dng 1 Dng 2
CASE B OF
Const 1: S
1
;
Const 2: S
2
;
...
Const n: S
n
;
END;
CASE B OF
Const 1: S
1
;
Const 2: S
2
;
...
Const n: S
n
;
ELSE S
n+1
;
END;
Trong :
B: Biu thc kiu v hng m c nh kiu nguyn, kiu logic, kiu k t,
kiu lit k.
15
(2)
B
+ -
S1 S2
...
(1)
B
+ -
S
...
Gio trnh bi tp Pascal
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 S
i
tng ng.
- Ngc li:
+ i vi dng 1: Khng lm g c.
+ i vi dng 2: thc hin lnh S
n+1
.
II. CU LNH LP
2.1. Vng lp xc nh
C hai dng sau:
Dng tin
FOR <bin m>:=<gi tr Min> TO <gi tr Max> DO S;
Dng li
FOR <bin m>:=<gi tr Max> DOWNTO <gi tr Min> DO S;
S thc hin vng lp FOR:
Ch : Khi s dng cu lnh lp FOR cn ch cc im sau:
Khng nn tu tin thay i gi tr ca bin m bn trong vng lp FOR v lm
nh vy c th s khng kim sot c bin m.
16
Dng tin
Bin m:=Min
Bin m<=Max
+
-
Thot
S;
INC(Bin m);
Dng li
Bin m:=Max
Bin m>=Max
+
-
Thot
S;
DEC(Bin m);
Gio trnh bi tp Pascal
Gi tr Max v Min trong cu lnh FOR s c xc nh ngay khi vo u vng
lp. Do cho d trong vng lp ta c thay i gi tr ca n th s ln lp cng
khng thay i.
5.3.2. Vng lp khng xc nh
Dng REPEAT Dng WHILE
Repeat
S;
Until B;
While B Do S;
ngha:
Dng REPEAT: Lp li cng vic S cho n khi biu thc B=TRUE th dng.
Dng WHILE: Trong khi biu thc B=TRUE th tip tc thc hin cng vic S.
BI TP MU
Bi tp 3.1: Vit chng trnh nhp vo mt s nguyn v kim tra xem s va nhp l
s chn hay s l.
Uses crt;
Var x:integer;
Begin
Write('Nhap vao mot so nguyen : '); Readln(x);
If x MOD 2=0 Then
Writeln('So vua nhap vao la so chan')
Else
Writeln('So vua nhap vao la so le');
17
Repeat
S
B
+
-
Thot
While
B
+
-
Thot
S;
Gio trnh bi tp Pascal
Readln;
End.
Bi tp 3.2: Vit chng trnh gii phng trnh bc nht ax+b=0
Uses Crt;
Var a,b,x : real;
Begin
Write('a = '); Readln(a);
Write('b = '); Readln(b);
If a = 0 Then { Nu a bng 0 }
If b = 0 Then { Trng hp a = 0 v b = 0 }
Writeln('Phuong trinh co vo so nghiem')
Else { Trng hp a=0 v b 0 }
Writeln('Phuong trinh vo nghiem')
Else { Trng hp a 0 }
Begin
x:= -b/a;
Writeln('Phuong trinh co nghiem la :',x:0:2);
End;
Readln;
End.
Bi tp 3.3: Vit chng trnh nhp vo tui ca mt ngi v cho bit ngi l thiu
nin, thanh nin, trung nin hay lo nin. Bit rng: nu tui nh hn 18 l thiu nin, t
18 n 39 l thanh nin, t 40 n 60 l trung nin v ln hn 60 l lo nin.
Uses crt;
Var tuoi:Byte;
Begin
Write(Nhap vao tuoi cua mot nguoi:'); Readln(tuoi);
Case tuoi Of
1..17: Writeln(Nguoi nay la thieu nien');
18..39:Writeln(Nguoi nay la thanh nien');
40..60:Writeln(Nguoi nay la trung nien');
Else Writeln(Nguoi nay la lao nien');
End;
Readln;
18
Gio trnh bi tp Pascal
End.
Bi tp 3.4: Vit chng trnh tnh tng S = 1+2+...+N

Cch 1: Dng vng lp FOR.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0;
For i:=1 to N do S:=S+i;
Writeln('Ket qua la :',S);
Readln;
End.
Cch 2: Dng vng lp REPEAT.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0; i:=1;
Repeat
S:=S+i;
i:=i+1;
Until i>N;
Writeln('Ket qua la :',S);
Readln;
End.
Cch 3: Dng vng lp WHILE.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
19
Gio trnh bi tp Pascal
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0; i:=1;
While i<=N Do
Begin
S:=S+i;
i:=i+1;
End;
Writeln('Ket qua la :',S);
Readln;
End.
Bi tp 3.5: Vit chng trnh nhp vo N s nguyn t bn phm. Hy tnh v in ra mn
hnh tng ca cc s va c nhp vo.
tng:
Dng phng php cng dn. Cho vng lp FOR chy t 1 ti N, ng vi ln lp th
i, ta nhp vo s nguyn X v ng thi cng dn X vo bin S.
Program Tong;
Uses crt;
Var N,S,i,X : Integer;
Begin
Clrscr; S:=0;
For i:=1 To n Do
Begin
Write('Nhap so nguyen X= '); Readln(X);
S:=S+X;
End;
Writeln(Tong cac so duoc nhap vao la: ,S);
Readln;
End.
Bi tp 3.6: Vit chng trnh nhp vo cc s nguyn cho n khi no gp s 0 th kt
thc. Hy m xem c bao nhiu s chn va c nhp vo.
tng:
Bi ton ny khng bit chnh xc s ln lp nn ta khng th dng vng lp FOR. V
phi nhp vo s nguyn N trc, sau mi kim tra xem N=0? Do ta nn dng
vng lp REPEAT.
20
Gio trnh bi tp Pascal
Program Nhapso;
Uses crt;
Var N,dem : Integer;
Begin
Clrscr; dem:=0;
Repeat
Write('Nhap vao mot so nguyen N= '); Readln(N);
If N MOD 2 = 0 Then dem:=dem+1;
Until N=0;
Writeln(Cac so chan duoc nhap vao la: ,dem);
Readln;
End.
Bi tp 3.7: Vit chng trnh tnh s Pi vi chnh xc Epsilon, bit:
Pi/4 = 1-1/3+1/5-1/7+...
tng:
Ta thy rng, mu s l cc s l c qui lut: 2*i+1 vi i=1,...,n. Do ta dng i lm
bin chy.
V tnh s Pi vi chnh xc Epsilon nn khng bit trc c c th s ln lp,
do ta phi dng vng lp WHILE hoc REPEAT. C ngha l phi lp cho ti khi
t=4/(2*i+1) Epsilon th dng.
Uses Crt;
Const Epsilon=1E-4;
Var Pi,t:real;
i,s:Integer;
Begin
Pi:=4; i:=1; s:=-1;
t:=4/(2*i+1);
While t>Epsilon Do
Begin
Pi:=Pi+s*t;
s:=-s; i:=i+1;
t:=4/(2*i+1);
End;
Writeln('So Pi = ',Pi:0:4);
Readln;
End.
21
Gio trnh bi tp Pascal
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 Elsebb:=bb-aa;
End;
Writeln('USCLN= ',aa);
Writeln('BSCNN= ',a*b DIV aa);
Readln;
End.
Bi tp 3.10: Vit chng trnh tm cc s c 3 ch s abc sao cho: abc = a
3
+ b
3
+ c
3
.
tng:
22
Gio trnh bi tp Pascal
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.
ng vi mi b abc, ta s kim tra: Nu 100.a + 10.b + c = a
3
+ b
3
+ c
3
th in ra b
abc .
Uses crt;
Var a,b,c : Word;
Begin
For a:=1 To 9 Do
For b:=0 To 9 Do
For c:=0 To 9 Do
If (100*a + 10*b + c)=(a*a*a + b*b*b + c*c*c) ThenWriteln(a,b,c);
Readln;
End.
Bi tp 3.11: Vit chng trnh nhp vo s t nhin N ri thng bo ln mn hnh s
c phi l s nguyn t hay khng.
tng:
N l s nguyn t nu N khng c c s no t 2 N div 2. T nh ngha ny ta
a ra gii thut:
- m s c s ca N t 2 N div 2 lu vo bin d.
- Nu d=0 th N l s nguyn t.
Uses crt;
Var N,i,d : Word;
Begin
If N<2 Then Writeln(N, khong phai la so nguyen to)
Else
Begin
{m s c s}
d:=0;
For i:=2 To N div 2 Do
If N MOD i=0 Then d:=d+1;
{Kim tra}
If d=0 Then Writeln(N, la so nguyen to)
Else Writeln(N, khong phai la so nguyen to);
End;
23
Gio trnh bi tp Pascal
Readln;
End.
BI TP T GII
Bi tp 3.12: Vit chng trnh gii phng trnh bc hai: ax
2
+ bx + c = 0, a 0.
Gi :
- Tnh Delta=b*b-4*a*c.
- Bin lun:
Delta<0: Phng trnh v nghim.
Delta=0: Phng trnh c nghim kp: x = -b/(2*a).
Delta>0: Phng trnh c 2 nghim phn bit: x
1,2
= (-bt SQRT(Delta))/(2*a).
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 giy 60 th: pht:=pht + giy DIV 60 v giy:=giy MOD 60.
- Nu pht 60 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).
24
Gio trnh bi tp Pascal
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)
n
x
n
/n!
S5 = 1 + sin(x) + sin
2
(x) + ... + sin
n
(x).
Bi tp 3.20: Vit chng trnh tm li gii cho bi ton sau:
Trong gi va th va g,
Mt trm ci cng bn ba ci u.
Hi c my g my th?
Bi tp 3.21: Vit chng trnh tm li gii cho bi ton sau:
Trm tru trm b c
B li cho trn
Tru ng n nm
Tru nm n ba
Nm tru ngh n mt.
Hi c bao nhiu tru ng, tru nm, tru ngh?
Bi tp 3.22: Vit chng trnh nhp vo cc s nguyn t bn phm cho n khi no
gp s nguyn t th kt thc nhp. Tnh tng cc s chn v trung bnh cng cc s l.
Gi :
25
Gio trnh bi tp Pascal
Dng vng lp REPEAT ... UNTIL NTo; nhp. Trong , NTo l bin kiu
Boolean kim tra s c nhp vo c phi l s nguyn t hay khng.
Bi tp 3.23: 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.24: Vit chng trnh in ra mn hnh tt c cc s nguyn t t 2 n N. Vi N
c nhp t bn phm.
Bi tp 3.25: Vit chng trnh phn tch mt s ra tha s nguyn t. V d: N=100 s
in ra mn hnh:
100 | 2
50 | 2
25 | 5
5 | 5
1 |
Bi tp 3.26: S hon thin l s t nhin c tng cc c ca n (khng k chnh n)
bng chnh n. Vit chng trnh kim tra xem mt s c nhp vo t bn phm c
phi l s hon thin hay khng? V d: 6, 28 l cc s hon thin.
Gi :
- Tnh tng cc c s ca N: t 1 N div 2 lu vo bin S.
- Nu S=N th N l s hon thin.
Bi tp 3.27: Vit chng trnh in ra cc s nguyn t 1 n N
2
theo hnh xon c vi N
c nhp vo t bn phm. V d, vi N=5 ta c:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
26
Gio trnh bi tp Pascal
Chng 4
CHNG TRNH CON: TH TC V HM
I. KHI NIM V CHNG TRNH CON
Chng trnh con (CTC) l mt on chng trnh thc hin trn vn hay mt chc
nng no . Trong Turbo Pascal, c 2 dng CTC:
Th tc (PROCEDURE): Dng thc hin mt hay nhiu nhim v no .
Hm (FUNCTION): Tr v mt gi tr no (c kiu v hng, kiu string
hoc kiu con tr). Hm c th s dng trong cc biu thc.
Ngoi ra, trong Pascal cn cho php cc CTC lng vo nhau.
II. CU TRC CHUNG CA MT CHNG TRNH C S DNG CTC
PROGRAM Tn_chng_trnh;
USES CRT;
CONST ............;
TYPE ............;
VAR ............;
PROCEDURE THUTUC[(Cc tham s)];
[Khai bo Const, Type, Var]
BEGIN
..............
END;
FUNCTION HAM[(Cc tham s)]:<Kiu d liu>;
[Khai bo Const, Type, Var]
BEGIN
..............
HAM:=<Gi tr>;
END;
BEGIN {Chng trnh chnh}
...................
THUTUC[(...)];
...................
A:= HAM[(...)];
...................
END.
27
Gio trnh bi tp Pascal
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
nht (kiu v hng, kiu string hoc
kiu con tr).
- Li gi CTC cn nm trong cc biu thc
tnh ton.
- Kt qu ca bi ton khng tr v gi tr
no hoc tr v nhiu gi tr hoc tr v
kiu d liu c cu trc (Array, Record,
File).
- Li gi CTC khng nm trong cc biu
thc tnh ton.
V d 1: Vit CTC tnh n! = 1.2...n.
tng: V bi ton ny tr v 1 gi tr duy nht nn ta dng hm.
Function GiaiThua(n:Word):Word;
Var P, i:Word;
Begin
P:=1;
For i:=1 To n Do P:=P*i;
GiaiThua:=P;
End;
V d 2: Vit chng trnh con tm im i xng ca im (x,y) qua gc ta .
tng: V bi ton ny tr v ta im i xng (xx,yy) gm 2 gi tr nn ta dng
th tc.
Procedure DoiXung(x,y:Integer; Var xx,yy:Integer);
Begin
xx:=-x;
yy:=-y;
End;
CH : Trong 2 v d trn:
n, x, y c gi l tham tr (khng c t kha var ng trc) v sau khi ra
khi CTC gi tr ca n khng b thay i.
xx, yy c gi l tham bin (c t kha var ng trc) v sau khi ra khi
CTC gi tr ca n b thay i.
III. BIN TON CC V BIN A PHNG
Bin ton cc: l cc bin c khai bo trong chng trnh chnh. Cc bin ny
c tc dng mi ni trong ton b chng trnh.
Bin a phng: l cc bin c khai bo trong cc CTC. Cc bin ny ch c
tc dng trong phm vi CTC m thi.
Ch : Trong mt CTC, nu bin ton cc trng tn vi bin a phng th bin a
phng c u tin hn.
28
Gio trnh bi tp Pascal
V d:
Program KhaoSatBien;
Var a,b: Integer; {bin ton cc}
Procedure ThuBien;
Var a: Integer;{bin a phng}
Begin
a:=10;
Writeln(A=,a,B=,b);
End;
Begin
a:=50;
b:=200;
ThuBien; {A=10 B=200}
Writeln(A=,a,B=,b); {A=50 B=200}
End.
IV. QUI
4.1. Khi nim qui
Trong mt chng trnh, mt CTC c th gi mt CTC khc vo lm vic. Nu nh
CTC gi li chnh n th gi l s qui.
4.2. Phng php thit k gii thut qui
Tham s ha bi ton
Tm trng hp suy bin.
Phn tch cc trng hp chung (a v cc bi ton cng loi nhng nh hn).
V d: Vit hm qui tnh n! = 1.2...n.
Tham s ha: n! = Factorial(n);
Factorial(0) = 1 (trng hp suy bin)
Factorial(n) = n*Factorial(n-1) (trng hp chung)
Function Factorial(N:integer):Longint;
Begin
If N=0 Then Factorial:=1
Else Factorial:=N*factorial(N-1); { li gi qui }
End;
4.3. Gii thut quay lui
Bi ton:
Hy xy dng cc b gi tr gm n thnh phn (x
1
,...,x
n
) t mt tp hu hn cho trc
sao cho cc b tha mn yu cu B cho trc no .
29
Gio trnh bi tp Pascal
Phng php chung
Gi s xc nh c k-1 phn t u tin ca dy: x
1
,...,x
k-1
. Ta cn xc nh phn
t th k. Phn t ny c xc nh theo cch sau:
- Gi s T
k
: tp tt c cc gi tr m phn t x
k
c th nhn c. V tp T
k
hu hn
nn ta c th t n
k
l s phn t ca T
k
theo mt th t no , tc l ta c th thnh lp
mt nh x 1-1 t tp T
k
ln tp {1, 2, ..., n
k
}.
- Xt j{1, 2, ..., n
k
}. Ta ni rng j chp nhn c nu ta c th b sung phn t
th j trong T
k
vi t cch l phn t x
k
vo trong dy x
1
,...,x
k-1
c dy x
1
,...,x
k
.
- Nu k=n: B (x
1
,...,x
k
) tha mn yu cu B, do b ny c thu nhn.
- Nu k<n: Ta thc hin tip qu trnh trn, tc l phi b sung tip cc phn t x
k+1
vo dy x
1
,...,x
k
.
Sau y l th tc qui cho gii thut quay lui:
Procedure THU(k:Integer);
Var j:Integer;
Begin
For j:=1 To n
k
Do
If <j chp nhn c> Then
Begin
<Xc nh x
k
theo j>;
If k=n Then <Ghi nhn mt b gi tr>
Else THU(k+1); {Quay lui}
End;
End;
V d: Lit k cc dy nh phn c di n.
Program DayNhiPhan;
Var b:Array[1..20] Of 0..1; {Dy nh phn c di ti a l 20}
n:Byte;
Procedure InKetQua;
Var i:Byte;
Begin
For i:=1 To n Do Write(b[i]);
Writeln;
End;
Procedure THU(k:Byte);
Var j:Byte;
30
Gio trnh bi tp Pascal
Begin
For j:=0 To 1 Do {Tp gi tr ca dy nh phn}
Begin
b[k]:= j;
If k=n Then InKetQua
Else THU(k+1); {Quay lui}
End;
End;
Begin
Write(n = ); Readln(n);
THU(1);
Readln;
End.
V. TO TH VIN (UNIT)
5.1. Cu trc ca mt Unit
UNIT <Tn Unit>; {phi trng vi tn file}
INTERFACE
USES ............;
CONST..........;
TYPE ............;
VAR .............;
Procedure <Tn th tc>[(Cc tham s)];
Function <Tn hm>[(Cc tham s)]:<Kiu hm>;
IMPLEMENTATION
Procedure <Tn th tc>[(Cc tham s)];
[Cc khai bo]
Begin
.............
End;
Function <Tn hm>[(Cc tham s)]:<Kiu hm>;
[Cc khai bo]
Begin
.............
End;
END.
31
Gio trnh bi tp Pascal
Ch :
Tn ca Unit phi trng vi tn file.
Ch c nhng chng trnh con c khai bo phn INTERFACE mi s dng
c cc chng trnh khc.
Cc th tc v hm c khai bo phn INTERFACE th bt buc phi c
trong phn IMPLEMENTATION.
5.2. V d minh ha
To Unit MYTOOL lu file MYTOOL.PAS.
UNIT MYTOOL;
INTERFACE
USES CRT;
VAR m:Integer;
Procedure WriteXY(x,y:Integer; St:String);
Function UCLN(a,b:Integer):Integer;
Function NGUYENTO(n:Word):Word;
IMPLEMENTATION
Procedure WriteXY(x,y:Integer; St:String);
Var i:Byte;
Begin
Gotoxy(x,y); Write(St);
End;
Function UCLN(a,b:Integer):Integer;
Begin
While a<>b Do
Begin
If a>b Then a:=a-b Else b:=b-a;
End;
UCLN:=a;
End;
Function NGUYENTO(n:Word):Boolean;
Var d,i:Word;
Begin
d:=0;
For i:=2 To n DIV 2 Do
If n MOD i=0 Then d:=d+1;
NGUYENTO:=d=0;
32
Gio trnh bi tp Pascal
End;
END.
By gi, ta c th vit mt chng trnh c s dng Unit MYTOOL.
Uses Crt, MyTool;
Var a,b:Integer;
Begin
CLRSCR;
Write(10,5,CHUONG TRINH MINH HOA);
Write(Nhap a = ); Readln(a);
Write(Nhap b = ); Readln(b);
Writeln(UCLN cua ,a, va ,b, la:,UCLN(a,b));
Write(Nhap m = ); Readln(m);
If NGUYENTO(m) Then
Writeln(m, la so nguyen to!)
Else
Writeln(m, khong phai la so nguyen to!)
Readln;
End.
BI TP MU
Bi tp 4.1: Vit hm tm Max ca 2 s thc x,y.
Var a,b:Real;
Function Max(x,y:Real):Real;
Begin
If x>y Then Max:=x Else Max:=y;
End;
Begin
Write(Nhap a=); Readln(a);
Write(Nhap b=); Readln(b);
Writeln(So lon nhat trong 2 so la: , Max(a,b));
Readln;
End.
Bi tp 4.2: Vit hm LOWCASE( c:char):char; i ch ci hoa c thnh ch thng.
tng:
33
Gio trnh bi tp Pascal
Trong bng m ASCII, s th t ca ch ci hoa nh hn s th t ca ch ci
thng l 32. V vy ta c th dng 2 hm CHR v ORD chuyn i.
Uses crt;
Var ch:Char;
Function LOWCASE(c:Char):Char;
Begin
If c IN [A..Z] Then LOWCASE:=CHR(ORD(c)+32)
Else LOWCASE:=c;
End;
Begin
Write(Nhap k tu ch=); Readln(ch);
Writeln(Ky tu hoa la: , LOWCASE(ch));
Readln;
End.
Bi tp 4.3: Vit th tc hon i hai ga tr x,y cho nhau.
Var a,b:Real;
Function Swap(Var x,y:Real);
Var Tam:Real;
Begin
Tam:=x; x:=y; y:=Tam;
End;
Begin
Write(Nhap a=); Readln(a);
Write(Nhap b=); Readln(b);
Swap(a,b);
Writeln(Cac so sau khi hoan doi: a=, a:0:2, b=,b:0:2);
Readln;
End.
Bi tp 4.4: Vit hm XMU(x:Real;n:Byte):Real; tnh gi tr x
n
.
Var x:Real;
n:Byte;
Function XMU(x:Real;n:Byte):Real;
Var i:Byte; S:Rea;
Begin
34
Gio trnh bi tp Pascal
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), 1 (#191), ] (#217).
Uses crt;
Procedure Khung(x1,y1,x2,y2:Integer);
Var i,j:Integer;
Begin
Gotoxy(x1,y1); Write(#218); {V }
Gotoxy(x1,y2); Write(#192); {V }
{V 2 vin ngang ca khung}
For i:=x1+1 To x2-1 do
Begin
Gotoxy(i,y1); Write(#196);
Gotoxy(i,y2); Write(#196);
End;
Gotoxy(x2,y1); Write(#191); {V 1 }
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);
35
Gio trnh bi tp Pascal
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);
Readln;
End.
BI TP T GII
Bi tp 4.7: Vit 2 hm tm Max , min ca 3 s thc.
Bi tp 4.8: Vit hm PERFECT(n:Word):Boolean; kim tra s nguyn n c phi l
s hon thin hay khng?
Bi tp 4.9: Vit th tc FILL(x1,y1,x2,y2:Integer; ch:Char); t mt vng mn hnh
hnh ch nht c nh trn bn tri l (x1,y1) v nh di bn phi l (x2,y2) bng cc
k t ch.
Bi tp 4.10: Vit hm tm BSCNN ca 2 s nguyn a,b c khai bo nh sau:
Function BSCNN (a,b:word ):word ;
36
Gio trnh bi tp Pascal
Bi tp 4.11: Vit th tc ti gin phn s a/b , vi a, b l 2 s nguyn.
Bi tp 4.12: Vit cc hm quy tnh:
S
1
= 1+2 +3+......+n ;
S
2
= 1+1/2 + .....+ 1/n ;
S
3
= 1-1/2 +......+ (-1)
n+1
1/n
S
4
= 1 + sin(x) + sin
2
(x) + ......+ sin
n
(x)
Bi tp 4.13: Vit hm quy tnh C
k
n
bit :
C
n
n
=1 , C
0
n
= 1 , C
k
n
= C
k-1
n-1
+ C
k
n-1
.
Bi tp 4.14: Cho m , n nguyn dng . Lp hm quy tnh:
A(m,n) =

'

> >

+
0 0 , )) 1 , ( , 1 (
0 , ) 1 , 1 (
0 , 1
n m n m A m A
n m A
m n
Bi tp 4.15: Lp hm qui tnh dy Fibonaci:
F(n) =
1 1 2
1 2 2
,
( ) ( ) ,
n n
F n F n n

+ >

'

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


Bi tp 4.17: Vit th tc in ra mn hnh s o ngc ca mt s nguyn cho trc
theo 2 cch: qui v khng qui.
Bi tp 4.18: Vit chng trnh in ra mn hnh cc hon v ca n s nguyn u tin.
Bi tp 4.19: Xy dng mt Unit SOHOC.PAS cha cc th tc v hm thc hin cc
chc nng sau:
- Gii phng trnh bc nht.
- Gii phng trnh bc hai.
- Tm Max/Min ca 2 s a,b.
- Tm USCLN v BSCNN ca 2 s nguyn a,b.
- Kim tra s nguyn dng n c phi l s nguyn t hay khng?
- Kim tra s nguyn dng n c phi l s hon thin hay khng?
- i mt s nguyn dng n sang dng nh phn.
- In ra mn hnh bng cu chng t 2 9.
Sau , t vit cc chng trnh c s dng Unit SOHOC va c xy dng trn.
37
Gio trnh bi tp Pascal
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;
38
Gio trnh bi tp Pascal
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];
{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];
39
Gio trnh bi tp Pascal
{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;
{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:
40
Gio trnh bi tp Pascal
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.
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:
41
Gio trnh bi tp Pascal
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:
B
ij
= A
ji
.
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}
42
Gio trnh bi tp Pascal
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;
43
Gio trnh bi tp Pascal
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}
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
+ a
1
x + a
2
x
2
+ ... + a
n
x
n
.
Lc ny, ta c th dng
mng mt chiu lu tr cc h s a
i
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;
44
Gio trnh bi tp Pascal
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
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
45
Gio trnh bi tp Pascal
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);
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;
46
Gio trnh bi tp Pascal
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 a
i
A. Nu a
i
B th vit a
i
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;
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);
47
Gio trnh bi tp Pascal
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}
48
Gio trnh bi tp Pascal
S:=0;
For j:=i To i+m-1 Do S:=S+A[j];
If S>Max Then {Nu dy con tm c c tng ln hn dy con trc}
Begin
Max:=S; {Thay tng mi}
k:=i; {Thay v tr u tin ca dy con mi}
End;
End;
Writeln('Day con co tong lon nhat la:');
For i:=k To k+m-1 Do Write(A[i]:5);
Readln;
End.
Bi tp 5.12: Vit chng trnh in ra mn hnh tam gic Pascal. V d, vi n=4 s in ra
hnh sau:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
tng:
Tam gic Pascal c to ra theo qui lut sau:
+ Mi dng u bt u v kt thc bi s 1.
+ Phn t th j dng k nhn c bng cch cng 2 phn t th j-1 v j dng th
k-1.
Uses Crt;
Var Dong:Array[0..20] Of Byte;
n,i,j:Byte;
Begin
Write('n= '); Readln(n);
Clrscr;
Dong[0]:=1;
Writeln(Dong[0]:4);
{Khoi tao gia tri cua dong}
For i:=1 To n Do Dong[i]:=0;
{Voi moi dong i}
For i:=1 To n Do
Begin
For j:=i DownTo 1 Do
49
Gio trnh bi tp Pascal
Begin
Dong[j]:=Dong[j-1]+Dong[j];
Write(Dong[j]:4);
End;
Writeln(Dong[i]:4);
End;
Readln;
End.
BI TP T GII
Bi tp 5.13: Vit chng trnh nhp vo mt dy s thc v s thc x. Thng bo ln
mn hnh s lng cc phn t trong dy bng x v v tr ca chng.
Bi tp 5.14: 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.15: 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.16: Vit chng trnh tnh tng v tch 2 ma trn vung A, B cp n.
Gi :
Cng thc tnh tng 2 ma trn: C
ij
= A
ij
+ B
ij
50
Gio trnh bi tp Pascal
Cng thc tnh tch 2 ma trn: C
ij
=

n
k
kj ik
B A
1
*
Bi tp 5.17: Vit chng trnh nhp vo 2 dy s nguyn (a)
n
v (b)
m
, m n. Kim tra
xem dy {b} c phi l dy con ca dy {a} khng?
Bi tp 5.18: Vit chng trnh nhp vo mt dy s nguyn a
1
, a
2
, ..., a
n
. 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.19: 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.
Bi tp 5.20: Vit chng trnh kim tra mt dy cc s nguyn c nhp vo t
bn phm c sp theo th t tng dn hay cha theo 2 cch: qui v khng
qui.
Gi :
- Nu dy c 1 phn t th dy tng dn.
- Ngc li:
+ Nu A[n-1]>A[n] th dy khng tng dn.
+ Ngc li: Gi qui vi dy c n-1 phn t (b bt i phn t cui cng).
Bi tp 5.21: 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.
a/ In ra mn hnh hp ca 2 tp hp A, B.
b/ In ra mn hnh hiu ca 2 tp hp A, B.
Gi :
a/ - In ra mn hnh tt c cc phn t ca tp hp A.
- Duyt qua tt c cc phn t b
i
B. Nu b
i
A th in b
i
ra mn hnh.
b/ Duyt qua tt c cc phn t a
i
A. Nu a
i
B th in a
i
ra mn hnh.
Bi tp 5.22: Vit chng trnh tnh tng ca 2 a thc h(x) = f(x) + g(x). Trong , mi
a thc c dng: a
0
+ a
1
x + a
2
x
2
+ ... + a
n
x
n
.
Gi :
Dng cc mng A, B, C lu tr cc h s a
i
ca cc a thc f(x), g(x) v h(x).
51
Gio trnh bi tp Pascal
Bi tp 5.23: Vit chng trnh tm cc phng n t 8 qun hu trn bn c vua
(ma trn 8x8) sao cho cc qun hu khng n c nhau.
Gi :
Dng gii thut quay lui.
Bi tp 5.24: Vit chng trnh tnh nh thc ca ma trn vung cp n.
Gi :
Dng cch tnh nh thc theo phng php GAUSE.
52
Gio trnh bi tp Pascal
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);
53
Gio trnh bi tp Pascal
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;
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;
54
Gio trnh bi tp Pascal
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);
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);
55
Gio trnh bi tp Pascal
{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;
{Gii thut qui}
Function DeQui(St:String):String;
Begin
If Length(St)<=1 Then DeQui:=St
Else DeQui:=St[Length(St)] + DeQui(Copy(St,1,Length(St)-1));
End;
56
Gio trnh bi tp Pascal
Begin
Write(Nhap xau St: ); Readln(St);
Write(Xau dao nguoc: , XauDao(St));
Readln;
End.
Bi tp 6.7: Vit chng trnh nhp vo mt xu k t t bn phm. Thng bo ln mn
hnh cc ch ci c trong xu v s lng ca chng ( Khng phn bit ch hoa hay ch
thng).
tng:
- Dng mt mng dem vi ch s l cc ch ci lu tr s lng ca cc ch ci
trong xu.
- Duyt qua tt c cc k t ca xu St: Nu k t l ch ci th tng bin mng
dem[St[i]] ln 1 n v.
Uses Crt;
Var St:String;
dem: Array[A..Z] Of Byte;
i:Byte;
ch:Char;
Begin
Write(Nhap xau St: ); Readln(St);
{Khi to mng}
For ch:=A To Z Do dem[ch]:=0;
{Duyt xu}
For i:=1 To Length(St) Do
If Upcase(St[i]) IN [A..Z] Then Inc(dem[Upcase(St[i])]);
{Lit k cc k t ra mn hnh}
For ch:=A To Z Do
If dem[ch]>0 Then Writeln(ch, : ,dem[ch]);
Readln;
End.
Bi tp 6.8: Vit chng trnh xa cc k t ch s trong mt xu k t c nhp vo
t bn phm.
Uses Crt;
Var St:String;
57
Gio trnh bi tp Pascal
{Hm POSNUM kim tra xem trong xu St c k t ch s hay khng? Nu c,
hm tr v v tr u tin ca k t ch s, ngc li hm tr v gi tr 0}
Function POSNUM(St:String):Byte;
Var OK:Boolean;
i:Byte;
Begin
OK:=False;
i:=1;
While (i<=Length(St)) AND (Not OK) Do
If St[i] IN [0..9] Then OK:=True
Else i:=i+1;
If OK Then POSNUM:=i Else POSNUM:=0;
End;
Begin
Write(Nhap xau St: ); Readln(St);
While POSNUM(St)<>0 Do Delete(St,POSNUM(St),1);
Write(Xau sau khi xoa: ,St);
Readln;
End.
Bi tp 6.9: Vit chng trnh m ho v gii m mt xu k t bng cch o ngc
cc bit ca tng k t trong xu.
Uses crt;
Var st:string;
{Hm o bit k t c}
Function DaoBit(c:char):char;
Var n,i,s,bitcuoi,Mask:byte;
Begin
{i k t sang s}
n:=ORD(c);
{s: kt qu o bit, Mask: mt n dng bt bit th i}
s:=0;
Mask:=128;
For i:=1 To 8 Do {duyt qua 8 bit ca n}
Begin
{Ly bit cui cng ca n: bit cc phi}
bitcuoi:=n AND 1;
n:=n shr 1; {loi b bit cui cng: n:=n DIV 2}
{Bt bit th i ln: t tri sang phi}
if bitcuoi=1 then s:=s OR Mask;
58
Gio trnh bi tp Pascal
Mask:=Mask shr 1; { Mask:= Mask DIV 2}
End;
DaoBit:=CHR(s);
End;
Function MaHoa(st:string):string;
Var i:Byte;
Begin
{o bit tng k t trong xu st}
For i:=1 To Length(st) Do st[i]:=DaoBit(st[i]);
Mahoa:=st;
End;
Begin
Write('Nhap xau: '); Readln(st);
st:=MaHoa(st);
Writeln('Xau sau khi ma hoa: ',st);
Readln;
st:=MaHoa(st);
Writeln('Xau sau khi giai ma: ',st);
Readln;
End.
Bi tp 6.10: Vit chng trnh thc hin php cng 2 s t nhin ln (khng qu 255
ch s).
Uses crt;
Var so1,so2,kqua:string;
Procedure LamDayXau(Var st1,st2:string);
{Them so 0 vao truoc xau ngan}
var i:Byte;
Begin
If Length(st1)>Length(st2) Then
For i:=1 To Length(st1)-Length(st2) Do st2:='0'+st2
Else
For i:=1 To Length(st2)-Length(st1) Do st1:='0'+st1;
End;
Function Cong(st1,st2:string):string;
Var i,a,b,c,sodu:Byte;
code:integer;
st,ch:string;
Begin
st:=''; sodu:=0;
59
Gio trnh bi tp Pascal
LamDayXau(st1,st2);
{Ly tng s ca 2 xu: t phi sang tri}
For i:=Length(st1) DownTo 1 Do
Begin
{i k t sang s nguyn}
Val(st1[i],a,code);
Val(st2[i],b,code);
{Tnh tng ca 2 s a,b va ly ra cho vo bin c}
c:=(a+b+sodu) MOD 10;
{Ly phn d ca tng a+b}
sodu:=(a+b+sodu) DIV 10;
{i s nguyn c sang xu k t ch}
str(c,ch);
{Cng xu ch vo bn tri xu kt qu st}
st:=ch+st;
End;
{X l trng hp s d cui cng >0}
If sodu>0 Then
Begin
str(sodu,ch);
st:=ch+st;
End;
Cong:=st;
End;
Begin
Write('Nhap so thu nhat: '); Readln(so1);
Write('Nhap so thu hai: '); Readln(so2);
kqua:=Cong(so1,so2);
Writeln('Tong= ',kqua);
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 :
60
Gio trnh bi tp Pascal
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.
61
Gio trnh bi tp Pascal
- o ngc cc t ca h tn trc khi sp xp.
Bi tp 6. 20 : Vit chng trnh lit k ra mn hnh tt c cc hon v ca mt xu k t.
Gi :
Dng gii thut quay lui.
62
Gio trnh bi tp Pascal
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;
63
Gio trnh bi tp Pascal
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);
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.
In danh sch sinh vin ra mn hnh.
Thng k s lng sinh vin thi u.
In ra mn hnh hnh danh sch nhng sinh vin b thi li.
Uses Crt;
64
Gio trnh bi tp Pascal
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);
Write('Diem co so: '); Readln(DiemCS);
Write('Diem chuyen nganh: '); Readln(DiemCN);
End;
Writeln('Nhan phim bat ky de nhap tiep/Nhan <ESC> de ket thuc!');
ch:=Readkey;
Until ch=#27;
End;
Procedure InDanhSach;
Var ch:Char;
i:Byte;
Begin
Clrscr;
Writeln('DIEM THI TOT NGHIEP SINH VIEN');
Writeln;
WRITELN('STT Ho ten Diem Co so Diem Chuyen nganh');
For i:=1 To n do
With SV[i] Do
Begin
Writeln(i:3,'.',Hoten:20,DiemCS:5,DiemCN:20);
End;
ch:=ReadKey;
End;
Procedure DanhSachSVThilai;
65
Gio trnh bi tp Pascal
Var ch:Char;
i:Byte;
Begin
Clrscr;
Writeln('DANH SACH SINH VIEN THI LAI');
Writeln;
WRITELN('STT Ho ten Diem Co so Diem Chuyen nganh');
For i:=1 To n do
With SV[i] Do
Begin
If (DiemCS<5)OR(DiemCN<5) Then
Writeln(i:3,'.',Hoten:20,DiemCS:5,DiemCN:20);
End;
ch:=ReadKey;
End;
Procedure ThongKeSVThiDau;
Var S,i:Byte;
ch:Char;
Begin
S:=0;
For i:=1 To n Do
If (SV[i].DiemCS>=5)AND(SV[i].DiemCN>=5) Then S:=S+1;
Writeln('So sinh vien thi dau la: ',s);
ch:=Readkey;
End;
Begin
Repeat
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.
66
Gio trnh bi tp Pascal
Bi tp 7.3: Vit chng trnh nhp vo n nh ca mt a gic li S.
a/ Tnh din tch ca S bit:
dt(S)=

+ +

n
i
i i i i
y x y x
1
1 1
| ) ( |
2
1
trong : (x
i
,y
i
) 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: S
i
= PP
i
P
i+1
, vi P
n+1
=P
1.
Nu

n
1
i
) dt(S
i
= dt(S) th P S.
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;
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;
67
Gio trnh bi tp Pascal
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:
68
Gio trnh bi tp Pascal
H tn im Tin im Ngoi ng im T.Bnh Xp loi
Trn Vn An 8 9 8.5 Gii
L Th Bo 7 5 6.0 T.Bnh
............................ ............ ..................... ............ ..............
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.
69
Gio trnh bi tp Pascal
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 SanPham = File of Record
Ten: String[20];
SoHieu: Byte;
End;
Var f,g: SanPham;
hoc khai bo trc tip:
Var f,g: File of Record
Ten: String[20];
SoHieu: Byte;
End;
Ch :
Pascal theo di cc thao tc truy nhp thng qua con tr file. Mi khi mt phn t
no c ghi vo hay c t file, con tr ca file ny c t ng chuyn
n phn t tip theo.
Cc bin kiu file khng c php c mt trong php gn hoc trong cc biu
thc.
II. CC TH TC V HM CHUN
2.1. Cc th tc chun
2.1.1. Gn tn file
C php: Assign(F, Filename);
Chc nng: Gn mt file trn a c tn l Filename cho bin file F, mi truy xut
trn file c th c thc hin thng qua bin file ny.
Ch :
Filename bao gm c tn a v ng dn nu file khng nm trong a, th
mc hin thi.
2.1.2. M file mi
C php: Rewrite(F);
Chc nng: To file mi c tn gn cho bin file F. Nu file c trn a th mi
d liu trn s b xo v con tr file tr v tr u tin ca file.
2.1.3. M file c trn a
70
Gio trnh bi tp Pascal
C php: Reset(F);
Chc nng: M file c tn gn cho bin file F. Nu file cha c trn a th
chng trnh s dng v gp li xut/nhp.
Ch : Kim tra khi m file
{$I+}: M vic kim tra. Khi gp li Vo/ra chng trnh s bo li v dng li
{$I-}: Khng kim tra Vo/ra, chng trnh khng dng li nhng treo cc th tc
Vo/ra khc cho n khi hm IOresult (hm chun ca PASCAL). Hm tr v gi tr
true nu vic m file xy ra tt p.
V d:
Procedure MoFile;
Var ok:Boolean;
St:String;
F:Text;
Begin
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);
71
Gio trnh bi tp Pascal
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
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.
72
Gio trnh bi tp Pascal
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);
REWRITE(f);
...
WRITE(f,value);
...
CLOSE(f);
ASSIGN(f,FileName);
RESET(f);
...
While Not EOF(f) Do
Begin
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;
73
Gio trnh bi tp Pascal
4.3. Cc th tc v hm c th thao tc trn file khng inh kiu
4.3.1. M file
M file cha c trn a: Rewrite(F, k);
M file c trn a: Reset(F, k);
Gi tr k m t s lng byte s c c ghi trong mt thao tc. Kch thc ca file
phi l bi s ca k.
4.3.2. Xut/ nhp d liu
C php: BlockRead(F, x, n [,Kq]);
BlockWrite(F, x, n [,Kq]);
Chc nng:
- c/ Ghi n bn ghi. Mi bn ghi c hiu l mt phn t k byte.
- x cha ni dung c/ghi
- Kq l s lngbn ghi c thc hin.
Ch :
File khng nh kiu thng c dng trong cc thao tc sao chp vi tc cao.
BI TP MU
Bi tp 8.1: To mt file SINHVIEN.DAT lu thng tin ca mt lp sinh vin. Mi
sinh vin cn nhng thng tin sau: H tn, Ngy sinh, Qu qun, im trung bnh, Xp
loi (trng xp loi do chng trnh t tnh ly da vo im trung bnh nh sau: nu
im trung bnh < 5 th xp loi D, nu 5 <= im trung bnh < 6.5 th xp loai C,
nu 6.5 <= im trung bnh < 8 th xp loi B, trng hp cn li xp loi A).
Program Vi_du_1;
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;
i:word;
Begin
write('Nhap ten file: ');
readln(filename);
74
Gio trnh bi tp Pascal
assign(f,filename);
rewrite(f);
i:=1;
repeat
writeln('Nhap thong tin cua cac sinh vien');
writeln('Thong tin cua sinh vien thu ', i);
write('Ho ten: ');
readln(Bhoten);
if Bhoten <> '' then
begin
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;
75
Gio trnh bi tp Pascal
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;
writeln(#32:10, 'DANH SACH SINH VIEN');
writeln(#32:6,'HO TEN',#32:8,'NGAY SINH',#32:4,'QUE QUAN DTB');
while not eof(f) do
begin
read(f,sv);
with sv do
writeln(hoten,#32:20,length(hoten),ngaysinh,#32:2,quequan,#32:10-
length(quequan),Diemtb:5:2);
end;
close(f);
readln;
End.
Bi tp 8.3: In danh sch tt c sinh vin c thng tin lu trong file SINHVIEN.DAT
xp loi kh (B) tr ln.
Program Vi_du_3;
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;
76
Gio trnh bi tp Pascal
Bhoten:st20;
n:word;
Begin
assign(f,'sinhvien.dat');
{$I-}
reset(f);
{$I+}
if IOResult <>0 then
begin
writeln('File khong ton tai');
exit;
end;
n:=0;
writeln('Danh sach sinh vien dat loai kha tro len');
while not Eof(f) do
begin
read(f,sv);
with sv do
if xeploai <= 'B' then { (xeploai = B) or (xeploai = A) }
begin
writeln(hoten,ngaysinh,quequan,diemtb);
inc(n);
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;
77
Gio trnh bi tp Pascal
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
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;
78
Gio trnh bi tp Pascal
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;
filename,St: String;
NLines,NStr: word;
i: byte;
Begin
write(Nhap ten file: );
readln(filename);
assign(f,filename);
reaset(f);
NBl:=0;
79
Gio trnh bi tp Pascal
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;
end;
rewrite(g);
while not Eof(f) do
80
Gio trnh bi tp Pascal
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
5 4 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);
81
Gio trnh bi tp Pascal
end;
close(f);
assign(g,KQ.OUT);
rewrite(g);
writeln(g,m);
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 = (b
jk
)
nxp
, C = (c
kl
)
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.
kl
n
j
p
k
jk ij il
c b a d * *
1 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;
82
Gio trnh bi tp Pascal
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
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 = (d
il
)
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
6 5 34
3 6 8 12 2 2 5 6
7 5 6 10 6
8 2 4 5 1
3 5 6 1 3
10 12 3 1 8
8 8 8 9 1
Program Vi_du_10;
Var
f,g: Text;
S:array[1..100] of real;
83
Gio trnh bi tp Pascal
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];
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:
84
Gio trnh bi tp Pascal
- 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
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.
85
Gio trnh bi tp Pascal
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.16: Cho a thc P(x) = a
0
+ a
1
x + a
2
x
2
+ ... + a
n
x
n
Trong n l bc ca a thc v a
0
, a
1
, ... , a
n
l cc h s ca a thc c lu trong
mt file vn bn vi qui c sau:
- Dng u ca file vn bn cha bc ca a thc v gi tr ca x.
- Dng tip theo cha cc h s ca a thc.
V d: P(x) = 3 + 2x - 5x
2
+ 4x
3
, x = 2.5 s c lu trong file vn bn nh sau:
3 2.5
3 2 -5 4
Vit chng trnh c file vn bn trn ly cc s liu ri tnh gi tr ca a thc.
Gi :
- T chc mng lu a thc.
- Vit th tc c file text lu vo mng.
- Tham kho bi tp 5.8.
Bi tp 8.17: Vit chng trnh m s t c trong mt file vn bn.
Gi :
- Vit hm COUNT m s t ca 1 dng.
- c tng dng ca file vn bn, dng hm COUNT cng dn vo bin dem.
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:
86
Gio trnh bi tp Pascal
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;
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 :
- Khng c s dng mng
- Khi nhp ch kim tra nm xut bn <= nm hin ti
- Sau khi in ra danh sch cc u sch xut bn sau nm m, cho bit thm danh
sch c bao nhiu u sch tt c.
Hng dn: Khai bo th vin l mt file cc u sch, mi u sch l mt bn ghi
nh sau
Type
St5 = String[5];
St20 = String[20];
Dausach = Record
Masach: St5,
Tensach, Tentacgia, Nhaxb: St20,
Namxb: word;
SoLuong: byte;
end;
Var
f: file of DauSach;
87
Gio trnh bi tp Pascal
Bi tp 8.20: Ngi ta lu thng tin cc cn b trong c quan vo file c tn
CANBO.DAT, mi cn b l mt bn ghi gm cc trng: STT, Hoten, Ngaysinh,
Diachi, HSLuong, HSPhucap, SoDT. Hy vit chng trnh thc hin cc yu cu sau:
a. Nhp danh sch cn b v lu vo file, qu trnh nhp dng khi h tn nhp vo
l xu rng v trng STT chng trnh t gn.
b. In ra danh sch cn b c h s lng nm trong khong t x n y, x v y l cc
s thc c nhp t bn phm khi thc hin chng trnh.
c. Sao chp thng tin cc cn b c tui trn 50 vo mt file khc.
d. In bng lng ca tt c cn b lu trong file CANBO.DAT ra mn hnh gm
cc thng tin: STT, Hoten, HSLuong, Luong, trong Luong c tnh theo
cng thc Luong = (HSLuong+HSPhucap)*290000, d liu in ra nh dng theo
ct. Cui bng, in tng lng ca ton c quan.
e. Sao chp ni dung ca file CANBO.DAT vo file vn bn CANBO.TXT, mi
cn b tng ng mt dng.
Hng dn: Khai bo mi cn b l mt bn ghi nh sau
Type
St10 = String[10];
St20 = String[20];
Canbo = Record
Hoten, Diachi: St20,
Ngaysinh: St10; {dd/mm/yyyy}
HSluong, HSPhucap: real;
SoDT: St10; {S in thoi }
end;
Var
f: file of Canbo;
Khi nhp ngy sinh phi kim tra nh dng theo yu cu: dd/mm/yyyy
Tui ca mt cn b c tnh bng nm hin ti tr cho nm sinh. Nm sinh ly t
4 k t cui cng ca ngy sinh v chuyn sang dng s.
Bi tp 8.21: Vit chng trnh nhp vo tn mt file vn bn. Kim tra file ny c tn
ti trn a khng? Nu c, in ni dung ca file t dng th m n dng th n, trong
m v n l hai s nguyn dng bt k c nhp t bn phm khi thc hin chng
trnh.
Hng dn: M file bng th tc Reset, ri chuyn con tr v dng th m, c v in n
dng (hoc cho n ht file).
Bi tp 8.22:Gi s trong mt file vn bn trn a c tn l MATRIX.TXT ngi ta
lu cc s liu v mt ma trn A cp mxn v mt vector X n chiu. Cch lu tr nh
sau:
Dng u tin cha hai s m v n
Dng th hai cha vector X
m dng tip theo ln lt cha m hng ca ma trn A
Gia cc s trong mt dng cch nhau mt k t trng
Vit chng trnh tnh gi tr vector Y = AX v a kt qu ra mn hnh ng thi lu
vo cui file MATRIX.TXT (A v X c ly t file MATRIX.TXT)
88
Gio trnh bi tp Pascal
Yu cu:
Chng trnh phi thit lp cc th tc sau
LayDulieu(A,X,m,n) thc hin vic c d liu t file MATRIX.TXT v gn cho A,
X, m, n
TinhTich(A,X,m,n,Y) thc hin vic tnh vector Y
LuuKetqua(Y,m) thc hin vic in vector Y ra mn hnh v lu vo cui file
MATRIX.TXT
Thnh phn th i ca vector Y c tnh theo cng thc
[ ] [ ] [ ]

m
j
j X j i A i Y
1
* ,
Bi tp 8.23: Gi s trong mt file vn bn trn a c tn l DANHBA.TXT lu danh
b in thoi trong thnh ph. Cch lu nh sau:
Dng u lu hai s nguyn dng m v n, trong m l s my in thoi thuc c
quan nh nc, cn n l s my thuc t nhn.
m dng tip theo lu thng tin ln lt ca m my in thoi thuc c quan nh
nc, mi dng ghi s in thoi, mt k t trng v sau l tn c quan.
n dng tip theo na lu thng tin ln lt ca n my in thoi t nhn, mi dng
ghi s in thoi, mt k t trng v sau l h tn ch in thoi.
Vit chng trnh c d liu t file DANHBA.TXT v in bng danh b in thoi ra
mn hnh theo th t tng dn ca ch my in thoi, cc my in thoi thuc c quan
nh nc in trc ri n cc my in thoi t nhn. Danh sch in ra theo 3 ct, ct 1
ghi s in thoi, ct 2 ghi tn c quan hoc tn ch my in thoi, ct 3 ghi loi l TN
(t nhn) hoc NN (nh nc)
Yu cu:
Khai bo kiu bn ghi l MAYDT bao gm 3 trng: SoDt, TenChu, Loai
Thit lp th tc LayDulieu(A,k) c d liu t file DANHBA.TXT v lu vo
mng A (mng cc MAYDT) vi k l s phn t ca mng.
Thit lp th tc SAPXEP(A,k) sp xp mi nhm my in thoi nh nc, t
nhn theo th t tng dn ca tn ch my in thoi trong mng A.
Thit lp th tc INKETQUA(A,k) in ra mn hnh danh b in thoi t mng A.
Bi tp 8.24: Cho mt file vn bn c c tn l MATRIX.TXT vi ni dung nh sau:
Dng u tin ca file cha hai s nguyn dng m v n ln lt l s hng v s
ct ca mt ma trn cp mxn (m,n <=50).
m dng tip theo mi dng cha n s nguyn l ga tr cc phn t ca mi hng.
Hy vit chng trnh thc hin cc yu cu sau:
a. Vit th tc LAYDULIEU c d liu t file MATRIX.TXT v lu vo mng
hai chiu A.
b. Vit hm MAXDONG(i:Byte): LongInt tr v gi tr ln nht ca hng i.
c. Ghi cc gi tr ln nht ca mi hng vo cui file MATRIX.TXT.
89
Gio trnh bi tp Pascal
Bi tp 8.25: Vit chng trnh to ra hai tp tin lu cc s kiu word m cc s trong
mi file c sp th t tng dn. Hy to tp tin mi cha tt c cc s ca 2 tp tin
trn sao cho th t tng dn vn c duy tr.
Ch : Khng c dng mng.
Bi tp 8.26: Gi s trong mt file vn bn trn a c tn l MT.DAT ngi ta lu
cc s liu v hai ma trn A v B cng cp mxn. Cch lu tr nh sau:
Dng u tin cha hai s m v n
m dng tip theo ln lt cha m hng ca ma trn A
m dng tip theo na ln lt cha m hng ca ma trn B
Gia cc s trong mt dng cch nhau mt k t trng
Vit chng trnh tnh ma trn tng C = A + B v ghi kt qu vo file MT.OUT vi
cu trc: dng u cha s m, m dng tip theo cha ma hng ca ma trn C.
Bi tp 8.27: c th sao chp cc file c kch thc ln ln a mm, ngi ta chia
nh file cn chp thnh nhiu file c kch thc nh hn, sau ni cc file ny li
bng lnh copy. Hy vit chng trnh sao chp mt file thnh hai file c kich thc
bng nhau. Tn ca tp tin ngun v hai tp tin ch c nhp t bn phm khi thc
hin chng trnh.
Hng dn: Khai bo cc file ngun v ch l cc file khng nh kiu. Gi Temp l
mt na kch thc ca file ngun, tnh bng byte. Thc hin vic sao chp t byte u
tin n byte th Temp vo file ch th nht, sau chp phn cn li ca file ngun
vo file ch th hai.
90
Gio trnh bi tp Pascal
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
91
Gio trnh bi tp Pascal
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 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}
92
Gio trnh bi tp Pascal
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
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);
93
Gio trnh bi tp Pascal
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;
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;
94
Gio trnh bi tp Pascal
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;
TypeTroNut = ^ 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;
until not kq;
end;
Procedure In_so_duong;
Var
p: Tronut;
begin
95
Gio trnh bi tp Pascal
p:= first;
while p <> nil do
begin
if p^.Giatri > 0 then
write(p^.Giatri:8);
p:=p^.Tiep;
end;
end;
Begin
Mark(p);
Nhap;
In_so_duong;
Release(p);
Readln;
End.
Bi tp 9.2: Vit th tc m s nt c gi tr ln hn 0 v tnh gi tr trung bnh cng
ca cc nt .
Procedure Nut_duong(var dem: word; tb:real);
Var
p: Tronut;
tong:longint;
begin
dem:=0;
tong:=0;
p:= first;
while p <> nil do
begin
if p^.Giatri > 0 then
begin
inc(dem);
tong:=tong+p^.Giatri;
end;
p:=p^.tiep;
if dem = 0 then
tb:=0
else
tb:= tong /dem;
end;
Bi tp 9.3: Gi s dy gi tr cc nt trong danh sch c sp tng dn. Vit cc
th tc v hm sau:
a. Procedure Insert(var first: TroNut; m: integer) thc hin vic b sung mt nt
vo danh sch sao cho tnh tng dn c bo ton.
96
Gio trnh bi tp Pascal
Procedure Insert(var first: TroNut; m: integer);
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
97
Gio trnh bi tp Pascal
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;
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
98
Gio trnh bi tp Pascal
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;
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;
99
Gio trnh bi tp Pascal
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;
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;
100
Gio trnh bi tp Pascal
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;
next: Contro;
end;
var
first: Contro;
Procedure Lay_du_lieu;
var
101
Gio trnh bi tp Pascal
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);
end;
102
Gio trnh bi tp Pascal
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;
103
Gio trnh bi tp Pascal
p^.Hoten:= Bten;
p^.tuoi:= Btuoi;
p^.Tiep:= nil;
if first = nil then
first:= p
else
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
104
Gio trnh bi tp Pascal
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;
while p <> nil do
begin
with p do
if tuoi <= n then
writeln(mabn, #32,hoten, #32, tuoi);
p:= p^.tiep;
end;
End;
e. Procedure XoaBN(Var First: TroBN; Bma: St5) xo bnh nhn c m Bma khi
danh sch.
Procedure XoaBN(Var First: TroBN; Bma: St5);
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
if p = first then
first:= first^.tiep
else
q^.tiep:= p^.tiep;
dispose(p);
End;
105
Gio trnh bi tp Pascal
Bi tp 9.8: Ngi ta lu thng tin ca mi i l trong cng ty bi mt nt trong danh
sch lin kt n v c khai bo nh sau:
Type St6 = String[6];
TroDL = ^ DaiLy;
DaiLy = Record
SoDT: St6;
DoanhThu: LongInt;
Next: TroDL;
End;
Vit cc th tc v hm:
a. Procedure BoSung(Var First: TroDL; Tel: St6; m: LongInt) b sung mt i
l c s in thoi Tel v doanh thu l m vo u danh sch c nt u tr bi First.
Procedure BoSung(Var First: TroDL; Tel: St6; m: LongInt);
Var
p: TroDL;
Begin
new(p);
p^.SoDt:= Tel;
p^.Doanhthu:= m;
p^.next:= first;
first:= p;
End;
b. Function DThu(First: TroDL; Tel: St6): LongInt tr v doanh thu ca i l c
s in thoi l Tel, nu khng c i l th hm tr v gi tr 0.
Function DThu(First: TroDL; Tel: St6): LongInt;
Var
p: TroDL;
Begin
p:= first;
while (p <> nil) and (p^.SoDT <> Tel) do
p:= p^.next;
if p <> nil then
Dthu:= p^.doanhthu
else
Dthu:= 0;
End;
c. Function TongDThu(First: TroDL): Real tr v tng doanh thu ca tt c cc i
l trong cng ty.
Function TongDThu(First: TroDL): Real;
Var
p: TroDl;
106
Gio trnh bi tp Pascal
T: real;
Begin
T:= 0;
p:= first;
while p <> nil do
begin
T:= T+ p^.Doanhthu;
p:= p^.next;
end;
TongDthu:= T;
End;
d. Function DemDL(First: TroDL; m: LongInt): Word tr v s i l ca cng ty
c doanh thu ln hn m.
Function DemDL(First: TroDL; m: LongInt): Word;
Var
p: TroDL;
dem: word;
Begin
dem:= 0;
p:= first;
while p <> nil do
begin
if p^.Doanhthu > m then
inc(dem);
p:= p^.next;
end;
DemDL:= dem;
End;
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
107
Gio trnh bi tp Pascal
if p = first then
first:= first^.next
else
q^.next:= p^.next;
dispose(p);
end;
End;
BI TP T GII
Bi tp 9.9: Vit mt hm xc nh xem mt danh sch lin kt cho c th t tng
dn hay khng theo 2 cch: Khng qui v qui.
Bi tp 9.10: Cho 2 danh sch lin kt n i din cho 2 tp hp c tr bi L1 v
L2. Vit chng trnh hin th:
1. Phn giao ca 2 danh sch trn.
2. Phn hp ca 2 danh sch trn.
3. Phn hiu ca 2 danh sch trn.
Bi tp 9.11: Cho 2 danh sch lin kt L1 v L2.
1. Sp xp li 2 danh sch theo th t tng dn.
2. Trn 2 danh sch li thnh danh sch L3 sao cho L3 vn c th t tng dn.
Bi tp 9.12: Dng danh sch mc ni biu din mt a thc P
n
(x) = a
n
x
n
+ a
n-1
x
n-1
+...
+ a
0
. Trong , mi s hng ca a thc c xc nh bi 2 thnh phn: h s a
i
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 trnh thc 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.13: 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:
108
Gio trnh bi tp Pascal
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.
2. Vit mt th tc hin th tt c cc t trong t in ra mn hnh theo th t tng dn.
3. Vit mt th tc b sung mt t mi vo t in bng cch c t t bn phm,
tm n trong t in.
- Nu tm thy, hin th thng bo:"T c trong t in".
- Nu khng tm thy, chn t vo trong t in v tr thch hp.
Bi tp 9.14: Cho dy s nguyn sp theo th t tng dn v lu trong mt danh sch
lin kt n c a ch nt u danh sch l First.
a. Vit chng trnh xo tt c cc nt trong danh sch c gi tr 0.
b. Vit chng trnh in ra cc gi tr phn bit ca danh sch.
Bi tp 9.15: Cho hai dy s thc lu trong hai danh sch lin kt n, c a ch ca
cc nt u danh sch ln lt l First1 v First2. Gi s trong mi danh sch gi tr cc
nt c sp tng dn. Hy vit chng trnh to mt danh sch lin kt n c nt
u tr bi List, cha tt c cc phn t ca hai danh sch trn, danh sch mi ny cng
c sp th t.
Bi tp 9.16: Mt cng ty du lch qun l tt c cc xe t ca h bng mt danh sch
lin kt, mi nt ca danh sch c khai bo nh sau:
Type
TroXe = ^Xe;
St6 = String[6];
St20 = String[20];
Xe = Record
TaiXe: St20; { h tn ti x }
BienSo: St6; { bin s xe }
Socho: Byte; { s ch ngi }
Tiep: TroXe;
end;
Var
First: TroXe;
a. Vit th tc Procedure Print(First: TroXe; n:byte); in h tn ti x, bin s xe
ca tt c cc xe c n ch ngi c lu trong danh sch.
b. Vit hm Function SoChoNgoi(First: TroXe; Bso: St6); tr v s ch ca xe
c bin s Bso.
Bi tp 9.17: Ngi ta qun l cc sch trong th vin bng mt danh sch lin kt, sp
theo th t ca m sch. Mi u sch tng ng vi mt nt trong danh sch c khai
bo nh sau:
Type
109
Gio trnh bi tp Pascal
TroSach = ^Sach;
St4 = String[4];
St20 = String[20];
Sach = Record
Ma: St4;
Ten, Tacgia: St20;
NamXb: word;
Soluong: Byte;
Next: TroSach;
end;
Var
First: TroSach;
Ch : Cc u sch c sp theo th t m sch.
a. Vit th tc Procedure CapNhat(Var First: TroSach; Bma:St4; Bten, BTgia:
St20; Bnam: word; n: byte); b sung vo th vin u sch c m l Bma, tn
sch Bten, tc gi BTgia v s lng b sung l n theo yu cu: Nu u sch
c m l Bma c trong th vin th ch tng s lng ln n, ngc li thm
mt u sch mi vo th vin vi s lng n v bo ton th t ca m
sch.
b. Vit th tc Procedure LietKeNam(First: TroSach; Nam: word) in danh sch
cc u sch xut bn vo nm Nam.
c. Vit hm Function So_Dau_Sach(First: TroSach; BTgia: St20) tr v s u
sch ca tc gi BTgia.
d. Vit th tc Procedure LietKeten(First: TroSach; Bten: St20) in danh sch tt
c cc u sch c tn sch l Bten.
Bi tp 9.18: Mt ca hng kinh doanh vt liu xy dng qun l lng hng tn kho
bng mt danh sch lin kt. Mi loi vt liu tng ng vi mt nt trong danh sch v
c khai bo nh sau:
Type
St3 = String[3];
St10 = String[10];
TroVT = ^Vattu;
Vattu = Record
Ma: St3;
Ten: St10;
DVTinh: St10; { n v tnh}
Soluong: word;
Tiep: TroVattu;
End;
Var
First: TroVattu;
a. Vit th tc Procedure XuatKho(Var First: TroVattu; Bma: St3; Bdonvi:
St10; n: word); ly ra khi kho n bdonvi loi vt t c m l Bma theo yu
cu sau:
110
Gio trnh bi tp Pascal
Nu vt t c m Bma khng c trong kho th thng bo kho khng c
loi vt t ny v kt thc thc hin.
Ngc li, kim tra Bdonvi c trng vi DVTinh ca loi vt t ny
khng, nu khng trng th yu cu i theo n v tnh lu trong danh
sch trc khi thc hin xut kho.
Nu s lng trong kho ca vt t c m Bma nh hn n th a ra
thng bo v hi li c mun xut khng, nu mun th xut vi s lng
bao nhiu?
Sau khi xut n n v loi vt t theo yu cu, gim s lng vt t
trong kho cho ph hp v nu s lng ca vt t ny bng 0 th xo n ra
khi danh sch.
b. Vit th tc Procedure NhapKho(Var First: TroVattu; Bma: St3; Bten, Bdv:
St10; n: word); nhp vo kho n Bdv lai vt t c m Bma theo yu cu:
Nu loi vt t c m Bma c trong kho th ch tng s lng vt t
ny trong kho, nh kim tra n v tnh nh cu a.
Ngc li, b sung mt loi vt t mi vo kho vi m l Bma, tn vt
t l Bten, n v tnh l Bdv v s lng tng ng l n.
c. Vit hm Function SoVattu(First: TroVattu; Bma:St3); tr v s lng vt t
c m l Bma cn tn trong kho, nu khng c vt t ny, hm tr v gi tr
0.
d. Vit th tc Procedure ThongKe(First: TroVattu); in ra thng tin ca tt c
cc loi vt t hin c trong kho.
Bi tp 9.19: Cho danh sch cc s nguyn c t chc nh sau:
Type TRO = ^PT;
PT = Record
X: Integer;
Link: TRO;
End;
1. Vit th tc NHAP(Var Dau:TRO); nhp vo mt danh sch cc s nguyn c
nt u tin c tr bi con tr Dau.
2. Vit th tc LIETKE(Dau:TRO); in ra mn hnh gi tr ca tt c cc nt trong
danh sch c tr bi con tr Dau.
3. Gi s Dau l con tr tr n u ca mt danh sch cha c sp xp, cn L c
gn bng NIL. Hy vit th tc SAPCHON(Var Dau,L:TRO); cho php chn cc
phn t trong danh sch Dau t gi tr ln n b, a vo danh sch L cui cng
Dau=Nil, cn L s tr thnh mt danh sch c sp xp theo th t tng dn.
4. Vit hm TANG(Dau:TRO):Boolean; xc nh xem danh sch c tr bi Dau
c th t tng dn hay khng theo 2 cch: Khng qui v qui.
5. Vit th tc DAO(Var Dau:TRO); o ngc cc con tr ca danh sch Dau.
Bi tp 9.20: Cho danh sch cc s nguyn c t chc nh sau:
Type TRO = ^PT;
PT = Record
Gtri: Integer;
Tiep: TRO;
111
Gio trnh bi tp Pascal
End;
1. Vit hm DXUNG(ds:TRO):Boolean; nhm kim tra cc gi tr trong danh dch ds
c phi l i xng hay khng theo 2 cch: qui v khng qui.(V d: danh sch
cha cc dy s sau y l i xng: 2 3 6 3 2; 5 7 7 5).
2. Vit hm KhaDX(ds:TRO):Boolean; kim tra xem vi danh sch ds cho, c
tn ti mt cch sp xp li cc phn t cui cng nhn c mt danh sch i
xng hay khng?
3. Vit th tc SAPLAI(Var ds:TRO); a ra mt cch sp xp li cc phn t
c mt danh sch i xng (gi thit iu ny c th lm uc nh hm KhaDX).
112
Gio trnh bi tp Pascal
Chng 10
HA
I. MN HNH 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.TPUCha 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.
113
Gio trnh bi tp Pascal
* Hng s GrOK = 0: Vic khi ng ha c li.
V d:
Uses 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;
. . .
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
114
Gio trnh bi tp Pascal
writeln('Loi Do hoa: ',GraphErrorMsg(Gr));
Halt(1);
End;
End;
BEGIN
ThietLapDoHoa;
. . .
CloseGraph;
END.
III. TA V CON TR TRN MN HNH 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);
Di chuyn con tr t v tr ang ng n ta (x,y).
3.4. Th tc MOVEREL(dx,dy:Integer);
Di chuyn con tr t v tr ang ng n ta mi cch ta c khong cch l
dx, dy.
3.5. V mt im trn mn hnh:
Dng th tc PUTPIXEL(x,y:Integer; color:Word);
3.6. Ly mu ca mt im ti ta x,y:
Hm GETPIXEL(x,y:Integer):Word;
IV. T MU TRN MN HNH HA
4.1. t mu cho i tng cn v
Dng th tc SETCOLOR(Color:Byte);
4.2. t mu nn
Dng th tc SETBKCOLOR(Color:Byte);
V. CA S TRONG CH HA
5.1. t ca s trn mn hnh
Th tc SETVIEWPORT(x1,y1,x2,y2:Integer; Clip:Boolean);
Vi x1,y1: nh trn tri ca ca s.
x2,y2: nh di phi ca ca s.
Clip = TRUE: nhng g vt khi mn hnh s b ct b.
Clip = FALSE: nhng g vt khi mn hnh s khng b ct b.
* Khi to ca s th ta trn mn hnh s thay i theo.
Ta mi = Ta c - Ta nh trn tri.
115
Gio trnh bi tp Pascal
5.2. Xa hnh nh trong ca s
- Xa hnh nh trong ca s, ta dng th tc CLEARVIEWPORT;
- Xa ton b mn hnh, ta dng th tc CLEARDEVICE;
VI. VIT CH TRONG CH HA
6.1. Chn Font ch
Ta dng th tc SETTEXTSTYLE(font,Dir,size:Word);
- Cc font c th cha cc hng sau:
DefaultFont = 0;TriplexFont = 1;SmallFont = 2;
SansSerifFont = 3; GothicFont = 4;
- Dir c cc hng sau:
HorizDir = 0 T tri qua phi.
VetDir = 1T di ln trn.
- Size: ln ca ch.
6.2. Chn phn b ch
Dng th tc SETTEXTJUSTIFY(Hz,Vt:Word);
Chn v tr ca ch xung quanh ta nh sn.
- Hz l phn b ch theo trc ngang. C cc hng sau:
LeftText = 0 Ch vit nm bn phi trc ng.
CenterText = 1 Ch vit nm gia trc ng.
RightText = 2 Ch vit nm bn tri trc ng.
- Vt l b tr ch theo hng dc i vi ta qui nh xut chui. Cc hng lin
quan:
BottomText = 0 Ch vit nm bn trn trc ngang.
CenterText = 1 Ch vit nm gia trc ngang.
TopText = 2 Ch vit nm bn di trc ngang.
6.3. Vit mt xu k t ln mn hnh
- Xut mt xu k t ti v tr con tr:
Dng th tc OUTTEXT(St:String);
- Xut mt xu k t ti ta x,y:
Dng th tc OUTTEXTXY(x,y:Word; St:String);
Ch : Cch xut chui ca hai th tc trn c qui nh trong th tc
SETTEXTJUSTIFY v SETTEXTSTYLE.
VII. V CC HNH C BN
7.1. Chn kiu ng
Dng th tc SETLINESTYLE(Ls,Pt,Tk:Word);
Th tc ny xc nh kiu ng c v trong ha.
Ls: kiu ng v. Ls c cc gi tr sau:
0: ng lin nt
1: Nt t
2: Nt chm gch
3: Nt gch
116
Gio trnh bi tp Pascal
4: ng do ngi thit k to ra.
Pt: xc nh mu v.
. Nu Ls = 0..3 th Pt=0 (Ly gi tr Default)
. Nu Ls = 4 th Pt l s nguyn ch mu ca kiu ng.
Tk: xc nh dy ca ng.
Tk = 1: bnh thng.
Tk = 3: m nt.
7.2. V on thng
LINE(x1,y1,x2,y2:Integer); v t im (x1,y1) n im (x2,y2)
LINETO(x,y:Integer); v t v tr con tr n im (x,y)
LINEREL(dx,dy:Integer); v t v tr con tr n im cch mt khong dx,dy.
7.3. V hnh ch nht
Dng th tc RECTANGLE(x1,y1,x2,y2:Integer);
7.4. V cung trn
Th tc ARC(x,y:Integer; g1,g2,R:Word);
V cung trn c tm (x,y) bn knh R, gc bt u l g1 v gc kt thc l g2.
7.5. V ng trn - Ellip
Th tc v ng trn: CIRCLE(x,y:Integer; R:Word);
Th tc ELLIPSE(x,y:integer; g1,g2,Rx,Ry:Word);
V Ellip c tm (x,y) bn knh ngang Rx, bn knh dc Ry, gc bt u l g1 v gc
kt thc l g2.
7.6. nh MODE ng v
Th tc SETWRITEMODE(Mode:Integer);
- nh Mode v cho cc ng thng.
- Ta c th chn Mode bng cc hng:
CopyPut = 0; XORPut = 1;
Trong :
. CopyPut l Mode chn, ng mi s khng xa ng c.
. XORPut l Mode xa, ng mi s xa ng c.
XIII. T MU CC HNH
8.1. Chn kiu t
Th tc SETFILLSTYLE(Pt,Cl:Word);
Vi:
- Pt: Mu t ca hnh. C cc hng t 0 n 12.
0: T bng mu nn.
1: T bng mu vin.
2: T bng cc du ---
...................................
- Cl: Mu t ca hnh.
117
Gio trnh bi tp Pascal
8.2. V hnh ch nht c t mu bn trong
Th tc BAR(x1,y1,x2,y2:Integer);
V hnh ch nht c t mu v mu t c xc nh bi th tc SETFILLSTYLE.
8.3. V hnh hp ch nht
Th tc BAR3D(x1,y1,x2,y2,Dh:Word; Top:Boolean);
V hnh hp ch nht c ta nh trn l (x1,y1), nh di l (x2,y2) v chiu dy
l Dh.
Dh
(x1,y1)
(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;
118
Gio trnh bi tp Pascal
End;
IX. CC K THUT TO HNH 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.
Thng thng, mn hnh s lm vic v hin ra trn trang 0. Do , va xem mn
hnh va v ln trang mn hnh khc, ta thng dng hai th tc trn i km vi nhau.
thc hin t ng chng trnh khi s dng c php lt hnh ny, ta thng theo
mt gii thut sau:
To bin page1,page2:Word;
To vng lp
...
Repeat
SetVisualPage(page1); (* Xem trang mn hnh page1 *)
SetActivePage(page2); (* V hnh ln trang page2 *)
.......
< Cc th tc v hnh >
.......
(* Hon v 2 bin page1, page2 *)
Temp:=page1;
page1:=page2;
page2:=Temp;
Until <iu kin thot>;
9.2. Lu v di chuyn mt vng mn hnh
Chng ta c th lu mt vng mn hnh vo b nh ri sau li dn n ln mn
hnh ti mt v tr khc.
Lu mt vng mn hnh vo b nh c thc hin bng th tc:
GETIMAGE(x1,y1,x2,y2:Integer; Var P:Pointer);
trong P l con tr lu ni dung ca vng (x1,y1,x2,y2).
Vic ng k mt vng nh ng phi c khai bo dung lng cn thit. Dung
lng vng nh c thc hin bng hm:
IMAGESIZE(x1,y1,x2,y2:Integer):Word;
hin hnh nh t b nh ra mn hnh, ta dng th tc:
PUTIMAGE(x,y:Integer; P:Pointer; Mode:Word);
trong :
(x,y): Ta nh tri hnh ch nht m ta mun a ra.
P : Con tr lu vng hnh ch nht.
119
Gio trnh bi tp Pascal
Mode: Hng s ch phng thc hin ra mn hnh. Mode cha mt trong cc hng
sau:
NormalPut = 0: Xut ra nh lu (php MOV)
XORPut = 1: Php XOR, xa hnh c nu hai hnh giao nhau.
ORPut = 2: Php OR, ly c hai hnh nu hai hnh giao nhau.
ANDPut = 3: Php AND, nu hai hnh giao nhau th ly phn chung.
NOTPut = 4: Php NOT, cho ra m bn.
V vic thc hin ta tin hnh nh sau:
Khai bo mt bin con tr P:Pointer;
ng k mt vng nh ng do P qan l bng th tc
GETMEM(P,ImageSize(x1,y1,x2,y2));
Lu hnh nh bng th tc GETIMAGE(x1,y1,x2,y2,P^);
Xut ra mn hnh bng th tc PUTIMAGE(x,y,P^,Mode);
BI TP MU
Bi tp 10.1: Vit dng ch c bng trong ch 256 mu.
Uses crt,Graph;
var gd,gm:integer;
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.
120
Gio trnh bi tp Pascal
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;
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)),
121
Gio trnh bi tp Pascal
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;
Var ch:Char;
BEGIN
ch:=ReadKey;
END;
{$F+}
122
Gio trnh bi tp Pascal
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;
123
Gio trnh bi tp Pascal
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
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;
124
Gio trnh bi tp Pascal
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;
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;
125
Gio trnh bi tp Pascal
#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
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;
126
Gio trnh bi tp Pascal
SetBKcolor(LightBlue);
PullDown(XTop,YTop,DX,DY,SoDong,DongMN,ThuTuc);
CloseGraph;
END.
Bi tp 10.5: V hai hnh
Sau , vit chng trnh thc hin chuyn ng ca ming c.
Uses Crt,Graph;
Type ProType=Procedure;
Var Gd,Gm:integer;
page1,page2:word;
Hinh:Array[0..1] of ProType;
Xc,Yc,r:Integer;
i:Byte;
{$F+}
Procedure HinhCa1;
Begin
SetColor(15);
PieSlice(Xc,Yc,30,330,R); {Ve bung ca}
SetColor(0);
Circle(Xc + R div 2,Yc - R div 2,4); {Mat ca}
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;
127
Gio trnh bi tp Pascal
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;
Begin
gd:=4;
Initgraph(gd,gm,'C:\BP\bgi');
setcolor(14);
settextstyle(1,0,5);
Run('Pham Anh Phuong');
Closegraph;
End.
128
Gio trnh bi tp Pascal
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);
GetImage(x1,y1,x2,y2,P^);
129
Gio trnh bi tp Pascal
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;
130
Gio trnh bi tp Pascal
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);
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) = ax
2
+ 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).
131
Gio trnh bi tp Pascal
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
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
132
Gio trnh bi tp Pascal
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.
V d:
f() = k.Cos(n) : Hnh bng hoa.
Hnh bng hoa
f() = a. (a>0) : ng xon c Acsimet.
f() = k.(1+Cos()): Hnh tri tim.
Uses Crt,Graph;
var R,chuky:real;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;
133
Gio trnh bi tp Pascal
Function F(R,Alpha:real):real; { Tnh hm f() }
Begin
F:=R*cos(19*Alpha/3)+5;
End;
Procedure VeHinh(ChuKy:real);
var x1,x2,y1,y2:integer;
a,Alpha,k:real;
x0,y0:word;
Begin
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
K:=GetMaxX/50;
a:=Pi/180;
Alpha:=0;
x1:=x0 + Round(F(R,Alpha)*k*cos(Alpha));
y1:=y0 - Round(F(R,Alpha)*k*sin(Alpha));
Moveto(x1,y1);
While Alpha<ChuKy do
Begin
Alpha:=Alpha+a;
x1:=x0 + Round(F(R,Alpha)*k*cos(Alpha));
y1:=y0 - Round(F(R,Alpha)*k*sin(Alpha));
LineTo(x1,y1);
Delay(10);
End;
End;
BEGIN
ThietLapDoHoa;
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:
Bt u t ng ngang K
0
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 K
2
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.
(a) K
0
(b) K
1
(c) K
2
134
C
0
C
1
C
2
C
33
Gio trnh bi tp Pascal
tng:
T hnh (b) ta thy rng, u tin hng v quay tri 60
0
, ri quay phi 120
0
, cui
cng quay tri 60
0
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;
n:=4;
Goc:=180;
Length:=150;
Moveto(300,200);
Koch(Goc,Length,n);
Repeat until keypressed;
Closegraph;
END.
135
C
0
C
1
C
2
C
33
Gio trnh bi tp Pascal
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:
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 90
0
. 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 90
0
, v on th hai v sau tr v hng c bng cch quay gc
45
0
.
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
136
C
0
C
1
C
2
C
33
Gio trnh bi tp Pascal
else LineRel(Round(len*cos(rads*dir)),Round(len*sin(rads*dir)));
end;
Begin
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 z
2
+ c (*)
Tp hp Mandelbrot l tp bao gm nhng s phc c sao cho z
2
+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 z
2
+c = c. Thay z vo cng thc (*) ta c c
2
+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
137
Gio trnh bi tp Pascal
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;
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;
138
Gio trnh bi tp Pascal
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:
Ma trn ca php quay quanh gc ta : R =

,
_

) ( ) (
) ( ) (


Cos Sin
Sin Cos

'

+

) ( . ) ( . '
) ( . ) ( . '


Cos y Sin x y
Sin y Cos x x
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);
139
Gio trnh bi tp Pascal
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;
P1:=P; P2:=PP; P3:=PPP;
Alpha:=0; goc:=Pi/180;
SetWriteMode(XORPut);
VeHinh(P,PP,PPP);
Repeat
ch:=readkey;
if ord(ch)=0 then ch:=readkey;
case Upcase(ch) of
'K': Begin
VeHinh(P1,P2,P3);
Alpha:=Alpha-goc;
QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
VeHinh(P1,P2,P3);
End;
'M': Begin
VeHinh(P1,P2,P3);
Alpha:=Alpha+goc;
140
Gio trnh bi tp Pascal
QuayHinh(P,PP,PPP,Alpha,P1,P2,P3);
VeHinh(P1,P2,P3);
End;
End;
Until ch=#27;
CloseGraph;
END.
BI TP T GII
Bi tp 10.15: Vit chng trnh v bn c quc t ln mn hnh.
Bi tp 10.16: Vit chng trnh v mt chic xe t (theo hnh dung ca bn) v cho
n chy ngang qua mn hnh.
Gi :
Dng k thut lt trong mn hnh hoc di chuyn vng mn hnh.
Bi tp 10.17: Vit chng trnh v l c t quc ang tung bay.
Gi :
Dng k thut lt trong mn hnh.
Bi tp 10.18: Vit chng trnh nhp vo n hc sinh ca mt lp hc bao gm 2 trng
sau: H tn, im trung bnh.
a/ Hy thng k s lng hc sinh gii, kh, trung bnh v yu.
b/ V biu thng k s lng hc sinh gii, kh, trung bnh v yu theo 2 dng:
biu ct (column) v biu bnh trn (Pie).
Bi tp 10.19: Vit chng trnh v th ca cc hm s sau:
a/ y = ax
3
+ bx
2
+ cx +d
b/ y = ax
4
+ bx
3
+ cx
2
+ dx + e
c/ y =
d cx
b ax
+
+
d/ y =
e dx
c bx ax
+
+ +
2
Bi tp 10.20: Hnh v cung Koch da trn 3 cnh ca tam gic u nh hnh sau:
141
Gio trnh bi tp Pascal
Bi tp 10.21: Vit chng trnh v ng xon c.
Gi :
Dng ta cc.
Bi tp 10.22: Vit chng trnh v ci ng h ang hot ng.
Bi tp 10.23: Vit chng trnh m phng chuyn ng ca tri t xung quanh mt
tri v ng thi chuyn ng ca mt trng xung quanh tri t.
Gi :
Dng ma trn ca php quay.
Bi tp 10.24: Xy dng mt th vin (Unit) cha tt c cc bi tp trong chng ny.
Bi tp 10.25: Vit chng trnh to Menu ha ging nh cc Menu trong mi
trng WINDOWS (xem hnh).
142
Gio trnh bi tp Pascal
MC LC
Li m u...................................................................................................................1
Chng 1: CC THNH PHN C BN CA NGN NG LP TRNH
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 TRNH 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
143
Gio trnh bi tp Pascal
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
IV. File khng nh kiu............................................................................................73
Bi tp mu................................................................................................................74
Bi tp t gii.............................................................................................................85
Chng 9: KIU CON TR
I. Khai bo..................................................................................................................91
II. Lm vic vi bin ng.........................................................................................91
III. Danh sch ng....................................................................................................92
Bi tp mu................................................................................................................94
Bi tp t gii...........................................................................................................108
Chng 10: HA
I. Mn hnh trong ch ho.............................................................................113
II. Khi to v thot khi ch ho................................................................113
III. To v con tr trn mn hnh ho..........................................................115
IV. t mu trn mn hnh ho.........................................................................115
V. Ca s trong ch ho................................................................................115
VI. Vit ch trong ch ha............................................................................116
VII. V cc hnh c bn...........................................................................................116
VIII. T mu cc hnh..............................................................................................117
IX. Cc k thut to hnh chuyn ng..................................................................119
Bi tp mu..............................................................................................................120
Bi tp t gii...........................................................................................................141
Mc lc.....................................................................................................................143
144

You might also like