You are on page 1of 114

PHNG GIO DC O TO DUY XUYN

----e----
GIO N TRNH PSC
GV: VN CNG
T: TON - TIN



Gio trnh bi tp Pascal Cng


2
I M U
Theo khung chng trnh ca B Gio Dc v o To, Ngn ng p trnh Pascal l mt phn
quan trng trong hc phn Tin hc i cng thuc cc khi ngnh Khoa hc T nhin, c bit l
ngnh Cng ngh Thng tin.
Nhm p ng yu cu hc tp ca hc sinh, sinh vin bc u lm quen vi cng vic lp trnh,
chng ti bin son b Gio Trnh Bi tp Pascal nhm gip cho sinh vin c mt ti liu hc
tp, rn luyn tt kh nng lp trnh, to nn tng vng chc cho cc mn hc tip theo trong chng
trnh o to C nhn Cng ngh Thng tin .
Gio trnh bai gm rt nhiu bi tp t n gin n phc tp. Cc bi tp ny c bin son da
trn khung chng trnh ging dy mn Tin hc i cng. Bn cch , chng ti cng b sung
mt s bi tp da trn c s mt s thut ton chun vi cc cu trc d liu c m rng nhm
nng cao k nng, phng php lp trnh cho sinh vin.
Ni dung ca gio trnh c chia thnh 10 chng. Trong mi chng u c phn tm tt l
thuyt, phn bi tp mu v cui cng l phn bi tp t gii bn c t mnh kim tra nhng kin
thc v kinh nghim hc. Trong phn bi tp mu, i vi nhng bi tp kh hoc c thut ton
phc tp, chng ti thng nu ra tng v gii thut trc khi vit chng trnh ci t.
Xin chn thnh cm n cc ng nghip Khoa Cng ngh Thng tin Trng i hc Khoa hc
Hu gip , ng gp kin hon chnh ni dung gio trnh ny.
Chng ti hy vng sm nhn c nhng kin ng gp, ph bnh ca bn c v ni dung,
cht lng v hnh thc trnh by gio trnh ny ngy mt hon thin hn.

Duy Xuyn, Thng 04 Nm 2012
CC TC GI
Gio trnh bi tp Pascal Cng


3
Chng 1
CC THNH PHN C BN C
NGN NG P TRNH PSC
Pascal l mt ngn ng lp trnh bc cao do Niklaus Wirth, gio s in ton trng i hc k
thut Zurich (Thy S) xut nm 1970. ng ly tn Pascal k nim nh ton hc v nh trit
hc ngi Php ni ting Blaise Pascal.
1. Cc tp tin cn thit khi lp trnh vi Turbo Pascal
lp trnh c vi Turbo Pascal, ti thiu cn 2 file sau:
- TURBO.EXE: Dng son tho v dch chng trnh.
- TURBO.TPL: Th vin cha cc n v chun chy vi TURBO.EXE.
Ngoi ra, mun lp trnh ho th phi cn thm cc tp tin:
- GRAPH.TPU: Th vin ho.
- *.BGI: Cc file iu khin cc loi mn hnh tng ng khi dng ho.
- *.CHR: Cc file cha cc font ch ha.
2. Cc bc c bn khi lp mt chng trnh Pascal
Bc 1: Son tho chng trnh.
Bc 2: Dch chng trnh (nhn phm F9), nu c li th phi sa li.
Bc 3: Chy chng trnh (nhn phm Ctrl-F9).
3. Cu trc chung ca mt chng trnh Pascal
{ Phn tiu }
PROGRAM Tn_chng_trnh;
{ Phn khai bo }
USES ......;
CONST .....;
TYPE .......;
VAR ........;
PROCEDURE ............;
FUNCTION ..............;
...............
{ Phn thn chng trnh }
BEGIN
...........
END.
V d 1: Chng trnh Pascal n gin nht
BEGIN
Write(Hello World!);
END.
V d 2:
Program Vidu2;
Const PI=3.14;
Var R,S:Real;
Begin
R:=10; {Bn knh ng trn}
S:=R*R*PI; {Din tch hnh trn}
Writeln(Dien tich hinh tron = , S:0:2); { In ra mn hnh }
Gio trnh bi tp Pascal Cng


4
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.
- 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
Gio trnh bi tp Pascal Cng


5
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.
6.4. i 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. Vit chng trnh in ra mn hnh cc hnh sau:
* ******** *******
*** ** ** ** **
** ** ** ** **
** ** ******** * *
********* ** ** **
** ** ** ** ** **
** ** ******** ********
Gio trnh bi tp Pascal Cng


6
Chng 2
CC KIU D IU C BN
KHI BO HNG, BIN, KIU, BIU THC V CU NH
I. CC KIU D IU 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.
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.510
-45
3.410
+38
4 byte
Real 2.910
-39
1.710
+38
6 byte
Gio trnh bi tp Pascal Cng


7
Double 5.010
-324
1.710
+308
8 byte
Extended 3.410
-4932
1.110
+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).
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. KHI BO HNG
- Hng l mt i lng c gi tr khng thay i trong sut chng trnh.
- C php:
CONST <Tn hng> = <Gi tr>;
hoc:
CONST <Tn hng>: = <Biu thc hng>;
V d:
CONST Max = 100;
Gio trnh bi tp Pascal Cng


8
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. KHI 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:
VR <Tn bin>[,<Tn bin 2>,...] : <Kiu d liu>;
V d:
VAR x, y: Real; {Khai bo hai bin x, y c kiu l Real}
a, b: Integer; {Khai bo hai bin a, b c kiu integer}
Ch : Ta c th va khai bo bin, va gn gi tr khi u cho bin bng cch s dng c php
nh sau:
CONST <Tn bin>: <Kiu> = <Gi tr>;
V d:
CONST x:integer = 5;
Vi khai bo bin x nh trn, trong chng trnh gi tr ca bin x c th thay i. (iu ny khng
ng nu chng ta khai bo x l hng).
IV. NH NGH 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>;
VR <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
Gio trnh bi tp Pascal Cng


9
VI. CU NH
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.
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. nh xut d liu
xut d liu ra mn hnh, ta s dng ba dng sau:
(1) WRITE(<tham s 1> [, <tham s 2>,...]);
(2) WRITEN(<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:
REDN(<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.
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.
Gio trnh bi tp Pascal Cng


10
- 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 e [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
u b a vi a,b l di 2 cnh v u 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
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);
Gio trnh bi tp Pascal Cng


11
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

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;
Gio trnh bi tp Pascal Cng


12
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:
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?
Gio trnh bi tp Pascal Cng


13
Chng 3
CC CU NH C CU TRC
I. CU NH R NHNH
1.1. nh IF C php:
(1) IF B THEN S;
(2) IF B THEN S1 ELSE S2;
Ch : Khi s dng cu lnh IF th ng trc t kho ELSE khng c c du chm phy (;).
1.2. nh CSE 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.
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 NH P
2.1. Vng lp xc nhC hai dng sau:
O Dng tin
FOR <bin m>:=<gi tr Min> TO <gi tr Max> DO S;
O Dng li
FOR <bin m>:=<gi tr Max> DOWNTO <gi tr Min> DO S;
S thc hin vng lp FOR:










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 Cng


14
Ch : Khi s dng cu lnh lp FOR cn ch cc im sau:
Khng nn tu tin thay i gi tr ca bin m bn trong vng lp FOR v lm nh vy c th
s khng kim sot c bin m.
Gi tr Max v Min trong cu lnh FOR s c xc nh ngay khi vo u vng lp. Do
cho d trong vng lp ta c thay i gi tr ca n th s ln lp cng khng thay i.
5.3.2. Vng lp khng xc nh
Dng REPET Dng WHIE
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 WHIE: Trong khi biu thc B=TRUE th tip tc thc hin cng vic S.
BI TP MU
Bi tp 3.1: Vit chng trnh nhp vo mt s nguyn v kim tra xem s va nhp l s chn hay
s l.
Uses crt;
Var x:integer;
Begin
Write('Nhap vao mot so nguyen : '); Readln(x);
If x MOD 2=0 Then
Writeln('So vua nhap vao la so chan')
Else
Writeln('So vua nhap vao la so le');
Readln;
End.
Bi tp 3.2: Vit chng trnh gii phng trnh bc nht ax+b=0

Repeat
S

B
+
-
Thot
While

B
+
-
Thot
S;
Gio trnh bi tp Pascal Cng


15
Uses Crt;
Var a,b,x : real;
Begin
Write('a = '); Readln(a);
Write('b = '); Readln(b);
If a = 0 Then { Nu a bng 0 }
If b = 0 Then { Trng hp a = 0 v b = 0 }
Writeln('Phuong trinh co vo so nghiem')
Else { Trng hp a=0 v b = 0 }
Writeln('Phuong trinh vo nghiem')
Else { Trng hp a = 0 }
Begin
x:= -b/a;
Writeln('Phuong trinh co nghiem la :',x:0:2);
End;
Readln;
End.
Bi tp 3.3: Vit chng trnh nhp vo tui ca mt ngi v cho bit ngi l thiu nin, thanh
nin, trung nin hay lo nin. Bit rng: nu tui nh hn 18 l thiu nin, t 18 n 39 l thanh nin,
t 40 n 60 l trung nin v ln hn 60 l lo nin.

Uses crt;
Var tuoi:Byte;
Begin
Write(Nhap vao tuoi cua mot nguoi:'); Readln(tuoi);
Case tuoi Of
1..17: Writeln(Nguoi nay la thieu nien');
18..39: Writeln(Nguoi nay la thanh nien');
40..60: Writeln(Nguoi nay la trung nien');
Else Writeln(Nguoi nay la lao nien');
End;
Readln;
End.
Bi tp 3.4: Vit chng trnh tnh tng S = 1+2+...+N
Cch 1: Dng vng lp FOR.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0;
Gio trnh bi tp Pascal Cng


16
For i:=1 to N do S:=S+i;
Writeln('Ket qua la :',S);
Readln;
End.
Cch 2: Dng vng lp REPEAT.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0; i:=1;
Repeat
S:=S+i;
i:=i+1;
Until i>N;
Writeln('Ket qua la :',S);
Readln;
End.
Cch 3: Dng vng lp WHILE.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0; i:=1;
While 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;
Gio trnh bi tp Pascal Cng


17
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.
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) s 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
Gio trnh bi tp Pascal Cng


18
Begin
Pi:=Pi+s*t;
s:=-s; i:=i+1;
t:=4/(2*i+1);
End;
Writeln('So Pi = ',Pi:0:4);
Readln;
End.
Bi tp 3.8: Vit chng trnh nhp vo s nguyn N. In ra mn hnh tt c cc c s ca N.
tng:
Cho bin i chy t 1 ti N. Nu N MOD i=0 th vit i ra mn hnh.
Uses Crt;
Var N,i : Integer;
Begin
Clrscr;
Write('Nhap so nguyen N= '); Readln(N);
For i:=1 To N Do
If N MOD i=0 Then Write(i:5);
Readln;
End.
Bi tp 3.9: Vit chng trnh tm USCLN v BSCNN ca 2 s a, b c nhp vo t bn phm.
tng:
- Tm USCLN: Ly s ln tr s nh cho n khi a=b th dng. Lc : USCLN=a.
- BSCNN(a,b) = a*b DIV USCLN(a,b).
Uses crt;
Var a,b,aa,bb:integer;
Begin
Write('Nhap a : '); Readln(a);
Write('Nhap b : '); Readln(b);
aa:=a; bb:=b;
While aa<>bb Do
Begin
If aa>bb Then aa:=aa-bb Else bb:=bb-aa;
End;
Writeln('USCLN= ',aa);
Writeln('BSCNN= ',a*b DIV aa);
Readln;
End.
Bi tp 3.10: Vit chng trnh tm cc s c 3 ch s abc sao cho: abc = a
3
+ b
3
+ c
3
.
tng:
Dng phng php vt cn. Ta bit rng: a c th c gi tr t 19 (v a l s hng trm), b,c c
th c gi tr t 09. Ta s dng 3 vng lp FOR lng nhau duyt qua tt c cc trng hp ca
a,b,c.
Gio trnh bi tp Pascal Cng


19
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) Then Writeln(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;
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
= (-bSQRT(Delta))/(2*a).
Gio trnh bi tp Pascal Cng


20
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).

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.
Gio trnh bi tp Pascal Cng


21
Hi c my g my th?

Bi tp 3.21: Vit chng trnh nhp vo mt s nguyn dng. Hy thng bo ln mn hnh s
c bao nhiu ch s v tng cc ch s ca s .
Gi :
Dng vng lp WHILE. Trong khi N>0 th: ly ra ch s cui cng ca N tnh bng php ton
MOD 10, sau b bt i ch s cui cng ca N bng php ton DIV 10.

Bi tp 3.22: Vit chng trnh in ra mn hnh tt c cc s nguyn t t 2 n N. Vi N c nhp
t bn phm.

Bi tp 3.23: Vit chng trnh phn tch mt s ra tha s nguyn t. V d: N=100 s in ra mn
hnh:
100 | 2
50 | 2
25 | 5
5 | 5
1 |


Bi tp 3.24: 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
Gio trnh bi tp Pascal Cng


22
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 C 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.
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;
Gio trnh bi tp Pascal Cng


23
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 PHNG
- Bin ton cc: l cc bin c khai bo trong chng trnh chnh. Cc bin ny c tc dng
mi ni trong ton b chng trnh.
- Bin a phng: l cc bin c khai bo trong cc CTC. Cc bin ny ch c tc dng
trong phm vi CTC m thi.
Ch : Trong mt CTC, nu bin ton cc trng tn vi bin a phng th bin a phng c
u tin hn.
V d:
Program KhaoSatBien;
Var a,b: Integer; {bin ton cc}
Procedure ThuBien;
Var a: Integer; {bin a phng}
Begin
a:=10;
Writeln(A=,a,B=,b);
End;
Begin
a:=50;
b:=200;
ThuBien; {A=10 B=200}
Writeln(A=,a,B=,b); {A=50 B=200}
End.
IV. QUI
4.1. Khi nim qui
Trong mt chng trnh, mt CTC c th gi mt CTC khc vo lm vic. Nu nh CTC gi
li chnh n th gi l s qui.
Gio trnh bi tp Pascal Cng


24
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 .
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 je{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}
Gio trnh bi tp Pascal Cng


25
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;
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
Gio trnh bi tp Pascal Cng


26
.............
End;
END.
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;
End;
END.
By gi, ta c th vit mt chng trnh c s dng Unit MYTOOL.
Gio trnh bi tp Pascal Cng


27
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:
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
Gio trnh bi tp Pascal Cng


28
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
S:=1;
For i:=1 To n Do S:=S*x;
XMU:=S;
End;
Begin
Write(Nhap x=); Readln(x);
Write(Nhap n=); Readln(n);
Writeln(x mu n = , XMU(x,n):0:2);
Readln;
End.
Bi tp 4.5: Vit th tc KHUNG(x1,y1,x2,y2:Integer); v mt khung hnh ch nht c nh trn
bn tri l (x1,y1) v nh di bn phi l (x2,y2).
tng:
Dng cc k t m rng trong bng m ASCII:|(#179), (#196), (#218), (#192), ((#191),
(#217).

Gio trnh bi tp Pascal Cng


29
Uses crt;
Procedure Khung(x1,y1,x2,y2:Integer);
Var i,j:Integer;
Begin
Gotoxy(x1,y1); Write(#218); {V }
Gotoxy(x1,y2); Write(#192); {V }
{V 2 vin ngang ca khung}
For i:=x1+1 To x2-1 do
Begin
Gotoxy(i,y1); Write(#196);
Gotoxy(i,y2); Write(#196);
End;
Gotoxy(x2,y1); Write(#191); {V (}
Gotoxy(x2,y2); Write(#217); {V }
{V 2 vin dc ca khung}
For j:=y1+1 To y2-1 do
Begin
Gotoxy(x1,j); Write(#179);
Gotoxy(x2,j); Write(#179);
End;
End;
Begin
Clrscr;
Khung(10,5,40,20);
Readln;
End.

Bi tp 4.6: Vit th tc PHANTICH(n:Integer); phn tch s nguyn n ra tha s nguyn t.
Uses crt;
Var n:Integer;
Procedure PHANTICH(n:Integer);
Var i:Integer;
Begin
i:=2;
While n<>1 Do
Begin
While n MOD i=0 Do
Begin
Writeln(n:5,'|',i:2);
n:=n Div i;
End;
i:=i+1;
End;
Writeln(n:5,'|');
End;
Begin
Write('Nhap n='); Readln(n);
PHANTICH(n);
Readln;
End.
Gio trnh bi tp Pascal Cng


30
BI TP T GII
Bi tp 4.7: Vit 2 hm tm Max , min ca 3 s thc.

Bi tp 4.8: Vit cc hm quy tnh:
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.9: 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.10: 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.11: Lp hm qui tnh dy Fibonaci:
F(n) =
1 1 2
1 2 2
,
( ) ( ) ,
n n
F n F n n
= v =
+ >



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

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

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

Bi tp 4.15: Xy dng mt Unit SOHOC.PAS cha cc th tc v hm thc hin cc chc nng
sau:
- Gii phng trnh bc nht.
- Gii phng trnh bc hai.
- Tm Max/Min ca 2 s a,b.
- Tm USCLN v BSCNN ca 2 s nguyn a,b.
- Kim tra s nguyn dng n c phi l s nguyn t hay khng?
- Kim tra s nguyn dng n c phi l s hon thin hay khng?
- i mt s nguyn dng n sang dng nh phn.
- In ra mn hnh bng cu chng t 2 9.
Sau , t vit cc chng trnh c s dng Unit SOHOC va c xy dng trn.

Gio trnh bi tp Pascal Cng


31
Chng 5
D IU KIU MNG (RRY)
I. KHI BO MNG
C php:
TYPE <Kiu mng> = RRY [ch s] OF <Kiu d liu>;
VAR <Bin mng>:<Kiu mng>;
hoc khai bo trc tip:
VAR <Bin mng> : RRY [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 IU KIU MNG
- truy cp n phn t th k trong mng mt chiu A, ta s dng c php: A[k].
- truy cp n phn t (i,j) trong mng hai chiu M, ta s dng c php: M[i,j].
- C th s dng cc th tc READ(LN)/WRITE(LN) i vi cc phn t ca bin kiu mng.
BI TP MU
Bi tp 5.1: Vit chng trnh tm gi tr ln nht ca mt mng cha cc s nguyn gm N phn t.
tng:
- Cho s ln nht l s u tin: Max:=a[1].
- Duyt qua cc phn t a[i], vi i chy t 2 ti N: Nu a[i]>Max th thay Max:=a[i];
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
Var A:Mang;
N,i,Max:Integer;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
{Tm phn t ln nht}
Max:=A[1];
For i:=2 To N Do
If Max<A[i] Then Max:=A[i];
Gio trnh bi tp Pascal Cng


32
{In kt qu ra mn hnh}
Writeln(Phan tu lon nhat cua mang: , Max);
Readln;
End.
Bi tp 5.2: Vit chng trnh tnh tng bnh phng ca cc s m trong mt mng gm N phn t.
tng:
Duyt qua tt c cc phn t A[i] trong mng: Nu A[i]<0 th cng dn (A[i])
2
vo bin S.
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
Var A:Mang;
N,i,S:Integer;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
{Tnh tng}
S:=0;
For i:=1 To N Do
If A[i]<0 Then S:=S+A[i]*A[i];
{In kt qu ra mn hnh}
Writeln(S= , S);
Readln;
End.
Bi tp 5.3: Vit chng trnh nhp vo mt mng gm N s nguyn. Sp xp li mng theo th t
tng dn v in kt qu ra mn hnh.
tng:
Cho bin i chy t 1 n N-1, ng thi cho bin j chy t i+1 n N: Nu A[i]>A[j] th i ch
A[i], A[j].
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
Var A:Mang;
N,i,j,Tam:Integer;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
Gio trnh bi tp Pascal Cng


33
{Sp xp}
For i:=1 To N-1 Do
For j:=i+1 To N Do
If A[i]>A[j] Then
Begin
Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam;
End;
{In kt qu ra mn hnh}
Writeln(Ket qua sau khi sap xep:);
For i:=1 To N Do Write(A[i]:5);
Readln;
End.
Bi tp 5.4: Vit chng trnh nhp vo mt mng A gm N s nguyn v nhp thm vo mt s
nguyn X. Hy kim tra xem phn t X c trong mng A hay khng?
tng:
Dng thut ton tm kim tun t. So snh x vi tng phn t ca mng A. Thut ton dng li
khi x=A[i] hoc i>N.
Nu x=A[i] th v tr cn tm l i, ngc li th kt qu tm l 0 (khng tm thy).
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
Var A:Mang;
N,i,x:Integer;
Function TimKiem(x, N: Integer; A:Mang):Integer;
Var i:Integer;
Begin
I:=1;
While (I <= N) and (X<>A[I]) do I:=I+1;
If I <= N Then Timkiem:=I Else Timkiem:=0;
End;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
Write(Nhap X=); Readln(x);
{Kt qu tm kim}
If TimKiem(X,N,A)<>0 Then
Writeln(Vi tri cua X trong mang la:, TimKiem(X,N,A))
Else Writeln(X khong co trong mang.);
Readln;
End.
Gio trnh bi tp Pascal Cng


34
Bi tp 5.5: Gi s mng A c sp xp theo th t tng dn. Vit hm kim tra xem phn t
X c trong mng A hay khng?
tng:
So snh x vi phn t gia mng A[giua]. Nu x=A[giua] th dng (v tr cn tm l ch s ca
phn t gia ca mng). Ngc li, nu x>A[giua] th tm on sau ca mng [giua+1,cuoi],
ngc li th tm on u ca mng [dau,giua-1].
Sau y l hm ci t cho thut ton ny:
Function TimKiemNhiPhan(X, N: Integer; A: Mang):Integer;
Var dau,cuoi,giua:Integer;
Found:Boolean;
Begin
dau:=1; {im mt tri ca khong tm kim}
cuoi:=N; {im mt phi ca khong tm kim}
Found:=False; {cha tm thy}
While (dau <=cuoi) and (Not Found) Do
Begin
giua:=(dau + cuoi) Div 2;
If X = A[giua] Then Found:=True { tm thy}
Else
If X > A[giua] Then dau:=giua+1
Else cuoi:=giua-1;
End;
If Found Then TimKiemNhiPhan:= giua Else TimKiemNhiPhan:=0;
End;
Bi tp 5.6: Vit chng trnh tm ma trn chuyn v ca ma trn A.
tng:
Dng mng 2 chiu lu tr ma trn. Gi B l ma trn chuyn v ca ma trn A, ta c: 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}
Gio trnh bi tp Pascal Cng


35
For i:=1 To m Do
Begin
For j:=1 To n Do Write(B[i,j]:5);
Writeln;
End;
Readln;
End.
Bi tp 5.7: Cho mt mng 2 chiu A cp mxn gm cc s nguyn v mt s nguyn x. Vit chng
trnh thc hin cc cng vic sau:
a/ m s ln xut hin ca x trong A v v tr ca chng.
b/ Tnh tng cc phn t ln nht ca mi dng.
Uses Crt;
Type Mang = ARRAY[1..10,1..10] Of Integer;
Var A:Mang;
m,n,i,j,x,dem,S,max:Integer;
Begin
{Nhp ma trn}
Write(Nhap s dng m=); Readln(m);
Write(Nhap s ct n=); Readln(n);
For i:=1 To m Do
For j:=1 To n Do
Begin
Write(A[,i,j,]=); Readln(A[i,j]);
End;
{Nhp x}
Write(Nhap x=); Readln(x);
{m s ln xut hin ca x v v tr ca x}
dem:=0;
Writeln(Vi tri cua x trong mang A: );
For i:=1 To m Do
For j:=1 To n Do
If x=A[i,j] Then
Begin
Write(i,j, ; );
dem:=dem+1;
End;
Writeln(So lan xuat hien cua x trong mang A la: ,dem);
{Tnh tng cc phn t ln nht ca mi dng}
S:=0;
For i:=1 To m Do {duyt qua tng dng}
Begin
{Tm phn t ln nht ca dng th i}
Gio trnh bi tp Pascal Cng


36
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)<c, 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;
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;
Gio trnh bi tp Pascal Cng


37
S:=S+a[i]*tam;
End;
f:=S;
End;

Procedure TimNghiem(Min,Max:real);
Var m:Real;
Begin
If f(Min)*f(Max)>0 Then Writeln('Phuong trinh vo nghiem.')
Else If abs(f(Min))<epsilon Then Writeln('Nghiem la x=',min:0:2)
Else If abs(f(Max))<epsilon Then Writeln('Nghiem la x=',max:0:2)
Else
Begin
m:=(Min+Max)/2;
If abs(f(m))<=epsilon Then Writeln('Nghiem la x=',m:0:2)
Else If f(Min)*f(m)<0 Then TimNghiem(Min,m)
Else TimNghiem(m,Max);
End;
End;
Begin
NhapDaThuc;
TimNghiem(Min,Max);
Readln;
End.
Bi tp 5.9: Vit chng trnh nhp vo s t nhin N (N l), sau in cc s t 1 n n
2
vo
trong mt bng vung sao cho tng cc hng ngang, hng dc v 2 ng cho u bng nhau (bng
ny c gi l Ma phng).
V d: Vi N=3 v N=5 ta c
Bc
2 7 6 3 16 9 22 15
9 5 1 20 8 21 14 2
4 3 8 Ty 7 25 13 1 19 ng
24 12 5 18 6
11 4 17 10 23
Nam
Phung php:
Xut pht t bn phi ca nm gia. i theo hng ng bc in cc s 1, 2, ...
Khi in s, cn ch mt s nguyn tc sau:
- Nu vt ra pha ngoi bn phi ca bng th quay tr li ct u tin.
- Nu vt ra pha ngoi bn trn ca bng th quay tr li dng cui cng.
- Nu s in k chia ht cho N th s tip theo s c vit trn cng mt hng vi k nhng
cch 1 v pha bn phi.
Uses Crt;
Var A:Array[1..20,1..20] Of Word;
n,i,j,k:Word;
Begin
Gio trnh bi tp Pascal Cng


38
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;
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
eA. Nu a
i
eB 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
Gio trnh bi tp Pascal Cng


39
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);
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 (msn) sao cho
dy con ny c tng ln nht. (Dy con l dy cc phn t lin tip nhau trong mng).
Uses Crt;
Type Mang=ARRAY[1..50] Of Integer;
Var A:Mang;
n,m,i,j,k:Byte;
S,Max:Integer;
Begin
Write('So phan tu cua mang: n= '); Readln(n);
For i:=1 To n Do
Begin
Write('a[',i,']='); Readln(a[i]);
End;
Write('Nhap so phan tu cua day con: m= '); Readln(m);
k:=1; {V tr phn t u tin ca dy con}
{Gi s m phn t u tin ca mng A l dy con c tng ln nht}
Max:=0;
For i:=1 To m Do Max:=Max+A[i];
{Tm cc dy con khc}
For i:=2 To n-m+1 Do
Begin
{Tnh tng ca dy con th i}
S:=0;
Gio trnh bi tp Pascal Cng


40
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
Begin
Dong[j]:=Dong[j-1]+Dong[j];
Write(Dong[j]:4);
End;
Writeln(Dong[i]:4);
End;
Readln;
End.




Gio trnh bi tp Pascal Cng


41
BI TP T GII
Bi tp 5.13: Nhp vo mt mng cc s nguyn.
a/ Xp li mng theo th t gim dn.
b/ Nhp vo mt s nguyn t bn phm. Chn s vo mng sao cho mng vn c th t gim
dn. (khng c xp li mng)
Gi :
- Tm v tr cn chn: i.
- y cc phn t t v tr i ti n sang phi 1 v tr.
- Gn: A[i]=x;
Bi tp 5.14: Cho 2 mng s nguyn: Mng A c m phn t, mng B c n phn t.
a/ Sp xp li cc mng theo th t gim dn.
b/ Trn 2 mng li thnh mng C sao cho mng C vn c th t gim dn (Khng c xp li
mng C).
Gi :
- Dng 2 ch s i,j duyt qua cc phn t ca 2 mng A, B v k l ch s cho mng C.
- Trong khi (i<=m) v (j<=n) th:
{Tc l khi ng thi c 2 dy A, B u cha duyt ht}
+ Nu A[i]>B[j] th: C[k]:=A[i]; i:=i+1;
+ Ngc li: C[k]:=B[j]; j:=j+1;
- Nu dy no ht trc th em phn cn li ca dy kia b sung vo cui dy C.

Bi tp 5.15: Vit chng trnh tnh tng v tch 2 ma trn vung A, B cp n.
Gi :
Cng thc tnh tng 2 ma trn: C
ij
= A
ij
+ B
ij

Cng thc tnh tch 2 ma trn: C
ij
=

=
n
k
kj ik
B A
1
*
Bi tp 5.16: Vit chng trnh nhp vo 2 dy s nguyn (a)
n
v (b)
m
, msn. Kim tra xem dy {b}
c phi l dy con ca dy {a} khng?

Bi tp 5.17: Vit chng trnh nhp vo mt dy s nguyn a
1
, 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.18: Cho mng 2 chiu A cp mxn. Vit chng trnh sp xp li mng A theo yu cu sau:
a/ Cc phn t trn mi dng c sp xp theo th t gim dn.
b/ Cc dng c sp xp li theo th t tng dn ca tng cc phn t trn mi dng.







Gio trnh bi tp Pascal Cng


42
Chng 6
XU K T (STRING)
I. KHI 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 e [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 IU 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 DEETE(Var St:String; Pos, Num: Byte);
Xo trong xu St Num k t bt u t v tr Pos.
4.5. Th tc INSERT(SubSt: String; Var St: String; Pos: Byte);
Chn xu SubSt vo xu St bt u ti v tr Pos.
4.6. Th tc STR(Num; Var St:String);
i s nguyn hay thc Num thnh dng xu k t, kt qu lu vo bin St.
4.7. Th tc V(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;
Gio trnh bi tp Pascal Cng


43
Begin
Write(Nhap xau St: ); Readln(St);
For i:=1 to length(St) do St[i]:=Upcase(St[i]);
Write(Xau ket qua: , St);
Readln;
End.
Bi tp 6.2: Vit chng trnh nhp vo mt xu k t t bn phm. i xu k t sang ch
thng ri in kt qu ra mn hnh.
V d :Xu abCdAbcD s cho ra xu abcdabcd.
Uses Crt;
Var St:String;
i:Byte;
Begin
Write(Nhap xau St: ); Readln(St);
For i:=1 to length(St) do
If St[i] IN [A..Z] Then St[i]:=CHR(ORD(St[i])+32);
Write(Xau ket qua: , St);
Readln;
End.
Bi tp 6.3: Vit chng trnh m s k t ch s trong mt xu k t c nhp vo t bn phm.
Uses Crt;
Var St:String;
i,d:Byte;
Begin
Write(Nhap xau St: ); Readln(St);
For i:=1 to length(St) do
If St[i] IN [0..9] Then d:=d+1;
Write(So ky tu chu so trong xau: , d);
Readln;
End.
Bi tp 6.4: Vit chng trnh nhp mt xu t bn phm. In ra xu sau khi xa ht cc k t trng
tha trong xu. (K t trng tha l cc k t trng u xu, cui xu v nu gia xu c 2 k t
trng lin tip nhau th c 1 k t trng tha).
Uses Crt;
Var St:String;
Procedure XoaTrangThua(Var St:String);
Begin
{Xa cc k t trng u xu}
While St[1]=#32 Do Delete(St,1,1);
{Xa cc k t trng cui xu}
While St[Length(St)]=#32 Do Delete(St,Length(St),1);
{Xa cc k t trng gia xu}
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1);
End;
Begin
Write(Nhap xau St: ); Readln(St);
Gio trnh bi tp Pascal Cng


44
XoaTrangThua(St);
Write(Xau sau khi xoa cac ky tu trang thua: , St);
Readln;
End.
Bi tp 6.5: Vit chng trnh lit k cc t ca mt xu k t c nhp vo t bn phm, mi t
phi c vit trn mt dng.
Uses Crt;
Var St:String;
Procedure XoaTrangThua(Var St:String);
Begin
{Xa cc k t trng u xu}
While St[1]=#32 Do Delete(St,1,1);
{Xa cc k t trng cui xu}
While St[Length(St)]=#32 Do Delete(St,Length(St),1);
{Xa cc k t trng gia xu}
While POS(#32#32,St)<>0 Do Delete(St,POS(#32#32,St),1);
End;
Begin
Write(Nhap xau St: ); Readln(St);
XoaTrangThua(St);
St:=St+#32;
Writeln(Liet ke cac tu trong xau: );
While POS(#32,St)<>0 Do
Begin
Writeln(Copy(St,1,POS(#32,St)));
Delete(St,1,POS(#32,St));
End;
Readln;
End.
Bi tp 6.6: Vit chng trnh nhp vo mt xu k t t bn phm. Tm xu o ngc ca xu
ri in kt qu ra mn hnh theo 2 cch: qui v khng qui.
tng:
- Nu xu St c 1 k t th xu o = St.
- Ngc li: Xu o = K t cui + qui(Phn cn li ca xu St).
Uses Crt;
Var St:String;
{Gii thut khng qui}
Function XauDao(St:String):String;
Var S:String;
i:Byte;
Begin
S:=;
For i:=Length(St) DowTo 1 Do S:=S+St[i];
XauDao:=S;
End;

Gio trnh bi tp Pascal Cng


45
{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;
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;
{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;
Gio trnh bi tp Pascal Cng


46
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;
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);
Gio trnh bi tp Pascal Cng


47
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;
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);
Gio trnh bi tp Pascal Cng


48
Readln;
End.
BI TP T GII
Bi tp 6.11: Vit chng trnh nhp vo mt xu k t t bn phm. Tm v in ra mn hnh mt t
c di ln nht trong xu.
Gi :
Tch tng t so snh (xem bi tp 5).
Bi tp 6.12: Vit chng trnh nhp mt xu k t St t bn phm v mt k t ch. In ra mn hnh
xu St sau khi xa ht cc k t ch trong xu .
Gi :
While POS(ch,st)<>0 Do Delete(st,POS(ch,st),1);
Bi tp 6.13: Vit chng trnh nhp mt xu vo t bn phm v thng bo ln mn hnh xu c
phi i xng khng theo 2 cch: qui v khng qui. (V d: abba, abcba l cc xu i xng).
Gi :
- Nu xu Length(st)<=1 th st l xu i xng
- Ngc li:
+ Nu st[1]<>st[Length(st)] th st khng i xng
+ Ngc li: Gi qui vi xu st sau khi b i k t u v k t cui.
Bi tp 6.14: Vit chng trnh o ngc th t cc t trong mt xu c nhp vo t bn phm.
V d: Xu Nguyen Van An s thnh An Van Nguyen.
Gi :
Tch tng t ni vo u xu mi (xem bi tp 5).
Bi tp 6.15: Vit chng trnh nhp vo 2 xu k t s1 v s2. Kim tra xem xu s2 xut hin bao
nhiu ln trong xu s1. (Lu : length(s2)<= length(s1)).
Gi :
Dng hm POS kim tra v th tc DELETE xa bt sau mi ln kim tra.
Bi tp 6.16: Vit chng trnh nhp vo mt dng vn bn, hiu chnh vn bn theo nhng yu cu
sau y v in vn bn sau khi hiu chnh ra mn hnh:
a. Xa tt c cc k t trng tha.
b. Trc cc du cu khng c cc k t trng, sau cc du cu c mt k t trng.
c. u cu in hoa.
Bi tp 6.17: Vit chng trnh thc hin php nhn 2 s nguyn ln.
Gi :
- Vit hm nhn mt s ln vi s c 1 ch s.
- p dng hm tnh tng 2 s ln (xem bi tp 10).
Bi tp 6.18: Vit chng trnh nn v gii nn mt xu k t .
V d: Xu AAAABBBCDDDDDDDEEF sau khi nn s tr thnh 4A3BC7D2EF.
Bi tp 6.19: Vit chng trnh nhp vo h tn y ca cc hc vin mt lp hc (khng qu 50
ngi). Hy sp xp li h tn ca cc hc vin theo th t Alphabet (Nu tn trng nhau th xp
th t theo h lt, nu h lt cng trng nhau th xp th t theo h). In ra mn hnh danh sch ca
lp hc sau khi a sp xp theo th t Alphabet.
Gi :
- Dng mng xu k t lu tr h tn hc vin.
- o ngc cc t ca h tn trc khi sp xp.
Gio trnh bi tp Pascal Cng


49

Chng 7
KIU BN GHI (RECORD)
I. KHI BO D IU 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 IU KIU RECORD
Khng th dng cc th tc xut/nhp, cc php ton so snh i vi cc bin kiu record m
ch c th s dng thng qua tng trung ca bin record .

2.1. Truy nhp trc tip: TnbinRecord.Field

2.2. S dng cu lnh WITH
WITH TnbinRecord DO
BEGIN
X l Field1;
X l Field2;
...
X l FieldN;
END;
2.3. Gn bin Record: Ta c th gn 2 bin Record cng kiu vi nhau.
BI TP MU
Bi tp 7.1: Vit chng trnh thc hin php cng 2 s phc.

Uses Crt;
Type Complex = Record
a,b:Real;
End;
Var c1,c2,c3:Complex;
dau:string;
Begin
Writeln(Nhap so phuc c1:);
Write(Phan thuc a = ); Readln(c1.a);
Gio trnh bi tp Pascal Cng


50
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;
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);
Gio trnh bi tp Pascal Cng


51
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;
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
Gio trnh bi tp Pascal Cng


52
Clrscr;
Writeln('CHUONG TRINH QUAN LY DIEM THI TOT NGHIEP SINH VIEN');
Writeln('1. Nhap danh sach sinh vien');
Writeln('2. In danh sach sinh vien');
Writeln('3. Thong ke so sinh vien thi dau');
Writeln('4. danh sach sinh vien thi lai');
Writeln('<ESC>: Thoat');
c:=Readkey;
Case c Of
'1': NhapDanhSach;
'2': InDanhSach;
'3': ThongKeSVThiDau;
'4': DanhSachSVThilai;
End;
Until c=#27;
End.
Bi tp 7.3: Vit chng trnh nhp vo n nh ca mt a gic li S.
a/ Tnh din tch ca S bit:
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 e 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;
Gio trnh bi tp Pascal Cng


53
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;
DienTichDaGiac:=abs(s)/2;
end;
Function DienTichTamGiac(A,B,C:ToaDo):real;
Begin
DienTichTamGiac:=abs(A.x*B.y-B.x*A.y+B.x*C.y-C.x*B.y+C.x*A.y-A.x*C.y)/2;
End;
Function KiemTra(PP:ToaDo;n:Byte;P:Mang):Boolean;
Var i,j:integer;
s:real;
begin
s:=0;
For i:=1 to n do
begin
if i=n then j:=1 else j:=i+1;
s:=s+DienTichTamGiac(PP,P[i],P[j]);
end;
If round(s)=round(DienTichDaGiac(n,P)) then KiemTra:=true
else KiemTra:=false;
end;
Begin
NhapDinh(n,A);
Writeln('S=',DienTichDaGiac(n,A):0:2);
Readln;
Writeln('Nhap diem P:');
Write('P.x = ');readln(P.x);
Write('P.y = ');readln(P.y);
If KiemTra(P,n,A) Then Writeln('Diem P nam trong da giac S.')
Else Writeln('Diem P nam ngoai da giac S.');
Readln;
End.
BI TP T GII
Bi tp 7.4: Vit chng trnh nhn hai s phc c1, c2.
Bi tp 7.5: Vit chng trnh qun l im thi hc phn ca sinh vin bao gm cc trng sau: H
tn, im Tin, im ngoi ng, im trung bnh, Xp loi. Thc hin cc cng vic sau:
a/ Nhp vo danh sch sinh vin ca mt lp (khng qu 30 ngi), bao gm: H tn, im Tin,
im Ngoi ng. Tnh im trung bnh v Xp loi cho tng sinh vin.
b/ In ra mn hnh danh sch sinh vin ca lp theo dng sau:

H tn 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
............................ ............ ..................... ............ ..............
Gio trnh bi tp Pascal Cng


54

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.


Gio trnh bi tp Pascal Cng


55
Chng 8
D IU KIU FIE
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
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
Gio trnh bi tp Pascal Cng


56
Repeat
Write(Nhp tn tp: );readln(st);
Assign(F,st);
{$I-} (*Chuyn vic kim tra vo ra cho ngi dng*)
Reset(F);
Ok:=IOResult;
{$I+}
if not OK then writeln(Khng m c );
Until OK;
End;
2.1.4. c d liu t file
C php: Read(F, x);
Chc nng: c mt phn t d liu t file F v tr con tr file v gn cho cc bin x.
2.1.5. Ghi d liu ln file
C php: Write(F, Value);
Chc nng: Ghi gi tr Value vo file F ti v tr hin thi ca con tr file.
2.1.6. Di chuyn con tr file
C php: Seek(F, n);
Chc nng: Di chuyn con tr file n phn t th n (phn t u tin c th t l 0).
2.1.7. ng file
C php: Close(F);
Chc nng: Cp nht mi sa i trn file F v kt thc mi thao tc trn file ny.
2.1.8. Xo file
C php: Erase(F);
Chc nng: Xo file trn a c tn gn c gn cho bin file F (file cn xo l file ang
ng).
2.1.9. i tn file
C php: Rename(F, NewFile);
Chc nng: i tn ca file ang gn cho bin file F thnh tn file mi l NewFile.
2.2. Cc hm chun
2.2.1. Hm tr v v tr con tr file
C php: Filepos(F);
Ch : Con tr u file tng ng v tr 0.
2.2.2. Hm kim tra cui file
C php: EOF(F);
Chc nng: Hm tr v gi tr Truenu 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. FIE VN BN (TEXT FIE)
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
Gio trnh bi tp Pascal Cng


57
C php: Append(F);
Chc nng: M file tn ti b sung ni dung vo cui file.
3.2.2. Th tc Readln
C php: Readln(F,x);
Chc nng: c mt dng t v tr con tr file v gn cho bin x. Thc hin xong, con tr file s
chuyn v u dng tip theo. Bin x c th nhn cc kiu: Char, String hoc kiu s.
3.2.3. Th tc Writeln
C php: Writeln(F, x);
Chc nng: Ghi gi tr x vo file v tr con tr file. Kt thc th tc, con tr file s chuyn v
u dng sau.
Ch :
My in c xem l mt file dng text, v bin c m sn trong Unit Printer cho file ny l
LST. V vy in mt dng St ra my in ta c th dng lnh Writeln(LST,St).
3.2.4. Th tc Flush
C php: Flush(F);
Chc nng: Cp nht ni dung ca file c tn gn cho bin file F m khng cn dng th tc
Close v vn c th thao tc trn file.
3.2.5. Th tc SetTextBuf
C php: SetTextBuf(F, x);
Chc nng: Thay i vng nh m dnh cho file dng text vi kch thc cho bi bin x. Mc
nh vng nh ny l 128 byte.
Ch :
Th tc ny phi c gi trc cc th tc m file: Reset, Rewrite, Append.
3.2.6. Hm EOLn
C php: EOLn(F);
Chc nng: Hm tr v gi tr Truenu 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. FIE KHNG NH KIU (FIE VT )
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;

Gio trnh bi tp Pascal Cng


58
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);
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
Gio trnh bi tp Pascal Cng


59
sv.hoten:= Bhoten;
write('Ngay sinh (dd/mm/yyyy): ');
readln(sv.ngaysinh);
write('Quequan: ');
readln(sv.quequan);
write('Diem trung binh: ');
readln(sv.diemtb);
if sv.diemtb<5 then
sv.xeploai:='D'
else
if sv.diemtb<6.5 then
sv.xeploai:='C'
else
if sv.diemtb<8 then
sv.xeploai:='B'
else
sv.xeploai:='A';
write(f,sv);
end;
inc(i);
until Bhoten = '';
close(f);
end.
Bi tp 8.2: In ton b ni dung ca file SINHVIEN.DAT ra mn hnh, nu c, ngc li th thng
bo File khong ton tai.
Program Vi_du_2;
Type
St20 = String[20];
St10 = String[10];
SinhVien = record
Hoten: St20;
Ngaysinh,Quequan: St10;
DiemTb: real;
Xeploai: Char;
end;
Var
f: File of SinhVien;
Sv: sinhvien;
Bhoten:st20;
i:word;
Begin
assign(f,'Sinhvien.dat');
{$I-}
reset(f);
{$I+}
if IOResult <> 0 then
Begin
writeln('File khong ton tai');
exit;
End;
Gio trnh bi tp Pascal Cng


60
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;
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);
Gio trnh bi tp Pascal Cng


61
end;
end;
close(f);
writeln('Danh sach nay gom ',n,' sinh vien');
readln;
end.
Bi tp 8.4: Thng tin v im ca sinh vin c h tn l Bhoten, ngy sinh l Bngay v qu qun l
Bquequan b sai lch. Hy sa im v xp loi ca sinh vin ny vi d liu nhp t bn phm.
Program Vi_du_4;
Type
St20 = String[20];
St10 = String[10];
SinhVien = record
Hoten: St20;
Ngaysinh,Quequan: St10;
DiemTb: real;
Xeploai: Char;
end;
Var
f: File of SinhVien;
filename:String;
Sv: sinhvien;
Bhoten:st20;
Bngaysinh,Bquequan:St10;
Begin
assign(f,'sinhvien.dat');
{$I-}
reset(f);
{$I+}
if IOResult <>0 then
begin
writeln('File khong ton tai');
exit;
end;
write('Ho ten sinh vien: ');
readln(bhoten);
write('Ngay sinh: ');
readln(Bngaysinh);
write('Que quan: ');
readln(bquequan);
while not Eof(f) do
begin
read(f,sv);
with sv do
if (hoten=bhoten) and ((ngaysinh=bngaysinh) and (quequan=bquequan)) then
begin
write('Nhap dtb can sua: ');
readln(diemtb);
if diemtb <5 then
xeploai:='D'
Gio trnh bi tp Pascal Cng


62
else
if diemtb <6.5 then
xeploai:='C'
else
if diemtb <8 then
xeploai:='B'
else
xeploai:='A';
n:=filepos(f);
seek(f,n-1);
write(f,sv);
exit;
end;
end;
Close(f);
readln;
End.
Bi tp 8.5: In ra mn hnh ton b ni dung ca mt file vn bn, tn file c c nhp t bn
phm khi thc hin chng trnh.
Program Vidu_5;
Var
f: Text;
filename,St: String;
Begin
write(Nhap ten file: );
readln(filename);
assign(f,filename);
{$I-}
reaset(f);
{$I+}
if IOResult <> 0 then
begin
writeln(File khong ton tai);
halt;
end;
writeln(Noi dung cua file ,filename)
while not Eof(f) do
begin
readln(f,st);
writeln(st);
end;
close(f);
readln;
End.
Bi tp 8.6: m s dng, s k t trng xt hin trong mt file vn bn c trn a, tn file c
nhp t bn phm khi chy chng trnh.
Program Vidu_6;
Var
f: Text;
filename,St: String;
Gio trnh bi tp Pascal Cng


63
NLines,NStr: word;
i: byte;
Begin
write(Nhap ten file: );
readln(filename);
assign(f,filename);
reaset(f);
NBl:=0;
NStr:=0;
while not Eof(f) do
begin
readln(f,st);
inc(NStr);
for i:= 1 to length(St) do
if St[i] = #32 then
inc(NBl);
end;
Close(f);
writeln(So dong : ,NStr);
writeln(So ky tu trang: , NBl)
readln;
End.
Bi tp 8.7: Sao chp ni dung ca file SINHVIEN.DAT vo file vn bn SINHVIEN.TXT sao cho
mi sinh vin lu trong mt dng.
Program Vidu_7;
Type
St20 = String[20];
St10 = String[10];
SinhVien = record
Hoten: St20;
Ngaysinh,Quequan: St10;
DiemTb: real;
Xeploai: Char;
end;
Var
f: File of SinhVien;
g:Text;
St:String;
Sv: sinhvien;
Bdiem: String[5];
Begin
assign(f,'sinhvien.dat');
{$I-}
reset(f);
{$I+}
if IOResult <>0 then
begin
writeln('File khong ton tai');
exit;
end;
Gio trnh bi tp Pascal Cng


64
rewrite(g);
while not Eof(f) do
begin
read(f, Sv);
with Sv do
begin
Str(diemtb,bdiem:5:2);
St:= hoten+#32+ngaysinh+#32+quequan+#32+Bdiem;
writeln(g,St);
end;
end;
Close(f);
Close(g);
readln;
End.
Bi tp 8.8: Mt ma trn mxn s thc c cha trong mt file vn bn c tn MT.INP gm: dng
u cha hai s m, n; m dng tip theo ln lt cha m hng ca ma trn. Hy vit chng trnh c
d liu t file MT.INP, tnh tng ca tng hng ma trn v ghi ln file vn bn c tn KQ.OUT trong
, dng u cha s m, dng th hai cha m tng ca m hng (m,n<=200).
MT.INP KQ.OUT
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);
end;
close(f);
assign(g,KQ.OUT);
rewrite(g);
writeln(g,m);
for i:= 1 to m do
Gio trnh bi tp Pascal Cng


65
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;
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
Gio trnh bi tp Pascal Cng


66
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;
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];
Gio trnh bi tp Pascal Cng


67
for i:= 2 to m do
if S[i] > GtMax then
begin
T:=[i];
GtMax:= S[i];
end
else
if S[i] = GTMax then
T:= T+[i];
assign(g,DULIEU.OUT);
rewrite(g);
writeln(g,GTMax:0:2);
for i:=1 to 100 do
if i in T then
write(g,i,#32);
readln;
End.
Ch :
- Chng trnh trn dng mng S lu tng gi tr cc phn t trn mi hng. C th, S[i] l tng
gi tr cc phn t trn hng th i ca ma trn cho.
- Tp T , GTMax ln lt l tp cha cc ch s cc hng v gi tr ln nht ca cc phn t trn
mi hng ti thi im ang xt. Xut pht ta xem hng th nht c tng gi tr ln nht. Khi xt
hng th i c cc trng hp sau:
- S[i] > GTMax: S[i] mi l tng ln nht v lc ny ch c hng i t c gi tr ny
- S[i] = GTMax: c thm hng i t gi tr ln nht.
- S[i] < GTMax: khng c g thay i
Bi tp 8.11: Vit chng trnh sao chp ni dung ca mt file cho trc vo file khc, tn ca file
ngun v file ch c nhp t bn phm khi chy chng trnh.
Program Sao_chep_File;
const
bufsize = 200;
var
f,g: file;
File_nguon, file_dich: String;
Buf: array[1..63000] of Byte;
No_read, Temp: integer;
Begin
write(Nhap ten file nguon: );
readln(file_nguon);
assign(f,file_nguon);
reset(f);
write(Nhap ten file dich: );
readln(file_dich);
assign(g,file_dich);
rewrite(g);
Temp:= filesize(f);
while Temp > 0 do
begin
if bufsize < =Temp then
No_read:= bufsize
Gio trnh bi tp Pascal Cng


68
else
No_read:= Temp;
BlockRead((f, Buf, No_read);
BlockWrite(g,Buf, No_Read);
Temp:=Temp No_read;
end;
close(g);
End.
BI TP T GII
Bi tp 8.12: Vit chng trnh i tn mt file c trn a.
Gi :
Dng th tc Rename.
Bi tp 8.13: Vit chng trnh xa mt file c trn a.
Gi :
Dng th tc Erase.
Bi tp 8.14: Vit chng trnh ni 2 file vn bn c trn a thnh mt file th 3 vi tn file
c nhp vo t bn phm.
Gi :
- M file 1 v file 2 c d liu, m file 3 ghi d liu.
- Ln lt c tng phn t trong file 1 v 2 lu vo file 3.
- ng c ba file li.
Bi tp 8.15: Vit chng trnh thc hin cc cng vic sau:
1. To ra 2 file s nguyn v sp xp chng theo th t tng dn.
2. Hy ni 2 file li vi nhau thnh file th 3 sao cho file mi vn c th t tng dn.
Gi :
Xem gii thut bi tp 5.15.
Bi tp 8.18: Ti mt ca hng, ngi ta qun l cc hot ng MUA/BN trong nm bng cng
mt loi ho n. Mi ho n l mt bn ghi gm cc trng:
SoHoadon (s ho n); Thang (thng mua/bn); Mahang (m hng mua/bn); Loai (nhn
mt trong hai gi tr M(mua) hoc B (bn)
Nh vy cn c vo trng Loai ta bit l ho n mua hay ho n bn. Vit chng trnh cho
php nhp vo mt dy cc ho n v lu vo file c tn Hoadon.dat, qu trnh nhp dng khi
SoHoadon = 0. Tnh s d trong thng n (n c nhp t bn phm khi thc hin chng trnh) . Bit
rng s d trong mt thng c tnh theo cng thc:
S d = Tng bn - Tng mua,
trong tng bn, tng mua ln lt l tng s tin bn, mua trong thng .
Yu cu:
- Khi nhp ch kim tra Loai ch nhn mt trong hai gi tr M hoc B v thng ch nhn
gi tr t 1 n 12.
- Khng c s dng mng.
Hng dn: Khai bo file lu cc ho n, mi ho n l mt bn ghi nh sau
Type
Hoadon = record
SoHoadon: word;
Thang: byte;
Mahang: string[5];
Loai: char;
end;
Var
Gio trnh bi tp Pascal Cng


69
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;
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 }
Gio trnh bi tp Pascal Cng


70
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)
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.


Gio trnh bi tp Pascal Cng


71
Chng 9
D IU 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. M VIC VI BIN NG
2.1. Cp pht vng nh
Dng th tc New theo c php:
New(<bin tr>);
Php gn gia hai bin tr c thc hin nu chng c cng kiu. Sau php gn p:=q; cc con tr
p v q cng tr n mt a ch. Do mi thay i ca p^ cng lm thay i q^. Nh vy, cn phn
bit hai php gn p:=q v p^:=q^. Ngoi ra, cc con tr cng kiu c th c so snh vi nhau bng
cc ton t quan h = v <>.
Turbo Pascal cng khai bo sn mt con tr khng tr ti mt bin ng no gi l con tr Nil.
Gi tr con tr Nil l tng hp vi mi kiu con tr. Nil c th c gn cho bin con tr ch ra
rng con tr y hin khng c s dng. Chng ta cng c th s dng Nil trong cc php so snh.
2.2. Gii phng vng nh
Dng th tc Dispose(p);
Trong p l mt bin con tr. Th tc Dispose cho php tr li b nh ng c cp pht
bi th tc New.
III. DNH 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.

Gio trnh bi tp Pascal Cng


72
3.2. Khai bo
khai bo mt danh sch ng trc ht ta khai bo kiu ca mi nt trong danh sch.
Type <Tr nt> = ^ <Nt>;
<Nt> = Record
Data: DataType;
Next: <Tr Nt>;
End;
Var First: <Tr Nt>;
First l a ch ca nt u tin trong danh sch, da vo trng Tiep ca nt ny ta bt c a
ch ca nt th hai, c nh vy ta bit c a ch ca tt c cc nt trong danh sch. Danh sch
dng ny c gi l danh sch lin kt n.
3.3. Cc thao tc thng gp trn danh sch lin kt n
Trong phn ny chng ta gi thit rng mi nt trong danh sch c hai trng: trng Info (lu ni
dung ca bin ng) v trng Next (lu a ch ca nt tip theo). ta c khai bo danh sch nh sau
Type TroNut = ^Nut;
Nut = Record
Info: data; {data l kiu d liu nh ngha trc}
Next: TroNut;
End;
Var First:TroNut;
3.3.1. Khi to danh sch
First:=Nil;
3.3.2. B sung mt nt vo u danh sch
{1. To ra nt mi}
New(p);
p^.Info:=X;
{2. B sung vo u danh sch}
p^.Next:=First;
First:=p;
3.3.3. B sung mt nt vo cui danh sch
Xut pht danh sch khng c nt no c. Nt mi thm vo s nm cui danh sch. Khi ta cn
hai bin con tr First v Last ln lt tr n cc nt u v cui danh sch.
Procedure Khoitao;
var p: TroNut;
Begin
First:= nil; Last:= nil;
While <cn thm nt mi vo danh sch> do
Begin
New(p);
Readln(p^.Info);
p^.Next:= Nil;
If First = Nil then
First:= p
Else
Last^.next:= p;
Last:= p;
End;
Gio trnh bi tp Pascal Cng


73
End;
3.3.4. Duyt danh sch
Duyt danh sch l thm v x l tng nt trong danh sch.
Procedure Duyet;
Var p: Tronut;
Begin
p:= First;
While p <> nil do
Begin
<X l p>;
p:= p^.Next; {duyt qua nt tip theo}
End;
End;
3.3.5. B sung mt nt vo sau nt c tr bi p
Th tc sau thc hin vic b sung mt nt c ni dung x vo sau nt c tr bi p.
Procedure Bosung(p,x);
Var q: TroNut;
Begin
New(q);
q^.info:=x;
if first = nil then
begin
q^.next := nil;
first := q;
end
else
begin
q^.next:= p^.next;
p^.next:= q;
end;
End;
3.3.6. Xo mt nt khi danh sch
Th tc sau thc hin vic xa mt nt tr bi p ra khi danh sch.
Procedure Xoa(p);
Var q: TroNut;
Begin
if First = nil then
exit;
if p = First then
First := First^.next
else
begin
q:= First;
While q^.next <> p do
q:= q^.next;
q^.next:= p^.next;
end;
Dispose(p);
End;

Gio trnh bi tp Pascal Cng


74
BI TP MU
Bi tp 9.1: Trong cc bi tp t 9.1 n 9.4, dng danh sch lin kt n lu mt dy s nguyn.
Nt u tin trong danh sch c tr bi First. Cho khai bo mi nt trong danh sch nh sau:
Type TroNut = ^ Nut;
Nfut = Record
GiaTri: Integer;
Tiep: TroNut;
End;
Var First: TroNut;
Vit chng trnh thc hin cc yu cu sau:
a. Nhp dy cc s nguyn v lu vo danh sch c nt u tr bi First, qu trnh nhp dng khi d
liu a vo khng phi l s nguyn.
b. In gi tr cc nt ln hn 0.
Program Vi_du_1;
Type TroNut = ^ Nut;
Nut = Record
GiaTri: Integer;
Tiep: TroNut;
End;
Var First: TroNut;
p: pointer;

Procedure Nhap;
Var
n:integer;
kq:boolean;
last,p: tronut;
begin
first:=nil;
last:= nil;
repeat
write(Nhap gia tri mot nut Ket thuc bang ky tu Q: );
{$I-}
readln(n);
{$I+}
kq:= IOResult=0;
if kq then
begin
new(p);
p^.Giatri:=n;
p^.Tiep:=nil;
if first = nil then
first:= p;
else
last^.Tiep:= p;
last:=p;
end;
until not kq;
end;

Gio trnh bi tp Pascal Cng


75
Procedure In_so_duong;
Var
p: Tronut;
begin
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.

Procedure Insert(var first: TroNut; m: integer);
Var
p,q: Tronut;
begin
Gio trnh bi tp Pascal Cng


76
new(p);
p^.Giatri:= m;
if (first = nil) or (first^.Giatri < m ) then
begin
p^.Tiep:=nil;
first:= p;
end
else
begin
q:= first;
while (q^.Tiep <> nil) and ((q^.Tiep)^.Giatri < m) do
q:= q^.Tiep;
p^.Tiep:= q^.tiep;
q^.Tiep:= p;
end;
end;
b. Procedure InitList thc hin vic to danh sch c tnh cht trn bng cch nhp d liu t
bn phm v qu trinh nhp dng khi nhn phm ESC (yu cu: s dng th tc Insert).

Procedure InitList;
Var
m: integer;
Begin
first:= nil;
repeat
write(Nhap gia tri cua mot nut: );
readln(m);
insert(first,m);
until readkey = #27;
end;
c. Procedure List(First: TroNut) in dy gi tr cc nt trong danh sch.
Procedure List(First: Tronut);
Var
p:Tronut;
begin
p:= first;
while p <> nil do
begin
write(p^.Giatri);
p:=p^.Tiep;
end;
end;
d. Procedure DeleteZero( Var First: TroNut) thc hin vic xo tt c cc nt c gi tr 0
trong danh sch.
Procedure DeleteZero(Var First: TroNut);
var
p,q: Tronut;
begin
p:= first;
while (p <> nil) and (p^.Giatri < 0) do
Gio trnh bi tp Pascal Cng


77
begin
q:= p;
p:= p^.Tiep;
end;
while (p <> nil) and (p^.Giatri = 0) do
begin
q^.Tiep:= p^.Tiep;
dispose(p);
p:= q^.Tiep;
end;
end;
e. Function TroMax(First: TroNut): TroNut tr v a ch ca nt u tin t gi tr ln nht
(tnh t u danh sch, nu c, ngc li hm tr v gi tr Nil).
Function Tromax(First: TroNut);
var
p.q: Tronut;
m:integer;
begin
if first = nil then
TroMax:= nil
else
begin
p:= first;
m:= p^.Giatri;
q:= p^.Tiep;
while (q <> nil) do
begin
if q^.Giatri > m then
begin
p:= q;
m:= p^.Giatri;
end;
q:= q^.Tiep;
end;
TroMax:=p;
end;
end;
Bi tp 9.4: Gi s danh sch khc rng. Vit cc th tc v hm sau:
a. Function GiaTriMax(First: TroNut): integer tr v gi tr ln nht ca nt c trong danh
sch.
Function GiaTriMax(First: TroNut): integer;
var
m: integer;
p, q: Tronut;
begin
p:= first;
m:= p^.Giatri;
q:= p^.Tiep;
while q<> nil do
begin
Gio trnh bi tp Pascal Cng


78
if q^.Giatri > m then
m:=q^.Giatri;
q:= q^.Tiep;
GiaTriMax:= m;
end;
b. Function GiaTriMin(First: TroNut): Integer tr v gi tr nh nht ca nt c trong danh sch.
Function GiaTriMax(First: TroNut): integer;
var
m: integer;
p,q: Tronut;
begin
p:= first;
m:= p^.Giatri;
q:= p^.Tiep;
while q<> nil do
begin
if q^.Giatri < m then
m:=q^.Giatri;
q:= q^.Tiep;
GiaTriMin:= m;
end;
Bi tp 9.5: Cho danh sch lin kt n c nt u tr bi First, c khai bo nh sau
Type
TroNut = ^nut;
Nut = Record
Info: real;
Next: TroNut;
End;
Var
First: Tronut;
Vit cc th tc v hm sau:
a. Function Search(First: TroNut; k: word): TroNut tr v a ch ca nt th k (nu c,
ngc li, hm tr v gi tr Nil).
Function Search(First: TroNut; k: word): Tronut;
Var
d: word;
p: Tronut;
Begin
d:=0;
p:=first;
while (p <> nil) do
begin
inc(d);
if d = k then
break;
p:= p^.next;
end;
Search:= p;
End;

Gio trnh bi tp Pascal Cng


79
b. Procedure Delete_K(Var First: TroNut; k: word) thc hin vic xo nt th k trong danh
sch (nu c).
Procedure Delete_K(Var first: Tronut; k:word);
var
d: word;
p,q: Tronut;
begin
d:=1;
p:= first;
while (p<> nil) and (d <k) do
begin
q:= p;
p:= p^.Next;
inc(d);
end;
if p <> nil then
begin
if p = first then
first:= first^.next
else
q^.next:= p^.next;
dispose(p);
end;
end;
c. Procedure DeleteList thc hin vic xo tt c cc nt trong danh sch.
Procedure DeleteList;
var
p: Tronut;
begin
while first <> nil do
begin
p:= first;
first:= first^.next;
dispose(p);
end;
end;
Bi tp 9.6: Cho file vn bn c tn NGUYEN.INP lu cc s nguyn, gia cc s trong file cch
nhau mt k t trng hoc du xung dng. Vit chng trnh thc hin cc yu cu sau:
a. Ly d liu t file NGUYEN.INP v lu vo danh sch lin kt n c nt u tr bi First.
b. Tnh tng gi tr cc nt, tng gi tr cc nt dng, tng gi tr cc nt m, s nt c gi tr m, s
nt c gi tr dng. Cc kt qu tnh c s lu vo file vn bn c tn KETQUA.OUT, dng u
cha 3 gi tri tng, dng th hai cha hai gi tr cn li.
Program Vi_du_6;
type
Contro = ^ Nut;
Nut = Record
info: integer;
next: Contro;
end;
var
Gio trnh bi tp Pascal Cng


80
first: Contro;
Procedure Lay_du_lieu;
var
p: Contro;
so: integer;
f: text;
Begin
assign(f, NGUYEN.INP);
reset(f);
first:= nil;
while not Eof(f) do
begin
read(f, so);
new(p);
p^.info:= so;
p^.next:= first;
first:= p;
end;
close(f);
End;
Procedure Tinh_toan;
var
f:text;
p: Contro;
T, T_duong, T_am: longint;
N_duong, N_am: word;
begin
assign(f,KETQUA.OUT);
rewrite(f);
p:= first;
T:= 0;
T_duong: =0;
T_am:= 0;
N_duong:= 0;
N_am:= 0;
while p <> nil do
begin
T:= T + p^.info;
if p^.info > 0 then
begin
T_duong:= T_duong + p^.info;
inc(N_duong);
end;
if p^.info < 0 then
begin
T_am:= T_am + p^.info;
inc(N_am);
end;
p:= p^.next;
end;
Gio trnh bi tp Pascal Cng


81
writeln(f, T,#32,T_duong,#32,T_am);
writeln(f,N_duong,#32,N_am);
close(f);
end;
Begin
Lay_du_lieu;
Tinh_toan;
End.
Bi tp 9.7: Ngi ta lu thng tin cc bnh nhn ca bnh vin X trong danh sch lin kt n c
nt u tr bi First, mi bnh nhn tng ng vi mt nt trong danh sch c khai bo nh sau:
Type St20 = String[20];
St5 = String[5];
St2 = String[2];
TroBN = ^BenhNhan;
BenhNhan = Record
MaBN: St5; {M bnh nhn}
Hoten: St20; {H tn bnh nhn}
Tuoi: byte; {Tui}
Tiep: TroBN;
End;
Ch : Hai k t u ca m bnh nhn l m ca khoa iu tr.
Vit cc th tc v hm sau:

a. Procedure BoSungBN(Var First: TroBN; Bma: St5; Bten: St20; Btuoi: byte) b sung bnh
nhn c m l Bma, h tn l Bten, tui l Btuoi vo cui danh sch c nt u tr bi First (Lu
: Kim tra Bma cha c trong danh sch mi b sung).

Procedure BoSungBN(var First: TroBN; Bma: St5; Bten: St20; Btuoi:byte);
var
p,q: TroBN;
begin
p:= first;
while (p <> nil) and (p^.MaBN <> Bma) do
begin
q:= p;
p:= p^.tiep;
end;
if p = nil then
begin
new(p);
p^.MaBn:= Bma;
p^.Hoten:= Bten;
p^.tuoi:= Btuoi;
p^.Tiep:= nil;
if first = nil then
first:= p
else
q^.tiep:= p;
end;

Gio trnh bi tp Pascal Cng


82
b. Procedure KhoiTao(Var First: TroBN) nhp d liu cho danh sch c nt u tr bi First,
qu trnh nhp dng khi m bnh nhn a vo l xu rng (Yu cu s dng th tc
BoSungBN).
Procedure KhoiTao(Var First: TroBN);
var
bma:St5;
bten: st20;
btuoi: byte;
begin
first:= nil;
repeat
write(Nhap ma benh nhan: );
readln(bma);
if bma <> then
begin
write(Ho ten benh nhan: );
readln(bten);
write(Tuoi: );
readln(btuoi);
BosungBN(first, bma, bten, btuoi);
end;
until bma = ;
end;

c. Function SoBN(First: TroBN; BKhoa: St2): word tr v s lng bnh nhn iu tr ti khoa
c m BKhoa.
Function SoBN(First: TroBN; BKhoa: St2): word;
Var
p: TroBN;
dem:word;
Begin
dem:= 0;
p:= first;
while p <> nil do
begin
if copy(p^.MaBN,1,2) = BKhoa then inc(dem);
p:= p^.tiep;
end;
SoBN:= dem;
End;

d. Procedure LietKe(First: TroBN; n: byte) in thng tin ca cc bnh nhn c tui nh hn hoc
bng n.
Procedure LietKe(First: TroBN; n: byte);
Var
p: TroBN;
Begin
p:= first;
while p <> nil do
begin
Gio trnh bi tp Pascal Cng


83
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;
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;

Gio trnh bi tp Pascal Cng


84
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;
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;

Gio trnh bi tp Pascal Cng


85
e. Procedure XoaDL(Var First: TroDL; Tel: St6) xa i l c s in thoi Tel ra khi danh
sch.
Procedure XoaDL(Var First: TroDL; Tel: St6);
Var
p,q: TroDL;
Begin
p:= first;
while (p <> nil) and (p^.SoDT <> Tel) do
begin
q:= p;
p:= p^.next;
end;
if p <> nil then
begin
if p = first then
first:= first^.next
else
q^.next:= p^.next;
dispose(p);
end;
End;
BI TP T GII
Bi tp 9.9: Dng danh sch mc ni biu din mt a thc 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.10: Cho mt file vn bn trong c cha cc t. Cc du phn cch t l: k t trng, du
chm, du phy, du chm phy, du hai chm, du than, du hi. Mi t u bt u bng mt k t
trong tp ['A'..'Z'].
1. Vit th tc cho php c cc t trong file vn bn cho v lu cc t vo mng cc danh
sch mc ni:
TuDien : ARRAY['A'..'Z'] OF DanhSach;
Trong kiu DanhSach c cho nh sau:
TYPE DanhSach = RECORD
Tu : String[10];
Next : DanhSach;
END;
Mi danh sch mc ni trong t in u phi c sp th t (tng dn), v cc t c lu trong
t in phi khc nhau.
2. Vit mt th tc hin th tt c cc t trong t in ra mn hnh theo th t tng dn.
Gio trnh bi tp Pascal Cng


86
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.11: 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.12: 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.13: 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.14: 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
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
Gio trnh bi tp Pascal Cng


87
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.15: 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:
- 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.






Gio trnh bi tp Pascal Cng


88
Chng 10
H
I. MN HNH TRONG CH H ( GRPHIC)
Hnh nh trong ch ha c to ra bng cc im nh (Pixel), s im nh ca mn hnh
ha ty thuc vo tng loi CARD mn hnh v MODE qui nh cho mn hnh .
Vic lp trnh trong ch ha cn phi xc nh c loi mn hnh ang s dng v chng
trnh phi vn hnh c trn nhiu loi mn hnh khc nhau.
Ta ca mt im nh trn mn hnh ha cng ging nh trong ch vn bn (TEXT) vi
im nh u tin trn gc tri mn hnh l (0,0), ta nh di phi ty thuc vo phn gii
ca mn hnh, CARD mn hnh v MODE mn hnh.
(0,0)





(MaxX,MaxY)
d dng c ch ha trn mn hnh, ta cn phi c cc File sau:
GRAPH.TPU Cha cc lnh ha
* .BGI Cha Font mn hnh
* .CHR Cha Font k t
II. KHI TO V THOT KHI CH H
2.1. Khi to ch ha
Th tc INITGRAPH(Gd,Gm:Integer; Path:String);
trong :
- Gd: Ch CARD mn hnh.
Thng thng, mt chng trnh phi c chy trn nhiu loi mn hnh khc nhau nn ta c th
khai bo:
Gd = Detect ( = 0 )
Vi hng Detect, my s t ng tm CARD mn hnh tng ng chy chng trnh.
- Gm: Ch MODE mn hnh.
Trong trng hp khai bo Gd = Detect th khng cn thit phi khai bo Gm v my tnh s t
xc nh loi CARD mn hnh v thit lp ch MODE mn hnh tng ng vi CARD mn hnh
.
- Path: ng dn n ni cha cc file *.BGI. Nu Path = th ta hiu l cc file *.BGI nm
trong th mc hin hnh.
Hm GRAPHRESULT:Integer;
Hm ny tr v kt qu ca vic khi ng ha.
= 0 : Thnh cng.
<>0 : B li.
Tn ca li c xc nh bi hm GRAPHERRORMSG(Er:Integer):String;
Hm ny cho ra mt xu k t thng bo li ca ha xc nh bi i s Er.
* Hng s GrOK = 0: Vic khi ng ha c li.
V d:
Uses Graph;
Procedure ThietLapDoHoa;
var gd,gm,Gr:integer;
Begin
DetectGraph(Gd,Gm);
InitGraph(gd,gm,'C:\TP\BGI');

Gio trnh bi tp Pascal Cng


89
Gr:=GraphResult;
If Gr<>GrOK then
Begin
writeln('Loi Do hoa: ',GraphErrorMsg(Gr));
Halt(1);
End;
End;
BEGIN
ThietLapDoHoa;
. . .
END.
Ch : Ta c th khi to mode ho vi ch 256 mu bng cch s dng hm
InstallUserDriver(Name:String;Ptr:Pointer):Integer; vi iu kin trn a phi c file
SVGA256.BGI.
Procedure ThietLapDoHoa;
var gd,gm,Gr:integer;
Begin
Gd:= InstallUserDriver( SVGA256 ,NIL);
Gm:=2; {Mode 640x480x256}
InitGraph(gd,gm,'C:\TP\BGI');
End;
2.2. Thot khi ch ha
Th tc CLOSEGRAPH;
Sau y l cu trc chung ca mt chng trnh ha:.
Uses Crt,Graph;
Procedure ThietLapDoHoa;
var gd,gm,Gr:integer;
Begin
DetectGraph(Gd,Gm);
InitGraph(gd,gm,'C:\TP\BGI');
Gr:=GraphResult;
If Gr<>GrOK then
Begin
writeln('Loi Do hoa: ',GraphErrorMsg(Gr));
Halt(1);
End;
End;
BEGIN
ThietLapDoHoa;
. . .
CloseGraph;
END.
III. T V CON TR TRN MN HNH H
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).

Gio trnh bi tp Pascal Cng


90
3.4. Th tc MOVERE(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. y mu ca mt im ti ta x,y:
Hm GETPIXEL(x,y:Integer):Word;
IV. T MU TRN MN HNH H
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. C S TRONG CH H
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.
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 H
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 = 1 T 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);
Gio trnh bi tp Pascal Cng


91
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
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.
Gio trnh bi tp Pascal Cng


92
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. m loang mu mt vng kn
Th tc FLOODFILL(x,y:Integer; Color:Word);
Trong :
(x,y): im nm trong vng kn.
Color: mu mun t.
8.8. V a gic
i vi mt a gic bt k c N nh, ta phi khai bo N+1 nh v ng gp khc vi ta
im u trng vi ta im cui.
v a gic ta dng th tc: DRAWPOLY(Np:Word; Var P);
trong :
- Np: s nh ca a gic + 1
- P: cha ta cc nh, l mt mng c Np thnh phn c kiu d liu l PointType c
nh ngha trong Unit Graph nh sau:
TYPE PointType = Record
x,y: Integer;
End;
IX. CC K THUT TO 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.

Gio trnh bi tp Pascal Cng


93
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. u 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.
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);
Gio trnh bi tp Pascal Cng


94
Var i,j:Integer;
Begin
settextstyle(5,0,8);
j:=16;
(* Viet chu bong *)
for i:=0 to 15 do
begin
setcolor(j);
outtextxy(dx+i,dy+i,st);
inc(j);
end;
setcolor(40);
outtextxy(dx+i,dy+i,st);
End;

Begin
gd:=INSTALLUSERDRIVER('SVGA256',NIL);
GM:=4;
initgraph(gd,gm,'c:\bp\BGI');
WriteStr(1,100,' Pham Anh Phuong');
readln;
CloseGraph;
End.
Bi tp 10.2: V cc hnh ch nht ngu nhin trn mn hnh.
Uses Crt,Graph;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;

Function RandColor:Byte;
Begin
RandColor:=Random(MaxColors - 1)+1;
End;
Procedure DeMo;
Var x1,y1,x2,y2:Integer;
Begin
Randomize;
Repeat
x1:=Random(GetMaxX);
y1:=Random(GetMaxY);
x2:=Random(GetMaxX - x1) + x1;
y2:=Random(GetMaxX - y1) + y1;
SetColor(RandColor);
Rectangle(x1,y1,x2,y2);
Delay(500);
Until KeyPressed;
End;
Gio trnh bi tp Pascal Cng


95
BEGIN
ThietLapDohoa;
DeMo;
CloseGraph;
END.
Bi tp 10.3: V mt kim ng h quay quanh tm O(x0,y0).
Uses crt,Graph;
Var x0,y0:word;
Alpha,Beta,R:real;

Procedure VeDgt(x0,y0:word; R,Alpha:real);
Begin
Line(x0,y0,x0+Round(R*Cos(Pi*Alpha/180)),
y0-Round(R*Sin(Pi*Alpha/180)));
End;
BEGIN
ThietLapDoHoa;
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
R:=100;
Alpha:=90;
Beta:=6;
SetWriteMode(XORPut);
VeDgt(x0,y0,R,Alpha);
Repeat
VeDgt(x0,y0,R,Alpha);
Alpha:=Alpha - Beta;
VeDgt(x0,y0,R,Alpha);
Delay(250);
Until KeyPressed;
CloseGraph;
END.
Bi tp 10.4: Vit chng trnh to Menu cho php chn v thc hin cc chc nng bng cch di
chuyn mi tn trn cc hp sng, cc th tc thc hin xong quay tr li Menu chnh. Nhn ESC
thot khi chng trnh.
USES crt,graph;
Const mau1 =15;
mau2 =8;
maumn=7;
XTop=200;
YTop=100;
Dy=32;
Dx=250;
Type MANG_MENU=Array[1..20] of string;{dung luu cac dong menu }
MANG_THUTUC=Array[1..20] of Procedure;{dung luu cac thu tuc}
var DongMN:MANG_MENU;
ThuTuc:MANG_THUTUC;
SoDong:byte;
Procedure Wait;
Var ch:Char;
Gio trnh bi tp Pascal Cng


96
BEGIN
ch:=ReadKey;
END;
{$F+}
Procedure Modun1;
BEGIN
Line(50,50,200,300);
Wait;
END;
Procedure Modun2;
BEGIN
Circle(200,200,100);
Wait;
END;
Procedure Modun3;
Begin
Ellipse(200,300,0,360,100,150);
Wait;
End;
Procedure Modun4;
BEGIN
Rectangle(50,50,200,300);
Wait;
END;
Procedure Modun5;
BEGIN
OutTextXY(50,50,Chao mung cac ban den voi chuong trinh do hoa);
Wait;
END;
Procedure Modun6;
BEGIN
OutTextXY(50,50,Day la Menu do hoa);
Wait;
END;
Procedure Thoat;
BEGIN
Halt;
END;
{$F-}
Procedure ThietLapDoHoa;
var gd,gm:integer;
Begin
Gd:=0;
InitGraph(gd,gm,'C:\BP\BGI');
End;
Procedure Box(x1,y1,x2,y2:integer; MauVienTren,MauVienduoi,MauNen:byte);
{Ve nut menu}
Var i:Byte;
begin
setfillstyle(1,MauNen);
Gio trnh bi tp Pascal Cng


97
bar(x1,y1,x2,y2);
setcolor(MauVienTren);
For i:=0 to 1 do
Begin
moveto(x1-i,y2+i);
lineto(x1-i,y1-i);
lineto(x2+i,y1-i);
End;
setcolor(MauVienDuoi);
For i:=0 to 1 do
Begin
moveto(x2+i,y1-i);
lineto(x2+i,y2+i);
lineto(x1-i,y2+i);
End;
end;
Procedure Ve_menu(Xdau,Ydau,DeltaX,DeltaY:Word;
chon,SoDong:Byte;DongMN:MANG_MENU);
Var i:Byte;
Begin
for i:=1 to SoDong do
begin
if i=chon then
Box(Xdau,Ydau+i*DeltaY+6,Xdau+DeltaX,YDau+i*DeltaY+DeltaY,
mau2,mau1,maumn)
Else
Box(Xdau,Ydau+i*DeltaY+6,Xdau+DeltaX,YDau+i*DeltaY+DeltaY,
mau1,mau2,maumn);
OutTextxy(Xdau+20,Ydau+15+i*DeltaY,DongMN[i]);
end;
End;

Procedure PullDown(x,y,DeltaX,DeltaY:Word;SoDong:Byte;
DongMenu:MANG_MENU;ThuTuc:MANG_THUTUC);
Var sott,LuuSott,Chon,i:Byte;
OK:Boolean;

Function Select(Xdau,Ydau,DeltaX,DeltaY:Word;SoDong:Byte):Byte;
var ch:char; j:Byte;
Begin
While True do
Begin
If KeyPressed then
Begin
ch:=readkey;
case ch of
#13: Begin {ENTER}
select:=Sott;
Exit;
End;
Gio trnh bi tp Pascal Cng


98
#72:Begin
LuuSott:=Sott;
Sott:=Sott-1;
if Sott<1 then Sott:=SoDong;
Select:=Sott;
Box(XTop,YTop+LuuSoTT*DeltaY+6,
Xdau+DeltaX,Ydau+LuuSoTT*DeltaY+DeltaY,
Mau1,Mau2,maumn);
Outtextxy(Xdau+20,Ydau+15+LuuSoTT*DeltaY,
DongMN[LuuSoTT]);
Box(Xdau,Ydau+SoTT*DeltaY+6,
Xdau+DeltaX,Ydau+SoTT*DeltaY+DeltaY,
Mau2,Mau1,maumn);
Outtextxy(Xdau+20,Ydau+15+SoTT*DeltaY,
DongMN[SoTT]);
End;
#80:
Begin
LuuSott:=Sott;
Sott:=Sott+1;
if Sott>SoDong then Sott:=1;
Select:=Sott;
Box(Xdau,Ydau+LuuSoTT*DeltaY+6,
Xdau+DeltaX,Ydau+LuuSoTT*DeltaY+DeltaY,
Mau1,Mau2,maumn);
Outtextxy(Xdau+20,Ydau+15+LuuSoTT*DeltaY,
DongMN[LuuSoTT]);
Box(Xdau,Ydau+SoTT*DeltaY+6,
Xdau+DeltaX,Ydau+SoTT*DeltaY+DeltaY,
Mau2,Mau1,maumn);
Outtextxy(Xdau+20,Ydau+15+SoTT*DeltaY,
DongMN[SoTT]);
End;
#27: {ESC}
Begin
OK:=False; Exit;
End;
end; { of case key }
End;
End;
End;
Begin {PullDown}
Sott:=1; OK:=TRUE;
Ve_menu(X,Y,DeltaX,DeltaY,Sott,SoDong,DongMenu);
While OK do { lap khong dieu kien }
Begin
Chon:=select(x,y,DeltaX,DeltaY,SoDong);
For i:=1 to SoDong do
If (i=Chon)and OK Then
Begin
Gio trnh bi tp Pascal Cng


99
ClearDevice;
ThuTuc[i];
ClearDevice;
Ve_Menu(X,Y,DeltaX,DeltaY,Sott,SoDong,DongMenu);
End;
end;{ of While }
End;
BEGIN
SoDong:=7;
DongMN[1]:='VE DOAN THANG ';
DongMN[2]:='VE DUONG TRON';
DongMN[3]:='VE ELLIPSE';
DongMN[4]:='VE HINH CHU NHAT';
DongMN[5]:='VIET LOI CHAO';
DongMN[6]:='VIET DONG QUANG CAO';
DongMN[7]:='THOAT KHOI CHUONG TRINH';
ThuTuc[1]:=Modun1;
ThuTuc[2]:=Modun2;
ThuTuc[3]:=Modun3;
ThuTuc[4]:=Modun4;
ThuTuc[5]:=Modun5;
ThuTuc[6]:=Modun6;
ThuTuc[7]:=Thoat;
ThietLapDoHoa;
SetBKcolor(LightBlue);
PullDown(XTop,YTop,DX,DY,SoDong,DongMN,ThuTuc);
CloseGraph;
END.
Bi tp 10.5: V hai hnh





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;




Gio trnh bi tp Pascal Cng


100
Procedure HinhCa2;
Begin
SetColor(15);
PieSlice(Xc,Yc,15,345,R); {Ve bung ca}
SetColor(0);
Circle(Xc + R div 2 ,Yc - R div 2,4); {Mat ca}
End;
{$F-}
Begin
gd:=4;
InitGraph(gd,gm,);
Xc:=GetMaxX div 2;
Yc:=GetMaxY div 2;
R:=50; i:=0;
Hinh[0]:=HinhCa1;
Hinh[1]:=HinhCa2;
page1:=0; page2:=1;
Repeat
SetVisualPage(page1);
SetActivePage(page2);
i:=1-i;
Hinh[i]; Delay(200);
page1:=1-page1;
page2:=1-page2;
Until KeyPressed;
CloseGraph;
End.
Bi tp 10.6: Vit chng trnh to mt dng ch chy ngang qua mn hnh.
Uses crt,graph;
Var gd,gm:integer;
Procedure Run(s:string);
var page:byte;x,y:integer;
Begin
page:=1;
x:=getmaxx;y:=getmaxy div 3;
Settextjustify(0,1);
Setwritemode(xorput);
Setactivepage(page);
Repeat
Outtextxy(x,y,s);
Setvisualpage(page);
page:=not page;
setactivepage(page);
delay(10);
Outtextxy(x+1,y,s);
x:=x-1;
if x<-textwidth(s) then x:=getmaxx;
Until (keypressed) and (readkey=#27);
end;

Gio trnh bi tp Pascal Cng


101
Begin
gd:=4;
Initgraph(gd,gm,'C:\BP\bgi');
setcolor(14);
settextstyle(1,0,5);
Run('Pham Anh Phuong');
Closegraph;
End.
Bi tp 10.7: Vit chng trnh v m hnh chic a bay chuyn ng ngu nhin trn mn hnh.
Uses crt; Graph;
Const r = 20; StartX = 100; StartY = 50;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;
Procedure Move(Var x,y:Integer);
Var Step:Integer;
Begin
Step:=Random(2*r);
If Odd(Step) Then Step:=-Step;
x:=x+Step;
Step:=Random(r);
If Odd(Step) Then Step:=-Step;
y:=y+Step;
End;
Procedure VeDiaBay;
Begin
Ellipse(StartX,StartY,0,360,r,(r div 3)+2);
Ellipse(StartX,StartY-4,190,357,r,r div 3);
Line(StartX+7,StartY-6,StartX+10,StartY-12);
Line(StartX-7,StartY-6,StartX-10,StartY-12);
Circle(StartX+10,StartY-12,2);
Circle(StartX-10,StartY-12,2);
End;
Procedure Play;
Var x1,y1,x2,y2,size:Word;
x,y:Integer;
P:Pointer;
Begin
VeDiaBay;
x1:=StartX - (r+1);
y1:=StartY - 14;
x2:=StartX + r + 1;
y2:=StartY + (r div 3) + 3;
(* Lu v xa nh *)
size:=ImageSise(x1,y1,x2,y2);
GetMem(p,size);
GetImage(x1,y1,x2,y2,P^);
Gio trnh bi tp Pascal Cng


102
PutImage(x,y,P^,XORPut); { Xa nh }
x:=GetMaxX div 2;
y:=GetMaxY div 2;
(* Di chuyn a bay *)
Repeat
PutImage(x,y,P^,XORPut); { V a bay }
Delay(200);
PutImage(x,y,P^,XORPut); { Xa a bay }
Move(x,y);
Until KeyPressed;
FreeMem(p,size); { Gii phng vng nh }
End;
BEGIN
ThietLapDoHoa;
Play;
CloseGraph;
END.
Bi tp 10.8: Vit chng trnh v a gic u c n nh.
tng:
Khi v mt a gic u N nh, cc nh ny nm trn mt ng trn (O,R) ng thi khong
cch gia hai nh v tm to thnh mt gc nhn khng i c gi tr l 2*Pi/N.
Gi s nh th nht ca a gic nm trn ng thng to vi tm mt gc 00, nh th hai to
mt gc 2*Pi/N v nh th i s to mt gc l 2*Pi(i-1)/N.
Mt cch tng qut, ta to mt mng cha ta cc nh.
Const Max = <Gi tr>;
Type Mang = ARRAY[1..Max] of PointType;
Var P:Mang;
Gi s chn P0: PointType l ta tm ca a gic th nh th i ca a gic s to mt gc l:
Angle:=2*Pi*(i-1)/N
Nhng nu a gic ny c nh u tin to mt gc bng A0 th:
Angle:=2*Pi*((i-1)/N + A0/360)
V ta cc nh ny trn mn hnh l:
P[i].x := P0.x + R*cos(Angle)
P[i].y := P0.y - R*sin(Angle)
Ta xy dng th tc t ng lu cc nh ca a gic u vo mng P. Trong : P0 l ta
tm, A0 l gc bt u, R l bn knh, N l s nh (3<N<Max).
Uses Crt,Graph;
Const Max = 10;
Type Mang = Array[1..Max] of PointType;
Var A0,R:real;
N:Byte;
P0:PointType; P:Mang;
Procedure ThietLapDohoa;
Var Gd,Gm:Integer;
Begin
Gd:=0;
InitGraph(Gd,Gm,D:\BP\BGI);
End;
Procedure TaoDinh(R,A0:real;N:Byte;P0:PointType;Var P:MANG);
var i:Byte;
Gio trnh bi tp Pascal Cng


103
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).
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;
Gio trnh bi tp Pascal Cng


104
InitGraph(Gd,Gm,D:\BP\BGI);
End;
Function F(x:real):real;
Begin
F:=a*x*x + b*x + c;
End;
Procedure VeDoThi(Min,Max:real);
var x1,y1:integer;
dx,x,k:real;
x0,y0:word;
Begin
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
K:=GetMaxX/30;
dx:=0.001;
x:=Min;
x1:=x0 + Round(x*k);
y1:=y0 - Round(F(x)*k);
Moveto(x1,y1);
While x<Max do
Begin
x:=x+dx;
x1:=x0 + Round(x*k);
y1:=y0 - Round(F(x)*k);
LineTo(x1,y1);
End;
End;
BEGIN
Write(Nhap a= ); Readln(a);
Write(Nhap b= ); Readln(b);
Write(Nhap c= ); Readln(c);
ThietLapDoHoa;
Min:=-10; Max:=10;
{V trc ta }
Line(GetMaxX Div 2,1,GetMaxX Div 2,GetMaxY);
Line(1,GetMaxY Div 2,GetMaxX,GetMaxY Div 2);
VeDoThi(Min,Max);
Repeat Until KeyPressed;
CloseGraph;
END.
Bi tp 10.10: V hnh bng hoa.
tng:
Dng ta cc. Gi s ta c ta cc trong :
Trc cc: Ox
Gc quay: o
th ta cc ca mt im trong mt phng l cp (x,y) vi:
x = f(o).Cos(o)
y = f(o).Sin(o)
Trong : f(o) l phng trnh do ta qui nh.
V d:
Gio trnh bi tp Pascal Cng


105
f(o) = k.Cos(no) : Hnh bng hoa.

Hnh bng hoa
f(o) = a.o (a>0) : ng xon c Acsimet.
f(o) = k.(1+Cos(o)): 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;
Function F(R,Alpha:real):real; { Tnh hm f(o) }
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;
Gio trnh bi tp Pascal Cng


106
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.
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;
(a) K
0



(b) K
1


(c) K
2


Gio trnh bi tp Pascal Cng


107
Closegraph;
END.
Bi tp 10.12: Vit chng trnh to ra C-cung da trn s tinh ch tng t ca mt on thng theo
hnh sau:
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
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;
C
0
C
1
C
2
C
3


Gio trnh bi tp Pascal Cng


108
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
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
Gio trnh bi tp Pascal Cng


109
Begin
P0:=x1+cot*kx;
dong:=0;
While dong<=(diemtren div 2) do
Begin
Q0:=y1+dong*ky;
x:=0; y:=0;
dem:=1; Modun:=1;
While (dem<=gioihan)and(modun<4) do
Begin
Aux:=x;
x:=x*x-y*y +P0;
y:=2*y*Aux + Q0;
Modun:=x*x + y*y;
dem:=dem+1;
End;
If Modun<4 Then
Begin
PutPixel(cot,dong,3);
PutPixel(cot,diemtren-dong,3);
End;
dong:=dong+row;
End;
cot:=cot+col;
End;
End;
Begin
ThietLapDohoa;
KhoiTao;
Mandelbrot;
readln;
CloseGraph;
End.

Tp MandelBrot
Bi tp 10.14: Vit chng trnh m phng php quay mt tam gic quanh gc ta .
tng:
Ma trn ca php quay quanh gc ta : R =
|
|
.
|

\
|
) ( ) (
) ( ) (
o o
o o
Cos Sin
Sin Cos

+ =
=
) ( . ) ( . '
) ( . ) ( . '
o o
o o
Cos y Sin x y
Sin y Cos x x

Uses crt,Graph;
Type ToaDo=Record
x,y:real;
Gio trnh bi tp Pascal Cng


110
End;
var k,Alpha,goc:real;
P,PP,PPP,P1,P2,P3:ToaDo;
x0,y0:word;
ch:char;
Procedure ThietLapDohoa;
Var gd,gm,gr:integer;
Begin
gd:=0;
Initgraph(gd,gm,'D:\bp\bgi');
End;

Procedure VeTruc;
Begin
Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);
Line(0,GetMaxY div 2,GetMaxX,GetMaxY div 2);
End;
Procedure VeHinh(P1,P2,P3:ToaDo);
Begin
Line(x0+Round(P1.x*k),y0-Round(P1.y*k),
x0+Round(P2.x*k),y0- Round(P2.y*k));
Line(x0+Round(P2.x*k),y0-Round(P2.y*k),
x0+Round(P3.x*k),y0- Round(P3.y*k));
Line(x0+Round(P3.x*k),y0-Round(P3.y*k),
x0+Round(P1.x*k),y0- Round(P1.y*k));
End;
Procedure QuayDiem(P:ToaDo;Alpha:real; var PMoi:ToaDo);
Begin
PMoi.x:=P.x*cos(Alpha)-P.y*sin(Alpha);
PMoi.y:=P.x*sin(Alpha)+P.y*cos(Alpha);
End;
Procedure QuayHinh(P1,P2,P3:ToaDo;Alpha:real;
var P1Moi,P2Moi,P3Moi:ToaDo);
Begin
QuayDiem(P1,Alpha,P1Moi);
QuayDiem(P2,Alpha,P2Moi);
QuayDiem(P3,Alpha,P3Moi);
End;
BEGIN
ThietLapDoHoa;
x0:=GetMaxX div 2;
y0:=GetMaxY div 2;
k:=GetMaxX/50;
Vetruc;
P.x:=5; P.y:=3; PP.x:=2; PP.y:=6; PPP.x:=6; PPP.y:=-4;
P1:=P; P2:=PP; P3:=PPP;
Alpha:=0; goc:=Pi/180;
SetWriteMode(XORPut);
VeHinh(P,PP,PPP);
Repeat
Gio trnh bi tp Pascal Cng


111
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;
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:

Gio trnh bi tp Pascal Cng


112

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).




Gio trnh bi tp Pascal Cng


113
MC C

i m u .................................................................................................................................. 1
Chng 1: CC THNH PHN C BN C NGN NG P TRNH
PASCAL ...................................................................................................................................... 2
Chng 2: CC KIU D IU C BN KHI BO HNG, BIN, KIU, BIU THC
V CU NH
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 NH C CU TRC
I. nh r nhnh ....................................................................................................................... 15
II. nh 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 IU KIU MNG
I. Khai bo mng ...................................................................................................................... 38
II. Xut nhp trn d liu kiu mng ..................................................................................... 38
Bi tp mu ............................................................................................................................... 38
Bi tp t gii ............................................................................................................................ 50
Chng 6: XU K T
I. Khai bo kiu xu k t ....................................................................................................... 53
II. Truy xut d liu kiu String ............................................................................................. 53
III. Cc php ton trn xu k t ........................................................................................... 53
IV. Cc th tc v hm v xu k t ...................................................................................... 53
Bi tp mu ............................................................................................................................... 54
Bi tp t gii ............................................................................................................................ 60

Chng 7: KIU BN GHI
I. Khai bo d liu kiu bn ghi .............................................................................................. 63
II. Xut nhp d liu kiu bn ghi .......................................................................................... 63
Bi tp mu ............................................................................................................................... 63
Bi tp t gii ............................................................................................................................ 68
Chng 8: KIU FIE
I. Khai bo ................................................................................................................................ 70
II. Cc th tc v hm chun .................................................................................................. 70
III. File vn bn ........................................................................................................................ 72
Gio trnh bi tp Pascal Cng


114
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. m vic vi bin ng ....................................................................................................... 91
III. Danh sch ng .................................................................................................................. 92
Bi tp mu ............................................................................................................................... 94
Bi tp t gii .......................................................................................................................... 108
Chng 10: H
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

You might also like