II
Gio trnh bi tp Pascal
LI M U
Theo khung chng trnh ca B Gio Dc v o To, Ngn ng Lp trnh Pascal l
mt phn quan trng trong hc phn Tin hc i cng thuc cc khi ngnh Khoa hc
T nhin, c bit l ngnh Cng ngh Thng tin.
Nhm p ng yu cu hc tp ca hc sinh, sinh vin bc u lm quen vi cng
vic lp trnh, chng ti bin son b Gio Trnh Bi tp Pascal nhm gip cho
sinh vin c mt ti liu hc tp, rn luyn tt kh nng lp trnh, to nn tng
vng chc cho cc mn hc tip theo trong chng trnh o to C nhn Cng ngh
Thng tin .
Gio trnh bai gm rt nhiu bi tp t n gin n phc tp. Cc bi tp ny c
bin son da trn khung chng trnh ging dy mn Tin hc i cng. Bn cch ,
chng ti cng b sung mt s bi tp da trn c s mt s thut ton chun vi cc
cu trc d liu c m rng nhm nng cao k nng, phng php lp trnh cho sinh
vin.
Ni dung ca gio trnh c chia thnh 10 chng. Trong mi chng u c phn
tm tt l thuyt, phn bi tp mu v cui cng l phn bi tp t gii bn c t mnh
kim tra nhng kin thc v kinh nghim hc. Trong phn bi tp mu, i vi nhng
bi tp kh hoc c thut ton phc tp, chng ti thng nu ra tng v gii thut
trc khi vit chng trnh ci t.
Xin chn thnh cm n cc ng nghip Khoa Cng ngh Thng tin Trng i hc
Khoa hc Hu gip , ng gp kin hon chnh ni dung gio trnh ny.
Chng ti hy vng sm nhn c nhng kin ng gp, ph bnh ca bn c v ni
dung, cht lng v hnh thc trnh by gio trnh ny ngy mt hon thin hn.
Hu, Thng 07 Nm 2004
CC TC GI
Chng 1
CC THNH PHN C BN CA
NGN NG LP TRNH PASCAL
Pascal l mt ngn ng lp trnh bc cao do Niklaus Wirth, gio s in ton
trng i hc k thut Zurich (Thy S) xut nm 1970. ng ly tn Pascal k nim
nh ton hc v nh trit hc ngi Php ni ting Blaise Pascal.
1. Cc tp tin cn thit khi lp trnh vi Turbo Pascal
lp trnh c vi Turbo Pascal, ti thiu cn 2 file sau:
TURBO.EXE: Dng son tho v dch chng trnh.
TURBO.TPL: Th vin cha cc n v chun chy vi TURBO.EXE.
Ngoi ra, mun lp trnh ho th phi cn thm cc tp tin:
GRAPH.TPU: Th vin ho.
*.BGI: Cc file iu khin cc loi mn hnh tng ng khi dng ho.
*.CHR: Cc file cha cc font ch ha.
2. Cc bc c bn khi lp mt chng trnh Pascal
Bc 1: Son tho chng trnh.
Bc 2: Dch chng trnh (nhn phm F9), nu c li th phi sa li.
Bc 3: Chy chng trnh (nhn phm Ctrl-F9).
3. Cu trc chung ca mt chng trnh Pascal
{ Phn tiu }
PROGRAM Tn_chng_trnh;
{ Phn khai bo }
USES ......;
CONST .....;
TYPE .......;
VAR ........;
PROCEDURE ............;
FUNCTION ..............;
...............
{ Phn thn chng trnh }
BEGIN
...........
END.
V d 1: Chng trnh Pascal n gin nht
BEGIN
Write(Hello World!);
END.
V d 2:
Program Vidu2;
Const PI=3.14;
Var R,S:Real;
Begin
R:=10;
{Bn knh ng trn}
S:=R*R*PI; {Din tch hnh trn}
Writeln(Dien tich hinh tron = , S:0:2); { In ra mn hnh }
Readln;
End.
4. Mt s phm chc nng thng dng
F2:
Lu chng trnh ang son tho vo a.
F3:
M file mi hoc file tn ti trn a son tho.
Alt-F3:ng file ang son tho.
Alt-F5:Xem kt qu chy chng trnh.
F8:
Chy tng cu lnh mt trong chng trnh.
Alt-X:
Thot khi Turbo Pascal.
Alt-: Dch chuyn qua li gia cc file ang m.
F10:
Vo h thng Menu ca Pascal.
5. Cc thao tc c bn khi son tho chng trnh
5.1. Cc phm thng dng
Insert: Chuyn qua li gia ch v ch chn.
Home: a con tr v u dng.
End: a con tr v cui dng.
Page Up: a con tr ln mt trang mn hnh.
Page Down: a con tr xung mt trang mn hnh.
Del: Xo k t ngay ti v tr con tr.
Back Space ((): Xa k t bn tri con tr.
Ctrl-PgUp: a con tr v u vn bn.
Ctrl-PgDn: a con tr v cui vn bn.
Ctrl-Y: Xa dng ti v tr con tr.
5.2. Cc thao tc trn khi vn bn
Chn khi vn bn: Shift + Ctrl-KY: Xo khi vn bn ang chn
Ctrl-Insert: a khi vn bn ang chn vo Clipboard
Shift-Insert: Dn khi vn t Clipboard xung v tr con tr.
6. Cc thnh phn c bn ca ngn ng Pascal
6.1. T kha
T kho l cc t m Pascal dnh ring phc v cho mc ch ca n. (Chng hn
nh: BEGIN, END, IF, WHILE,...)
Ch : Vi Turbo Pascal 7.0 tr ln, cc t kho trong chng trnh s c hin
th khc mu vi cc t khc.
6.2. Tn (nh danh)
nh danh l mt dy k t dng t tn cho cc hng, bin, kiu, tn chng trnh
con... Khi t tn, ta phi ch mt s im sau:
Khng c t trng tn vi t kho
K t u tin ca tn khng c bt u bi cc k t c bit hoc ch s.
Khng c t tn vi k t space,cc php ton.
V d: Cc tn vit nh sau l sai
1XYZ
Sai v bt u bng ch s.
#LONG
Sai v bt u bng k t c bit.
FOR
Sai v trng vi t kho.
KY TU
Sai v c khong trng (space).
LAP-TRINHSai v du tr (-) l php ton.
6.3. Du chm phy (;)
Du chm phy c dng ngn cch gia cc cu lnh. Khng nn hiu du chm phy l
du kt thc cu lnh.
V d:
FOR i:=1 TO 10 DO Write(i);
Trong cu lnh trn, lnh Write(i) c thc hin 10 ln. Nu hiu du chm
phy l kt thc cu lnh th lnh Write(i) ch thc hin 1 ln.
6.4. Li gii thch
Cc li bn lun, li ch thch c th a vo bt k ch no trong chng trnh
cho ngi c d hiu m khng lm nh hng n cc phn khc trong chng trnh. Li
gii thch c t gia hai du ngoc { v } hoc gia cm du (* v *).
V d:
Var a,b,c:Rea; {Khai bo bin}
Delta := b*b 4*a*c; (* Tnh delta gii phng trnh bc 2 *)BI TP THC
HNH
1. Khi ng Turbo Pascal.
2. Nhp vo on chng trnh sau:
Uses Crt;
Begin
Writeln(***********************************************************);
Writeln(* CHUONG TRINH PASCAL DAU TIEN CUA TOI *);
Writeln(* Oi! Tuyet voi!... *);
Writeln(***********************************************************);
Readln;
End.
3. Dch v chy chng trnh trn.
4. Lu chng trnh vo a vi tn BAI1.PAS.
5. Thot khi Pascal.
6. Khi ng li Turbo Pascal.
7. M file BAI1.PAS.
8. Chn thm vo dng: CLRSCR; vo sau dng BEGIN
9. Dch v chy th chng trnh.
10. Lu chng trnh vo a.
11. Thot khi Pascal.
12. Vit chng trnh in ra mn hnh cc hnh sau:
* ******** *******
*** ** ** ** **
** ** ** ** **
** ** ******** * *
********* ** ** **
** ** ** ** ** **
** ** ******** ********
Chng 2
CC KIU D LIU C BN
KHAI BO HNG, BIN, KIU, BIU THC V CU LNH
I. CC KIU D LIU C BN
1. Kiu logic
- T kha: BOOLEAN
- min gi tr: (TRUE, FALSE).
- Cc php ton: php so snh (=, ) v cc php ton logic: AND, OR, XOR,
NOT.
Trong Pascal, khi so snh cc gi tr boolean ta tun theo qui tc:
FALSE < TRUE.
Gi s A v B l hai gi tr kiu Boolean. Kt qu ca cc php ton c th hin
qua bng di y:
ABA AND BA OR BA XOR BNOT A
TRUETRUETRUETRUEFALSEFALSE
TRUEFALSEFALSETRUETRUEFALSE
FALSETRUEFALSETRUETRUETRUE
FALSEFALSEFALSEFALSEFALSETRUE
2. Kiu s nguyn
2.1. Cc kiu s nguyn
Tn kiuPhm viDung lng
Shortint-128 ( 1271 byte
Byte0 ( 2551 byte
Integer-32768 ( 327672 byte
Word0 ( 655352 byte
LongInt-2147483648 ( 21474836474 byte
2.2. Cc php ton trn kiu s nguyn
2.2.1. Cc php ton s hc:
+, -, *, / (php chia cho ra kt qu l s thc).
Php chia ly phn nguyn: DIV (V d : 34 DIV 5 = 6).
Php chia ly s d: MOD (V d: 34 MOD 5 = 4).
2.2.2. Cc php ton x l bit:
Trn cc kiu ShortInt, Integer, Byte, Word c cc php ton:
NOT, AND, OR, XOR.
ABA AND BA OR BA XOR BNOT A
111100
100110
010111
000001
SHL (php dch tri): a SHL n ( a ( 2n SHR (php dch phi): a SHR n (
a DIV 2n3. Kiu s thc
3.1. Cc kiu s thc
:
Tn kiuPhm viDung lng
Single1.5(10-45 ( 3.4(10+384 byte
Real2.9(10-39 ( 1.7(10+386 byte
Double5.0(10-324 ( 1.7(10+3088 byte
Extended3.4(10-4932 ( 1.1(10+493210 byte
Ch : Cc kiu s thc Single, Double v Extended yu cu phi s dng
chung vi b ng x l s hoc phi bin dich chng trnh vi ch th {$N+} lin
kt b gi lp s.
3.2. Cc php ton trn kiu s thc: +, -, *, /
Ch : Trn kiu s thc khng tn ti cc php ton DIV v MOD.
3.3. Cc hm s hc s dng cho kiu s nguyn v s thc:
SQR(x):
Tr v x2
SQRT(x):
Tr v cn bc hai ca x (x(0)
ABS(x):
Tr v |x|
SIN(x):
Tr v sin(x) theo radian
COS(x):
Tr v cos(x) theo radian
ARCTAN(x):Tr v arctang(x) theo radian
LN(x):
Tr v ln(x)
EXP(x):
Tr v ex
TRUNC(x):
Tr v s nguyn gn vi x nht nhng b hn x.
INT(x):
Tr v phn nguyn ca x
FRAC(x):
Tr v phn thp phn ca x
ROUND(x):
Lm trn s nguyn x
PRED(n):
Tr v gi tr ng trc n
SUCC(n):
Tr v gi tr ng sau n
ODD(n):
Cho gi tr TRUE nu n l s l.
INC(n):
Tng n thm 1 n v (n:=n+1).
DEC(n):
Gim n i 1 n v (n:=n-1).
4. Kiu k t
- T kho: CHAR.
- Kch thc: 1 byte.
- biu din mt k t, ta c th s dng mt trong s cc cch sau y:
t k t trong cp du nhy n. V d 'A', '0'.
Dng hm CHR(n) (trong n l m ASCII ca k t cn biu din). V d CHR(65)
biu din k t 'A'.
Dng k hiu #n (trong n l m ASCII ca k t cn biu din). V d #65.
- Cc php ton: =, >, >=, 0
d/ e
Bi tp 2.5: Vit chng trnh tnh sin tch tam gic theo cng thc
sau:
S =
vi p =
(a+b+c)
Bi tp 2.6: Vit chng trnh tnh khong cch t mt im I(xi,yi) n ng
thng c phng trnh D: Ax + By + C = 0.
Gi :
Cng thc tnh khong cch: h =
Bi tp 2.7: Vit chng trnh tch mt s n thnh 2 s a, b sao cho tch
P=a*b2 t cc i vi n c nhp vo t bn phm.
Gi :
Gi x l s th hai th s th nht l: (n-x). Theo ta c: P(x) =
x2.(n-x).
Hm P t cc i khi P(x) = -3x2 + 2nx = 0 ( x = 2n/3.
Bi tp 2.8: Mn hnh ha ca mt my tnh c phn gii: 640x480. Bit rng,
mi im trn mn hnh chim 1 byte. Hi cn bao nhiu byte lu tr ton b mn
hnh ha ?
C 2 sinh vin vit chng trnh tnh s byte lu tr mn hnh ha:
Program Sinhvien1;
Vara,b:integer;
s:Word;
Begin
a:=640; b:=480;
s:=a*b;
writeln(s); readln;
End.
Program Sinhvien2;
Vara,b:Word;
s: LongInt;
Begin
a:=640; b:=480;
s:=a*b;
writeln(s); readln;
End.
Hy cho bit 2 chng trnh trn cho kt qu ng hay sai? Ti sao?
Bi tp 2.9: Mn hnh ha ca mt my tnh c phn gii: 640x480. Bit rng,
mi im trn mn hnh chim 1 byte. Hi cn bao nhiu byte lu tr mt vng c
kch thc bng 1/10 mn hnh ha ?
C 2 sinh vin vit chng trnh gii bi ton ny nh sau:
Program Sinhvien1;
Vara,b:Word;
s: LongInt;
Begin
a:=640; b:=480;
s:=a;
s:=s*b;
s:=s DIV 10;
writeln(s); readln;
End.
Program Sinhvien2;
Vara,b:Word;
s: LongInt;
Begin
a:=640; b:=480;
s:=a*b DIV 10;
writeln(s); readln;
End.
Hy cho bit 2 chng trnh trn cho kt qu ng hay sai? Ti sao?
Chng 3
CC CU LNH C CU TRC
I. CU LNH R NHNH
1.1. Lnh IF
C php:
(1)IF B THEN S;
(2)IF B THEN S1 ELSE S2;
S thc hin:
Ch : Khi s dng cu lnh IF th ng trc t kho ELSE khng c c du chm
phy (;).
1.2. Lnh CASE
C php:
Dng 1Dng 2
CASE B OF
Const 1: S1;
Const 2: S2;
...
Const n: Sn;
END;CASE B OF
Const 1: S1;
Const 2: S2;
...
Const n: Sn;
ELSE Sn+1;
END;
Trong :
B: Biu thc kiu v hng m c nh kiu nguyn, kiu logic, kiu k t, kiu
lit k.
Const i: Hng th i, c th l mt gi tr hng, cc gi tr hng (phn cch
nhau bi du phy) hoc cc on hng (dng hai du chm phn cch gia gi tr u v
gi tr cui).
Gi tr ca biu thc v gi tr ca tp hng i (i=1n) phi c cng kiu.
Khi gp lnh CASE, chng trnh s kim tra:
- Nu gi tr ca biu thc B nm trong tp hng const i th my s thc hin
lnh Si tng ng.
- Ngc li:
+ i vi dng 1: Khng lm g c.
+ i vi dng 2: thc hin lnh Sn+1.
II. CU LNH LP
2.1. Vng lp xc nh
C hai dng sau:
(Dng tin
FOR := TO DOS;
(Dng li
FOR := DOWNTO DOS;
S thc hin vng lp FOR:
Ch : Khi s dng cu lnh lp FOR cn ch cc im sau:
Khng nn tu tin thay i gi tr ca bin m bn trong vng lp FOR v lm nh
vy c th s khng kim sot c bin m.
Gi tr Max v Min trong cu lnh FOR s c xc nh ngay khi vo u vng lp.
Do cho d trong vng lp ta c thay i gi tr ca n th s ln lp cng khng
thay i.5.3.2. Vng lp khng xc nh
Dng REPEATDng WHILE
Repeat
S;
Until B;While B Do S;
ngha:
Dng REPEAT: Lp li cng vic S cho n khi biu thc B=TRUE th dng.
Dng WHILE: Trong khi biu thc B=TRUE th tip tc thc hin cng vic
S.
BI TP MU
Bi tp 3.1: Vit chng trnh nhp vo mt s nguyn v kim tra xem s va
nhp l s chn hay s l.
Uses crt;
Var x:integer;
Begin
Write('Nhap vao mot so nguyen : '); Readln(x);
If x MOD 2=0 Then
Writeln('So vua nhap vao la so chan')
Else
Writeln('So vua nhap vao la so le');
Readln;
End.
Bi tp 3.2: Vit chng trnh gii phng trnh bc nht ax+b=0
Uses Crt;
Var a,b,x : real;
Begin
Write('a = '); Readln(a);
Write('b = '); Readln(b);
If a = 0 Then { Nu a bng 0 }
If b = 0 Then { Trng hp a = 0 v b = 0 }
Writeln('Phuong trinh co vo so nghiem')
Else { Trng hp a=0 v b ( 0 }
Writeln('Phuong trinh vo nghiem')
Else { Trng hp a ( 0 }
Begin
x:= -b/a;
Writeln('Phuong trinh co nghiem la :',x:0:2);
End;
Readln;
End.Bi tp 3.3: Vit chng trnh nhp vo tui ca mt ngi v cho bit ngi
l thiu nin, thanh nin, trung nin hay lo nin. Bit rng: nu tui nh hn
18 l thiu nin, t 18 n 39 l thanh nin, t 40 n 60 l trung nin v ln hn
60 l lo nin.
Uses crt;
Var tuoi:Byte;
Begin
Write(Nhap vao tuoi cua mot nguoi:');Readln(tuoi);
Case tuoi Of
1..17:Writeln(Nguoi nay la thieu nien');
18..39:Writeln(Nguoi nay la thanh nien');
40..60:Writeln(Nguoi nay la trung nien');
Else
Writeln(Nguoi nay la lao nien');
End;
Readln;
End.
Bi tp 3.4: Vit chng trnh tnh tng S = 1+2+...+N.
Cch 1: Dng vng lp FOR.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0;
For i:=1 to N do S:=S+i;
Writeln('Ket qua la :',S);
Readln;
End.
Cch 2: Dng vng lp REPEAT.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0; i:=1;
Repeat
S:=S+i;
i:=i+1;
Until i>N;
Writeln('Ket qua la :',S);
Readln;
End.
Cch 3: Dng vng lp WHILE.
Program TinhTong;
Uses crt;
Var N,i,S:integer;
Begin
Clrscr;
Write('Nhap vao gia tri cua N :'); Readln(N);
S:=0; i:=1;
While iEpsilon Do
Begin
Pi:=Pi+s*t;
s:=-s; i:=i+1;
t:=4/(2*i+1);
End;
Writeln('So Pi = ',Pi:0:4);
Readln;
End.
Bi tp 3.8:Vit chng trnh nhp vo s nguyn N. In ra mn hnh tt c cc c
s ca N.
tng:
Cho bin i chy t 1 ti N. Nu N MOD i=0 th vit i ra mn hnh.
Uses Crt;
Var N,i : Integer;
Begin
Clrscr;
Write('Nhap so nguyen N= '); Readln(N);
For i:=1 To N Do
If N MOD i=0 ThenWrite(i:5);
Readln;
End.
Bi tp 3.9:Vit chng trnh tm USCLN v BSCNN ca 2 s a, b c nhp vo t
bn phm.
tng:
- Tm USCLN: Ly s ln tr s nh cho n khi a=b th dng. Lc :
USCLN=a.
- BSCNN(a,b) = a*b DIV USCLN(a,b).
Uses crt;
Var a,b,aa,bb:integer;
Begin
Write('Nhap a : '); Readln(a);
Write('Nhap b : '); Readln(b);
aa:=a; bb:=b;
While aabb Do
Begin
If aa>bb Then aa:=aa-bb Elsebb:=bb-aa;
End;
Writeln('USCLN= ',aa);
Writeln('BSCNN= ',a*b DIV aa);
Readln;
End.
Bi tp 3.10: Vit chng trnh tm cc s c 3 ch s sao cho: = a3 + b3 +
c3.
tng:
Dng phng php vt cn. Ta bit rng: a c th c gi tr t 1(9 (v a l s
hng trm), b,c c th c gi tr t 0(9. Ta s dng 3 vng lp FOR lng nhau
duyt qua tt c cc trng hp ca a,b,c.
ng vi mi b abc, ta s kim tra: Nu 100.a + 10.b + c = a3 + b3 + c3
th in ra b abc .
Uses crt;
Var a,b,c : Word;
Begin
For a:=1 To 9 Do
For b:=0 To 9 Do
For c:=0 To 9 Do
If (100*a + 10*b + c)=(a*a*a + b*b*b + c*c*c)
ThenWriteln(a,b,c);
Readln;
End.
Bi tp 3.11: Vit chng trnh nhp vo s t nhin N ri thng bo ln mn hnh
s c phi l s nguyn t hay khng.
tng:
N l s nguyn t nu N khng c c s no t 2 ( N div 2. T nh ngha ny ta
a ra gii thut:
- m s c s ca N t 2 ( N div 2 lu vo bin d.
- Nu d=0 th N l s nguyn t.
Uses crt;
Var N,i,d : Word;
Begin
If N0 th: ly ra ch s cui cng ca N tnh bng php ton MOD 10, sau b
bt i ch s cui cng ca N bng php ton DIV 10.Bi tp 3.24: Vit chng trnh
in ra mn hnh tt c cc s nguyn t t 2 n N. Vi N c nhp t bn phm.
Bi tp 3.25: Vit chng trnh phn tch mt s ra tha s nguyn t. V d:
N=100 s in ra mn hnh:
100|2
50|2
25|5
5|5
1|
Bi tp 3.26: S hon thin l s t nhin c tng cc c ca n (khng k chnh
n) bng chnh n. Vit chng trnh kim tra xem mt s c nhp vo t bn phm c
phi l s hon thin hay khng? V d: 6, 28 l cc s hon thin.
Gi :
- Tnh tng cc c s ca N: t 1 ( N div 2 lu vo bin S.
- Nu S=N th N l s hon thin.
Bi tp 3.27: Vit chng trnh in ra cc s nguyn t 1 n N2 theo hnh xon
c vi N c nhp vo t bn phm. V d, vi N=5 ta c:
12345
161718196
152425207
142322218
131211109
Chng 4
CHNG TRNH CON: TH TC V HM
I. KHI NIM V CHNG TRNH CON
Chng trnh con (CTC) l mt on chng trnh thc hin trn vn hay mt chc
nng no . Trong Turbo Pascal, c 2 dng CTC:
Th tc (PROCEDURE): Dng thc hin mt hay nhiu nhim v no .
Hm (FUNCTION): Tr v mt gi tr no (c kiu v hng, kiu string hoc kiu
con tr). Hm c th s dng trong cc biu thc.
Ngoi ra, trong Pascal cn cho php cc CTC lng vo nhau.
II. CU TRC CHUNG CA MT CHNG TRNH C S DNG CTC
PROGRAM Tn_chng_trnh;
USES CRT;
CONST ............;
TYPE ............;
VAR ............;
PROCEDURE THUTUC[(Cc tham s)];
[Khai bo Const, Type, Var]
BEGIN
..............
END;
FUNCTION HAM[(Cc tham s)]:;
[Khai bo Const, Type, Var]
BEGIN
..............
HAM:=;
END;
BEGIN {Chng trnh chnh}
...................
THUTUC[(...)];
...................
A:= HAM[(...)];
...................
END.
Ch : Trong qu trnh xy dng CTC, khi no th nn dng th tc/hm?
Dng hmDng th tc
- Kt qu ca bi ton tr v 1 gi tr duy nht (kiu v hng, kiu string
hoc kiu con tr).- Li gi CTC cn nm trong cc biu thc tnh ton.- Kt qu
ca bi ton khng tr v gi tr no hoc tr v nhiu gi tr hoc tr v kiu d liu
c cu trc (Array, Record, File).- Li gi CTC khng nm trong cc biu thc
tnh ton.
V d 1: Vit CTC tnh n! = 1.2...n.
tng: V bi ton ny tr v 1 gi tr duy nht nn ta dng hm.
Function GiaiThua(n:Word):Word;
Var P, i:Word;
Begin
P:=1;
For i:=1 To n Do P:=P*i;
GiaiThua:=P;
End;
V d 2: Vit chng trnh con tm im i xng ca im (x,y) qua gc ta .
tng: V bi ton ny tr v ta im i xng (xx,yy) gm 2 gi tr nn ta dng
th tc.
Procedure DoiXung(x,y:Integer; Var xx,yy:Integer);
Begin
xx:=-x;
yy:=-y;
End;
CH : Trong 2 v d trn:
n, x, y c gi l tham tr (khng c t kha var ng trc) v sau khi ra
khi CTC gi tr ca n khng b thay i.
xx, yy c gi l tham bin (c t kha var ng trc) v sau khi ra khi CTC
gi tr ca n b thay i.
III. BIN TON CC V BIN A PHNG
Bin ton cc: l cc bin c khai bo trong chng trnh chnh. Cc bin ny c
tc dng mi ni trong ton b chng trnh.
Bin a phng: l cc bin c khai bo trong cc CTC. Cc bin ny ch c tc
dng trong phm vi CTC m thi.
Ch : Trong mt CTC, nu bin ton cc trng tn vi bin a phng th bin a
phng c u tin hn.
V d:
Program KhaoSatBien;
Var a,b: Integer;{bin ton cc}
Procedure ThuBien;
Var a: Integer;{bin a phng}
Begin
a:=10;
Writeln(A=,a,B=,b);
End;
Begin
a:=50;
b:=200;
ThuBien;
{A=10 B=200}
Writeln(A=,a,B=,b);
{A=50 B=200}
End.
IV. QUI
4.1. Khi nim qui
Trong mt chng trnh, mt CTC c th gi mt CTC khc vo lm vic. Nu nh
CTC gi li chnh n th gi l s qui.
4.2. Phng php thit k gii thut qui
Tham s ha bi ton
Tm trng hp suy bin.
Phn tch cc trng hp chung (a v cc bi ton cng loi nhng nh hn).
V d: Vit hm qui tnh n! = 1.2...n.
Tham s ha: n! = Factorial(n);
Factorial(0) = 1
(trng hp suy bin)
Factorial(n) = n*Factorial(n-1)
(trng hp chung)
Function Factorial(N:integer):Longint;
Begin
If N=0 Then Factorial:=1
ElseFactorial:=N*factorial(N-1); { li gi qui }
End;
4.3. Gii thut quay lui
Bi ton:
Hy xy dng cc b gi tr gm n thnh phn (x1,...,xn) t mt tp hu hn cho
trc sao cho cc b tha mn yu cu B cho trc no .
Phng php chung
Gi s xc nh c k-1 phn t u tin ca dy: x1,...,xk-1. Ta cn xc nh phn
t th k. Phn t ny c xc nh theo cch sau:
- Gi s Tk: tp tt c cc gi tr m phn t xk c th nhn c. V tp Tk hu hn
nn ta c th t nk l s phn t ca Tk theo mt th t no , tc l ta c th thnh
lp mt nh x 1-1 t tp Tk ln tp {1, 2, ..., nk}.
- Xt j({1, 2, ..., nk}. Ta ni rng j chp nhn c nu ta c th b sung
phn t th j trong Tk vi t cch l phn t xk vo trong dy x1,...,xk-1 c
dy x1,...,xk.
- Nu k=n: B (x1,...,xk) tha mn yu cu B, do b ny c thu nhn.
- Nu kb Then a:=a-b Else b:=b-a;
End;
UCLN:=a;
End;
Function NGUYENTO(n:Word):Boolean;
Var d,i:Word;
Begin
d:=0;
For i:=2 To n DIV 2 Do
If n MOD i=0 Then d:=d+1;
NGUYENTO:=d=0;
End;
END.
By gi, ta c th vit mt chng trnh c s dng Unit MYTOOL.
Uses Crt, MyTool;
Var a,b:Integer;
Begin
CLRSCR;
Write(10,5,CHUONG TRINH MINH HOA);
Write(Nhap a = ); Readln(a);
Write(Nhap b = ); Readln(b);
Writeln(UCLN cua ,a, va ,b, la:,UCLN(a,b));
Write(Nhap m = ); Readln(m);
If NGUYENTO(m) Then
Writeln(m, la so nguyen to!)
Else
Writeln(m, khong phai la so nguyen to!)
Readln;
End.
BI TP MUBi tp 4.1: Vit hm tm Max ca 2 s thc x,y.
Var a,b:Real;
Function Max(x,y:Real):Real;
Begin
If x>y Then Max:=x Else Max:=y;
End;
Begin
Write(Nhap a=); Readln(a);
Write(Nhap b=); Readln(b);
Writeln(So lon nhat trong 2 so la: , Max(a,b));
Readln;
End.
Bi tp 4.2: Vit hm LOWCASE( c:char):char; i ch ci hoa c thnh ch
thng.
tng:
Trong bng m ASCII, s th t ca ch ci hoa nh hn s th t ca ch ci
thng l 32. V vy ta c th dng 2 hm CHR v ORD chuyn i.
Uses crt;
Var ch:Char;
Function LOWCASE(c:Char):Char;
Begin
If c IN [A..Z] Then LOWCASE:=CHR(ORD(c)+32)
Else LOWCASE:=c;
End;
Begin
Write(Nhap k tu ch=); Readln(ch);
Writeln(Ky tu hoa la: , LOWCASE(ch));
Readln;
End.Bi tp 4.3: Vit th tc hon i hai ga tr x,y cho nhau.
Var a,b:Real;
Function Swap(Var x,y:Real);
Var Tam:Real;
Begin
Tam:=x; x:=y; y:=Tam;
End;
Begin
Write(Nhap a=); Readln(a);
Write(Nhap b=); Readln(b);
Swap(a,b);
Writeln(Cac so sau khi hoan doi: a=, a:0:2, b=,b:0:2);
Readln;
End.
Bi tp 4.4: Vit hm XMU(x:Real;n:Byte):Real; tnh gi tr xn.
Varx:Real;
n:Byte;
Function XMU(x:Real;n:Byte):Real;
Var i:Byte; S:Rea;
Begin
S:=1;
For i:=1 To n Do S:=S*x;
XMU:=S;
End;
Begin
Write(Nhap x=); Readln(x);
Write(Nhap n=); Readln(n);
Writeln(x mu n = , XMU(x,n):0:2);
Readln;
End.Bi tp 4.5: Vit th tc KHUNG(x1,y1,x2,y2:Integer); v mt khung
hnh ch nht c nh trn bn tri l (x1,y1) v nh di bn phi l (x2,y2).
tng:
Dng cc k t m rng trong bng m ASCII:((#179), ((#196), ((#218),
((#192), ((#191), ((#217).
Uses crt;
Procedure Khung(x1,y1,x2,y2:Integer);
Var i,j:Integer;
Begin
Gotoxy(x1,y1); Write(#218); {V (}
Gotoxy(x1,y2); Write(#192); {V (}
{V 2 vin ngang ca khung}
For i:=x1+1 To x2-1 do
Begin
Gotoxy(i,y1); Write(#196);
Gotoxy(i,y2); Write(#196);
End;
Gotoxy(x2,y1); Write(#191); {V (}
Gotoxy(x2,y2); Write(#217); {V (}
{V 2 vin dc ca khung}
For j:=y1+1 To y2-1 do
Begin
Gotoxy(x1,j); Write(#179);
Gotoxy(x2,j); Write(#179);
End;
End;
Begin
Clrscr;
Khung(10,5,40,20);
Readln;
End.
Bi tp 4.6: Vit th tc PHANTICH(n:Integer); phn tch s nguyn n ra
tha s nguyn t.
Uses crt;
Var n:Integer;
Procedure PHANTICH(n:Integer);
Var i:Integer;
Begin
i:=2;
While n1 Do
Begin
While n MOD i=0 Do
Begin
Writeln(n:5,'|',i:2);
n:=n Div i;
End;
i:=i+1;
End;
Writeln(n:5,'|');
End;
Begin
Write('Nhap n='); Readln(n);
PHANTICH(n);
Readln;
End.
BI TP T GII
Bi tp 4.7: Vit 2 hm tm Max , min ca 3 s thc.
Bi tp 4.8: Vit hm PERFECT(n:Word):Boolean; kim tra s nguyn n c
phi l s hon thin hay khng?
Bi tp 4.9:Vit th tc FILL(x1,y1,x2,y2:Integer; ch:Char); t mt vng
mn hnh hnh ch nht c nh trn bn tri l (x1,y1) v nh di bn phi l
(x2,y2) bng cc k t ch.
Bi tp 4.10: Vit hm tm BSCNN ca 2 s nguyn a,b c khai bo nh
sau:
Function BSCNN (a,b:word ):word ;
Bi tp 4.11: Vit th tc ti gin phn s a/b , vi a, b l 2 s
nguyn.
Bi tp 4.12: Vit cc hm quy tnh:
S1 = 1+2 +3+......+n ;
S2 = 1+1/2 + .....+ 1/n ;
S3 = 1-1/2 +......+ (-1)n+1 1/n
S4 = 1 + sin(x) + sin2(x) + ......+ sinn (x)
Bi tp 4.13: Vit hm quy tnh Ckn bit :
Cnn =1 , C0n = 1 , Ckn = Ck-1n-1 + Ckn-1.
Bi tp 4.14: Cho m , n nguyn dng . Lp hm quy tnh:
A(m,n) =
Bi tp 4.15: Lp hm qui tnh dy Fibonaci:
F(n) =
Bi tp 4.16: Vit hm qui tm USCLN ca 2 s.
Bi tp 4.17: Vit th tc in ra mn hnh s o ngc ca mt s nguyn cho trc
theo 2 cch: qui v khng qui.
Bi tp 4.18: Vit chng trnh in ra mn hnh cc hon v ca n s nguyn u
tin.
Bi tp 4.19: Xy dng mt Unit SOHOC.PAS cha cc th tc v hm thc hin
cc chc nng sau:
- Gii phng trnh bc nht.
- Gii phng trnh bc hai.
- Tm Max/Min ca 2 s a,b.
- Tm USCLN v BSCNN ca 2 s nguyn a,b.
- Kim tra s nguyn dng n c phi l s nguyn t hay khng?
- Kim tra s nguyn dng n c phi l s hon thin hay khng?
- i mt s nguyn dng n sang dng nh phn.
- In ra mn hnh bng cu chng t 2 ( 9.
Sau , t vit cc chng trnh c s dng Unit SOHOC va c xy dng trn.
Chng 5
D LIU KIU MNG (ARRAY)
I. KHAI BO MNG
C php:
TYPE = ARRAY [ch s] OF ;
VAR :;
hoc khai bo trc tip:
VAR
: ARRAY [ch s] OF ;
V d:
TYPEMangnguyen = Array[1..100] of Integer;
Matrix = Array[1..10,1..10] of Integer;
MangKytu = Array[Byte] of Char;
VAR
A: Mangnguyen;
M: Matrix;
C: MangKytu;
hoc:
VAR
A: Array[1..100] of Integer;
C: Array[Byte] of Char;
II. XUT NHP TRN D LIU KIU MNG
- truy cp n phn t th k trong mng mt chiu A, ta s dng c php:
A[k].
- truy cp n phn t (i,j) trong mng hai chiu M, ta s dng c php:
M[i,j].
- C th s dng cc th tc READ(LN)/WRITE(LN) i vi cc phn t ca bin
kiu mng.
BI TP MU
Bi tp 5.1:Vit chng trnh tm gi tr ln nht ca mt mng cha cc s nguyn
gm N phn t.
tng:
- Cho s ln nht l s u tin: Max:=a[1].
- Duyt qua cc phn t a[i], vi i chy t 2 ti N: Nu a[i]>Max th
thay Max:=a[i];
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
VarA:Mang;
N,i,Max:Integer;
Begin
{Nhp mng}
Write(Nhap N=); Readln(N);
For i:=1 To N Do
Begin
Write(A[,i,]=); Readln(A[i]);
End;
{Tm phn t ln nht}
Max:=A[1];
For i:=2 To N Do
If MaxN.
Nu x=A[i] th v tr cn tm l i, ngc li th kt qu tm l 0 (khng tm
thy).
Uses Crt;
Type Mang = ARRAY[1..50] Of Integer;
VarA:Mang;
N,i,x:Integer;
Function TimKiem(x, N: Integer; A:Mang):Integer;
Var i:Integer;
Begin
I:=1;
While (I