Giáo trình ngôn ngữ lập trình Pascal
-
Upload
independent -
Category
Documents
-
view
2 -
download
0
Transcript of Giáo trình ngôn ngữ lập trình Pascal
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
1
PhÇn më ®Çu
§Bµi 1. khëi ®éng, cÊu tróc c¬ b¶n, kiÓu d÷ liÖu.
Kh¸i niÖm: Ng«n ng÷ lËp tr×nh PASCAL lµ ng«n ng÷ lËp tr×nh bËc cao:
Qu¶n lý, kü thuËt, hÖ thèng (cho phÐp gi¶i c¸c bµi to¸n trong thùc tÕ).
* TÝnh l«gic cao thuËn tiÖn cho m« t¶ thuËt to¸n.
I. Khëi ®éng vµ so¹n th¶o ch¬ng tr×nh.
Ch¬ng tr×nh ngoµi cña File PASCAL cã phÇn më réng lµ PAS
- Ta cã sö dông trªn TURBO PASCAL
Bíc 1: Khëi ®éng PASCAL
Gi¶ sö PASCAL lu trong th môc: C:\TP\BIN
§Ó khëi ®éng yªu cÇu tèi thiÓu 3 File: TURBO.EXE
TURBO.TPL
TURBO.TP
Tõ m«i trêng MSDOS vµo th môc TB\BIN råi gâ TURBO
C:>CD TB\BIN
C:\ TB\BIN> TURBO
Sau khi gâ TURBO th× xuÊt hiÖn mµn h×nh so¹n th¶o ch¬ng tr×nh.
Bíc 2: So¹n th¶o ch¬ng tr×nh: Nh so¹n th¶o b¨n b¶n.
Bíc 3: Lu ch¬ng tr×nh vµo ®Üa: Ên phÝm F2
M¸y yªu cÇu cho biÕt tªn File: Enter File Name VD: :\NAM\Gpt
Bíc 4: KiÓm tra lçi có ph¸p: Ên phÝm F9
(NÕu ch¬ng tr×nh cã lçi th«ng b¸o trªn mµn h×nh råi ®a con trá ®Õn dßng
cã lçi).
Bíc 5: Ch¹y ch¬ng tr×nh: Ên Ctrl + F9
NÕu cßn lçi nã l¹i dõng ë dßng cã lçi.
§Ó gäi ch¬ng tr×nh ®· cã trªn ®Üa: Ên F3
Sau ®ã cho tªn File (c¶ ®êng dÉn) nÕu kh«ng nhí tªn Ên phÝm
Trªn mµn h×nh sÏ xuÊt hiÖn c¸c File (PAS) vµ c¸c th tho¹i môc, dïng c¸c
phÝm ®Ó chä nh cña NC.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
2
Bíc 6: DÞch ch¬ng tr×nh ra File cã phÇn më réng. EXE
+ Gäi Menu Compiler (Alt + C)
Ban ®Çu ë Memory, ®a vÖt s¸ng ®Õn Distination Ên
{Distination: Memory (DISK)}
+ Sau ®ã Ên Alt + F9 ch¬ng tr×nh sÏ dÞch lªn EXE
Bíc 7: Ra khái m«i trêng PASCAL Ên Alt + x
(NÕu quªn cha ghi, m¸y hái cã ghi kh«ng)
II. CÊu tróc c¬ b¶n cña ch¬ng tr×nh PASCAL
1. Program Tªn ch¬ng tr×nh
2. Uses Khai b¸o c¸c Unit
3. Const Khai b¸o c¸c h»ng
4. Label Khai b¸o c¸c nh·n
5. Var Khai b¸o c¸c biÕn
6. BEGIN
C¸c lÖnh qu¶ng c¸o
C¸c lÖnh nh©p d÷ liÖu
C¸c lÖnh tÝnh to¸n
C¸c lÖnh in kÕt qu¶
END
* Tªn ch¬ng tr×nh: Kh«ng ph¶i lµ tªn File, cã thÓ ®Æt hoÆc kh«ng ®Æt
còng ®îc, ®Æt tªn ch¬ng tr×nh lµ 1 x©u ký tù bÊt kú b¾t ®Çu b»ng c¸c ch÷ c¸i
dµi tuú ý, kh«ng cã dÊu c¸ch
* C¸c Unit: Lµ c¸c ®¬n vÞ ch¬ng tr×nh cã s½n cña phÇn mÒm TURBO
PASCAL mµ ngêi lËp tr×nh ®îc phÐp sö dông nã.
Unit CRT: Chøa tÊt c¶ c¸c ch¬ng tr×nh giao diÖn víi mµn h×nh xo¸, di
chuyÓn con trá.
* C¸c h»ng vµ biÕn:
+ H»ng: c¸c gi¸ trÞ cña h»ng cè ®Þnh trong suèt qu¸ tr×nh tÝnh to¸n, PI lµ
h»ng cã s½n trong PASCAL. TÊt c¶ c¸c h»ng kh¸c dïng ph¶i khai b¸o
VÝ dô: Const C = 2;
S: = 2 * PI * R; S: = C * PI * R;
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
3
+ BiÕn: Dïng ®Ó lu gi÷ t¹m thêi c¸c gi¸ trÞ trong qu¸ tr×nh tÝnh to¸n.
TÊt c¶ c¸c h»ng vµ biÕn dïng ë trong ch¬ng tr×nh ®Òu ph¶i khai b¸o ë ®Çu
ch¬ng tr×nh.
* Khai b¸o tªn biÕn hoÆc h»ng: A Z, 0 9
- B¾t ®Çu b»ng c¸c ch÷ c¸i dµi tuú ý, vÝ dô: CHUVI
- Kh«ng ®îc dïng tõ kho¸ lµm tªn biÕn
- Tªn biÕn kh«ng ®îc trïng víi tªn ch¬ng tr×nh
- C¸ch khai b¸o:
Var Tªn biÕn: Tªn kiÓu d÷ liÖu;
VÝ dô: Var n: Integer (n lµ biÕn nguyªn)
n: = 3 n
n: = n + 1 (n: míi, vÕ ph¶i n cò) n
* Quy ®Þnh c¸c lÖnh:
- 1 lÖnh chøa trong nhiÒu dßng hoÆc 1 dßng cã thÓ chøa nhiÒu lÖnh.
- KÕt thóc 1 lÖnh ph¶i cã 1 dÊu (;)
- CÊu chó gi¶i (chó thÝch) ®îc viÕt gi÷a 2 dÊu {}, hoÆc (* *) viÕt b»ng
tiÕng viÖt.
- CÊu tróc d÷ liÖu
- ThuËt to¸n c¬ b¶n.
- CÊu tróc ®iÒu khiÓn.
III. KiÓu d÷ liÖu
a) KiÓu d÷ liÖu lµ 1 bé ®«i (M, P) trong ®ã M lµ 1 tËp c¸c gi¸ trÞ; P lµ 1 tËp
c¸c phÐp to¸n trªn M.
b) KiÓu sè nguyªn
KiÓu Ph¹m vi Sè Byte cÇn thiÕt
Integer - 32768 32767 2
Short Int - 128 127 1
Long Int - 2141483648 214143647 4
Byte 0 255 1
Vord 0 65535 2
3
4
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
4
Khai b¸o Var n, i Integer;
n = 40.000
(+) PhÐp céng : Céng 2 sè nguyªn ®îc 1 sè nguyªn
(-) PhÐp trõ : Trõ 2 sè nguyªn ®îc 1 sè nguyªn
(*) PhÐp nh©n : Nh©n 2 sè nguyªn ®îc 1 sè nguyªn
(Div) : Chia nguyªn
VD: 10 div 3 kÕt qu¶: 3
1 div 3 kÕt qu¶: 0
(Mod) : PhÐp to¸n lÊy phÇn d
VD: 10 mod 3 = 1
9 mod 3 = 0
Var n, i : Integer;
i: = 10
n: = i div 2 (kÕt qu¶ n = 5)
c) KiÓu sè thùc
Khai b¸o Var a: Real;
- - 2.9 * 1039 1.8 * 1037 cÇn 6 Byte
- Cã 2 d¹ng biÓn diÔn:
+ D¹ng dÊu phÈy tÜnh: Dïng dÊu chÊm ®Ó ng¨n c¸ch phÇn nguyªn vµ phÇn thËp ph©n.
VD: 326.53 402.69
+ D¹ng dÊu phÈy ®éng: - 3.2653E + 2 ~ - 3.2653.102
- 4.0269E + 2 ~ - 4.0269.102
0.00325 ~ 3.25E - 3 ~ 3.25 * 10-3
+ C¸c phÐp to¸n: +, -, *, /
* C¶ sè thùc vµ sè nguyªn ®îc trang bÞ c¸c hµm sè
PASCAL Gi¶i tÝch
SQRT (x)
(x: lµ sè thùc kh«ng ©m)
x
SQR (x) x2
ABS (x) x
Sin(x) Sin (x)
Cos (x) Cos(x)
Ln(x) Ln(x)
EXP (x) ex
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
5
VD1: 2
3
x
x ~ SQRT((x+3)/(x-2))
VD2: 3x ~ SQRT(ABS(x-3))
VD3: a/LnbLn ~ Lna
Lnb log b
a
VD4:
VD5: aLn * b EXP ~ e e a b.LnaLnab b
d) KiÓu d÷ liÖu BOOLEAN
- Khai b¸o Var b: Boolean;
BiÕn Boolean lµ 1 biÕn l«gic chØ nhËn 1 trong 2 gi¸ trÞ ®óng sai
M
C¸c phÐp to¸n víi gi¸ trÞ Boolean:
P: AND, OR, NOT, XOR
A B A and B A or B Not A A xor B
True True True True False False
True False False True False True
False True False True True True
False False False False True False
Var A,B :Boolean;
B:= A or (Not A) ~ B = True
e) C¸c hµm sè nguyªn
* TRUNC: Hµm nµy cho gi¸ trÞ b»ng phÇn nguyªn x
VD: x: = 3.68
TRUNC(x) =3
* ROUND(x) = 4 (Lµm trßn)
* ODD(n) = True (®óng) nÕu n lµ sè lÎ
= False (sai) nÕu n lµ sè ch½n
VD:
=SQRT(ABS(x-5)+x*x+2)/(EXP(y*ln(2))+sin(x+7))
aLn *x EXP ~ e e a x.LnaLnax x
7 x sin 2
2 x 5-x
y
2
2Ln *y ln2 e e 2y
y
True False
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
6
§Bµi 2. C¸c lÖnh in, nhËp d÷ liÖu, xo¸ mµn h×nh, lÖnh g¸n
1. LÖnh in d÷ liÖu WRITE, WRITELN.
*Có ph¸p: Write(gt1, gt2, ......., gtn);
Gt: - BiÓu thøc
- Cã thÓ lµ 1 biÕn
- Cã thÓ lµ 1 h»ng
T¸c dông: In c¸c gi¸ trÞ lªn mµn h×nh vµ con trá kh«ng chuyÓn xuèng dßng
tiÕp theo.
BiÕn, biÓu thøc mµ c¸c gi¸ trÞ lµ c¸c sè thùc ®Ó in ë d¹ng dÊu phÈy tÜnh th×
ta ph¶i chØ ra sè ký tù cÇn thiÕt vµ ch÷ sè sau dÊu phÈy.
Write(a:n:m) nghÜa lµ in c¸c biÕn sè thùc a víi n ký tù trong ®ã cã m ch÷
sè sau dÊu phÈy.
VD: a:=82.156
Write(a:8:2) kÕt qu¶: 82.16
Lu ý: m<n
C¸c h»ng x©u ký tù ph¶i ®îc ®Æt sau dÊu nh¸y ®¬n
VD: Write ('Hello');
Write ('a = ', a : 8 : 2) (gt1, gt2)
LÖnh Write thêng dïng ®Ó in kÕt qu¶ tÝnh to¸n lªn mµn h×nh.
* LÖnh Writeln(gt1, gt2;.......gtn);
T¸c dông: Nh lÖnh Write nhng in xong con trá ®îc chuyÓn xuèng dßng
tiÕp theo.
2. LÖnh nhËp d÷ liÖu Read, Readln.
* Có ph¸p: Readln (biÕn);
T¸c dông: NhËn c¸c gi¸ trÞ ®îc nhËp tõ bµn phÝm råi g¸n cho biÕn, nhËn
xong con trá chuyÓn xuèng dßng tiÕp theo.
* LÖnh Read(biÕn): Nh lÖnh Readln, nhng con trá kh«ng chuyÓn xuèng
dßng tiÕp theo.
VD; Readln(a) khi gÆp lÖnh nµy th«ng thêng kÕt hîp 2 lÖnh:
Write ('a' =);
Readln(a); NhËp sè biÕn tõ bµn phÝm
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
7
§Æc biÖt: Readln: Môc ®Ých dõng mµn h×nh cho ®Õn khi ngêi dïng gâ 1
phÝm bÊt kú
Th«ng thêng dïng ngay tríc lÖnh End
3. LÖnh CLRSCR.
T¸c dông: Xo¸ mµn h×nh ®a con trá vÒ dßng ®Çu tiªn
Ph¶i sö dông Unit: Uses Crt tríc khi gâ CLRSCR
4. LÖnh g¸n.
BiÕn: = gt;
- Cã thÓ lµ 1 biÓu thøc
- Cã thÓ lµ 1 biÕn
- Cã thÓ lµ 1 h»ng
T¸c dông: G¸n gi¸ trÞ cho biÕn
VD1: x:=y+2;
BiÕn x ®îc g¸n vµo gi¸ trÞ cña biÕn y+2
NÕu y:=5 x:=7;
VD2: x:=x-2;
Ta cã {x=5, y=2}
1) x:=x+y; th× {x=7, y=2}
2) y:=x-y; th× {x:=7,y=5}
3) x:=x-y; th× {x=2, y=5}
Lu ý ®èi víi lÖnh g¸n: KiÓu biÕn, kiÓu gi¸ trÞ cña biÕn ph¶i phï hîp lµ sè
thùc hoÆc lµ sè nguyªn.
Trêng hîp riªng: Trêng hîp gi¸ trÞ nguyªn ®îc phÐp g¸n cho biÕn thùc.
Gi¸ trÞ
Tr¸o ®æi gi¸ trÞ cña 2 biÕn cho nhau
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
8
C¸c bµi tËp minh ho¹
Bµi 1: ViÕt ch¬ng tr×nh tÝnh chu vi h×nh trßn khi biÕt b¸n kÝnh.
Program Tinh_chu_vi_hinh_tron;
Uses crt;
Var R,CV: Real;
BEGIN
CLRSCR; {xo¸ mµn h×nh}
Write('R='); Readln(R); { nhËp R tõ bµn phÝm}
CV:=2*PI*R; {tÝnh chu vi}
Writeln('Chu vi=',CV:8:2); {in kÕt qu¶}
Readln; {dõng mµn h×nh}
END.
Bµi 2: ViÕt ch¬ng tr×nh tÝnh S tam gi¸c khi hÕt 3 c¹nh
))()(( cpbpappS
P=(a+b+c)/2
Program tinh_dien_tich_tam_giac;
Uses Crt;
Var S, P, a,b,c: Real;
BEGIN
Clrscr;
Write('a = '); Readln(a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
P: = (a + b + c)/2;
S: = SQRT(P * (P - a) * (P - b) * (P - c));
Vriteln ('A ®©y råi = ', S: 8: 2, 'Cm2');
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
9
Bµi 3. Cho c¸c sè thùc x, y, z. H·y tÝnh a, b nÕu:
42
x 1
y - 1-x a .1
22
3
y
tgz-y. x 1
e 3 a .2
2
1 -y
3
2
x-y x-y 1 b .3
32 xy
4
x z
y -x . x -y Ln a .4
2
Bµi gi¶i
Lu ý:
Program VD1;
Uses crt;
Var x, y, a : Real;
BEGIN
CLRSCR;
Write('x = ' ); Readln(x);
Write('y = ' ); Readln(y);
a : = SQRT(ABS(x-1)-EXP(1/3*ln(ABS(y));
a : = a/(1+x*x/2+y*y/4);
Writeln('a= ', a:8:2);
Readln;
END.
5!
x
3!
x - x b .5
53
1/33 y y
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
10
Program VD2;
Uses crt;
Var a,x,y,z : Real;
BEGIN
CLRSCR;
Write('x = ' ); Readln(x);
Write('y = ' ); Readln(y);
Write('z = ' ); Readln(z);
a : = (3+EXP(y-1))/(1+x*x*ABS*(y-Sin(z)/Cos(z));
Writeln('a = ', a:8:2);
Readln;
END.
Program VD3;
Uses crt;
Var b, x, y : Real;
BEGIN
CLRSCR;
Write('x = ' ); Readln(x);
Write('y = ' ); Readln(y);
b : = 1+ABS(y-x)+(y-x)*(y-x)/2+(ABS((y-x)*(y-x)*(y-x)))/3;
Writeln(' b = ', b:8:2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
11
Program VD4;
Uses crt;
Var x, y, z, a: Real;
BEGIN
Clrscr;
Write('x = '); Readln(x);
Write('y = '); Readln(y);
Write('z = '); Readln(z);
a: = Ln((y - SQRT(ABS(x)) * (x - y/(z + x * x/4)));
WriteLn ('a = ', a: 8: 2);
Readln;
END.
Program VD5;
Uses crt;
Var b, x: Real;
BEGIN
CLRSCR;
Write('x = '); Readln(x);
b: = x - (x * x * x/1 * 2* 3) + (x * x * x * x * x/1 * 2 * 3 * 4 * 5);
Writeln('b = ', b: 8 : 2);
Readln;
END.
Bµi 4: Cho 2 sè thùc C vµ D tÝnh
Trong ®ã: x1 lµ nghiÖm lín, x2 lµ nghiÖm bÐ cña ph¬ng tr×nh:
x2 - 3x - cd = 0
LËp tr×nh:
Gi¶i ph¬ng tr×nh: ,
1
2
2
3
12
1
2
2
3
1
2
2
3
1
3
x- dx cx tg
14 . 3 x- dx cx
cd - dx cx sin
T
2
cd4 9 3 1
x
2
cd4 9 - 3 2
x
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
12
Program Tinh;
Uses crt;
Var c, d, x1, x2, TS, T, MS : Real;
BEGIN
CLRSCR;
Write('c = ' ); Readln(c);
Write('d = ' ); Readln(d);
x1 : = (3+SQRT(9+4*ABS(c*d)))/2;
x2 : = (3-SQRT(9+4*ABS(c*d)))/2;
TS : = Sin(ABS(c*x1*x1*x1+d*x2*x2-c*d));
MS : = SQRT((c*x1*x1*x1+d*x2*x2-x1)* (c*x1*x1*x1+d*x2*x2-x1)+3,14);
T : = TS*TS*TS /MS+Sin(c*x1*x1*x1+d*x2*x2-x1) /Cos(c*x1*x1*x1+d*x2*x2-x1);
Writeln('T = ', T: 8: 2);
Readln;
END.
Bµi 6 : Cho sè thùc x chØ dïng 4 phÐp céng vµ 4 phÐp nh©n tÝnh :
F = 2x4 - 3x3 + 4x2 - 5x + 6.
Program Bai6;
Uses crt;
Var x, f : Real;
BEGIN
CLRSCR;
Write('x= '); Readln(x);
f: =2;
f: = x*f-3; {f=2x-3}
f: = x*f+4: {f=2x2-3x+4}
f: = x*f-5: {f=2x3-3x2+4x-5}
f: = x*f+6: {f=2x4-3x3+4x2-5x+6}
Writeln(' f = '. f:8 :2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
13
PhÇn II. c¸c cÊu tróc ®iÒu khiÓn
Cã 3 cÊu tróc ®iÒu khiÓn:
- TuÇn tù.
- RÏ nh¸nh.
- LÆp.
§Bµi 1. CÊu tróc rÏ nh¸nh.
1. LÖnh ®¬n, lÖnh kÐp.
- C¸c lÖnh g¸n vµ lÖnh vµo ra d÷ liÖu ®Òu lµ lÖnh ®¬n
- LÖnh kÐp: NhiÒu lÖnh ®¬n viÕt trong mét cÆp
Begin
...........
End
Gäi lµ lÖnh kÐp.
Chç nµo viÕt ®îc lÖnh ®¬n th× chç Êy viÕt ®îc lÖnh kÐp.
2, CÊu tróc ®iÒu khiÓn: IF
a, D¹ng 1:
BTLG: Tªn biÕn boolean lµ 1 biÓu thøc l«gÝc. Hai biÓu thøc nèi víi nhau
bëi 1 trong c¸c dÊu sau: =, <>, >, >=, <, <= lµ mét biÓu thøc l«gic.
NÕu A vµ B lµ mét biÓu thøc l«gic th× A and B, A or B, Not A, Not B, A xor B
còng lµ mét biÓu thøc l«gic
Vµ chØ nh÷ng biÓu thøc ®îc x¸c ®Þnh nh trªn míi lµ biÓu thøc l«gic.
VD: Var x, y: Real;
a: Boolean;
If a then .....
If (x>4) and (x <6)
a: = 6 = 4; a: = Fasle.
IF BTLG Then S;
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
14
S: Cã thÓ lµ lÖnh ®¬n hoÆc lµ lÖnh kÐp.
NÕu biÓu thøc l«gic
®óng th× lÖnh S ®îc thùc
hiÖn, nÕu biÓu thøc l«gic
sai th× lÖnh S bá qua.
C¶ cÊu tróc IF S; còng ®îc coi lµ 1 lÖnh.
Trong S cã thÓ chøa 1 c¸i IF kh¸c. Lóc nµy ta ®îc c¸c cÊu tróc IF lång
nhau.
VD1: Cho 3 sè thùc bÊt kú A, B, C in ra mµn h×nh sè l¬n nhÊt trong 3 sè.
Program Tim_max;
Uses crt;
Var a,b,c,max: Real;
BEGIN
CLRSCR;
Write ('a = '); Readln(a);
Write ('b = '); Readln(b);
Write ('c = '); Readln(c);
Max: = a;
IF b > max Then max: = b;
IF c > max Then max: = c;
Writeln ('max = ', max: 8:2);
Readln;
END.
BTLG
S1
s
®
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
15
b, D¹ng 2:
S1,S2 cã thÓ lµ lÖnh ®¬n vµ
lÖnh kÐp.
NÕu BiÓu thøc l«gic ®óng th×
S1 ®îc thùc hiÖn cßn S2 bá qua.
NÕu biÓu thøc L«gic sai S2
®îc thùc hiÖn S1 bá qua.
C¶ cÊu tróc IF còng ®îc coi lµ mét lÖnh nghÜa lµ trong S1, S2 cã thÓ chøa
c¸c IF khi ®ã ta ®îc c¸c cÊu tróc IF lång nhau.
ViÕt ch¬ng tr×nh tÝnh diÖn tÝch tam gi¸c:
Program TÝnh _DTTG
Uses CRT;
Var a, b, c, s: Real;
BEGIN
CLRSCR;
Write(' a ='); readln (a);
Write(' b ='); readln (b);
Write(' c ='); readln (c);
if (a>0) and (b>0) and (c>0) and (a + b>c) and (a + c>b) and (b + c>a) then
Begin
P:= (a + b + c)/2;
S: = SQRT(P*(P-a)*(P-b)*(P-c));
Writeln ('S=', S : 8 : 2);
End
Else Writeln ('Kh«ng ph¶i 3 c¹nh cña tam gi¸c);
Readln;
END.
IF BTLG Then S1;
Else S2
BTLG
S1
s
®
S2
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
16
Bµi tËp: Cho sè thùc x. TÝnh hµm f(x) nh sau:
nÕu x 3
nÕu x < 3
Program TÝnh;
Uses CRT;
Var x, f: Real;
BEGIN
CLRSCR;
Write (' x='); Readln (x);
if (x >=3) Then
f:= x*x + 2 * sin(ABS(x) -1) + SQRT(x-3)
else
f: = cos(ABS(x)+1) - EXP(1/3*LN(x-1));
Writeln ('f=', f : 8 :2);
Readln;
END.
Bµi tËp 3:
ax + b = 0.
* NÕu a 0 th× ph¬ng tr×nh cã 1 nghiÖm duy nhÊt x = -b/a.
* NÕu a = 0 vµ b 0 th× ph¬ng tr×nh v« nghiÖm
* NÕu a = 0 vµ b = 0 th× ph¬ng tr×nh v« sè nghiÖm.
31sin22 xxx
3 11cos xx
f(x) =
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
17
Program GPTB1;
Uses CRT;
Var a, b, x: Real;
BEGIN
CLRSCR;
Write ('a='); Readln(a);
Write (b='); Readln(b);
If a <>0 Then
Begin
Writeln('Ph¬ng tr×nh cã 1 nghiÖm duy nhÊt');
Write('x=',-b/a :8 : 2);
End
Else
If b<>0 Then Writeln(' Ph¬ng tr×nh v« nghiÖm')
Else Writeln('Ph¬ng tr×nh v« sè nghiÖm');
Readln;
END.
Bµi tËp 4: Gi¶i hÖ ph¬ng tr×nh:
ax + by + c = 0
dx + ey + f = 0
a1x + b1y = c1
a2x + b2y = c2
NÕu D <> 0 PT cã 1 nghiÖm
- NÕu D = 0; Dx = Dy = 0 (VSN)
- NÕu D = 0; Dx 0; Dy 0 (VN)
=> D = a1 b1 = a1b2 - a2b1 a2 b2
Dx = c1 b1 = c1b2 - c2b1 c2 b2
Dy = a1 c1 = a1c2 -a2c1 a2 c2
D
Dxx
D
Dyy
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
18
Program GIAI_HPT;
Uses CRT;
Var a1, a2; b1, b2, c1, c2, x, y, Dx, Dy, D: Real;
BEGIN
CLRSCR;
Write ('a1='); Readln (a1);
Write ('b1='); Readln (b1);
Write ('a2='); Readln (a2);
Write ('b2='); Readln (b2);
Write ('c2='); Readln (c2);
Write ('c1='); Readln (c1);
D: = a1*b2- a2*b1;
Dx: = c1*b2- c2*b1;
Dy: = a1*c2- a2*c1;
If D <> 0 Then
Begin
Writeln(' PT cã 1 nghiÖm duy nhÊt');
x: = Dx/D; y: Dy/D;
Writeln(' x=', x : 8 : 2);
Writeln ('y=', y : 8 : 2);
End
Else
If (Dx = 0) and (Dy = 0) and (D = 0) Then
Writeln ('V« ®Þnh')
Else
Writeln ('V« nghiÖm');
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
19
Bµi tËp 5: Gi¶ ph¬ng tr×nh bËc 2: ax2+bx+c=0
=b2-4ac
>0 pt cã 2 nghiÖm ph©n biÖt
=0 ph¬ng tr×nh cã 1 nghiÖm kÐp
<0 ph¬ng tr×nh v« nghiÖm.
Program giai_phuong_trinh_bac_2;
Uses crt;
Var a,b,c,x1,x2,x,DT:Real;
BEGIN
CLRSCR;
Write('a= '); Readln(a);
Write('b= '); Readln(b);
Write('c= '); Readln(c);
DT:=b*b - 4*a*c;
If DT>0 then
Begin
Writeln('Ph¬ng tr×nh cã 2 nghiÖm ph©n biÖt');
x1:= (-b+SQRT(DT))/(2*a);
x2:= (-b-SQRT(DT))/(2*a);
Writeln('x1= ', x1:8:2);
Writeln('x2= ', x2:8:2);
End
Else
If DT=0 Then
Begin
Writeln('Ph¬ng tr×nh cã 1 nghiÖm kÐp');
x:=(-b/(2*a));
Writeln('x= ', x:8:2);
End
Else
Writeln(' Ph¬ng tr×nh v« nghiÖm');
Readln;
END.
a
bx
a
bx
2
2
2
1
a
bx
2
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
20
Bµi tËp 6: Cho 1 sè tù nhiªn n<=100
a. Sè n cã mÊy ch÷ sè
b. TÝnh tæng c¸c ch÷ sè cña n
Bµi lµm
Program BT6;
Use CTR;
Var n, donvi, chuc, tram: Byte;
BEGIN
CLRSCR;
Write('n='); Readln(n);
If(n<0) or (n>100) Then Write ('D÷ liÖu kh«ng hîp lÖ');
Else
Begin
Tram: = n div 100;
Chuc: = (n - 100 * Tram) div 10;
Donvi:= n - 100 * Tram - 10 * Chuc;
If n = 100 Then Writen (n,' lµ sè cã 3 ch÷ sè')
Else
If n > 10 then Writeln (n,' lµ sè cã hai ch÷ sè')
Else Writeln (n,' lµ sè cã 1 ch÷ sè');
Writeln (' Tæng c¸c ch÷ sè = ', Tram + Chuc + Donvi);
End;
Readln;
END.
Bµi tËp 7: Cho bµn cê quèc tÕ 64 «
¤ H(1......8)
C(1,......,8)
a, Cho 2 « bÊt kú. Hái 2 « nµy cã cïng mµu?
b, Cho 2 « bÊt kú. Hái 2 con hËu ë 2 « ®ã cã ¨n ®îc nhay kh«ng?
- §en H + C lµ ch½n
- Tr¾ng H + C lµ lÎ
(H + C) mod 2 1 tr¾ng
0 ®en
(H1 + C1) mod 2 = (H2 + C2) mod 2 cïng mµu
c, Cho 2 « bÊt kú, hái 2 con m· ë 2 « cã ¨n ®îc nhau kh«ng?
1
2
3
4
5
6
7
8
1 2 3 4 5 6 7 8
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
21
a, Program TimOGKM;
Use CRT; Var H1, C1, H2, C2: Byte; BEGIN CLRSCR; Writeln ('H1='); Readln(H1); Writeln ('C1='); Readln(C1); Writeln ('H2='); Readln(H2); Writeln ('C2='); Readln(C2); IF (H1 >8) or (H2 > 8) or( C1 > 8) or (C2>8) or (H1 <=0)
or (H2<=0) or (C1<=0) or (C2<=0) Then Writeln (' D÷ liÖu kh«ng hîp lÖ') Else If (C1+ H1) mod 2 = (C2+ H2) mod 2 Then Writeln (' Cïng mµu'); Else Writeln ('Kh¸c mµu'); Readln; END.
b, ¨n ®îc Hau: - Cïng hµng H1 = H2
- Cïng céng C1 = C2
- Cïng n»m trªn mét ®êng // víi ®êng chÐo chÝnh
H1 + C1 = H2 + C2
- Cïng n»m trªn mét ®êng // víi ®êng chÐo phô
H1 - C1 = H2 - C2
c, Program an_duoc_ Ma;
Use CRT;
Var Var H1, C1, H2, C2: Byte;
BEGIN
CLRSCR;
Writeln ('H1='); Readln(H1);
Writeln ('C1='); Readln(C1);
Writeln ('H2='); Readln(H2);
Writeln ('C2='); Readln(C2);
IF (H1 >8) or( C1 > 8) or (H2 > 8) or (C2>8) or (H1 <=0)
or (H2 <= 0) or (C1<=0) or (C2<=0) Then
Writeln (' D÷ liÖu kh«ng hîp lÖ')
Else
If (ABS(C1 - C2) = 2) and (ABS(H1 - H2)=1)
or (ABS(C1 - C2) = 1) and (ABS(H1 - H2) = 2) Then
Writeln ('an duoc nhau');
Else Writeln (' kh«ng ¨n ®îc nhau');
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
22
Bµi tËp 8: Cho 3 sè thùc bÊt kú ABC h·y thay sè lín nhÊt b»ng trung b×nh céng
cña 3 sè lµ, sè nhá nhÊt; 1/2 trung b×nh céng cña 3 sè, nÕu 3 sè b»ng nhau th× gi÷ nguyªn.
LËp ch¬ng tr×nh.
Program VD1
Use CRT;
Var a, b, c, max, min: Real;
BEGIN
CLRSCR;
Writeln ('a='); Readln(a);
Writeln ('b='); Readln(b);
Writeln ('c='); Readln(c);
max:=a;
IF b > max Then max: = b;
IF c > max Then max: = c;
min: = a;
IF b < min Then min: = b;
IF c < min Then min: = c;
IF min <> max Then
Begin
If a = max then a: = (a + b + c)/3;
If a = min then a: = (a + b + c)/6;
If b = max then b: = (a + b + c)/3;
If b = min then b: = (a + b + c)/6;
If c = max then c: = (a + b + c)/3;
If c = min then c: = (a + b + c)/6;
End;
Writeln ('a =', a : 8 : 2);
Writeln ('b =', b : 8 : 2);
Writeln ('c =', c : 8 : 2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
23
§Bµi 2. CÊu tróc tuyÓn chän
1, KiÓu miÒn con
Khai b¸o: ChØ ra gi¸ trÞ cËn trªn, cËn díi cña c¸c miÒn.
VÝ dô: Var chuso: 0....9;
TËp ®Õm ®îc
Var a : 0.3 ...0.5
Sai (cã v« sè sè thùc)
2, CÊu tróc tuyÓn chän
D¹ng 1:
CASE BiÕn OF
TËp h»ng 1: S1;
TËp h»ng 2: S2;
..........................
TËp h»ng n: Sn;
END;
NÕu biÕn thuéc tËp h»ng 1 th× S1 ®îc thùc hiÖn cßn c¸c lÖnh kh¸c th× bá qua.
NÕu kh«ng thuéc tËp h»ng 1 kiÓm tra xem cã thuéc tËp h»ng 2 hay kh«ng?
NÕu tËp h»ng i lµ tËp ®Çu tiªn chøa gi¸ trÞ cña biÕn th× lÖnh Si ®îc thùc hiÖn.
NÕu kh«ng tËp h»ng nµo chøa gi¸ trÞ cña biÕn th× kh«ng lÖnh nµo ®ù¬c thùc hiÖn.
S1 Sn cã thÓ lµ lÖnh ®¬n hoÆc kÐp.
C¸c cÊu tróc Case còng ®îc coi lµ mét lÖnh
Program Xem boi;
Use CRT;
Var NH: 1..4;
BEGIN
CLRSCR;
Write('B¹n häc n¨m thø mÊy:'); Readln (NH);
Case NH of
1: Writeln ('Kh«ng yªu ai');
2: Writeln ('ChØ yªu mét m×nh anh');
3: Writeln ('ChØ yªu anh vµ b¹n cña anh');
4: Writeln ('Yªu tÊt c¶ nh÷ng ai hái');
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
24
Bµi 2: Cho mét sè cã 3 ch÷ sè viÕt ch¬ng tr×nh in ra 1 dßng ch÷ tiÕng viÖt
kh«ng dÊu biÓu diÔn sè ®ã.
Program DOCSO;
Use CRT;
Var n : 100..999;
DV,Ch,Tr: 0..9;
BEGIN
CLRSCR;
Write('n='); Readln(n);
Tr:= n div 100;
DV: = n mod 10;
Ch: = (n -100 *TK) div 10;
Case Tr of
1: Write ('Mot ');
2: Write ('Hai ');
3: Write ('Ba ');
4: Write ('Bon ');
5: Write ('Nam ');
6: Write ('Sau ');
7: Write ('Bay ');
8: Write ('Tam ');
9: Write ('Chin ');
End;
Write ('Tram ');
Case ch of
If DV > 0 Then
0: Write ('Linh ');
1: Write (M¬i ');
2: Write ('Hai ');
3: Write ('Ba ');
4: Write ('Bon ');
5: Write ('Nam ');
6: Write ('Sau ');
7: Write ('Bay ');
8: Write ('Tam ');
9: Write ('Chin ');
End;
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
25
Case DV of
1: Write ('Mot ');
2: Write ('Hai ');
3: Write ('Ba ');
4: Write ('Bon ');
5: Write ('Nam ');
6: Write ('Sau ');
7: Write ('Bay ');
8: Write ('Tam ');
9: Write ('Chin ');
0: If Ch >=2 Then Write ('m¬i');
End;
Readln;
END.
D¹ng 2:
Case BiÕn Of TËp h»ng1 : S1;
TËp h»ng 2: S2;
.......................
TËp h»ng n: Sn;
Else Sn + 1;
END.
NÕu biÕn kh«ng thuéc tËp h»ng nµo th× lÖnh (Sn + 1) ®îc thùc hiÖn
ë d¹ng 2 bao giê còng cã duy nhÊt mét lÖnh ®îc thùc hiÖn.
Dv: = n mod 10;
Case dv of
0, 5: Writeln (n,' Chia hÕt cho 5');
Else Writeln (n,' Kh«ng chia hÕt cho 5');
END;
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
26
Program TDT;
Use CRT;
Var R, a, b, c, S, P: Real;
Chon: Byte;
BEGIN
CLRSCR;
Write ('B¹n chän:');
Write ('1. DT tam gi¸c');
Write ('2. DT h×nh ch÷ nhËt');
Write ('3. DT h×nh trßn');
Readln (chon);
Case chon of
1:
Begin
Write ('a='); Readln (a);
Write('b = '); Readln(b);
Write('c = '); Readln(c);
P: = (a + b + c)/2;
S: = SQRT(P * (P - a) * (P - b) * (P - c));
Vriteln ('A ®©y råi = ', S: 8: 2, 'Cm2');
Readln;
End;
2:
Begin
Write ('a='); Readln (a);
Write ('b='); Readln (b);
S: = a * b
Write ('S=',S : 8 : 2);
End;
3:
Begin
Write ('R = '); Readln (R);
S: = PI * R * R;
Write ('S =', S : 8 : 2);
End;
Else Writeln (' Kh«ng hîp lÖ');
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
27
§Bµi 3: CÊu tróc lÆp víi lÖnh For
D¹ng 1:
BiÕn ch¹y: Lµ 1 biÕn thuéc biÕn ®Õm ®îc (kiÓu sè nguyªn) (Byte, Integer)
Gt1, gt2 lµ thuéc cïng 1 kiÓu víi biÕn ch¹y.
S cã thÓ lµ lÖnh ®¬n hoÆc lÖnh kÐp
§Çu tiªn biÕn ®îc g¸n b»ng
Gt1 sau ®ã m¸y kiÓm tra BTLG nÕu
vÉn cha vît qu¸ Gt2 th× S ®îc
thùc hiÖn, thùc hiÖn xong lÖnh S biÕn
®îc tù ®éng nhËn gi¸ trÞ tiÕp theo.
Sau ®ã l¹i quay vÒ kiÓm tra BTLG vµ
vßng lÆp kÕt thóc khi biÕn lín h¬n GT 2.
Gi¶ sö I: = 1 to 5 do S;
NÕu Gt1 <= Gt2 th× vßng lÆp S ®ù¬c thùc hiÖn gt2 - gt1 + 1 lÇn.
NÕu Gt1 > Gt2 th× S kh«ng thùc hiÖn lÇn nµo
C¶ cÊu tróc For còng ®îc coi lµ mét lÖnh
Trong S cã thÓ chøa cÊu tróc For kh¸c khi ®ã ta ®îc c¸c cÊu tróc For
lång nhau.
Sau mçi lÇn lÆp biÕn ch¹y tù ®éng nhËn gi¸ trÞ tiÕp theo do ®ã trong sè c¸c lÖnh cña S kh«ng ®îc cã lÖnh nµo lµm thay ®æi gi¸ trÞ cña biÕn ch¹y.
(BiÕn ch¹y kh«ng ®ù¬c phÐp cã mÆt ë vÕ tr¸i bÊt kú lÖnh g¸n nµo trong sè
c¸c lÖnh cña S).
INC(I) ~ I:=I+1
PRED(I) ~ I:=I-1
FOR BiÕn ch¹y:= Gt1 TO Gt2 DO S
BiÕn: = gt1
BiÕn gt2 Ra
S INC (biÕn)
s
®
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
28
Bµi tËp 1:
TÝnh tæng
Ch¬ng tr×nh:
Program VD1;
Use Crt;
Var n, i: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n='); Readln (n);
T:= 0;
For i: = 1 to n do T:=T + 1/i;
Writeln ('T=', T : 10 : 7);
Readln;
END.
VD: n = 4
T = 0
i = 1; T = T + 1/i = 1
i = 2; T = T + 1/i = 1 + 1/2
i = 3; T = T + 1/i = 1 + 1/2 + 1/3
i = 4; T = T + 1/i = 1 + 1/2 + 1/3 + 1/4
i= 5 LÖnh bá qua vµ in ra m¸y
Chó ý: §Ó tÝnh mét tæng ta ph¶i g¸n tæng b»ng 0
Bµi tËp 2: TÝnh: T = 1.2.3...n = n!
Program VD2;
Use Crt;
Var n, i: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n='); Readln(n);
T: = 1
For i: = 1 to n do T: =T * i;
Writeln('T=', T : 10 : 0);
Readln;
END.
nT
1...
3
1
2
11
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
29
VD: n = 4
T = 1;
i = 1; T = T * i = 1 * 1 = 1
i = 2; T = T * i = 1 * 2 = 2
i = 3; T = T * i = 2 * 3 = 6
i = 4; T = T * i = 6 * 4 = 24
i = 5 T = 24
Chó ý: §Ó tÝnh 1 tÝch th× ta ph¶i g¸n tÝch b»ng 1
Bµi tËp 3:
Program VD2;
Use Crt;
Var n, i, d: Integer;
T: Real;
BEGIN
CLRSCR;
Write('n='); Readln (n);
D: = 1; T: = 0;
For i: = 1 to n do
Begin
T: = T + d/i;
d: = - d;
End;
Writeln ('T=', T : 10 : 8);
Readln;
END.
VD: n = 5
d = 1; T = 0
i = 1; T = T + d/i = 0 + 1/1; d = -d = -1.
i = 2; T = T + d/i = 1 - 1/2; d = -d = +1
i = 3; T = T + d/i = 1 -1/2 +1/3; d = -d = -1.
i = 4; T = T + d/i = 1 - 1/2 + 1/3 -1/4; d = -d = 1
i = 5; T = T + d/i = 1 - 1/2+ 1/3 -1/4 +1/5; d = -d = -1
i = 6 M¸y bá qua (gt1) gt2) vµ in ra kÕt qu¶
n
T
n 11
...4
1
3
1
2
11
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
30
D¹ng 2:
BiÕn ®îc g¸n b»ng GT1 sau ®ã kiÓm tra ®iÒu kiÖn nÕu BiÕn vÉn lín h¬n
hoÆc b»ng GT2 th× lÖnh S ®îc thùc hiÖn. Sau ®ã BiÕn ®îc gi¶m ®i 1 råi l¹i
quay vÒ kiÓm tra ®iÒu kiÖn vßng lÆp kÕt thóc khi BiÕn nhá h¬n GT2.
NÕu gt1 < gt2 th× vßng lÆp kh«ng ®îc thùc hiÖn lÇn nµo.
Gt1 > gt2 vßng lÆp thùc hiÖn víi sè lÇn: gt1 - gt2 + 1.
C¶ cÊu tróc For còng ®ù¬c coi lµ mét lÖnh.
(1) TÝnh
For i:=1 to n do T: =T * (1+ 1/(i * i))
FOR biÕn: = Gt1 DOWNTO Gt2 DO S
BiÕn: = gt1
BiÕn >= gt2 Ra
S
s
®
BiÕn: = BiÕn - 1
22222
11
1
11...
3
11
2
11
1
11
nnT
22 2 2 2
1 1 1 1 11 1 1 ... 1 1
1 2 3 1iT
ii
21
11
iTT ii
T(i-1)
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
31
Ch¬ng tr×nh:
Program VD1;
Use Crt;
Var n, i: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n='); Readln(n);
T: = 1;
For i: =1 to n do T: = T * (1+1/(i * i));
Writeln(' T =', T : 10 : 3);
Readln;
END.
T : 10 : 3 nghÜa lµ sè cã 10 ký tù, cã 3 ch÷ sè sau dÊu phÈy.
(2)
T3 =
T:=SQRT (2 + T)
Program VD2;
Use Crt;
Var n, i: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n='); Readln (n);
T: = 0;
For i: = 1 to n do T:=SQRT(2 + T);
Writeln ('T =', T : 10 : 7);
Readln;
END.
2...22
222
T2
223 TT
12 TiTi
n c¨n
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
32
(3) T = Sin (1) + Sin(2) + ....+ Sin(n)
Program VD3;
Use Crt;
Var n, i: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n ='); Readln(n);
T: = 0;
For i: = 1 to n do T:= T + Sin(i);
Writeln('T=', 10 : 6);
Readln;
END.
(4) T = Sin (1) - Sin (2) + ...+(-1)n+1Sin(n).
Program VD4;
Use Crt;
Var n, I: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n='); Readln(n);
T: = 0; d = 1;
For i: = 1 to n do
Begin
T: = T + d*Sin (i);
d:= -1;
End;
Writeln ('T =', T : 10 : 7);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
33
(5),
Program VD5;
Use Crt;
Var n, i: Integer;
TS, MS, T: Real;
BEGIN
CLRSCR;
Write ('n=');
T: = 0; TS:= 0; MS: = 0;
For i: = 1 to n do
Begin
TS:= TS + Sin(i);
MS: = MS + Cos(i);
T: = T + TS/MS;
End;
Readln;
END.
Ch¹y ch¬ng tr×nh
i = 1; TS: = Sin (1); MS: = Cos(1)
T: =
i= 2; TS: = Sin (1) + Sin (2); MS = Cos(1) + Cos(2)
T=
(6)
Program VD6;
Use Crt;
Var n, i: Integer;
T: Real; BEGIN CLRSCR; Write ('n='); Readln(n); MS: = 1; T: = 0; For i: = 1 to n do Begin MS: = MS *i; T: = T + sin(i)/MS; End; Readln; END.
(1) (1) (2) (1) (2) ... ( )...
(1) (1) (2) (1) (2) ... ( )
Sin Sin Sin Sin Sin Sin nT
Cos Cos Cos Cos Cos Cos n
)1(
)1(
Cos
Sin
)2()1(
)2()1(
CosCos
SinSin
!
)(...
!2
)2(
!1
)1(
n
nSinSinSinT
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
34
(7)
n = 4 =>
For i: = n Downto 1 do
T: = SQRT(3*T+T);
Program VD7;
Use Crt;
Var n, i: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n='); Readln(n);
T: = 0;
For i: = n Downto 1 do
T: = SQRT(3*T+T);
Writeln (‘T =’, T : 10 : 6);
Readln;
END.
n= 4 : n = 2:
n= 3 : n = 1:
(8) Cho sè thùc a. h·y tÝnh:
(a) an
Ti = ai = ai -1. a = Ti -1 .a
T: = 1;
For i: = 1 to n do T:= T * a;
Writeln (‘T =’, T : 10 : 2);
Realn;
End.
nn 313...63
129
12 12963
1296
12963
Ti-1
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
35
(b) a(a + 1) (a +2) ...(a + n)
Program VD;
Use Crt;
Var n, i: Integer;
a, T: Real;
BEGIN
CLRSCR;
Write ('a='); Readln(a);
T: = 1;
For i: = 0 to n do T: = T * (a + i);
Writeln (‘T =’, T : 10 : 2);
Readln;
END.
(c)
1 +
1 + .......
1
a a(a+1) a(a+ 1) ....(a + n)
Ph©n tÝch:
MSi = a(a +1) ... (a + i - 1) (a + i)
MSi-1 = a(a +1) ... (a + i -1)
MSi = MSi -1 .(a + i) MS: = MS*(a + i)
LËp tr×nh
Program bai3;
Use Crt;
Var n, i: Integer;
a, T: Real;
BEGIN
CLRSCR;
Write (‘a='); Readln(a);
MS: = 1; T:=0;
For i:=0 to n do
MS:= MS*(a+i)
T: = 1/MS + T;
Writeln (‘T =’, T : 10 : 8);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
36
(d)
Program bai4;
Use Crt;
Var n, i: Integer;
a, T, MS: Real;
BEGIN
CLRSCR;
Write (‘a='); Readln(a);
Write (‘n='); Readln(n);
MS: = a; T: = 1/a;
For i: = 1 to n- 1 do
Begin
MS: = MS * MS;
T: = T + 1/MS;
Writeln (‘T =’, T : 10 : 8);
End;
Readln;
END.
122 ...22
2
1......
11
naaa
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
37
§Bµi 4: CÊu tróc lÆp víi lÖnh While
§Çu tiªn BTLG ®îc kiÓm tra nÕu ®óng, lÖnh S ®îc thùc hiÖn, thùc hiÖn
xong l¹i quay vÒ kiÓm tra BTLG. Vßng lÆp kÕt thóc khi BTLG sai. NÕu lóc ®Çu
BTLG sai th× lÖnh S kh«ng ®îc thùc hiÖn lÇn nµo.
NÕu BTLG ®óng th× trong sè c¸c lÖnh cña S ph¶i cã mét lÖnh lµm cho
BTLG ®Õn 1 lóc nµo ®ã trë thµnh sai, nÕu kh«ng th× vßng lÆp thùc hiÖn v« h¹n
lÇn.
* D÷ liÖu ký tù
Khai b¸o
Var Tªn biÕn : Char;
VÝ dô: Var TL: Char;
Trong ®ã Pascal cã tÊt c¶ 256 ký tù kh¸c nhau mçi ký tù cã 1 m· gäi lµ m·
ASCII, m· ASCII cña c¸c ký tù nhËn gi¸ trÞ tõ 0 -> 255.
C¸c gi¸ trÞ cña ký tù ®îc ®Æt trong ‘A’, ‘b’, ‘9’
Ký tù M· ASCII
‘A’ 65
‘B’ 66
‘C’ 67
..... ......
‘a’ 97
‘b’ 98
While BTLG Do S
BTLG
S
s
®
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
38
‘ ‘ 32 (ch÷ hoa vµ ch÷ thêng c¸ch nhau ‘ ‘ 32)
(97 - 65 = 32)
C¸c ch÷ c¸i la tinh ®îc x¾p xÕp liªn tiÕp m· ASCII
C¸c sè ‘0’ 48
‘1’ 49
‘2’ 50
........ .......
PhÐp so s¸nh lín h¬n hoÆc nhá h¬n ®èi víi ký tù ®îc thùc hiÖn th«ng qua
m· ASCII.
‘A’ < ‘B’ (§óng)
‘A’ > ‘a’ (Sai)
‘A’ > ‘1’ (§óng)
* C¸c hµm ký tù
Hµm CHR; CHR (n);
n lµ mét biÕn cña Byte.
Hµm nµy cho ta ký tù cã m· ASCII = n
Write(‘A’);
Write(CHR(65)); Write(65);
Hµm ORD; ORD (Ch)
Hµm nµy cho ta mét sè nguyªn cã m· ASCII m· ASCII cña (ch) (ch lµ
mét biÕn ký tù).
Var n, i: Byte;
ch: char;
Ch: = ‘A’;
n: = ORD (ch); n: = 65
ORD(‘9’) - ORD(‘5’); = 9 - 5 = 4
CHR(ORD(ch)) = ch
n
ORD(CHR(n)) = n
ch
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
39
Hµm UPACSE (ch);
NÕu ch lµ ch÷ c¸i la tinh viÕt thêng th× hµm nµy cho ta ch÷ c¸i la tinh viÕt
hoa t¬ng øng.
Trong tÊt c¶ c¸c trêng th× gi÷ nguyªn
VD: UPACSE(‘a’) = ‘A’
UPACSE(‘b’) = ‘B’
UPACSE(‘9’) = ‘9’
VD: Trong Pascal:
If Upcase (ch) = ‘C’ Then
(ch = ‘C’) or (ch = ‘c’)
Program TÝnhCVHT;
Use CRT;
Var S, R: Real;
TL: Char;
BEGIN
TL: = ‘C’;
While (TL = ‘C’) or (TL = 'c' ) do
Begin
CLRSCR;
Write (‘R=’); Readln (R);
S: = PI * R * 2;
Writeln (‘Chu vi =’, S : 8 : 2);
Writel ('TiÕp tôc (C/K) ');
Readln (TL);
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
40
Integer: BiÕn sè nguyªn VD: n, d, i: Integer.
Real: Thùc
Readln: Dõng mµn h×nh ®îi nhËp sè liÖu
TÝnh n!
T: = 1
For i: = 1 to n do
T: = T * i;
i: = 1; T: = 1
While (i < = n) do
Begin
T: = T*i;
i: = i + 1;
End.
Program VD2;
Use Crt;
Var n, i: Integer;
T: Real;
BEGIN
CLRSCR;
Write ('n='); Readln(n);
i: = 1; T: = 1
While (i < = n) do
Begin
T: = T*i;
i: = i + 1;
End;
Writeln('T=', T : 10 : 0);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
41
§Bµi 5: CÊu tróc lÆp víi lÖnh REPEAT
REPEAT
S;
Until BTLG;
§Çu tiªn lÖnh S ®îc thùc
hiÖn sau ®ã m¸y kiÓm tra
BTLG, sai l¹i quay vÒ thùc
hiÖn S. Vßng lÆp kÕt thóc
khi BTLG ®óng.
Sù kh¸c nhau gi÷a Repeat Until vµ While:
+ ë While BTLG ®îc kiÓm tra tríc (kiÓm tra biÓu thøc l«gic tríc) råi
míi thùc hiÖn S;
+ Cßn ë Repeat th× thùc hiÖn S råi míi kiÓm tra BTLG.
Cho nªn ë vßng lÆp While S kh«ng ®îc thùc hiÖn lÇn nµo nÕu nh biÓu
thøc l«gic ban ®Çu lµ sai, cßn ë Repeat th× S ®îc thùc hiÖn Ýt nhÊt 1 lÇn. V× vËy
khi nµo cÇn vßng lÆp thùc hiÖn Ýt nhÊt 1 lÇn nªn dïng Repeat.
- ë vßng While: Vßng While kÕt thóc khi biÓu thøc l«gic sai
- Cßn vßng Repeat kÕt thóc khi biÓu thøc l«gic ®óng
- ë cÊu tróc Repeat nÕu S lµ lÖnh kÐp còng kh«ng cÇn ph¶i viÕt trong
cÆp Begin - End.
S
BTLG ® s
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
42
VD: ViÕt ch¬ng tr×nh tÝnh chu vi ®êng trßn
Program CVDT;
Use Crt;
Var R, S: Real;
TL: Char;
BEGIN
Repeat
CLRSCR;
Write (‘R =’); Readln (R);
S: = 2 * PI * R;
Writeln (‘ Chu vi =’, S : 8 : 2);
Wrile (‘TiÕp tôc (C/K): ’);
Readln (TL);
Until Upcase (TL) = ‘k’;
END.
Bµi tËp:
Cho mét sè tù nhiªn n, viÕt ch¬ng tr×nh tÝnh tæng c¸c ch÷ sè cña n
LËp tr×nh
Program TinhtongSTN;
Use Crt;
Var n, T, d: Integer;
BEGIN
CLRSCR;
Write (‘ n =’); Readln (n);
T: = 0
Repeat
d: = n mod 10;
T: = T + d;
n: = n div 10;
Until n = 0;
Writeln (‘T=’, T);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
43
MÉu chuÈn
Program VD1;
Use CRT;
Var n, d, T: Integer; {Tèi ®a cã 5 ch÷ sè}
BEGIN
CLRSCR;
Write (‘ n =’);
Repeat
Readln (n);
IF n < 0 then
Writeln (‘NhËp l¹i d÷ liÖu kh«ng hîp lÖ’);
Until n > 0;
T: = 0;
Repeat
d: = n mod 10; { VD: 4 mod 10 = 4}
T: = T + d;
n: = n div 10;
Until n = 0;
Wrileln (‘T =’, T);
Readln;
END.
VD: n= 5167; T:=0;
d:= n mod 10 = 7;
T:= 0 + 7 = 7;
n:= 516;
d:= n mod 10 = 6;
T:= T + d = 6 + 7 = 13;
n:= n div 10 = 51;
d:= n mod 10 = 1;
T:= 13 + 1 = 14;
n:= n div 10 = 5;
d:= n mod 10 = 5;
T:= 14 + 5 = 19
n:= n div 10 = 0; T:= 19;
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
44
Hµm: GOTOXY(Cét, hµng)
§a con trá tíi to¹ ®é ®îc x¸c ®Þnh bëi cét vµ hµng
VD: GOTOXY(5,10); ®a con trá tíi cét 5 vµ hµng 10 trªn mµn h×nh
Hµm: Where X
Cho biÕt to¹ ®é cét con trá trªn mµn h×nh
Hµm: Where Y: Täa ®é hµng cña con trá trªn mµn h×nh
LÖnh
CLREOL: Xo¸ tõ vÞ trÝ hiÖn thêi ®Õn hÕt dßng (CLeaR End Of Line)
ViÕt l¹i ch¬ng tr×nh trªn:
Program VD1;
Use n, d, T, x, y: Integer;
BEGIN
CLRSCR;
Write (‘n =’); x: Where X; y: Where Y;
Repeat
GOTOXY(x,y); CLREOL;
Readln(n);
IF n < 0 then writeln(‘NhËp l¹i’);
Until n = 0;
T: = 0
Repeat
d: = n mod 10;
T: = T + d;
n: = n div 10;
Until n = 0;
Writeln (‘T =’, T);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
45
Bµi tËp: Cho 2 sè tù nhiªn n, m t×m íc chung lín nhÊt cña n, m
ThuËt to¸n ¬ c¬ lit
REPEAT
r:= n mod m;
n:= m; m:= r;
Until m=0;
n: lµ UCLN
Program VD2;
Use n, m, r: Integer;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
Write (‘m =’); Readln (m);
Repeat
r: = n mod m;
n: = m; m: = r;
Until m = 0;
Writeln (‘n =’, n);
Readln;
END.
VD1: n=75 vµ m=30
r=15; n=30; m=15;
r= 0; n=15; m=0;
VD2: n=30 vµ m=75
r=30; n=75; m=30;
r=15; n=30; m=15;
r=0; n= 15; m= 0;
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
46
TÝnh BSCNN cña n vµ m
BSCNN: 15, 9
d = UCLN(15,9) = 3
BCNN = 15 * 9 div 3
= n * m div d;
Bµi tËp: Cho 1 sè thùc a t×m sè tù nhiªn n nhá nhÊt ®Ó
Program VD4;
Use CRT;
Var T, n, a: long Int;
BEGIN
CLRSCR;
Write (‘n=’); Readln (n);
Write (‘a =’); Readln (a);
T: = 0; n: = 0
While T <= a do
Begin
n: = n + 1;
T: = T + 1/n;
End;
Readln;
END.
an
1...
3
1
2
11
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
47
Bµi t©p:
TÝnh n!!= 1.3.5......n nÕu n lÎ
= 2.4.6......n nÕu n ch½n
(0!! = 2; 0! = 1)
ThuËt to¸n
T: = 1;
If n mod 2 = 1 then i: = 1
Else i: = 2;
While i< = n do
Begin
T: = T * i;
i: = i+ 2;
End.
Bµi tËp 1: ViÕt ch¬ng tr×nh ®Ó kiÓm tra xem n cã ph¶i lµ sè nguyªn tè hay
kh«ng (chØ chia hÕt cho 1 vµ chÝnh nã)
Program BT1;
Use CRT;
Var n, i: Integer;
BEGIN
CLRSCR;
Write (‘n=’); Readln(n);
i: = 2;
While i<= SQRT(n) do
If n mod i= 0 Then
Begin
Writeln (n,’ lµ hîp sè’);
Readln;
Halt;
End;
Else i: =i + 1;
Writeln(n, ‘ lµ sè nguyªn tè’);
Readln;
END.
VD: n=5; i=1; T=1; i=3; T=1.3; i=5; T=1.3.5; i=7; Bá qua in ra kÕt qu¶
VD: n=6; i=2;
T=2; i=4; T=2.4; i=6; T=2.4.6; i=8; Bá qua in ra kÕt qu¶
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
48
KiÓu Boolean
(m, p)
C¸c biÕn cña BOOLEAN chØ nhËn 1trong 2 gi¸ trÞ
True (®óng)
False (sai)
P: C¸c phÐp to¸n: AND, OR, NOT, XOR.
Var A, B: BOOLEAN
Mçi biÕn Boolean còng ®îc coi lµ 1 biÓu thøc l«gic.
Var A: Boolean Var A: Boolean
If A then ... x: Real
If (x < 5) and A then...
If x < 5 then A: = True
Else A: = False;
A: = x < 5;
If x = 2 Then A: = True
Else A: = False;
HoÆc A: = x = 2;
ViÕt l¹i ch¬ng tr×nh kiÓu Boolean kh«ng dïng lÖnh Halt
Program VD1;
Use CRT;
Var i, n: Integer;
NT: Boolean;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
i: = 2; NT: = True;
While (I <= SQRT(n)) and NT do
M
VD1: VD2:
VD3:
VD4:
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
49
If n mod i = 0 Then NT: = False
Else i: = i + 1;
If NT then Writeln (n, ‘ Lµ sè nguyªn tè’);
Else Writeln (n, ‘lµ hîp sè’);
Readln;
END.
Bµi tËp 2: Cho sè tù nhiªn n bÊt kú, h·y in tÊt c¶ c¸c sè nguyªn tè nhá h¬n
hoÆc b»ng n.
Program VD2;
Use CRT;
Var i, n, m: Integer;
NT: Boolean;
BEGIN
CLRSCR;
Write (‘m =’); Readln (m);
For n: = 3 to m do
Begin
i: = 2; NT: = True;
While (i<= SQRT(n)) and NT do
If n mod i = 0 then NT: = False
Else i: = i + 1;
If NT then Write (n, ‘ ‘);
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
50
Bµi tËp vÒ nhµ:
Cho mét sè tù nhiªn n cã thÓ biÓu diÔn n! díi d¹ng tÝch cña 3 sè
nguyªn liªn tiÕp hay kh«ng
Program VD2;
Use CRT;
Var i, n, m,k: Integer;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
m: = 1;
For i: = 1 to n do m: = m * i;
k: = 1;
While (k<=EXP(1/3 * Ln(m)) do
Begin
If k*(k+1)*(k+2) = m then
Writeln (K, ‘ ‘; k+1, ‘ ', k + 2);
k: =k + 1;
End;
Readln;
END.
3 MK
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
51
§Bµi 6: M¶ng
M¶ng lµ mét tËp hîp c¸c gi¸ trÞ thuéc cïng 1 kiÓu d÷ liÖu
Khai b¸o: BiÕn m¶ng: ARRAY[miÒn chØ sè] OF kiÓu d÷ liÖu;
- M¶ng cã hai lo¹i m¶ng 1 chiÒu vµ m¶ng nhiÒu chiÒu
- MiÒn chØ sè: ChØ ra cËn díi vµ cËn trªn cña c¸c chØ sè
- KiÓu d÷ liÖu: KiÓu d÷ liÖu c¸c phÇn tö cña m¶ng
VD: Var A:ARRAY [1 .. 100] of Real;
A lµ 1 m¶ng chøa tèi ®a 100 ký tù
C¸c phÐp to¸n ®èi víi m¶ng: Truy nhËp theo chØ sè
VD: A [20] phÇn tö thø 20 cña m¶ng
NhËp m¶ng:
- NhËp sè phÇn tö cña m¶ng:
Write(‘n=’); Readln(n);
- NhËp tõng phÇn tö cña m¶ng
For i: = 1 to n do
Begin
Write ('A[',i,']=');
Readln(A[i]);
End;
- In m¶ng ra mµn h×nh
For i: = 1 to n do Writeln (A[i] : 8 : 2)
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
52
Bµi 1: Cho n sè thùc bÊt kú a1, a2, an
TÝnh tæng T = a12 + a2
2+...+ an2
Program VD1;
Use CRT;
Const max = 100;
Var A: Array [1 .. max] of Real;
i, n: Integer;
T: Real;
BEGIN
CLRSCR;
Write(‘n =’); Readln(n);
For i: = 1 to n do
Begin
Write('A ['; i,']=');
Readln(A[i]);
End;
T: = 0;
For i: = 1 to n do T: = T + A[i] * A[i];
Writeln (‘T=’, T : 8 : 2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
53
Bµi 2: ViÕt ph¬ng tr×nh tÝnh tÝch v« híng cña 2 vÐc t¬: X, Y;
Program Bai2;
Use CRT;
Const max = 100;
Var X,Y: Array [1 .. max] of Real;
i, n: Integer;
T: Real;
BEGIN
CLRSCR;
Write(‘n =’); Readln(n);
For i: = 1 to n do
Begin
Write('X [', i, ']=');
Readln(X[i]);
End;
For i: = 1 to n do
Begin
Write ('Y[',i,']=');
Readln (Y[i]);
End;
T: = 0
For i: = 1 to n do T:=T+X[i]*Y[i];
Writeln('T=',T:8:2);
Readln;
END.
1
.n
i i
i
T X Y
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
54
Bµi 3: ViÕt ch¬ng tr×nh tÝnh trung b×nh céng c¸c sè thùc
Program BAI3;
Use CRT;
Const max = 100;
Var X: Array [1 .. max] of Real;
i, n: Integer;
T: Real;
BEGIN
CLRSCR;
Write('n='); Readln(n);
For i:=1 to n do
Begin
Write ('X[',i,']=');
Readln (X[I]);
End;
T = 0;
For i: = 1 to n do
T:=(T+X[i]);
T:=T/n;
Writeln(‘T =’, T : 8 : 2);
Readln;
END.
Bµi 4: ViÕt ch¬ng tr×nh tÝnh trung b×nh céng c¸c sè ©m vµ trung b×nh céng c¸c
sè ©m.
1
.n
i i
i
T X Y
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
55
Program BAIT4;
Use CRT;
Const max = 100;
Var A: Array [1 .. max] of Real;
SD, SA, i, n: Integer;
TA, TD: Real;
BEGIN
CLRSCR;
Write('n='); Readln(n);
For i:=1 to n do
Begin
Write ('A[',i,']=');
Readln (A[i]);
End;
TA: = 0; TD: = 0; SA: =0; SD: = 0;
For i: = 1 to n do
Begin
If A[i] < 0 then
Begin
SA: = SA + 1;
TA:=TA+A[i];
End;
If A[i] > 0 then
Begin
SD: = SD + 1;
TD: = TD + A[i];
End;
End;
If SA > 0 then
Begin
TA: = TA/SA;
Writeln(‘TBC c¸c sè ©m =’, TA : 8 : 2);
End
Else Writeln (‘Kh«ng cã sè ©m’);
If SD > 0 then
Begin
TD: = TD/SD;
Writeln(‘TBC c¸c sè d¬ng =’, TD : 8 : 2);
End
Else Writeln(‘Kh«ng cã sè d¬ng’);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
56
Bµi 5: Cho n sè thùc a1, a2, ... an vµ 2 sè thùc x, y (x<=y) tÝnh Trung b×nh céng
trong ®o¹n x, y.
Program B5;
Use CRT;
Const max = 100;
Var A: Array [1 .. max] of Real;
i, n, d: Integer;
T, x, y: Real;
BEGIN
CLRSCR;
Write(‘n =’); Readln(n);
For i: = 1 to n do
Begin
Writeln (‘A[‘,i,’]=’); Readln(A[i]);
End;
Write (‘x =’); Readln (x);
Write (‘y=’); Readln (y);
T: = 0; d: = 0;
For i: = 1 to n do
If (A[i] >= x) and (A[i] <= y) then
Begin
T: = T + A[i];
d: = d + 1;
End;
If d > 0 then
Begin
T: = T/d;
Writeln (‘T=’, T: 8 : 2);
Else Writeln (‘ Kh«ng cã sè nµo trong [x, y]’)
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
57
ThuËt to¸n t×m phÇn tö nhá nhÊt (lín nhÊt)
Cho mét d·y sè thø tù a1, a2, ... an T×m phÇn tö nhá nhÊt
Var A [1 .. max] of Real;
i, n: Integer;
NN: Real;
ThuËt to¸n:
NN: = A[1];
For i: = 2 to n do
If A[i] < NN then NN:= A[i];
VD: 2, 1, 3, -5, - 8, -9 n = 6
NN: = A[1]
I: = 2 A[i] < NN => NN = 1
..........
I: = 6 A[i] < NN => NN = - 9 In
§Ó t×m gi¸ trÞ lín nhÊt ch÷ cÇn ®æi dÊu bÊt ®¼ng thøc sau IF
LN: = A[1]
For i: = 2 to n do
IF A[i] > LN then LN: = A[i];
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
58
VÝ dô: Cho n sè thùc a1, a2, ... an vµ 2 sè thùc x, y. H·y t×m phÇn tö lín nhÊt trong
®o¹n x, y.
Program VD;
Use CRT;
Const max = 100;
Var A, B: Array [1 .. max];
i, n, d: Integer;
x, y, LN: Real;
BEGIN
CLRSCR;
Write(‘n =’); Readln(n);
For i: = 1 to n do
Begin
Write (‘A[‘,i,‘]=’);
Readln (A[i]);
End;
Write(‘x =’); Readln (x);
Write(‘y=’); Readln(y);
d: = 0;
For i: = 1 to n do
IF (A[i] >= x) and (A[i] <=y) then
Begin
d: = d + 1;
B[d]:= A[i];
End;
IF d > 0 then
Begin
LN: = B[1];
For i: = 2 to d do
IF B[i] > LN then LN:=B[i];
Writeln('Gi¸ trÞ lín nhÊt',LN:8:2);
End
Else
Writeln('Kh«ng cã sè nµo trong [x,y]');
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
59
Bµi tËp 1: Cho n sè thùc a1, a2, ..., an. TÝnh
a)
b)
c)
d) 2 2 1 2
1 2 ...... ( 1) . n
na a a
e) a1a2 + a2a3 + ..........+ an-1an (víi n>=2)
Gi¶i
a) NhËp m¶ng A
Ti =
T: = 0
For i: = 1 to n do T: = T + A[i]/sin(i);
b) T: = 0; d: = 1; ms: = 1;
For i: = 1 to n do
Begin
MS: = MS *i;
T: = T+ d *A[i]/MS;
d: = - d;
End;
e) T: = 0
For i: = 1 to n - 1 do T:= T + A[i]*A[i+1];
n
aaa n
sin...
2sin1sin
21
1
1 2( 1)
...1! 2! !
n
naa a
n
n
aaa n1...
211 2
1
ia
i
aa ii
sin1sin
1...
1sin
1
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
60
Bµi 2. Cho n sè tù nhiªn k1, k2, ... kn
TÝnh tæng c¸c sè nguyªn tè trong sè ®ã (c¸c chØ sè cña m¶ng k1 ... kn)
Program BT;
Use CRT;
Const max = 100;
Var K:Array [1 .. 100] of Integer;
T, i, j, n: Integer; NT: Boolean;
BEGIN
CLRSCR;
Write(‘n=’); Readln (n);
For i: = 1 to n do
Begin
Write(‘K[‘,i,‘]=’); Readl (K[i]);
End;
For i: = 1 to n do
Begin
j: = 2; NT: = True;
While (J<=SQRT(K[i])) and NT do
If K[i] mod J = 0 then NT: = False
Else j: = j + 1;
End;
Begin
T: = 0;
If NT then T: = T + K[i];
Writeln(‘Tæng c¸c sè nguyªn tè =’, T);
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
61
ThuËt to¸n s¾p xÕp
Cho phÇn tö a1, a2, ... an
S¾p xÕp l¹i phÇn tö nµy theo thø tù t¨ng dÇn vµ gi¶m dÇn
ThuËt to¸n sñi bät (Buble Sort)
For i: =1 to n-1 do
For j:= i+1 to n do
If A[i]>A[j] then
Begin
Temp: = A[i];
A[i]: = A[j];
A[j]: = Temp;
End;
Program Sort;
Use CRT;
Const max = 100;
Var k: Array [1 .. 100] of Integer;
i, j, n: Integer; Temp: Real;
BEGIN
CLRSCR;
Write(‘n=’); Readln (n);
For i:=1 to n do
Begin
Write(‘A [‘,i,‘j =’); Readln(A[i]);
End;
For i: =1 to n-1 do
For j:= i+1 to n do
IF A[i]>A[j] then
Begin
Temp: = A[i];
A[i]: = A[j];
A[j]: = Temp;
End;
Writeln(‘KÕt qu¶ s¾p xÕp’);
For i:=1 to n do Writeln (A[i] : 8 : 2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
62
Bµi tËp: Cho n sè thùc a1, a2, .... an
Lo¹i bá c¸c phÇn tö gièng nhau trong d·y
3, 5, 2, 1, 5, 2 In ra 3, 5, 2, 1
Program BT;
Use CRT;
Const max = 100;
Var A, B: Array [1 .. max] of Real;
i, s, k, n: Integer;
Found: Boolean;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
For i:=1 to n do
Begin
Write (‘A[‘,i,‘J=’); Readln (A[i]);
End;
k: = 1; B[1]: =A[1];
For i:=2 to n do
Begin
J: = 1; Found: =False;
While (J<=K) and (Not Found) do
If A[i]=B[j] then Found: = True
Else j: = j + 1
If Not Found then
Begin
k: = k+1;
B[k]: = A[i];
End;
End;
Writeln (‘KÕt qu¶’);
For i: =1 to k do
writeln(B[i]:8:2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
63
§Bµi 7: M¶ng hai chiÒu
1) Kh¸i niÖm
XÐt m¶ng A:ARRAY[1..max] of KiÓu d÷ liÖu;
M¶ng A lµ m¶ng 1 chiÒu gåm c¸c phÇn tö A[1], A[2], ...
Mçi phÇn tö cña m¶ng A cã thÓ thuéc 1 kiÓu bÊt kú;
NÕu mçi phÇn tö cña m¶ng A l¹i lµ mét m¶ng 1 chiÒu
=>A lµ m¶ng 2 chiÒu. VÒ mÆt to¸n häc: M¶ng 2 chiÒu lµ mét ma trËn.
2) Khai b¸o
Const max = 100;
Var A: Array [1 .. max, 1 .. max] of KiÓu d÷ liÖu;
PhÐp to¸n: Truy nhËp theo chØ sè (chØ sè dßng, chØ sè cét)
VD: A[3,5] - phÇn tö ë dßng 3 vµ cét 5.
3) NhËp m¶ng tõ bµn phÝm
Gi¶ sö nhËp ma trËn A(n x m)
- NhËp sè dßng, sè cét:
Write (‘n =’); Readln (n);
Write (‘m =’); Readln (m);
- NhËp tõng phÇn tö cña ma trËn
For i: =1 to n do
For j:= 1 to m do
Begin
Write ('A[', i , ',' , j , ']=');
Readln (A[i,j]);
End;
- In ma trËn ra mµn h×nh
For i: = 1 to n do
Begin
For j: = 1 to m do
Write (A[i,j] : 8 : 2, ‘ ‘);
Writeln;
End.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
64
Bµi tËp 1: ViÕt ch¬ng tr×nh céng 2 ma trËn
A(n x m) + B(n x m) = C(n x m)
C[i,j] = A[i,j] + B[i,j]
Program BT1;
Use CRT;
Const max = 50;
Var A, B, C: Array [1 .. max, 1 .. max] of Real;
i, j, n, m: Integer;
Found: Boolean;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
Write (‘m=’); Readln (m);
Writeln (‘NhËp ma trËn A’);
For i:= 1 to n do
For j:= 1 to m do
Begin
Write (‘A[‘, i, ‘,’,j, ‘] =’);
Readln (A[i,j]);
End;
Writeln (‘NhËp ma trËn B’);
For i: = 1 to n do
For j:= 1 to m do
Begin
Write (‘B[‘, i, ‘]’,j, ‘]=’);
Readln (B[i,j]);
End;
For i:= 1 to n do
For j:= 1 to m do
C[i,j]: = A[i,j] + B[i,j];
Writeln (‘KÕt qu¶ lµ’);
For i:= 1 to n do
Begin
For j:=1 to m do
write (C[i,j] : 8 : 2, ‘ ‘);
Writeln;
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
65
2) Cho ma trËn A(n x m)
TÝnh B (m x n)
B [i,j] = A[j,i]
Program BT2;
Use CRT;
Const max = 50;
Var A, B, : Array [1 .. max, 1 .. max] of Real;
i, j, n, m: Integer;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
Write (‘m =’); Readln (m);
Writeln ('NhËp ma trËn A');
For i:=1 to n do
For j:= 1 to m do
Begin
Write (‘A[‘, i, ‘,’,j, ‘]=’);
Readln(A[i,j]);
End;
For i:=1 to n do
For j:= 1 to m do
B[i,j]:=A[j,i];
For i: = 1 to m do
Begin
For j:=1 to n do write(B[i,j] : 8 : 2 , ‘ ‘);
Writeln;
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
66
Bµi2: Cho ma trËn A(n x m) x B(m x p) = C(n x p)
1
[ , ] [ , ]* [ , ]m
k
C i j A i k B k j
Program BT2;
Use CRT;
Const max = 50;
Var A, B, C: Array [1 .. max, 1 .. max] of Real;
k, i, j, n, m, p: Integer;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
Write (‘m =’); Readln (m);
Write (‘p =’); Readln (p);
For i:=1 to n do
For j:=1 to m do
Begin
Write (‘A[‘, i, ‘,’,j, ‘]=’);
Readln(A[i,j]);
End;
For i:=1 to m do
For j:=1 to p do
Begin
Write (‘B[‘, i, ‘,’,j, ‘]=’);
Readln(B[i,j]);
End;
For i:=1 to n do
For j:=1 to p do
Begin
C [i,j]: = 0;
For k:= 1 to m do
C[i,j]: = C[i,j] + A[i,k] * B [k,j];
End;
For i:=1 to n do
Begin
For j:=1 to p do write (C [i,j] : 8 : 2 , ‘ ‘);
Writeln;
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
67
Bµi 3: Cho ma trËn A (n x m) víi c¸c phÇn tö lµ c¸c sè thùc, h·y x¸c ®Þnh
c¸c gi¸ trÞ B1, B2 ... Bn.
Trong ®ã:
a) Bi b»ng trung b×nh céng cña dßng thø i ë ma trËn A
b) Bi b»ng phÇn tö lín nhÊt cña dßng thø i ë ma trËn A
Program A;
Use CRT;
Const max = 50;
Var A:Array [1 .. max, 1 .. max] of Real;
B:Array [1 .. max] of Real;
i, j, n, m: Integer;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
Write (‘m =’); Readln (m);
For i: = 1 to n do
For j: = 1 to m do
Begin
Write (‘A [‘, i, ‘]’,j, ‘] =’);
Readln (A [i,j]);
End;
For i:= 1 to n do
Begin
B[i]: = 0;
For j: =1 to m do
B[i]:= B[i] + A[i,j];
B [i]: = B[i]/m;
End;
For i: = 1 to n do write (B[i] : 8 : 2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
68
b)
Program B;
Use CRT;
Const max = 50;
Var A: Array[1 .. max, 1 .. max] of Real;
B: Array[1 .. max] of Real;
i, j, n, m: Integer;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
Write (‘m =’); Readln (m);
For i: = 1 to n do
For j: =1 to m do
Begin
Write (‘A [‘, i, ‘]’,j, ‘] =’);
Readln (A [i,j]);
End;
For i:= 1 to n do
Begin
B[i]: = A[i,1];
For j: =2 to m do
If A[i,j] > B[i] then B [i]: = A[i,j];
End;
For i: = 1 to n do write(B[i] : 8 :2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
69
Bµi 4: Cho sè TN n; xÐt sè phÇn tö d¬ng cña ma trËn A( n x n)
a) ai, j = sin( i + j/2);
b) ai, j = cos (i2 + n)
c) ai, j =
Program A;
Use CRT;
Const max = 50;
Var A: Array [1 .. max, 1 .. max] of Real;
i, j, n, d: Integer;
BEGIN
CLRSCR;
Write (‘n =’); Readln (n);
For i:=1 to n do
For j:=1 to m do
A[ i,j]: =sin(i +j/2);
d: = 0;
For i:=1 to n do
For j:=1 to n do
IF A[i,j] > 0 then d: = d + 1;
Writeln (‘d =’, d);
Readln;
END.
)sin(22
n
ji
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
70
Bµi 5: Cho ma trËn A(n x m) víi c¸c phÇn tö lµ c¸c sè thùc trong ®ã cã Ýt
nhÊt 1 phÇn tö kh¸c 0. H·y tÝnh ma trËn B b»ng c¸c chia tõng phÇn tö t¬ng øng
cña ma trËn A cho phÇn tö cã gi¸ trÞ tuyÖt ®èi lín nhÊt.
Program BT5;
Use CRT;
Const max = 50
Var A, B: Array [1 .. max, 1.. max] of Real;
i, j, n, m, dong, cot: Integer;
LN: real;
BEGIN
CLRSCR
Write ('n = '); Readln (n);
Write ('m = '); Readln (m);
For i:=1 to n do
For j:=1 to m do
Begin
Write ('A [', i, ',', j,'] =');
Readln (A[i,j]);
End;
LN: = ABS(A[1,1]); dong: =1; cot:=1;
For i:=1 to n
For j:=1 to m do
If ABS(A[i,j]) > LN then
Begin
LN: = ABS (A[i,j]);
dong: =i; cot:=j;
End;
For i:=1 to n do
For j:= 1 to m do
B[i,j]: = A[i,j]/A[dong,cot];
Writeln ('KÕt qu¶ lµ');
For i:=1 to n do
Begin
For j:=1 to m do Write (B[i]: 8 : 2, ' ');
Writeln;
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
71
§Bµi 8: Ch¬ng tr×nh con
lËp tr×nh cÊu tróc
I) Hµm
* Có ph¸p:
Function tªn hµm (danh s¸ch c¸c ®èi cña hµm): KiÓu cña hµm;
Var c¸c biÕn côc bé;
Begin
C¸c lÖnh cña hµm;
End;
VD: ABS (x): KiÓu;
x: Mét sè thùc
KiÓu: 1 sè thùc > = 0
BiÕn côc bé lµ biÕn ®îc dïng trong ch¬ng tr×nh con cã sù thay ®æi gi¸
trÞ cña nã kh«ng lµm ¶nh hëng tíi c¸c biÕn trïng tªn ë ch¬ng tr×nh chÝnh (gäi
lµ biÕn toµn côc).
Nguyªn lý ®Þa ph¬ng: TÊt c¶ c¸c biÕn dïng riªng cho ch¬ng tr×nh con
cÇn khai b¸o lµ biÕn côc bé.
Trong sè c¸c lÖnh cña hµm th× ph¶i cã Ýt nhÊt 1 lÖnh g¸n gi¸ trÞ tªn hµm
b»ng gi¸ trÞ tÝnh ®îc.
* C¸ch sö dông:
Hµm ®îc viÕt tríc Begin ch¬ng tr×nh chÝnh.
Hµm ®îc sö dông nh mét thµnh phÇn cña biÓu thøc b¶n th©n hµm kh«ng
ph¶i lµ mét lÖnh. NÕu ë ch¬ng tr×nh cã nhiÒu hµm th× nh÷ng hµm viÕt sau ®îc
phÐp sö dông nh÷ng hµm viÕt tríc. Hµm bao giê còng tr¶ vÒ mét gi¸ trÞ.
* C¸ch x¸c ®Þnh ®èi vµ kiÓu cña hµm:
Ta coi ch¬ng tr×nh con nh mét hîp ®em ®Ó xö lý nh÷ng c¸i vµo vµ cho
kÕt qu¶ lµ mét c¸i ra.
VD:
input Out put
UCLN n, m: Integer d Hµm cã 2 ®èi kiÓu Integer
KiÓu cña hµm Integer
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
72
VD2: TÝnh n!
Hµm cã 1 ®èi kiÓu Integer;
Vµ kiÓu cña hµm lµ mét sè thùc Real
ë ch¬ng tr×nh chÝnh chuyÓn c¸c ®èi cho hµm th× c¸c ®èi ph¶i lµ nh÷ng
gi¸ trÞ x¸c ®Þnh.
VD: KiÓu gi¸ trÞ cña c¸c ®èi ®îc truyÒn vµo ë ch¬ng tr×nh chÝnh ph¶i
phï hîp víi kiÓu khai b¸o khi x©y dùng ch¬ng tr×nh con.
2) C¸c vÝ dô minh ho¹
VD1: ViÕt ch¬ng tr×nh tÝnh tæng
T: 1! Sin (1) + 2! Sin (2) + ... + n! Sin (n);
ViÕt ch¬ng tr×nh
Program VD1;
Use CRT;
Var T: Real;
N, I: Integer;
{-------------------------------------------------------------}
Function GT(K:Integer): Real;
{Hµm tÝnh K giai thõa}
Var g: Real;
i: Integer;
Begin
g: = 1;
For i: =1 to k do
g: = g *i;
GT: = g;
End;
{-------------------------------------------------------------}
BEGIN
CLRSCR;
Write ('n = '); Readln (n);
T: = 0;
For i: = 1 to n do T: = T + GT(i) * sin(i);
Writeln ('T =', T : 8 : 2);
Readln;
END.
GT n: Integer g: Real;
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
73
VD2: Cho ma trËn thùc A( n x m)
TÝnh a) PhÇn tö cã gi¸ trÞ nhá nhÊt
b) TÝnh T = b12 + b1
2 + ... + bn2
bi = gi¸ trÞ nhá nhÊt cña dßng thø i = Min dßng (i)
Program VD2;
Use CRT;
Var A: Array [1 .. 50, 1 .. 50] of Real;
i, j, n, m: Integer;
NN, T: Real;
{-----------------------------------------------------------------------}
Function Mindong (K: Integer): Real;
{Hµm t×m phÇn tö nhá nhÊt cña dßng thø K}
Var NN: Real;
Begin
NN: = A[k,1];
For i: = 2 to m do
IF A[k,i] < NN then NN: = A[k, i];
Min dong: = NN;
End;
{------------------------------------------------------------------------}
BEGIN
CLRSCR;
Write (' n = '); Readln (n);
Write (' m = '); Readln (m);
For i: = 1 to n do
For j: = 1 to m do
Begin
Write (' A [', i, ',', j, '] = ');
Readln (A [i,j]);
End;
NN: = min dong(1);
For i: = 2 to n do
IF mindong(i) <NN then NN: = mindong(i);
T: = 0
For i: =1 to n do T: = T + mindong(i) * mindong(i);
Writeln (' PT nhá nhÊt: ', NN : 8 : 2);
Writeln ('T = ', T : 8 : 2);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
74
VD3: Cho 2 ma trËn A (n x m)
vµ B (n x m)
TÝnh T = d1 + d2 + .... + dn
Trong ®ã: di = Min dßng i ë Ma trËn A* Max cña dßng i ë Ma trËn B nÕu i lÎ
di =Max dßng i ë Ma trËn A* Min dßng i ë Ma trËn B nÕu i ch½n
Khai b¸o kiÓu d÷ liÖu cña ®èi hoÆc kiÓu cña hµm thuéc kiÓu cã cÊu tróc.
Th× ph¶i khai b¸o th«ng qua ®Þnh nghÜa kiÓu d÷ liÖu.
C¸ch khai b¸o sai:
Function Min(i: Integer; X: Array [1 .. 50, 1 .. 50] of Real);
C¸ch khai b¸o ®óng: Sau tõ kho¸ Const .....
§N kiÓu d÷ liÖu:
Type MT = Array [1 .. 50, 1 .. 50] of Real;
Khai b¸o hµm:
Function Min(i: Integer; X: MT);
Program VD3;
Use CRT;
Type MT = Array [1 .. TD, 1 .. TD] of Real;
Var A, B: MT;
n, m, i, j: Integer;
T: Real;
{----------------------------------------------------------------}
Function Min (i: Integer; X: MT): Real;
{ Hµm t×m Min dßng thø i cña ma trËn X}
Var k: Integer;
NN: Real;
Begin
NN:= X[i,1];
For k:=2 to m do
If X[i, K]< NN then
NN: = X [i, k];
Min: = NN;
End;
Sai
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
75
Function Max (i: Integer; X: M): Real;
{Hµm t×m Max dßng thø i cña ma trËn X}
Var k: Integer;
LN: Real;
Begin
LN: = X [i, 1];
For k:=2 to m do
IF X[i, k] > LN then
LN: = X [i, k];
Max: = LN;
End;
{-----------------------------------------------------------------}
BEGIN
CLRSCR;
Write ('n ='); readln (n);
Write ('m = '); readln (m);
For i:= 1 to n do
For j:=1 to m do
Begin
Write ('A[',i, ',' ,j, '] =');
Readln (A[i,j]);
End;
For i:= 1 to n do
For j:=1 to m do
Begin
Write('B[' ,i ,',' ,j ,']=');
Readln (B[i,j]);
End;
T: = 0;
For i:= 1 to n do
If i mod 2 = 0 then
T: = T + Max (i, A) * Min( i, B)
Else
T: = T + Min(i, A) * Max (i, B);
Writeln (' T = ', T : 8 : 2);
Readln;
END.
Chó ý: Khi truyÒn c¸c gi¸ trÞ vµo c¸c ®èi cho hµm ë ch¬ng tr×nh chÝnh
ph¶i tu©n theo trËt tù kiÓu d÷ liÖu cña c¸c ®èi nh lóc khai b¸o hµm.
ë ch¬ng tr×nh nµy cã hai hµm, mçi hµm cã hai ®èi
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
76
VD4: Cho ma trËn thùc A (n x m) cã hay kh«ng 2 cét cña ma trËn gièng nhau.
Program VD6;
Use CRT;
Label KT;
Var A: Array [1 .. 50, 1 .. 50] of Real;
i, j, n, m: Integer;
{--------------------------------------------------------------------}
Function BN (i, j: Integer): Boolean;
{Hµm kiÓm tra xem hai cét i, j cã gièng nhau?}
Var k: Integer;
B: Boolean;
Begin
B:= True; k: = 1;
While (k<= n) and B do
IF A[k, i] = A[k,j] then k: =k + 1;
Else B: = False;
BN: = B;
End;
{------------------------------------------------------------------------}
BEGIN
CLRSCR;
Write ('n ='); Readln (n);
Write ('m = '); Readln (m);
For i: = 1 to n do
For j: = 1 to m do
Begin
Write ('A [', i, ']', j, '] =');
Readln('A [i, j]);
End;
For i:=1 to m-1 to
For j: = i+1 to m do
If BN(i,j) Then
Begin
Writeln ('Cã 2 cét gièng nhau');
Goto KT;
End;
Writeln ('Kh«ng cã 2 cét nµo gièng nhau');
KT:
Readln;
END.
BN i,j Boolean
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
77
Bµi tËp 1: Cho n sè tù nhiªn bÊt kú x1, x2, ... xn. ViÕt ch¬ng tr×nh in ra tÊt
c¶ c¸c cÆp sè nguyªn tè cïng nhau trong n sè ®ã. (2 sè nguyªn tè cïng nhau lµ
hai sè cã UCLN = 1)
USCLN (n, m)
Program BT1;
Use CRT;
Var X: Array [1 .. 50] of Integer;
i, j, n: Integer;
{----------------------------------------------------------------------}
Function UCLN (n, m: Integer): Integer;
Var r: Integer;
Begin
Repeat
R: = n mod m;
n: = m; m: = r;
Until r = 0;
UCLN: = n;
End;
{------------------------------------------------------------------}
BEGIN
CLRSCR;
Write ('n = '); Readln (n);
For i: = 1 to n do
Begin
Write (' x[', i, '] = ');
Readln (x[i]);
End;
Writeln (' C¸c cÆp sè NTCN');
For i: =1 to n - 1 do
For j:=i+1 to n do
If UCLN(X[i],X[j])=1 then
Writeln (X[i],' vµ', X[j]);
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
78
Bµi 2: Cho c¸c sè thùc x1, x2, ... x8
H·y t¹o ma trËn vu«ng cÊp 8 A(8 x 8) theo d¹ng díi ®©y
a) b)
Program BT;
Use CRT;
Var X: Array [1 .. 8] of Real;
A: Array [1 .. 8, 1 .. 8] of Real;
i, j: Integer;
{-------------------------------------------------------------------}
Function MU(k:Integer, b: Real): Real;
Var T: Real;
i: Integer;
Begin
T: = 1;
For i: =1 to k do
T: = T * a;
MU: =T;
End;
{---------------------------------------------------------------}
BEGIN
CLRSCR;
For i: = 1 to 8 do
Begin
Write (' x [',i, '] =');
End;
For i: =1 to 8 do
For j: = 1 to 8 do
A[i,j]: = MU(i, X[j]);
For i: = 1 to 8 do
Begin
For j: = 1 to 8 do Write (A[i,j] : 8 : 2, ' ');
End;
Writeln;
Readln;
END.
8
8
8
2
8
1
2
8
22
1
821
.......
....................
.......
.........
xxx
xxx
xxx
x
7
8
7
2
7
1
81
.......
....................
.......
1.........11
xxx
xxx x
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
79
Bµi tËp 3: Cho ma trËn A (n x n)
a) TÝnh tæng sè phÇn tö trªn ®êng chÐo chÝnh
b) TÝnh tæng sè phÇn tõ trªn ®êng chÐo phô
Program BT3;
Use CRT;
Var A: Array [1 .. 50, 1 .. 50] of Real;
i, j, n: Integer;
BEGIN
CLRSCR;
Write ('n = '); Readln (n);
For i:=1 to n do
For j:=1 to n do
Begin
Write ('A [', i, ',' ,j, '] =');
End;
T1: = 0; T2: = 0;
For i:=1 to n do
T1: = T1 + A[i,i];
For i: = 1 t n do
T2: = T2 + A[i, n-i+1];
Writeln ('T1 =', T1 : 8 :2);
Writeln ('T2 ='; T2 : 8 : 2);
Readln;
END.
nnnn
n
n
aaa
aaa
aaa
.......
.................
........
.......
21
22221
11211
n
i
iiaT1
,1
n
i
iniaT1
1,2
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
80
II. Thñ tôc
1) Có ph¸p
Procedure Tªn thñ tôc (Var d/s tham biÕn; d/s tham trÞ);
Var C¸c biÕn côc bé
Begin
C¸c lÖnh cña thñ tôc;
End;
+ Tham biÕn vµ tham trÞ
- Tham biÕn cã Var ë ®»ng tríc, tham trÞ kh«ng cã Var
- Tham trÞ lµ nh÷ng gi¸ trÞ cô thÓ ®îc truyÒn vµo tõ ch¬ng tr×nh chÝnh
khi gäi thñ tôc (gièng nh ®èi cña hµm).
- Tham biÕn lµ gi¸ trÞ thay ®æi sau khi kÕt thóc thñ tôc
BiÕn côc bé chØ cã t¸c dông ë trong ch¬ng tr×nh con sù thay ®æi cña nã
kh«ng ¶nh hëng tíi c¸c biÕn trïng tªn ë ch¬ng tr×nh chÝnh còng nh ë c¸c
ch¬ng tr×nh con kh¸c.
Coi ch¬ng tr×nh con nh mét hép ®en Xö lý nh÷ng c¸i vµo:
- Danh s¸ch Input: Lµ danh s¸ch tham trÞ gièng nh ®èi cña hµm
- Danh s¸ch Output: lµ danh s¸ch tham biÕn
- CTC: lµm viÖc víi b¶n sao cña tham trÞ
- CTC lµm viÖc víi b¶n gèc cña tham biÕn
* C¸ch sö dông:
Thñ tôc ®îc sö dông nh mét lÖnh vµ thñ tôc còng ®îc viÕt tríc Begin
cña ch¬ng tr×nh chÝnh.
C¸c thñ tôc viÕt sau ®îc phÐp gäi tªn c¸c thñ tôc viÕt tríc.
CTC I O
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
81
2) C¸c vÝ dô minh ho¹
X©y dùng ch¬ng tr×nh t×m UCLN cña 2 sè tù nhiªn Program Tim_UCLN_dung_ham;
Use CRT;
Var n, m, d: Integer;
{---------------------------------------------------------------------} Function UCLN (k,l: Integer): Integer; Var r: Integer; Begin Repeat r: = k mod l; k: = l; l: = r; Until r = 0; UCLN: = k; End; {-------------------------------------------------------------------} BEGIN CLRSCR; Write (‘n =’); Readln (n); Write (‘m =’); Readln (m); d:=UCLN(n,m); Writeln (‘d =’, d’); Readln; END. * Dïng thñ tôc
Program Tim_UCLN_dung_thu_tuc;
Use CRT; Var n, m, d: Integer; {-------------------------------------------------------------------} Procedure UCLN(K,l: Integer; Var P: Integer);
{P lµ UCLN cña k vµ l} Var r: Integer; Begin Repeat r:=k mod l ; k: = l; l: = r; Until r = 0; P: = k; End; {HÕt thñ tôc} BEGIN CLRSCR; Write (‘n =’); Readln (n); Write (‘m =’); Readln (m); UCLN(n,m,d); Writeln (‘UCLN cña ',n,'vµ', m, 'lµ: ',d); Readln; END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
82
C¸c ch¬ng tr×nh con lång nhau
TÇm vùc (Scope) cña c¸c biÕn
1) C¸c lêi gäi:
Ch¬ng tr×nh chÝnh gåm 2 ch¬ng tr×nh con A vµ B, A viÕt tríc B.
ë ch¬ng tr×nh chÝnh ®îc phÐp gäi cña A vµ B
V× A viÕt tríc B => ë B gäi ®îc A.
V× B chøa C vµ D => B gäi ®îc C vµ D, ë D gäi ®îc C.
V× ë B gäi ®îc A => ë C vµ D gäi ®îc A
2) C¸c biÕn
C¸c biÕn toµn côc(ë ch¬ng tr×nh chÝnh vµ ë nh÷ng ch¬ng tr×nh con) ®iÒu
kiÖn kh«ng cã biÕn côc bé.
C¸c tham biÕn hoÆc tham trÞ kh«ng trïng tªn.
* C¸c biÕn côc bé ë CT con A:
BiÕn côc bé ë CT con A chØ cã t¸c dông ë CT con A
*BiÕn côc bé ë CT con B: ChØ cã t¸c dông ë CT con B vµ ë trong C vµ D
nÕu nh C vµ D kh«ng cã biÕn trïng tªn.
*BiÕn côc bé ë CT con C: ChØ cã t¸c dông ë C
*BiÕn côc bé ë CT con D: ChØ cã t¸c dông ë D
Program
BEGIN
................
END.
CT con A
CT con B
CT con C
CT con D
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
83
Bµi tËp: Cho ma trËn nguyªn A (n x n). cho biÕt
a) Ma trËn cã ®èi xøng víi nhau qua ®êng chÐo chÝnh kh«ng?
b) Ma trËn cã ®èi xøng víi nhau qua ®êng chÐo phô kh«ng? Program Ma_tran_doi_xung_Qua_duong_cheo_chinh;
Uses crt;
Var A:array[1..50,1..50] of integer;
i,j,n:integer;
b1:Boolean;
{----------------------------------------------------}
BEGIN
CLRSCR;
Write('n= ');readln(n);
For i:=1 to n do
For j:=1 to n do
Begin
Write('A[',i,',',j,']=');
Readln(A[i,j]);
End;
b1:=true;
For i:=1 to n do
For j:=1 to i-1 do
b1:=b1 and (A[i,j]=A[j,i]);
If b1=true then
Writeln('Ma tran doi xung qua duong cheo chinh')
Else
Writeln('Ma tran khong doi xung qua duong cheo chinh');
For i:=1 to n do
Begin
For j:=1 to n do
Write(A[i,j],' ');
Writeln;
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
84
b) §èi xøng qua ®êng chÐo phô
Program Ma_tran_doi_xung_Qua_duong_cheo_phu;
Uses crt;
Var A:array[1..50,1..50] of integfer;
i,j,n:integer;
b1:Boolean;
{----------------------------------------------------}
BEGIN
CLRSCR;
Write('n= ');readln(n);
For i:=1 to n do
For j:=1 to n do
Begin
Write('A[',i,',',j,']=');
Readln(A[i,j]);
End;
b1:=true;
For i:=1 to n-1 do
For j:=1 to n-i do
b1:=b1 and (A[i,j]=A[nj,ni]);
If b1=true then
Writeln('Ma tran doi xung qua duong cheo phu')
Else
Writeln('Ma tran khong doi xung qua duong cheo phu');
For i:=1 to n do
Begin
For j:=1 to n do
Write(A[i,j],' ');
Writeln;
End;
Readln;
END.
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
85
§Bµi 9: D÷ liÖu kiÓu x©u ký tù
X©u ký tù trong PASCAL lµ dßng v¨n b¶n dµi tèi ®a 255 ký tù
1) Khai b¸o
2 c¸ch:
- C¸ch 1: Var ST: String;
ST lµ biÕn x©u ký tù dµi tèi ®a 255 ký tù
- C¸ch 2: Var ST: String [K];
VD: Var St: String [80];
NghÜa lµ ST lµ 1 x©u ký tù dµi tèi ®a 90 ký tù , biÕn kiÓu x©u ký tù lµ mét
lo¹i d÷ liÖu cã cÊu tróc nªn khi khai b¸o kiÓu d÷ liÖu c¸c ®èi cña hµm hay lµ c¸c
tham sè cña thñ tôc ph¶i khai b¸o th«ng qua ®inh nghÜa Type.
Sai: Function H (S: String [80])” Boolean;
§óng: Type St 80 = String [80];
...................................................
Function H (S: St 80): Boolean;
Function H (S: String) : Boolean;
2) Lu gi÷ trong bé nhí
VD: Var A: Array [1 .. 10] of char;
ST: String [10];
ST: = ‘ ViÖt Nam’
Nh÷ng gi¸ trÞ cña x ký tù n»m trong ‘ ‘
A [1]: = ‘v’; A [2]: = ‘i’; A [3]: = ‘e’;
A [4]: = ‘t’; A [j]: = ‘ ’; A [6]: = ‘N’;
A [t]: = ‘a’; A [8]: = ‘m’;
H×nh ¶nh trong bé nhí
1 2 3 4 5 6 7 8 9 10
A V I E T N a m
ST 0 1 2 3 4 5 6 7 8 9 10
8 V i e t N a m
8 lµ ®é dµi thùc cña x©u: « ®Çu
3) C¸c phÐp to¸n trªn x©u ký tù
1. §îc phÐp g¸n mét ký tù hoÆc c¶ x©u ký tù cho biÕn kiÓu x©u ký tù
A: = ‘ ViÖt Nam’; Sai
ST: = ‘ViÖt Nam’; §îc phÐp
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
86
Gi¶ sö: Var ch: Char;
Ch: = ‘A’;
ST: = ch;
St: = ‘A’;
Ch: = St;
2) Truy nhËp tíi tõng ký tù trong x©u theo chØ sè
ch: = ‘C’;
ch: = A [3];
ch: = ST [3];
3) Céng (ghÐp) 2 x©u ký tù
VD: st1: = ‘Em’;
St2: = ‘yeu’;
St1 + St2 = ‘Em yeu’;
St2 + St1 = ‘Yeu em’;
* PhÐp céng kh«ng cã tÝnh chÊt giao ho¸n
4) C¸c hµm vµ thñ tôc chuÈn ®èi víi x©u ký tù
* Hµm Length (S: String): Byte;
Length (St) = 8 Hµm tr¶ vÒ (Return) ®é dµi thùc sù cña x©u
* Hµm Copy (S: String; n1, n2: Byte): String;
Hµm tr¶ mét x©u con cña x©u S gåm n2 ky tù kÓ tõ vÞ trÝ n1
Copy (S, 3, 4) = ‘et N’
* Hµm Pos (S1, S: String): Byte;
Hµm nµy tr¶ vÒ vÞ trÝ xuÊt hiÖn ®Çu tiªn cña x©u S1 trong x©u S, nÕu S
kh«ng chøa S1 th× hµm tr¶ vÒ gi¸ trÞ b»ng 0
VD: Pos (‘t’, St) = 4
S = ‘a b c b a c b c e’
Pos (‘cb’, S) = 3
Pos (‘ad’, S) = 0
* Thñ tôc Delete (var S: String; n1, n2: Byte);
Xo¸ n2 ký tù
Xo¸ n2 ký tù tõ vÞ trÝ n1 cña x©u S
§îc phÐp
Sai
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
87
§Bµi 10: D÷ liÖu kiÓu tËp hîp
1) Khai b¸o
Var tªn biÕn: Set of kiÓu phÇn tö.
KiÓu phÇn tö - kiÓu d÷ liÖu cña c¸c phÇn tö cña tËp hîp lµ c¸c kiÓu d÷ liÖu
®¬n: Integer, Real, Boolean; Char
VD: Var T1, T2: Set of char
T1, T2 lµ tËp hîp c¸c ký tù
- TËp hîp rçng [ ];
- C¸c gi¸ trÞ kiÓu tËp hîp T1: = [‘a’, ‘b’, ‘c’]
T2: = [‘b’, ‘d’]
C¸c phÐp to¸n cña tËp hîp
a) Hîp cña hai tËp hîp (ký hiÖu +)
T1 + T2 = [‘a’, ‘b’, ‘c’, ‘d’]
b) Giao cña hai tËp hîp (ký hiÖu *)
T1 * T2 = [‘b’]
c) HiÖu cña hai tËp hîp
T1 - T2 = [‘a’, ‘c’]
d) ch in T1 ®óng <=> ch T1
e) T1 <= T2 <=> T1 T2
f) T1 = T2
g) T1 T2
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
88
§Bµi 11: D÷ liÖu kiÓu b¶n ghi
(Record)
B¶n ghi lµ tËp hîp c¸c d÷ liÖu cã thÓ thuéc c¸c kiÓu kh¸c nhau, mçi mét
thµnh phÇn ®ã ngêi ta gäi lµ 1 trêng.
1) Khai b¸o
Var Tªn biÕn: Record
Tªn trêng 1: KiÓu d÷ liÖu
Tªn trêng 2: KiÓu d÷ liÖu
.....................
Tªn trêng n: KiÓu d÷ liÖu;
End;
VD: Var x: Record
HT: String [20];
Nsinh, socon: Integer;
G®: Boolean;
End;
Cã thÓ khai b¸o th«ng qua ®Þnh nghÜa d÷ liÖu b»ng Type
VD: Type HS = Record
HT: String [20];
NS, socon: Integer;
G®: Boolean;
End;
Var x: HS;
2) C¸c ph¬ng ph¸p truy nhËp tíi c¸c trêng. B¶n ghi truy nhËp c¸c
trêng theo tªn trêng.
VD: (th«ng qua lÖnh g¸n)
C¸ch 1: Tªn biÕn - tªn trêng
x. HT: = ‘Vu Van Doanh’
x. NS: = 1959
x. S«CON: = 2;
x. GD: = True;
C¸ch 2: Dïng mÖnh ®Ò With nh sau:
With x do
Begin
Khoa Công nghệ thông tin GIÁO TRÌNH NGÔN NGỮ LẬP TRÌNH PASCAL
89
HT: = ‘Vu Van Doanh’
NS: = 1959;
SOCON:=2;
GD: = True;
End;
Chó ý: Cã thÓ g¸n 1 gi¸ trÞ kiÓu b¶n ghi cho 1 biÕn b¶n ghi
X: = y; var x: HS;
y: HS;
Nhng kh«ng ®îc so s¸nh x < y, x > y?
(tÊt c¶ c¸c phÇn tö cña m¶ng ph¶i cïng 1 kiÓu d÷ liÖu).