Giáo trình ngôn ngữ lập trình Pascal

89
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 l-u 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: L-u ch-¬ng tr×nh vμo ®Üa: Ên phÝm F 2 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 F 9 (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 + F 9 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 F 3 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.

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 l­u 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: L­u 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 ch­a 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 ®Ó l­u 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

L­u ý: 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 nh­ng 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, nh­ng 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}

L­u ý ®è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

L­u ý:

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 ch­a 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) L­u 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;

Nh­ng 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).