background image

 

 

TRÖÔØNG ÑAÏI HOÏC ÑAØ LAÏT 

F

 7 G 

 
 
 

 

 
 
 

GIAÙO TRÌNH 

KYÕ THUAÄT LAÄP TRÌNH 

PASCAL 

 

 

NGUYEÃN DANH HÖNG 

 
 
 

2001 

background image

Kyõ thuaät laäp trình Pascal 

- 1 -

MUÏC LUÏC 

MUÏC LUÏC ........................................................................................ - 1 -

 

LÔØI NOÙI ÑAÀU .................................................................................. - 4 -

 

Chöông I 

 

LAØM QUEN VÔÙI LAÄP TRÌNH ..................................... - 5 -

 

I-1 CAÙC KHAÙI NIEÄM MÔÛ ÑAÀU: ................................................. - 5 -

 

I-2 BIEÁN VAØ NHAÄP DÖÕ LIEÄU ..................................................... - 7 -

 

I-3 XUAÁT DÖÕ LIEÄU ..................................................................... - 9 -

 

I.4 LEÄNH  GAÙN VAØ BIEÅU THÖÙC .............................................. - 10 -

 

I-5 CAÙC HAØM CHUAÅN.............................................................. - 12 -

 

I-6 CHOÁNG LOÃI VAØ SÖÛA LOÃI................................................... - 13 -

 

Baøi ñoïc theâm

 

Veû ñeïp cuûa giaûi thuaät ....................................... - 14 -

 

BAØI TAÄP CHÖÔNG I ..................................................................... - 16 -

 

Chöông II 

 

THUÛ TUÏC vaø HAØM ................................................. - 18 -

 

II-1 LAÄP TRÌNH VÔÙI THUÛ TUÏC................................................ - 18 -

 

II.2 BIEÁN TOAØN CUÏC  VAØ BIEÁN ÑÒA PHÖÔNG ..................... - 19 -

 

II.3 THUÛ TUÏC COÙ THAM SOÁ .................................................... - 21 -

 

II.4 HAØM..................................................................................... - 22 -

 

II.5 PHÖÔNG PHAÙP LAÄP TRÌNH TÖØ TREÂN XUOÁNG ............. - 23 -

 

II.6 CHOÁNG LOÃI VAØ SÖÛA LOÃI.................................................. - 24 -

 

BAØI TAÄP CHÖÔNG II.................................................................... - 26 -

 

Chöông III

 

 CASE  VAØ  FOR ..................................................... - 29 -

 

III-1 LAÄP TRÌNH VÔÙI CAÁU TRUÙC CASE................................. - 29 -

 

Khaùi nieäm haønh ñoäng cuûa chöông trình Pascal........................ - 30 -

 

III-2 LAÄP TRÌNH VÔÙI CAÁU TRUÙC FOR................................... - 31 -

 

III-3 CHOÁNG LOÃI VAØ SÖÛA LOÃI:............................................... - 35 -

 

BAØI TAÄP CHÖÔNG III................................................................... - 39 -

 

Chöông IV

 

  IF    WHILE   REPEAT…UNTIL ............................ - 42 -

 

IV-1 BIEÅU THÖÙC BOOLEAN.................................................... - 42 -

 

IV-2 LAÄP TRÌNH VÔÙI CAÁU TRUÙC IF....................................... - 42 -

 

IV-3 CAÁU TRUÙC VOØNG LAËP  KHOÂNG XAÙC ÑÒNH ................ - 46 -

 

IV-4 ÑEÄ QUY ............................................................................. - 53 -

 

IV-5 SÖÛA LOÃI VAØ CHOÁNG LOÃI................................................ - 55 -

 

BAØI TAÄP CHÖÔNG IV .................................................................. - 58 -

 

Chöông V PHÖÔNG PHAÙP LAÄP TRÌNH....................................... - 64 -

 

V-1 PHAÂN TÍCH VAØ ÑAËC TAÛ VAÁN ÑEÀ: .................................. - 64 -

 

V-2.CHOÏN LÖÏA CAÁU TRUÙC DÖÕ LIEÄU VAØ PHAÙT TRIEÅN THUAÄT 
TOAÙN: ........................................................................................ - 65 -

 

V-3.MAÕ HOAÙ CHÖÔNG TRÌNH: .............................................. - 66 -

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 2 -

V-4 THÖÏC HIEÄN VAØ THÖÛ CHÖÔNG TRÌNH .......................... - 68 -

 

V-5 BAÛO TRÌ CHÖÔNG TRÌNH: .............................................. - 68 -

 

BAØI TAÄP CHÖÔNG V.................................................................... - 69 -

 

Chöông VI MÔÛ ROÄNG KIEÅU DÖÕ LIEÄU THÖÙ TÖÏï ......................... - 70 -

 

VI –1 KIEÅU THÖÙ TÖÏ DO NGÖÔØI DUØNG ÑÒNH NGHÓA ......... - 70 -

 

VI-2 KIEÅU MIEÀN CON .............................................................. - 72 -

 

BAØI TAÄP CHÖÔNG VI .................................................................. - 74 -

 

Chöông VII

 

 MAÛNG vaø CHUOÃI .................................................. - 75 -

 

VII-1 MAÛNG:.............................................................................. - 75 -

 

Ñònh nghóa vaø khai baùo  maûng................................................. - 75 -

 

Truy xuaát maûng ....................................................................... - 75 -

 

Maûng vaø voøng laëp for.............................................................. - 76 -

 

VII-2 SAÉP XEÁP ........................................................................... - 78 -

 

VII-3 TÌM KIEÁM ........................................................................ - 82 -

 

Tìm tuaàn töï.............................................................................. - 82 -

 

Tìm kieám nhò phaân .................................................................. - 83 -

 

KHI NAØO NEÂN DUØNG MAÛNG? ............................................ - 85 -

 

VII-4 CHUOÃI .............................................................................. - 86 -

 

VII-5 SÖÛA LOÃI VAØ CHOÁNG LOÃI: ............................................. - 91 -

 

Töø khoaù Pascal môùi ................................................................. - 93 -

 

Khaùi nieäm môùi......................................................................... - 93 -

 

BAØI TAÄP CHÖÔNG VII ................................................................. - 94 -

 

Chöông VIII KIEÅU RECORD......................................................... - 97 -

 

VIII-1 RECORD COÙ CAÁU TRUÙC COÁ ÑÒNH:............................. - 97 -

 

VIII-2 RECORD COÙ CAÁU TRUÙC THAY ÑOÅI: .......................... - 99 -

 

Töø khoaù Pascal môùi ............................................................... - 100 -

 

Khaùi nieäm môùi....................................................................... - 100 -

 

BAØI TAÄP CHÖÔNG VIII.............................................................. - 101 -

 

Chöông IX 

 

 KIEÅU FILE............................................................ - 102 -

 

IX-1. FILE VAÊN BAÛN .............................................................. - 102 -

 

IX-2 FILE ÑÒNH KIEÅU:............................................................ - 105 -

 

IX-3 TRUY CAÄP NGAÃU NHIEÂN TREÂN FILE ÑÒNH KIEÅU .... - 107 -

 

IX-4 TROÄN FILE ...................................................................... - 110 -

 

IX-5 CHOÁNG LOÃI VAØ SÖÛA LOÃI:............................................. - 112 -

 

Töø khoaù Pascal môùi ............................................................... - 112 -

 

Khaùi nieäm môùi....................................................................... - 113 -

 

BAØI TAÄP CHÖÔNG IX ................................................................ - 114 -

 

Chöông X

 

 KIEÅU TAÄP HÔÏP (SET) ......................................... - 115 -

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 3 -

X-1 KIEÅU TAÄP HÔÏP:................................................................ - 115 -

 

Ví duï ......................................................................................... - 115 -

 

X-2 LAÄP TRÌNH VÔÙI KIEÅU TAÄP HÔÏP:................................... - 116 -

 

Töø khoaùù Pascal môùi ............................................................... - 119 -

 

Khaùi nieäm môùi ....................................................................... - 119 -

 

BAØI TAÄP CHÖÔNG X.................................................................. - 120 -

 

PHUÏ LUÏC A.................................................................................. - 121 -

 

CAÙC THOÂNG BAÙO LOÃI CUÛA TURBO PASCAL KHI BIEÂN DÒCH. - 
121 -

 

PHUÏ LUÏC B.................................................................................. - 131 -

 

CAÙC THOÂNG BAÙO LOÃI KHI CHAÏY CHÖÔNG TRÌNH ......... - 131 -

 

TAØI LIEÄU THAM KHAÛO ............................................................. - 133 -

 

 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 4 -

LÔØI NOÙI ÑAÀU 

 
 
Ngaøy nay cuøng vôùi söï phaùt trieån maïnh meõ cuûa Tin hoïc, laäp trình trôû neân 
moät kyõ naêng caàn thieát cho moïi caùn boä khoa hoïc kyõ thuaät. Giaùo trình naøy 
nhaèm giuùp cho sinh vieân Vaät lyù tìm hieåu veà kyõ thuaät laäp trình. 
 
Ngoân ngöõ ñöôïc choïn laø Pascal chuaån, coù boå sung moät vaøi phaàn môû roäng 
cuûa TurboPascal. Maëc duø ngaøy nay coù nhieàu ngoân ngöõ hieän ñaïi hôn, 
Pascal vaãn laø ngoân ngöõõ thích hôïp nhaát cho moät giaùo trình caên baûn veà 
laäp trình. Caùc kyõ thuaät laäp trình chuû yeáu ñöôïc trình baøy töông ñoái ñaày 
ñuû, ngoaïi tröø caùc kyõ thuaät duøng con troû. Caùc ví duï ñöôïc choïn loïc ôû 
nhieàu möùc ñoä khaùc nhau, khoâng chæ döøng ôû möùc ñoä minh hoaï ngoân ngöõ, 
maø coøn ñeå cho sinh vieân laøm quen vôùi nhöõng  thuaät toaùn thoâng duïng coù 
ñoä phöùc taïp vöøa phaûi. 
 
Ngoaøi ra qua thöïc teá giaûng daïy, chuùng toâi nhaän thaáy khi laäp trình sinh 
vieân phaïm raát nhieàu loãi cô baûn. Do ñoù trong giaùo trình naøy moät phaàn 
thích ñaùng ñöôïc daønh cho caùc kyõ thuaät söûa loãi vaø choáng loãi. Hy voïng laø 
phaàn naøy seõ giuùp ích nhieàu cho caùc baïn sinh vieân. 
 
Giaùo trình nay ñöôïc in laàn ñaàu vaøo naêm 2001.  Trong laàn taùi baûn naøy, 
chuùng toâi söûa chöõa nhöõng ñieåm sai soùt vaø boå sung moât vaøi ñieåm môùi. 
Ñaëc bieät laø chuùng toâi ñöa vaøo moät soá löôïng khaù lôùn caùc baøi taäp. Nhöõng 
baøi taäp naøy ñöôïc choïn loïc ñeå sinh vieân aùp duïng kyõ thuaät laäp trình trong 
vieäc giaûi quyeát caùc baøi toaùn khoa hoïc kyõ thuaät. 
 
Chuùng toâi chaân thaønh caûm ôn söï goùp yù cuûa caùc ñoàng nghieäp cuõng nhö 
caùc baïn sinh vieân ñeå laøm cho giaùo trình ngaøy caøng hoaøn thieän. 
 
 

Ñaø laït thaùng 5-2004 

 

 
 
 

Nguyeãn Danh Höng 

Huyønh Thò Thu Thuyû 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 5 -

CHÖÔNG I  

LAØM QUEN VÔÙI LAÄP TRÌNH 

 

I-1 CAÙC KHAÙI NIEÄM MÔÛ ÑAÀU: 
Chuùng ta seõ duøng moät vaøi chöông trình raát ñôn giaûn ñeå minh hoaï caùc 
khaùi nieäm cuûa Pascal. 

program Dautien;  { Ñaây laø chöông trình ñaàu tieân} 
begin 
 writeln(‘Hello 

‘) 

end

 
Töø khoaù ñaàu tieân cuûa moïi chöông trình Pascal (duø khoâng baét buoäc) laø 
program.  Trong giaùo trình naøy caùc töø khoaù seõ ñöôïc in ñaäm. Sau töø 
khoaù program laø teân cuûa chöông trình. Teân cuûa chöông trình phaûi ñaët 
theo qui taéc ñaët teân.  
Teân phaûi baét ñaàøu baèng moät chöõ caùi vaø coù theå chöùa moät daõy baát kyø caùc

 

chöõ caùi vaø chöõ soá. 
 
Chuù yù laø trong teân khoâng ñöôïc pheùùp coù khoaûng troáng. Neáu caàn taùch caùc 
töø coù theå duøng daáu noái _. Kyù töï chuaån cuûa Pascal laø baûng maõ ASCII do 
ñoù caùc teân tieáng Vieät coù daáu cuõng laø khoâng hôïp leä. Teân cuõng khoâng 
ñöôïc truøng vôùi caùc töø khoaù cuûa Pascal, do ñoù caùc töø naøy coøn ñöôïc goïi laø 
töø daønh rieâng
Ví duï: R2D2  

So_tien     

laø caùc teân hôïp leä 

           2XY   

So tien    Soá tieàn   laø 

caùc

 teân khoâng hôïp leä 

 
Caùc chuù thích ñöôïc ñaëït trong caëp daáu {} hoaëc (* *) 
Ví duï:  { Ñaây laø chuù thích } 
 

  (* Ñaây cuõng laø chuù thích *) 

Doøng ñaàu tieân cuûa moät chöông trình goïi laø ñaàu chöông trình. Moät daáu 
chaám phaåy( ; )ñöôïc  duøng ñeå ngaên caùch noù vôùi doøng keá tieáp. 
Ví duï : program Dautien; 
Chuùng ta coù sô ñoà cuù phaùp cho ñaàu chöông trình nhö sau: 
 ñaàu chöông trình 
  program Æ teân Æ; 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 6 -

Trong chöông trình Dautien, vì  khoâng coù tính toaùn gì caû neân chuùng ta 
khoâng duøng tôùi bieán. Do ñoù ngay sau phaàn ñaàu chöông trình, chuùng ta 
ñi ngay ñeán phaàn leänh. Phaàn naøy baét ñaàu baèng töø daønh rieâng begin . 
Phaàn leänh bao goàm daõy caùc leänh.  Vieäc in ra moät haøng trong Pascal 
ñöôïc thöïc hieän bôûi moät thuû tuïc chuaån  laø writeln (ñoïc laø write line).  
Ví duï: 
  writeln (‘Moïi thöù naèm trong daáu nhaùy seõ ñöôïc in ra ‘) 
(Vaên baûn trong daáu nhaùy coù theå laø tieáng Vieät, phuï thuoäc vaøo heä caøi ñaët) 
Chöông trình Pascal ñöôïc keát thuùc baèng töø daønh rieâng end. Chuù yù töø 
end 
keát thuùc chöông trình luoân coù daáu chaám ñi theo. 

 
program
 Thu_hai; 

 

 { Minh hoaï caùch duøng ;} 
begin 
 

writeln(‘Xin chaøo ‘); 

 

writeln( ‘ Baïn aên côm chöa? ‘) 

end

Keàt quaû chaïy chöông trình naøy laø: 
 
 Xin chaøo 
Baïn aên côm chöa? 
 
Chuù yù laø sau leänh writeln ñaàu tieân coù daáu ; . Daáu ; trong Pascal duøng ñeå 
ngaên caùch giöõa hai caâu leänh, khoâng phaûi laø phaàn baét buoäc cuûa caâu leänh. 
(Ñaây laø ñieåm khaùc bieät vôùi ngoân ngöõ C. ) 
Ñeå in ra khoâng  xuoáng haøng, ta duøng thuû tuïc chuaån write . 
program Mot_hang; 
 

{Minh hoaï caùch duøng write} 

begin 
 

write (‘ Nhöõng töø naøy’); 

 

write ( ‘seõ ñöôïc in ra’); 

 

writeln(‘treân cuøng moät haøng’) 

end
Keát quaû chaïy chöông trình treân laø 
    
 
Nhöõng töø naøy seõ ñöôïc in ra treân cuøng moät haøng. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 7 -

 
 
 
 

I-2 BIEÁN VAØ NHAÄP DÖÕ LIEÄU 
 
Program Nhapso; 
{ Nhaäp vaø vaø in ra moät soá } 
var  So  : integer; { Khai baùo moät bieán} 
begin 
  

writeln(‘ Nhaäp vaøo moät soá nguyeân ‘); 

 readln(So); 

writeln(‘Soá baïn nhaäp vaøo laø:’ , So); 

end . 
 
 
Nhaäp vaøo moät soá nguyeân 
15 
Soá baïn nhaäp vaøo laø: 15 
 
Kieåu döõ lieäu 
Bieán phaûi ñöôïc  khai baùo thuoäc moät kieåu döõ lieäu naøo ñoù. 
Boán kieåu döõ lieäu nguyeân thuyû cuûa Pascal laø integer, char, boolean vaø 
real. 
Caùc kieåu integer, char vaø boolean ñöôïc goïi laø caùc kieåu thöù töï( hay coøn 
goïi laø kieåu voâ höôùng ñeám ñöôïc) 
 
Qui taéc: Bieán naøo trò naáy, töùc laø kieåu döõ lieäu cuûa bieán vaø trò cuûa noù phaûi 
phuø hôïp vôùi nhau. 
Vieäc khai baùo bieán ñöôùc baét daàu baèng töø daønh rieâng var (vieát taét cuûa töø 
variable), tieáp ñoù laø danh saùch caùc bieán cuøng vôùi kieåu döõ lieäu töông öùng 
(teân bieán ñöôïc phaân caùch vôùi kieåu döõ lieäu bôûi daáu :) , caùc bieán khai baùo 
ñöôïc phaân caùch bôûi daáu ; . 
 

var   sothutu:  integer; 

  diem: 

real; 

  xeploai: 

char; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 8 -

Chuùng ta coù theå khai baùo  nhieàu teân bieán vôùi cuøng moät kieåu döõ lieäu, luùc 
naøy caùc teân bieán caùch nhau bôûi daáu , . 

 var   sothutu, vithu , siso :  integer; 

 

 

dtoan, dly, dhoa : real; 

  xeploai: 

char; 

  tongso, 

diemtb: 

real; 

 
Chuù yù laø  ngoân ngöõ Pascal  khoâng phaân bieät chöõ hoa vaø chöõ thöôøng, do 
ñoù caùc teân bieán nhö sau laø gioáng nhau. 
 

Diemtb  

diemtb 

DIEMTB  diemTB 

 
Vôùi khai baùo treân, chuùng ta coù theå vieát laïi nhö sau: 
 
var   sothutu, vithu , siso :  integer; dtoan, dly, dhoa : real;xeploai: 
char; 
hoaëc  
var   sothutu, vithu, siso :  integer; 

 

 

 

  dtoan, dly, dhoa : 

real;xeploai: char; 
nhöng vôùi caùch vieát naøy, chöông trình cuûa chuùng ta seõ troâng raát loän xoän, 
khoù ñoïc vaø raát khoù söûa loãi.  
 
Caùc caùch nhaäp döõ lieäu 
 
readln coù theå chöùa danh saùch nhieàu bieán, ngaên caùch baèng daáu phaåy. 
 

readln(so, tuoi, luong) 

Khi nhaäp  döõ lieäu integer hoaëc real caùc khoaûng troáng  ñöôïc boû qua. Keát 
thuùc nhaäp baèng phím Enter 
Ví duï: 

readln(a,b,c) 

Neáu nhaäp    5 6 7  
thì a =5, b=6,c= 7 
Khi nhaäp döõ lieäu char, khoaûng troáng seõ ñöôïc tính. 
 readln(Chu1,Chu2) 
Neáu nhaäp AB thì Chu1 = ‘A’, Chu2= ‘B’ nhöng neáu nhaäp A B thì  
Chu1 = ‘A’, Chu2= ‘ ’. 
readln khoâng keøm theo bieán töùc laø coù daïng readln; ñoøi hoûi ngöôøi nhaäp 
goõ phím Enter. 
Moät daïng khaùc cuûa leänh nhaäp döõ lieäu laø read . Leänh naøy khoâng ñoøi hoûi 
keát thuùc nhaäp baèng phím Enter (thöôøng duøng khi ñoïc döõ lieäu töø taäp tin). 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 9 -

 

Qui taéc: Phaûi ñaûm baûo nhaäp ñuû döõ lieäu 

 
 
 

 

 
 

I-3 XUAÁT DÖÕ LIEÄU 
 
program Tinhtoandongian; 
{Minh hoaï vieäc bieåu thöùc ñöôïc tính tröôùc khi xuaát} 
var So1,So2 :real; 
begin 
 readln 

(So1,So2); 

 writeln(So1,So2); 
 writeln(So1+So2, 

So1-So2); 

 writeln(So1*So2, 

So1/So2); 

end
 
Ñònh daïng döõ lieäu xuaát 
Döõ lieäu xuaát neáu khoâng coù chæ ra ñònh daïng seõ thuaän theo ñònh daïng 
maëc nhieân cuûa Pascal. 
program Dinhdangmn; 
 {Trình baøy ñònh daïng maëc nhieân cuûa Pascal} 
var   Chu : char; 

Sothuc : real; 
Songuyen :integer; 

begin 
 

writeln(‘ Nhaäp vaøo moät chöõ caùi, moät soá thöïc vaø moät soá nguyeân’); 
readln(Chu,Sothuc,Songuyen); 
writeln(Chu); 
writeln(Sothuc); 
writeln(Songuyen) 

end
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 10 -

Nhaäp vaøo moät chöõ caùi, moät soá thöïc vaø moät soá 
nguyeân 
B 281.5  66   

Å


 2.8150000000000000E+02 
66

 

 
Khi xuaát döõ lieäu, soá nguyeân vaø soá thöïc ñöôïc canh bieân phaûi vôùi moät soá 
khoaûng coá ñònh goïi laø ñoä roäng tröôøng. Thöôøng ñoä roäng tröôøng in cho soá 
thöïc laø 16. 
Chuùng ta coù theå ñònh daïng laïi baèng caùch duøng daïng leänh coù ñaëït ñoä roäng 
tröôøng in. 
Vôùi soá nguyeân ta vieát theo daïng writeln(I:n), trong ñoù n laø  ñoä roäng 
tröôøng in. Neáu n nhoû hôn soá chöõ soá ñöôïc in ra, Pascal seõ in ñuû trò I(töùc 
laø khoâng coù khoaûng troáng naøo).Neáu n lôùn hôn soá chöõ soá, soá seõ ñöôïc in 
ra canh bieân phaûi.  Ví duï , neáu I = 123 ta coù 
writeln(‘Soá nguyeân = ’,I:1) 
Æ

 Soá nguyeân=123 

writeln(‘Soá nguyeân= ’,I:6) 
Æ

 Soá  nguyeân=    123 

 
Vôùi soá thöïc ta vieát writeln(R:n:m) trong ñoù n laø ñoä roäng, m laø soá chöõ soá 
naèm sau daáu chaám thaäp phaân. Ví duï neáu R = 123.456 thì 
writeln(‘Soá thöïc = ’,R:10:4) 
Æ

 Soá thöïc =    123.4560 

writeln(‘Soá thöïc = ’,R:10:2) 
Æ

 Soá thöïc =    123.46 

Chuù yù trong ví duï cuoái cuøng ta thaáy soá thöïc ñöôïc laøm troøn. 
Leänh writeln khoâng coù ñoái soá töùc laø daïng writeln; seõ xuoáâng doøng môùi. 
 
 

I.4 LEÄNH  GAÙN VAØ BIEÅU THÖÙC 
Xeùt chöông trình sau: 
program  Tinhdientich; 
{ Minh hoïa caùch duøng leänh gaùn } 
var   dai, rong, dientich : real; 
begin 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 11 -

 

write (‘Nhaäp vaøo chieàu daøi : ‘); 

 readln(dai); 
 

write (‘Nhaäp vaøo chieàu roäng : ‘); 

 readln(rong); 
 

dientich := dai * rong; 

 

writeln (‘ Dieän tích hình chöõ nhaät : ‘, dientich:8:2); 

end. 
Leänh gaùn coù cuù phaùp : 
 bieán 

:=  bieåu thöùc ; 

Bieåu thöùùc trong Pascal coù theå laø moät haèng, moät bieán, moät lôøi goïi haøm 
hoaëc laø  moât daõy bao goàm caùc toaùn töû vaø toaùn haïng. 
 
Caùc toaùn töû nguyeân vaø toaùn töû thöïc  
Toaùn töû thöïc  
 
Toaùn töû 

 

Kyù hieäu 

Ví duï 

Pheùp coäng   

 

gia  + thue 

Pheùp tröø 

 

 

hoïcphi - hocbong 

Pheùp nhaân    

 

dai * rong 

Pheùp chia   

 

x / 2.0 

 
Toaùn töû nguyeân 
Toaùn töû 

 

 

Kyù hieäu 

Ví duï 

Pheùp coäng   

 

 

socon   +  2 

Pheùp 

tröø 

  -  songay 

Pheùp nhaân    

 

 

5 * 3 

Pheùp chia nguyeân  

div   

10 div 3 (=3) 

Pheùp laáy phaàn dö   

mod   

10 mod 3 ( = 1) 

 
Neáu bieåu thöùc chöùa soá nguyeân vaø soá thöïc thì keát quaû seõ laø soá thöïc. Keát 
quaû cuûa pheùp chia  thöïc  (/)  laø soá thöïc. 
 
Ñoä öu tieân toaùn töû 
 

div  mod   :Caùc toaùn töû naøy coù ñoä öu tieân cao hôn 

+ - 
 
Coù theå thay ñoåi ñoä öu tieân toaùn töû baèng caùch duøng daáu ngoaëc. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 12 -

 

I-5 CAÙC HAØM CHUAÅN 
 
Caùc haøm soá hoïc 
sqr  sqrt   

 

 

 

Haøm bình phöông vaø haøm caên baäc 

hai 
sin  cos arctan   

 

 

Caùc haøm löôïng giaùc 

exp  ln 

 

 

 

 

Haøm muõ vaø haøm logarít töï nhieân 

abs 

     Haøm 

laáy 

giaù 

trò 

tuyeät 

ñoái 

round  

 

 

 

 

Haøm laøm troøn : round(3.5) = 4 

trunc 

     Haøm 

laáy 

phaàn 

nguyeân: 

trunc(3.5)=3 
 
Caùc haøm thöù töï 
succ   

 

 

 

Haøm laáy giaù trò keá tieáp: succ(‘A’)=’B’ 

pred 

        Haøm laáy giaù trò ñöùng tröôùc: 

pred(‘B’)=’A’ 
ord   

 

 

 

Haøm laáy soá thöù töï : ord(‘A’) = 65 

chr   

 

 

 

Haøm laáy kyù töï öùng vôùi soá thöù töï : 

chr(65)=’A’ 
Caùc haøm boolean 
odd   

 

 

 

Traû veà true neáu soá nguyeân laø leû 

eoln   

 

 

          Traû veà true neáu heát doøng. 

eof   

 

 

 

Traû veà true neáu  heát taäp tin 

 
Ñeå söû duïng caùc haøm , chuùng ta phaûi duøng lôøi goïi haøm goàm teân haøm vaø 
ñoái ñaët trong daáu ngoaëc. 
Caùc haøm nhö round vaø trunc ñöôïc goïi laø caùc haøm chuyeån kieåu vì chuùng 
chuyeån döõ lieäu töø kieåu naøy sang kieåu khaùc. 
 
Khai baùo haèng 
Ñeå thuaän tieän trong tính toaùn, trong chöông trình ñoâi khi caàn khai baùo 
haèng. Xeùt chöông trình sau: 
program Tinh chuvi_hinhtron; 
const pi = 3.1416 
var chuvi, duongkinh : real; 
begin 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 13 -

 

write(‘Nhaäp vaøo ñöôøng kính: ‘); 

 readln(duongkinh); 
 

chuvi :=  pi * duongkinh; 

 

writeln(‘Chu vi cuûa hình troøn laø:’,chuvi) 

end. 
Cuù phaùp khai baùo haèng 
const teân haèøng = trò; 
 
 
 

I-6 CHOÁNG LOÃI VAØ SÖÛA LOÃI 
 
 Söûa loãi (debug) laø tìm ra loãi sai trong chöông trình. 
Choáng loãi (antibug)laø vieát chöông trình sao cho ít gaëp loãi. 
Choáng loãi vaø söûa loãi laø hai vieäc cöïc kyø quan troïng trong kyõ thuaät laäp 
trình. Trong giaùo trình naøy, chuùng ta seõ daønh moät phaàn thích ñaùng cho 
caùc kyõ thuaät naøy. 
Caùc loãi noùi chung chia laøm hai loaïi: loãi cuù phaùp vaø loãi ngöõ nghóa. Caùc 
loãi cuù phaùp(syntax error) thöôøng ñöôïc phaùt hieän ngay luùc bieân dòch. Ví 
duï loãi thöôøng gaëp laø thieáu daáu ; ñeå ngaên caùch hai leänh. Luùc bieân dòch , 
seõ coù thoâng baùo loãi: 

 

 

; expected 

Caùc loãi naøy thöôøng deã söûa. Ngay töø ñaàu baïn neân reøn luyeän thoùi quen 
vieát ñuùng cuù phaùp. 
Caùc loãi traàm troïng hôn laø loãi luùc chaïy chöông trình(run-time error). Ví 
duï thöôøng gaëp laø loãi chia cho soá 0: 
 

Divided by zero. 

Caùc loãi naøy cuõng coù theå söûa ñöôïc vì maùy tiùnh coù baùo loãi. Nguy hieåm 
nhaát laø caùc loãi ngöõ nghóa(logic). Nhöõng loãi naøy khoù söûa hôn vì chöông 
trình khoâng sai veà maët cuù phaùp maø chæ sai veà yù nghóa. Loãi caøng khoù 
phaùt hieän vì coù theå chæ gaëp khi duøng vôùi moät soá döõ lieäu naøo ñoù. Do ñoù 
thöû chöông trình vôùi nhieàu döõ lieäu khaùc nhau laø raát quan troïng. 

Quy taéc vaøng veà söûa loãi 

Ñöøng söûa caùi khoâng hö. Ñöøng laøm nhöõng thay ñoåi ngaãu nhieân. 

 
Moät vaøi loãi thöôøng gaëp  trong chöông naøy: 

Khôûi taïo khi khai baùo bieán (nhö kieåu ngoân ngöõ C) 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 14 -

Ví duï var Trial :=: integer; 
   

Test: char; Test := ‘A’; 

 - Duøng leänh gaùn khoâng hôïp leä 

  A:=B := C:=D :E := 0; 

Duøng sai ñoái cuûa haøm, ví duï duøng ñoái soá aâm vôùi haøm sqrt 

Toùm taét: 
Trong chöông naøy chuùng ta ñaõ bieát caùc khaùi nieäm sau: 
• 

Caáu truùc cuûa moät chöông trình Pascal goàm coù 

 

phaàn ñaàu chöông trình 

 

phaàn khai baùo haèng 

 

phaàn khai baùo bieán 

 phaàn 

leänh. 

caùch ñaët teân chöông trình, teân haèng, bieán 

leänh gaùn vaø bieåu thöùc 

caùc haøm chuaån 

 Töø khoaù Pascal môùi 
program  begin  

var   end  write writeln 

read  readln 

integer 

char  boolean 

real 

:=  div mod const 
sqr  sqrt 

sin  cos  arctan 

ln  exp 

abs  round  

trunc 

pred  succ  ord  chr 
 
Khaùi nieäm môùi 
chöông trình  

haèng   bieán   

bieåu thöùc   toaùn töû 

nhaäp   

xuaát    

giaûi thuaät 

 

Baøi ñoïc theâm 

Veû ñeïp cuûa giaûi thuaät 

 

Moät chöông trình ñeïp  laø ñieàu chuùng ta luoân mô öôùc. Moät chöông trình 
laø ñeïp neáu thuaät toaùn cuûa noù ñôn giaûn vaø goïn gaøng, nhöng giaûi quyeát 
vaán ñeà moät caùch trong saùng vaø toaøn veïn. Tuy nhieân, moät giaûi thuaät ñeïp 
khoâng chæ giôùi haïn trong phaïm vi laäp trình. Chuùng ta xeùt moät vaøi ví duï 
trong ñoù coù giaûi thuaät ñeïp. 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 15 -

Xeùt baøi toaùn sau: Moät ngöôøi ñaïp xe ñaïp ñang ôû caùch nhaø 2km. Ngöôøi 
ñoù ñaïp xe veà nhaø vôùi vaän toác khoâng ñoåi 20km/h. Taïi thôøi ñieåm naøy moät 
con ruoài ñaäu treân muõi ngöôøi ñi xe ñaïp, bay veà nhaø roài quay ngay laïi 
choã ngöôøi ñi xe ñaïp roài laïi quay veà nhaø  vaø cöù tieáp tuïc nhö theá cho ñeán 
khi ngöôøi ñi xe ñaïp veà ñeán nhaø vaø keïp cheát con ruoài. Giaû söû con ruoài 
bay vôùi vaän toác khoâng ñoåi laø 40km/h. Haõy tìm quaõng ñöôøng con ruoài 
ñaõ bay? 
Tröôùc khi ñoïc tieáp baïn haõy töï giaûi baøi toaùn naøy. 
 
Lôøi giaûi laø nhö sau. Vì con ruoài bay vôùi vaän toác khoâng ñoåi neân ta coù  
 

Quaõng ñöôøng  = Vaän toác * Thôøi gian 

Maët khaùc töø chuyeån ñoäng ñeàu cuûa ngöôøi ñi xe ñaïp ta coù: 
 

Thôì gian =  2/ 20 = 0,1h 

Vaäy quaõng ñöôøng con ruoài ñaõ bay laø: 
 

0,1*40 = 4 km 

 Roõ raøng ñaây laø moät lôøi giaûi raát ñeïp. 
 
Xeùt ví duï khaùc. Naêm 1686, khi Gauss 9 tuoåi, thaày giaùo cuûa Gauss 
muoán cho caû lôùp laøm vieäc troïn buoåi saùng, ñaõ ra baøi taäp sau ñaây. 
 
Coäng taát caû caùc soá töø 1 ñeán 100. 
 
 Khoâng ngôø chæ moät chuùt sau khi ra baøi taäp, Gauss ñaõ giaûi xong baøi 
toaùn. Baïn thöû nghó xem Gauss ñaõ laøm nhö theá naøo? 
 
Caùch giaûi cuûa Gauss laø chia caùc soá töø 1 ñeán 100 thaønh 50 caëp,moãi caëp 
goàm 2 soá caùch ñeàu nhau töø  2 bieân.Toång cuûa moãi caëp laø 101 vaø coù taát 
caû 50 caëp nhö vaäy. Do ñoù toång  caàn tìm  laø 

 

 

50 * 101 = 5050 

 
Baïn coù theå noùi laø: Lôøi giaûi ñoù deã hieåu, nhöng nghó ra môùi khoù. Duø sao, 
coá gaéng thöû böôùc ñaàu tieân baèng caùch töï ñaët caâu hoûi ‘Coù  coâng thöùc ñeå 
giaûi baøi toaùn naøy, vaø nhöõng coâng thöùc khaùc töông töï khoâng?” cuõng 
khoâng phaûi laø quaù khoù. Daàn daàn baïn seõ quen suy nghó vaø töï tìm ra ñöôïc 
nhöõng lôøi giaûi ñeïp. 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 16 -

BAØI TAÄP CHÖÔNG I 

1.Vieát chöông trình tính naêng löôïng theo coâng thöùc  E= mc

2

 khi bieát 

khoái löôïng. 
2.  Ñoä roïi cuûa moät nguoàn saùng tôùi moät ñieåm giaûm tæ leä nghòch vôùi 

bình phöông khoaûng caùch. Vieát chöông trình nhaäp vaøo khoaûng 
caùch x,y vaø ñoä roïi ôû khoaûng caùch x, chöông trình tính ra ñoä roïi ôû 
khoaûng caùch y. 

3.Vieát chöông trình tính quaõng ñöôøng ra km khi bieát soá naêm aùnh 
saùng. 
4.Thay moãi caëp leänh gaùn döôùi ñaây baèng moät leänh gaùn 

a)  l:=a+5; 

l:=b-2; 

b)  m := a+5; 

m:=m*2; 

c)  n:=2*n-2; 

n:= n div 2 –3; 

5.Vieát chöông trình nhaäp vaøo khoaûng thôøi gian tính baèng giaây roài ñoåi 
ra giôø, phuùt, giaây. 
6.Cho tam giaùc vuoâng ABC vuoâng ôû A. Caùc caïnh goùc vuoâng laø a vaø 
b ñöôïc tính theo caïnh huyeàn c theo caùc coâng thöùc sau. 

a = c cosθ 
b= c sinθ 

Chöông trình sau tính caùc caïnh a vaø b theo caïnh huyeàn c vaø goùc θ 
nhaäp vaøo. Chöông trình coù chaïy khoâng? Coù cho keát quaû  ñuùng 
khoâng? Taïi sao? 
 
program tamgiac; 
var a,b,c, theta:real; 
begin 
write (‘Nhaäp vaøo chieàu daøi caïnh huyeàn’); 
readln(c); 
write (‘Nhaäp vaøo goc theta ño baèng ñoä’); 
readln(theta); 
a = c * cos(theta); 
b = c * sin(theta); 
writeln(‘Chieàu daøi caïnh a laø:’,a); 
writeln(‘Chieàu daøi caïnh b laø:’,b); 
end. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 17 -

 
 
 
7.Chu kyø cuûa con laéc ñôn ñöôïc cho bôûi coâng thöùc 

g

L

T

π

2

=

 

trong ñoù L laø chieàu daøi vaø g laø gia toác troïng tröôøng. Vieát chöông trình 
tính chu kyø T vôùi chieàu daøi con laéc do ngöôøi duøng nhaäp vaøo. 
 

8.Khoaûng caùch giöõa hai ñieåm (x1,y1) vaø (x2,y2ø) trong maët phaúng  
ñöôïc tính theo coâng thöùc: 

2

2

)

2

1

(

)

2

1

(

y

y

x

x

d

+

=

 

Vieát chöông trình tính khoaûng caùch  vôùi toaï ñoä hai dieåm ñöôïc nhaäp 
vaøo. 
 
9.Caùc  kyõ sö thöôøng ño tæ soá giöõa hai coâng suaát baèng decibel. Tæ soá 
giöõa hai coâng suaát tính theo decibel laø 

1

2

10

log

10

P

P

dB

=

  

trong ñoù P

2

 laø möùc coâng suaát ñang xeùt vaø P

1

 laø möùc coâng suaát quy 

chieáu. Giaû söû P

1

 laø 1 milliWatt; vieát chöông trình nhaän vaøo giaù trò P

2

 vaø 

tính ra giaù trò dB. 
 

10.Taàn soá coäng höôûng cuûa moät maïch thu tín hieäu cho bôûi 

LC

f

π

2

1

0

=

 

Vieát chöông trình tính f

0

 theo L vaø

 

C nhaäp vaøo. 

 

11.Löïc haáp daãn giöõa hai vaät coù khoái löôïng m

1

 vaø m

2

 ñöôïc cho bôûi 

 

2

2

1

r

m

Gm

F

=

 

trong ñoù G laø haèng soá haáp daãn (6,672x10

-11

Nm

2

/kg

2

), vaø r laø khoaûng 

caùch giöõa hai vaät. Vieát chöông trình tính löïc haáp daãn giöõa hai vaät khi  
bieát khoái löôïng vaø khoaûng caùch giöõa chuùng.  Kieåm tra chöông trình 
baèng caùch tính löïc taùc duïng leân moät veä tinh  800kg ôû quyõ ñaïo caùch 
traùi ñaát 38000km. (Khoái löôïng traùi ñaát laø 5,98x10

24

kg). 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 18 -

CHÖÔNG II   THUÛ TUÏC VAØ HAØM 

 

II-1 LAÄP TRÌNH VÔÙI THUÛ TUÏC 
Caùc chöông trình trong chöông ñaàu tieân ñeàu ñôn giaûn. Khi vieát nhöõng 
chöông trình phöùc taïp hôn, chuùng ta thöôøng phaûi chia chöông trình 
thaønh caùc phaàn nhoû. Moät phaàn nhoû ñoù laø moät thuû tuïc.  
 
Ví duï, xeùt chöông trình ñoåi choã 2 soá. Chuùng ta caàn laøm ba vieäc: nhaäp 
hai soá, ñoåi choã 2 soá, roài in keát quaû ra. Chuùng ta vieát moãi vieäc ñoù thaønh 
moät thuû tuïc. 
program Doicho; 
var So1, So2 : integer; 
procedure Nhapso; 
 

begin 

 

 

writeln(‘ Chöông trình naøy ñoåi choã hai soá nguyeân’ ); 

 

 

write(‘Nhaäp soá thöù nhaát’); 

 

readln(So1); 

write(‘Nhaäp soá thöù  hai’); 

 

readln(So2); 

 

end;  {Nhapso} 

procedure Doihaiso; 
 

var Tam : integer; 

 

begin 

 

 

Tam := So1;  

So1 := So2;  

So2 := Tam 

 

end;   {Doihaiso} 

procedure Inketqua; 
 

begin 

 

 

write(‘ Hai soá sau khi ñoåi choã laø ‘) 

 

 

writeln(So1: 1 , ‘ vaø ‘, So2:1) 

 

end; {Inketqua} 

begin {chöông trình chính} 
 Nhapso; 
 

Doihaiso;  {Ba lôøi goïi thuû tuïc} 

 Inketqua 
end
Haàu nhö moïi chöông trình Pascal trong thöïc teá ñeàu coù duøng ñeán thuû tuïc. 
Nhö vaäy caáu truùc chung cuûa moät chöông trình Pascal thöôøng laø 
ñaàu chöông trình 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 19 -

phaàn khai baùo haèng 
phaàn khai baùo bieán 
phaàn khai baùo caùc thuû tuïc 
phaàn leänh (thaân chöông trình chính) 

II.2 BIEÁN TOAØN CUÏC  VAØ BIEÁN ÑÒA PHÖÔNG 
Caùc bieán  toaøn cuïc  laø caùc bieán ñöôùc khai baùo trong chöong trình chính.  
Chuùng coù theå ñöôïc duøng ôû moïi nôi trong chöông trình. Caùc bieán ñòa 
phöông
 laø caùc bieán  ñöôïc khai baùo trong caùc chöông trình con  vaø chuùng 
chæ ñöôïc söû duïng  trong caùc chöông trình con ñoù thoâi. Khi chöông trình 
con keát thuùc thì caùc bieán naøy cuõng maát ñi. Phaïm vi  cuûa moät bieán  laø 
moät phaàn cuûa chöông trình (goïi laø khoái) söû duïng bieán ñoù. Pascal  laø 
ngoân ngöõ coù caáu truùc khoái : 
 
program
 

   

 

 

 procedure B 
 

procedure D 

 

 

begin {D} 

 

 

 

 

end; {D} 

 
 

begin {B} 

 

 

 

end; {B} 

 procedure C 
 

procedure E 

 

 

begin {E} 

 

 

 

 

 

end; {E} 

 

procedure F 

 

 

begin {F} 

 

 

 

 

 

end; {F} 

 

begin {C} 

 

 

 

end; {C} 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

procedure F 

procedure E

procedure C

procedure B

procedure D

program A  

background image

Kyõ thuaät laäp trình Pascal 

- 20 -

begin {A} 
 : 
end; {A} 
 
Phaïm vi cuûa caùc bieán trong chöông trình    laø  caùc khoái  
 

program   

 

 

 

A, B, C, D, E, F 

procedure   B    

 

 

B, D   

procedure   

 

 

 

C, E, F 

procedure   

 

 

 

procedure   E 

 

 

 

procedure   F 

 

 

 

 

 
Chuù yù: Neáu bieán toaøn cuïc  vaø bieán ñòa phöông truøng teân nhau, thì söï  
thay ñoåi giaù trò cuûa bieán ñòa phöông seõ khoâng aûnh höôûng  ñeán bieán toaøn 
cuïc. Ta noùi laø bieán ñòa phöông coù ñoä öu tieân cao hôn. Chöông trình sau 
minh hoaï ñieàu naøy. 
program  Phamvi;  
var x: integer; {x laø bieán toaøn cuïc} 
procedure Diaphuong; 
 

var x :integer; {x laø bieán ñòa phöông} 

 

begin 

 

 

x :=  5;  
writeln(x : 6); 

 

end;  {Diaphuong} 

begin 
 

x := 2; 
writeln(x : 6); 
Diaphuong; 
writeln(x : 6) 

end.   {Phamvi} 
Keát quaû cho ra: 
2      giaù 

trò 

cuûa 

toaøn 

cuïc 

5      giaù 

trò 

cuûa 

ñòa 

phöông 

2  

 

 

 

 

 

giaù trò cuûa x toaøn cuïc 

 
Chuù yù: 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 21 -

• 

Chuùng ta caàn khai baùo bieán tröôùc khi söû duïng chuùng trong moät 
thuû tuïc . 

• 

Trong cuøng moät khoái, moät thuû tuïc coù theå goïi moät thuû tuïc khaùc ñaõ 
ñöôïc khai baùo tröôùc noù . 

 

II.3 THUÛ TUÏC COÙ THAM SOÁ 
 
Chöông trình ñoåi choã hai soá coù theå vieát laïi  nhö sau baèng caùch duøng thuû 
tuïc coù tham soá. 
program Doicho; 
var Solon, Sobe : integer; 
procedure Doihaiso( var  So1,So2:integer); 
 

var Tam : integer; 

 

begin 

 

 

Tam := So1;  

 

So1 := So2;   

So2 := Tam 

 

end;   {Doihaiso} 

begin {chöông trình chính} 
 

Solon := 10; 

 

Sobe := 5; 

 

writeln( Solon:3, Sobe:3); 

 

Doihaiso(Solon,Sobe);   

 

writeln( Solon:3, Sobe:3) 

end
Ta thaáy thuû tuïc ñoåi hai soá ôû ñaây coù theâm danh saùch tham soá vaø trong lôøi 
goïi thuû tuïc cuõng coù danh saùch ñoái soá ñeå truyeàn cho caùc tham soá naøy . 
Tham soá ñöôïc chia laøm hai loaïi: tham trò vaø tham bieán
 
Tham trò laø bieán ñiaï phöông cuûa chöông trình con. Trò ñaàu cuûa noù ñöôïc 
truyeàn bôûi ñoái trong lôøi goïi thuû tuïc. 
Vì tham trò laø bieán ñòa phöông, söï thay ñoåi cuûa noù khoâng aûnh höôûng  gì 
ñeán trò cuûa ñoái truyeàn cho noù. 
 
Tham bieán laø bieán ñòa phöông duøng thay cho moät bieán toaøn cuïc. Noù laø 
moät teân khaùc (bí danh) cuûa ñoái soá . 
Söï thay ñoåi leân tham bieán laøm thay ñoåi tröïc tieáp leân ñoái maø noù thay teân. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 22 -

Söï khaùc nhau giöõa hai loaïi tham soá naøy ñöôïc minh hoïa bôûi chöông trình 
sau: 
program Thu_Thamso; 
var a,b : integer; 
procedure Thamso( x : integer; var y:integer); 
 

begin 

 

 

x := x+1;    

y := y + 1;   writeln(x:6, y:6); 

end;    

begin 
 

a := 0; 

b := 3; 

Thamso(a, b);writeln(a:6, b:6); 

end
Keát quaû cho ra : 

 
Trong ví duï treân, thuû tuïc tham soá coù hai loaïi tham soá : tham trò x vaø 
tham bieán y. Tröôùc khi goïi thuû tuïc naøy vôùi hai tham soá thöïc laø a vaø b 
töông öùng thì a = 0 vaø b = 3. Trong thuû tuïc ta coù hai leänh laøm thay ñoåi 
giaù trò cuûa a vaø b baèng caùch  taêng theâm 1. Leänh writeln(x,y) cho ra keát 
quaû laø 1 vaø 4 töông öùng. Tuy nhieân, sau khi ra khoûi thuû tuïc leänh 
writeln(a,b) cho thaáy chæ coù b biï thay ñoåi vì b laø tham bieán coøn a vaãn 
giöõ nguyeân giaù trò vì noù laø tham trò. Vaäy khi naøo caàn thay ñoåi trò cuûa 
tham soá trong caû chöông trình chính thì ta môùi duøng tham bieán. 
Ta neân nhôù quy taéc sau khi truyeàn ñoái cho tham soá:  
Quy taéc: Ñoái cuûa tham trò coù theå laø moät haèng, moät bieán hay moät bieåu 
thöùc. Ñoái cuûa tham bieán chæ coù theå laø bieán. 
 

II.4 HAØM 
 
Gioáng nhö thuû tuïc, haøm cuõng laø moät loaïi chöông trình con. Khaùc bieät 
giöõa haøm vaø thuû tuïc laø haøm luoân luoân traû veà moät giaù trò. 
Ví duï: Haøm sau tính quaõng ñöôøng ñi theo thôøi gian vaø vaän toác 
function QuangDuong(vantoc:real ; thoigian : real):real; 
begin 
 

QuangDuong := vantoc * thoigian; 

end;  
Caáu truùc chung cuûa haøm coù daïng nhö sau: 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 23 -

function teân haøm(danh saùch tham soá):kieåu döõ lieäu traû veà ; 
Phaàn khai baùo bieán 
Thaân haøm 
 
Khaùc vôùi thuû tuïc, haøm traû veà giaù trò neân lôøi goïi haøm chæ ñöôïc duøng trong 
bieåu thöùc. 
Ví duï: 
 
program
 KiemTraHam; 
var So, Cotang :real; 
function  Tang(gocdo:real ): real; 
var goc:real; 
 

function  DoiSangRadian(goc : real):real;  
const pi = 3.1415926; 

 begin 
 

 

DoiSangRadian := goc * pi/180  

 

end; { DoiSangRadian} 

 
begin {Tang} 

goc := DoiSangRadian(gocdo); 
Tang := sin(goc)/cos(goc);  

end;   {Tang} 
 
begin  {Chöông trình chính} 

writeln(‘Nhap vao mot goc tinh bang do:’); 
readln(So); 
writeln(‘Tang cua goc ‘, So ,’ = ‘,Tang(So)); 
Cotang := 1/Tang(So); 
writeln(‘CoTang cua goc ‘, So ,’ = ‘,Cotang) 

end. {Chöông trình chính} 
 
Ví duï treân cuõng cho thaáy caùc haøm coù theå loàng nhau. 
 

II.5 PHÖÔNG PHAÙP LAÄP TRÌNH TÖØ TREÂN XUOÁNG 
 
Phöông phaùp laäp trình töø treân xuoáng  goàm caùc böôùc sau: 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 24 -

1.  Chia baøi toaùn vaán ñeà ra thaønh nhöõng phaàn nhoû. 
2.  Neáu coù theå laäp trình ñöôïc ngay cho moät phaàn nhoû thì vieát thuû tuïc cho 

phaàn naøy. Neáu moät phaàn  vaãn coøn quaù phöùùc taïp thì chuyeån sang 
böôùc 3. 

3.  Chia phaàn phöùùc taïp naøy thaønh nhöõng phaàn ñôn giaûn hôn roài vieát  thuû 

tuïc cho caùc phaàn ñôn giaûn naøy. Vieäc laøm naøy goïi laø tinh cheá töøng 
böôùc.
 

Xeùt ví duï veà vieäc laäp trình quaûn lyù thö vieän. 
Ñaàu tieân , chuùng ta phaân chia vieäc quaûn lyù thö vieän ra thaønh nhöõng 
coâng vieäc sau: 
• 

Quaûn lyù saùch 

• 

Quaûn lyù theû 

• 

Quaûn lyù ngöôøi ñoïc 

Tieáp ñoù, chuùng ta thöïc hieän töøng coâng vieäc treân 
a/ Quaûn lyù saùch : Coâng vieäc naøy bao goàm 
• 

Laøm thö muïc saùch 

• 

Quaûn lyù soá saùch hieän coù 

b/ Quaûn lyù theû 
• 

.. 

… 
 

II.6 CHOÁNG LOÃI VAØ SÖÛA LOÃI 
 
Moät kyõ thuaät choáng loãi quan troïng laø laäp trình coù tính ñôn theå 
(modular).  
Moät chöông trình laø coù tính ñôn theå neáu caùc chöông trình con cuûa noù laø 
ñoäc laäp töông ñoái vôùi nhau vaø ñoái vôùi chöông trình chính. Caùc chöông 
trình con coù theå ñöôïc thöû rieâng baèng caùc döõ lieäu giaû tröôùc khi gheùp vaøo 
chöông trình chính. Neáu chöông trình con coù loãi thì loãi ñoù coù theå ñöôïc 
coâ laäp vaø söûa deã daøng. 
 Moät ñaëc tröng khaùc cuûa laäp trình ñôn theå laø haïn cheá duøng bieán toaøn 
cuïc. Noùi chung bieán toaøn cuïc khoâng neân duøng trong chöông trình con. 
Söï thay ñoåi cuûa bieán toaøn cuïc trong chöông trình con coù theå gaây ra hieäu 
öùng phuï 
. Hieäu öùng phuï laøm cho chöông trình khoù ñoïc vaø khoù hieåu. 
Thay vì duøng bieán toaøn cuïc neân duøng tham soá. Neáu moät thuû tuïc chæ 
duøng moät trò chuùng ta khai baùo moät tham trò. Neáu thuû tuïc thay ñoåi hoaëc 
traû veà moät trò chuùng ta söû duïng tham bieán. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 25 -

Caùc loãi thöôøng gaëp khi truyeàn ñoái cho tham soá laø thieáu hoaëc thöøa ñoái soá 
hoaëc kieåu döõ lieäu cuûa ñoái soá vaø tham soá laø khoâng phuø hôïp. 

Quy taéc vaøng thöù hai veà söûa loãi 

Khi baïn tin chaéc raèng moïi ñieàu baïn laøm laø ñuùng, vaø chöông trình cuûa 
baïn vaãn khoâng chaïy, moät trong nhöõng ñieàu baïn tin chaéc laø sai. 
 
Töø khoaù  Pascal môùi: 
procedure   

function 

Khaùi nieäm môùi: 
Chöông trình con   

Chöông trình chính 

Thuû tuïc 

Haøm  

Danh saùch tham soá Lôøi goïi thuû tuïc   Lôøi goïi haøm    

Phaïm vi 

 

Bieán toaøn cuïc  

Bieán ñòa phöông  Khoái chöông trình 

 

Kyõ thuaät laäp trình töø treân xuoáng  

Tính ñôn theå 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 26 -

BAØI TAÄP CHÖÔNG II 

 

1.Keát quaû cuûa chöông trình sau laø gì? 
Program Quiz; 
Var A,B,C :integer; 
Procedure Subprogram(D:integer;var E:integer;C:integer); 
Var A: integer; 
Begin 
 A:= 

C+1; 

E:= A+C; 
C:= C*2; 

End; {Subprogram} 
 
Begin {Quiz} 
A:=2; 
B:=4 
C:=6; 
Subprogram(B,C,A); 
Writeln(A,B,C) 
End. 
 
2.  Keát quaû cuûa chöông trình sau laø gì? 
Program Confusion; 
Var A,B,C,D:integer; 
Procedure Confuse(A,B:integer); 
Var C:integer; 
Begin 
 A:=5;B:=6;C:=7;D:=8; 
 Writeln(A,B.C,D) 
End; {Confuse} 

Begin 
 A:=1;B:=2; 

C:=3;D:=4; 

Writeln(A,B,C,D); 
Confuse(A,B); 
Writeln(A,B,C,D) 
End. 
 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 27 -

 

3.   Keát quaû cuûa chöông trình sau laø gì? 
Program HardToBelieve; 
Var Number:integer; 
Procedure DoubleAndAdd(var First,Second:integer); 
 Begin 
  

First:= 

2*First; 

 

Second := 1+Second 

End;{ DoubleAndAdd} 
Procedure AddAndDouble(var First,Second:integer); 
Begin  
 

First := 1+First; 

 

Second := 2*Second 

End; 
 
Begin 
 Number 

:=3; 

DoubleAndAdd(Number,Number); 
Writeln(Number); 
Number:=3; 
AddAndDouble(Number,Number); 
Writeln(Number) 

End.  

 

4.  Vieát chöông trình tính ñieän trôû töông ñöông cuûa caùc caùch gheùp 

khaùc nhau cuûa 3 ñieän trôû R1,R2,R3. Chuù yù caùch duøng thuû tuïc vaø 
caùch truyeàn tham soá. 

 
5.  Vieát chöông trình tính ñieän dung töông ñöông cuûa caùc caùch gheùp 

khaùc nhau cuûa 3 tuï ñieän C1,C2,C3. 

 
6. Vieát haøm tính luyõ thöøa. 
 
7.Vieát caùc haøm ñeå tính caùc haøm löôïng giaùc hypecbolic. 

2

)

sinh(

x

x

e

e

x

=

 

2

)

cosh(

x

x

e

e

x

+

=

 

x

x

x

x

e

e

e

e

x

+

=

)

tanh(

 

 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 28 -

 

8.Vieát caùc haøm trong Pascal theå hieän caùc haøm soá thöïc sau: 

f(x,y) = (x+2y)/(x+y) 
g(x,y) = (f(x,y)+ f(x,y)/(2f(x,x+y)) 
 
Aùp duïng ñeå tính f(a,b) vaø g(a,b) vôùi a, b nhaäp töø baøn phím. 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 29 -

 

CHÖÔNG III   CASE  VAØ  FOR 

 
Chöông naøy khaûo saùt caáu truùc case vaø for. Ñoù laø nhöõng caáu truùc ñieàu 
khieån coù bieåu thöùc ñieàu khieån laø kieåu thöù töï. 
 

III-1 LAÄP TRÌNH VÔÙI CAÁU TRUÙC CASE 
Caáu truùc case duøng khi coù nhieàu löïa choïn. 
Xeùt  chöông trình sau: 
 
program  InSoNgay; 
 

{In soá ngaøy cuûa moät thaùng khoâng tính tôùi naêm nhuaän} 

var thang : integer; 
begin 
 

write (‘Nhaäp vaøo moät thaùng  : ‘); 

 readln 

(thang); 

 

case thang of 

 

 

1, 3, 5, 7, 8, 10, 12 : writeln(‘ Thaùng’,thang, ‘co 31 ngaøy 

!’); 
 

 

4, 6, 9, 11 :writeln(‘ Thaùng’,thang, ‘co 30 ngaøy !’); 

 

 

2 : writeln(‘ Thaùng’,thang, ‘co 28 ngaøy !’); 

 

end {case} 

 end. 
 
Daïng thoâng thöôøng cuûa caáu truùc case nhö sau: 
 
 

case   bieåu thöùc choïn   of 

 

 

haèng 1: haønh ñoäng ; 

 

 

haèng 2: haønh ñoäng  ; 
haèng 3, haèng 4, haèng 5: haønh ñoäng  ; 
… 
haèng N: haønh ñoäng  

 

end; 

 
Bieåu thöùc choïn  laø bieåu thöùc kieåu thöù töï töùc laø kieåu integer,  char hoaëc 
boolean vaø thöôøng laø moät  bieán . 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 30 -

Caùc haèng phaûi cuøng kieåu vôùi bieåu thöùc choïn. 
Danh saùch caùc haèng phaûi chöùa ñuû caùc giaù trò coù theå coù cuûa bieåu thöùc 
choïn. 
Neáu bieåu thöùc choïn coù trò khoâng naèm trong danh saùch caùc haèng thì 
chöông trình coù loãi. 
 

 Khaùi nieäm haønh ñoäng cuûa chöông trình Pascal 

 
Trong baûn thaûo goác cuûa ngoân ngöõ Pascal Niklaus Wirth ñaõ chæ ra raèng: 
“Haønh ñoäng laø baûn chaát cho moïi chöông trình maùy tính…Moät chöông 
trình phaûi laøm moät vieäc naøo ñoù leân döõ lieäu cuûa noù –  ngay caû khi  haønh 
ñoäng ñoù laø khoâng laøm gì caû! “ 
 Moät chöông trình Pascal coù nhieàu loaïi haønh ñoäng  ñöôïc lieät keâ sau ñaây: 

 

 

leänh gaùn 

 

 

lôøi goïi thuû tuïc 

  leänh 

hôïp 

thaønh 

  leänh 

roãng 

  leänh 

caáu 

truùc 

 

Chuùng  ta ñaõ bieát khaùi nieäm leänh gaùn vaø lôøi goïi thuû tuïc. Leänh hôïp thaønh 
laø moät nhoùm leänh ñaët giöõa begin vaø end
Moät daáu chaám phaåy coù theå duøng ñeå bieåu dieãn moät leänh roãng nhö trong 
ví duï sau ñaây: 

procedure DocSoDo; 

 

begin 

 

 

case sodo of  

 

 

 

0: writeln(‘Dung cu bo qua so do.’); 

 

 

 

1,2,3 :writeln(‘So do qua nho’); 

 

 

 

4,5,6,7 : ;  {leänh roãng} 

 

 

 

8,9, 10: writeln(‘So do qua lon.’); 

 

 

end {case} 

 end; 
 
Caáu truùc case loàng nhau 
 
Vì haønh ñoäng coù theå laø leänh caáu truùc neân  chuùng ta coù theå gaëp caáu truùc 
naøy loàng trong caáu truùc khaùc. sau ñaây chuùng ta xeùt moät ví duï caáu truùc 
case loàng nhau. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 31 -

Chöông trình sau moâ taû troø chôi oaún tuø tì ( one, two, three) 
Ta kyù hieäu B laø buùa, K laø keùo, T laø tuùi 
 
 
program 
OneTwoThree; 
var nguoi1, nguoi2 : char; 
begin 
 

writeln(‘ Nhap vao hai nguoi choi – B, K hay T’); 

 readln(nguoi1, 

nguoi2); 

case  nguoi1 of 
 ‘K’ 

case nguoi2 of 

‘K’ : writeln(‘ Keo hue keo’); 
‘B’ :writeln(‘ Keo bi bua dap gay’); 
‘T’:writeln (‘Keo cat tui’); 

 

 

 

end; {case } 

 ‘B’ 

case nguoi2 of 

‘K’ : writeln(‘ Bua dap gay  keo’); 
‘B’ :writeln(‘ Bua hue bua’); 
‘T’:writeln (‘Bua bi  tui boc lai’); 

 

 

 

end; {case } 

 ‘T’ 

case nguoi2 of 

‘K’ : writeln(‘ Tui bi keo cat ’); 
‘B’ :writeln(‘ Tui boc bua’); 
‘T’:writeln (‘Tui hue  tui’); 

 

 

 

end; {case } 

 

end {case ben ngoai} 

end
 

III-2 LAÄP TRÌNH VÔÙI CAÁU TRUÙC FOR 
 
Ví duï : 
program TrinhBayFor; 
var demlap : integer; 
begin 
 

writeln(‘Chuong trinh nay trinh bay mot vong for’); 

 

for demlap :=1 to 5 do 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 32 -

 

begin 

  writeln(‘Xin 

Chao’); 

writeln(‘Lan thu : ‘, demlap); 

 

end {for} 

end
 
Cuù phaùp caâu leänh for 
for  bieánñeám := trò ñaàu to trò cuoái do haønh ñoäng; 
Voøng laëp coù theå laëp töø treân xuoáng, khi ñoù caâu leänh coù daïng :   
for  bieán ñeám := trò ñaàu downto trò cuoái do haønh ñoäng; 
 
Chuù yù : bieán ñeám phaûi laø kieåu thöù töï  nghóa laø khoâng nhaát thieát phaûi laø 
kieåu integer. 
Ví duï: 
program BangChuCai; 
var demchu : char; 
begin 
 

for demchu := ‘A’ to ‘Z’ do 

  write(demchu); 
 writeln; 
 

for demchu := ‘z’ downto ‘a’ do 

  write(demchu); 
 writeln 
end
 
Khi vieát voøng for ta phaûi tuaân theo 5 quy taéc sau ñaây: 
1.  Bieán ñeám, trò ñaàu vaø trò cuoái phaûi cuøng kieåu thöù töï . 
Loãi thöôøng gaëp laø vieát voøng for vôùi soá thöïc. 
Ví duï: 
 

for dem = 1.0 to 5.0 do hanhdong; 

2.  Bieåu thöùc cho trò ñaàu vaø trò cuoái phaûi coù giaù trò xaùc ñònh khi böôùc vaøo 

voøng laëp. Heä quaû laø trò ñaàu vaø trò cuoái khoâng theå ñaët laïi trong thaân 
voøng laëp. 

Ví duï trong ñoaïn chöông trình sau 
 

lower := 1; 

 

upper := 3; 

 

for counter := lower to upper do 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 33 -

  

begin 

  lower 

:= 

0; 

 

upper := 1000; { khoâng coù taùc ñoäng leân bieán ñeám} 

  writeln(‘Hello’); 
 

end; {for} 

 
chæ in ra  Hello 3 laàn chöù khoâng phaûi laø 1001 laàn. 
 
3.  Bieán ñeám phaûi ñöôïc khai baùo ñòa phöông. Nhö vaäy, neáu trong moät 

thuû tuïc coù voøng for thì bieán ñeám phaûi khai baùo trong thuû tuïc ñoù . 

4.  Gaùn laïi trò cho bieán ñeám trong thaân voøng laëp laø moät loãi. 
Ví duï: 
 
for dem := 1 to 99 do 
begin  { ngöôøi vieát chöông trình muoán in ra caùc soá leû} 
 writeln( 

dem); 

 

dem := dem + 1; {leänh gaùn baát hôïp leä} 

end; {for} 
5.  Trò cuûa bieán ñeám laø khoâng xaùc ñònh khi ra khoûi voøng laëp for 
 
Caáu truùc voøng for loàng nhau 
Ví duï: 
 Vieát chöông trình in ra hình chöõ nhaät sau: 

* * * * * * * * * 
* * * * * * * * * 
* * * * * * * * * 
 

Chuùng ta deã thaáy giaûi thuaät cuûa chöông trình coù theå trình baøy nhö sau: 

for soá doøng  
do  in ra moät doøng  

Moãi doøng seõ ñöôïc in ra baèng caùch laäp laïi caùc daáu * baèng soá coät , töùc laø  

for soá coät 
do in ra moät daáu * 

 Phoái hôïp laïi ta coù theå vieát  
 

for soá doøng  
 

for soá coät 

 

do in ra moät daáu * 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 34 -

 

Kyõ thuaät phaân tích chöông trình nhö treân goïi laø phöông phaùp duøng maõ 
giaû.
 Maõ giaû laø moät loaïi ngoân ngöõ trung gian giöõa ngoân ngöõ bình thöôøng 
vaø Pascal. Kyõ thuaät maõ giaû ñöôïc söû duïng roäng raõi trong laäp trình. Töø maõ 
giaû treân ta coù chöông trình sau. 
 
 
program
  VeHinhChuNhat; 
var demdong, demcot,sodong, socot : integer; 
begin 
 

writeln(‘Nhap vao so dong, socot ‘); 

 readln(sodong, 

socot); 

 

for demdong := 1 to sodong do 

 

begin 

 

 

for demcot := 1 to  socot do write(‘* ‘); 

 

 

writeln; {xuoáng doøng sau khi in ra moät doøng} 

 

end {for ben ngoai{ 

end
 
Phoái hôïp caáu truùc for vaø case  

Ñoâi khi beân trong caáu truùc for coù theå caáu truùc case . 

Ví du: Chuùng ta caàn vieát chöông trình in ra daõy soá Fibonacci.  Ñoù laø 
daõy soá  tuaân theo quy luaät laø baét ñaàu baèng 0 vaø 1, soá tieáp theo seõ baèng 
toång hai soá ñöùng tröôùc. Daõy soá naøy coù nhieàu öùng duïng trong thöïc teá. 
Chuùng ta muoán in ra daõy soá naøy treân maøn hình moãi haøng 5 soá , chöông 
trình nhö sau: 
 
program DaysoFibonacci; 
var Dem, Cantren, Sohientai, Sotiep : integer; 
procedure  TinhSotiep(var Socu, Somoi:integer); 
var Tam :integer; 
begin 
 

Tam :=  Socu + Somoi; 

 

Socu := Somoi; 

 Somoi 

:= 

Tam; 

end; {TinhSotiep} 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 35 -

begin  
 

writeln( ‘Ban muon in bao nhieu so Fibonacci? ‘); 

 readln(Cantren); 
 

writeln(Cantren, ‘ so Fibonacci dau tien la : ’); 

 

Sohientai := 0; 

 

Sotiep :=1; {khoi tao day} 

 

for dem := 1 to Cantren do 

 

begin 

  write(Sohientai 

:4); 

  TinhSotiep(Sohientai 

Sotiep); 

 

 

case (Dem mod 5 ) of 

 

 

 

1, 2, 3, 4 : ; 

   0 

writeln;{Xuong 

dong} 

 

 

end;{case} 

 

end; {for} 

end
 

 

 

 

Trong chöông trình treân, chuùng ta ñaõ duøng caáu truùc case ñaët trong 

voøng for ñeå xuoáng haøng sau khi in ñuû 5 soá . Cuõng caàn chuù yù caùch tính 
soá  tieáp trong thuû tuïc TinhSotiep. Thuû thuaät nhö vaäy raát hay ñöôïc duøng 
khi tính caùc daõy soá . 
 

III-3 CHOÁNG LOÃI VAØ SÖÛA LOÃI: 
 
Loãi thöôøng gaëp laø thieáu end cuûa caáu truùc case, phaûi ñaûm baûo luoân luoân 
keát thuùc case baèng moät chöõ end
Loãi thöôøng gaëp khi vieát voøng for laø khoâng vieát ñuùng haønh ñoäng do ñaët 
sai daáu chaám phaåy. Ví duï: 
 
 

for dem :=1 to 5 do ; 

  begin 
 

 

 

…. 

  end; 
 
 
Töø khoaù Pascal môùi 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 36 -

case   

of 

 

 

 

for   

to 

 

downto 

 
Khaùi nieäm môùi 
 
caáu truùc case 

bieåu thöùc choïn 

bieåu thöùc thöù töï 

haønh ñoäng   

leänh hôïp thaønh 

leänh caáu truùc 

leänh roãng 

voøng laëp for  

bieán ñeám   

caáu truùc loàng nhau 

 
 

Baøi ñoïc theâm  

Giaûi phaùp thoâ sô vaø hieäu suaát 

 
Chuùng ta coù theå duøng voøng laëp for ñeå giaûi quyeát baøi toaùn cuûa Gauss. 
Ñoù coù veû laø moät giaûi phaùp thoâ sô.  Giaûi phaùp thoâ sô coù nghóa laø chuùng ta 
duøng moät giaûi phaùp khoâng tinh vi laëp laïi raát nhieàu laàn. Ví duï coå ñieån veà 
giaûi phaùp thoâ sô laø caâu chuyeän veà baù töôùc  Monte Cristo. OÂng khoâng coù 
moät keá hoaïch tinh vi ñeå vöôït  nguïc. Traùi laïi oâng chæ coù moät caùi muoãng 
vaø duøng noù ñeå ñaøo moät ñöôøng haàm trong 14 naêm lieàn. 
 
Thoaït nhìn giaûi phaùp thoâ sô coù veû laø moät ñieàu teä haïi so vôùi  nhöõng giaûi 
phaùp thoâng minh, ñeïp deõ. Tuy nhieân trong thöïc teá khoâng phaûi luùc naøo 
cuõng vaäy, Ví duï, giaû söû baïn muoán tìm soá toå hôïp goàm 2 chöõ caùi  khaùc 
nhau taïo bôûi a,b,c d vaø e (ví duï ab,ac,ad.v.v..).  Dó nhieân laø coù coâng 
thöùc ñeå tính ñieàu ñoù. Nhöng trong khi baïn coá tìm ra coâng thöùc naøy, baïn 
coù theå vieát ra tröïc tieáp caùc toå hôïp coù theå coù roài ñeám  vaø ñeå thôøi gian suy 
nghó ñeán nhöõng chuyeän khaùc hay hôn. 
 
Haõy trôû laïi vôùi baøi toaùn cuûa Gauss. Maëc duø ñaõ coù lôøi giaûi raát ñeïp, chuùng 
ta coù theå giaûi noù treân maùy tính baèng caùch coäng laàn löôït. 
 
program Tinhtong; 
var Tong, Dem: integer; 
begin 
 

Tong := 0; 
for Dem :=1 to 100 do Tong := Tong + Dem; 
writeln( ‘Toång laø :’,Tong:1) 

end
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 37 -

Giaûi phaùp thoâ sô laø moät chuû ñeà nhaïy caûm ñoái vôùi vaøi laäp trình vieân vì 
moät moái quan taâm khaùc – hieäu suaát. Moät giaûi phaùp seõ ít hieäu suaát hôn 
neáu noù toán nhieàu thôøi gian maùy tính hôn. Chöông trình Tinhtong roõ raøng  
laø keùm hieäu suaát hôn coâng thöùc cuûa Gauss, trong tröôøng hôïp naøy tæ leä 
hieäu suaát laø 1/100. Vaäy taïi sao phaûi maát coâng nghó ñeán nhöõng giaûi phaùp 
thoâ sô? Coù ba lyù do. 
 
Lyù do 1: Khaûo saùt giaûi phaùp thoâ sô coù theå hieåu vaán ñeà toát hôn 
Giaûi phaùp thoâ sô laø moät chieán löôïc suy nghó, cuõng nhö caùc chieán löôïc 
suy nghó khaùc. Noù duøng ñeå môû roäng vaán ñeà, ñeå taùch bieät vaán ñeà vôùi caùc 
thaønh phaàn cuûa noù, ñeå moâ phoûng  quaù trình maùy tính giaûi quyeát vaán ñeà, 
ñeå  taäp trung  vaøo chi tieát v.v... Ñoâi khi caùch toát nhaát ñeå coù moät giaûi 
phaùp thoâng minh  laø taïo ra moät giaûi phaùp khoâng thoâng minh, roài caûi tieán 
noù. 
 
Lyù do 2: Hieäu suaát laø moät khaùi nieäm töông ñoái 
 Thôøi gian chaïy maùy tính khoâng phaûi laø chi phí duy nhaát cuûa phaàn 
meàm. Thôøi gian cuûa ngöôøi laäp trình thöôøng coøn ñaét hôn thôøi gian cuûa 
maùy, vaø khoaûng caùch ñoù ngaøy caøng lôùn.  Ñieàu ñoù khoâng coù nghóa laø 
phaûi chaáp nhaän nhöõng phöông phaùp laäp trình keùm coûi. Tuy nhieân, khi 
coá gaéng suy nghó ñeán moät giaûi phaùp ñeïp, phaûi luoân luoân suy nghó ñeán tæ 
soá chaát löôïng/giaù caû. Hôn nöõa moät giaûi phaùp “caûi tieán” coù theå laøm cho 
chöông trình phöùc taïp vaø khoù hieåu. 
 
Lyù do 3: Giaûi phaùp thoâ sô thöôøng deã aùp duïng. Chuùng thöôøng deã söûa ñoåi 
hôn caùc giaûi phaùp ñeïp. 
 
Haõy xeùt thuaät toaùn cuûa Gauss. Noù voâ ích ñeå giaûi nhöõng vaán ñeà tính toång 
khaùc. Laøm sao ñeå tính toång bình phöông, laäp phöông, hay caên baäc hai 
cuûa caùc soá töø 1 ñeán 100? Giaûi phaùp thoâ sô giaûi quyeát nhanh choùng caùc 
vaán ñeà naøy. 
 
Vaán ñeà coát loõi cuûa laäp trình ruùt cuoäc laø chöông trình coù chaïy ñöôïc 
khoâng?
  Trong saùch The Psychology of Computer Programing (Taâm lyù 
laäp trình maùy tính), Gerald Weiberg ñaõ keå caâu chuyeän veà moät laäp trình 
vieân chöõa chaùy cho moät  döï aùn saûn xuaát xe hôi. Laäp trình vieân tröôùc ñoù 
cuûa döï aùn ñaõ ra söùc cheâ bai chöông trình cuûa ngöôøi môùi ñeán laø keùm 
hieäu quaû, khoâng baèng chöông trình ñaõ bò vöùt ñi cuûa haén. Laäp trình vieân 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 38 -

môùi traû lôøi “Tuy nhieân chöông trình cuûa toâi chaïy coøn cuûa anh thì khoâng. 
Neáu chöông trình khoâng caàn phaûi chaïy toâi coù theå tìm ra thuaät toaùn coøn 
hieäu quaû gaáp ñoâi chöông trình cuûa anh! “ Vaâng, ñuùng vaäy! 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 39 -

BAØI TAÄP CHÖÔNG III 

1.Vieát chöông trình ñeå tính troïng löïôïng cuûa moät ngöôøi taïi caùc thieân 
theå trong heä maët trôøi so vôùi troïng löïông cuûa ngöôøi ñoù treân traùi ñaát. 
Duøng soá lieäu troïng löôïng tæ ñoái trong baûng sau(troïng löôïng treân traùi 
ñaát laø 1): 
Maët trôøi  27.94 

Sao Thuyû 

0.37  Sao Kim 

0.88 

Maët traêng  0.17 

Sao Hoaû 

0.38  Sao Moäc 

2.64 

Sao Thoå  1.15 

Sao Dieâm 
vöông 

1.17 Sao 

Haûi 

vöông 

1.18 

 
Chöông trình nhaän vaøo troïng löôïng treân traùi ñaát vaø cho pheùp ngöôøi 
duøng choïn thieân theå ñeå tính. 

2. Vieát chöông trình veõ hình chöõ nhaät sau: 

    *  *  *  *  *   * 

               *                   * 
               *  *  *  *   *  * 
       Ngöôøi duøng chöông trình nhaäp vaøo chieàu daøi vaø chieàu roäng. 
3. Vieát chöông trình veõ hình  sau: 

    *  *  *  *  *  * 

              *  ###### * 
              *  ###### * 
              *  *  *  *  *  * 
       Ngöôøi duøng chöông trình nhaäp vaøo chieàu daøi vaø chieàu roäng. 
4. Vieát chöông trình veõ hình  sau: 

*  *  *  *  *===== 

    *  *  *  *  *===== 
    *  *  *  *  *===== 

============ 
============ 
 

              

       Ngöôøi duøng chöông trình nhaäp vaøo chieàu daøi vaø chieàu 

roäng. 
5 . Vieát chöông trình veõ hình sau. Chieàu  cao cuûa hình tam giaùc 

 

 * 

 

ñöôïc nhaäp töø baøn phím. 

    *  * 
  *      * 

      * *  *  * * 
 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 40 -

 
 
6. Vieát chöông trình veõ hình sau. Chieàu  cao cuûa hình tam giaùc   

 * 

 

ñöôïc nhaäp töø baøn phím. 

          *  * 
      * @ * 
      * @@*   
  *  *  *  * *  *  *  *  * 
   

 * @@ * 

   

 * @ * 

   

 *  * 

  

 

 

7.Vieát chöông trình  in ra caùc soá chaün töø 0 ñeán 100. Caùc chöõ  caùi 
cacùh nhau töø ‘A’ ñeán ‘Z’. Caùc chöõ caùi thöù ba , baét ñaàu töø ‘C’. 
8. Vieát chöông trình in ra bình phöông cuûa caùc soá nguyeân chaün töø 0 
ñeán 50. 
9.Vieát chöông trình in ra baûng ñoåi töø ñoä C sang ñoä F theo töøng 
khoaûng 10 ñoä. Duøng coâng thöùc: 

C= (5/9) (F-32) 
 

10.Vieát chöông trình tìm soá haïng thöù n cuûa moät caáp soá nhaân trong 
caùc tröôøng hôïp sau: 

a)  bieát hai soá haïng ñaàu tieân 
b)  bieát soá haïng ñaàu tieân vaø coâng boäi 
c)  bieát hai soá haïng lieân tieáp vaø vò trí cuûa moät trong hai soá 

haïng naøy 

d)  bieát moät soá haïng, vò trí cuûa soá haïng naøy vaø coâng boäi 

 
11.Haøm random(n)cuûa Pascal cho giaù trò ngaãu nhieân phaân boá ñeàu töø  
0 ñeán n-1. Haøm random() khoâng coù ñoái soá cho giaù trò ngaãu nhieân 
phaân boá ñeàu töø 0 ñeán 1. Tuy nhieân trong thöïc teá, nhieàu ñaïi löôïng 
ngaãu nhieân khoâng phaân boá ñeàu, maø tuaân theo moät phaân boá naøo ñoù. 
Ví duï, khi caùc kyõ sö giao thoâng  nghieân cöùu soá xe hôi ñi qua moät ngaõ 
tö trong khoaûng thôøi gian t, hoï khaùm phaù ra raèng xaùc suaát  ñeå cho k  
xe ñi qua trong khoaûng thôøi gian t laø 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 41 -

!

)

(

)

,

(

k

t

e

t

k

P

k

t

λ

λ

=

 vôùi 

t≥0,λ>0, vaø k =0,1,2,… 

 
Phaân boá naøy ñöôïc goïi laø phaân boá Poisson, coù nhieàu öùng duïng trong 
khoa hoïc kyõ thuaät. Ví duï soá cuoäc goïi k tôùi toång ñaøïi trong thôøi gian t, 
soá vi khuaån k trong theå tích t cuûa chaát loûng, vaø soá laàn sai hoûng k cuûa 
moät heä thoáng phöùc taïp trong khoaûng thôøi gian t cuõng tuaân theo phaân 
boá Poisson. 
Vieát moät haøm ñeå ñaùnh giaù phaân boá Poisson vôùi k,t vaø λ baát kyø. Kieåm 
tra haøm baèng caùch tính xaùc suaát  ñeå 0,1,2,3,…,5 xe ñi qua moät ñieåm  
trong moät phuùt, cho λ=1,6 /phuùt. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 42 -

 

CHÖÔNG IV    IF     WHILE    REPEAT…UNTIL 

 
Chöông naøy khaûo saùt caáu truùc ifwhile vaø repeat … until. Ñoù laø nhöõng 
caáu truùc ñieàu khieån coù bieåu thöùc ñieàu khieån laø kieåu boolean. 
 

IV-1 BIEÅU THÖÙC BOOLEAN 
 
Bieåu thöùc boolean laø nhöõng bieåu thöùc coù giaù trò laø true hoaëc false. 
Nhö vaäy bieåu thöùc boolean ñôn giaûn nhaát laø caùc haèng boolean: true vaø 
false. Caùc bieåu thöùc phöùc taïp hôn ñöôïc taïo thaønh bôûi caùc toaùn töû quan 
heä vaø toaùn töû boolean. 
Caùc toaùn töû quan heä 
 =  baèng 
 <  nhoû 

hôn 

 

<=   

nhoû hôn hoaëc baèng 

 >  lôùn 

hôn 

 

>=   

lôùn hôn hoaëc baèng 

 <> 

 khoâng 

baèng 

 
Caùc toaùn töû boolean 
 

not   

and        or 

Chuù yù laø toaùn töû quan heä coù ñoä öu tieân thaáp hôn toaùn töû boolean neân  
caàn phaûi duøng daáu ngoaëc cho ñuùng. 
Ví duï: 
 

not ( Key = ‘T’) 

 

(Dienthe = 110) and (Cuongdo < 10) 

 

(Gioihan <5) or (Gioihan >=10) 

 

 

IV-2 LAÄP TRÌNH VÔÙI CAÁU TRUÙC IF 
 
Caáu truùc if 
Caáu truùc IF laø moät caáu truùc löïa choïn daãn ñeán reõ nhaùnh chöông trình. 
Daïng toång quaùt cuûa leänh if: 
 

if  

bieåu thöùc boolean 

 

 

then haønh ñoäng 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 43 -

 

 

else   haønh ñoäng khaùc 

 
Ví duï: 
Ñeå tìm giaù trò Max vaø Min cuûa hai soá a, b 
 

if a< b then 

 

 

begin 

   Max 

:= 

b; 

   Min 

:= 

a; 

 

 

end 

 

else 
 

begin 

   Max 

:= 

a; 

   Min 

:= 

b; 

 

 

end

 
Chuù yù: tröôùc else khoâng coù daáu chaám phaåy. 
 
Baèng caùch duøng phoái hôïp caùc leänh if ta coù theå giaûi quyeát nhieàu baøi toaùn 
phöùc taïp. Ví duï: baøi toaùn ñoåi tieàn 
Cho tröôùc moät soá tieàn, haõy ñoåûi ra caùc tôø giaáy baïc töông öùng, öu tieân cho 
caùc giaáy baïc coù giaù trò lôùn. Ví duï: neáu soá tieàn laø 588 ngaøn ñoàng seõ ñöôïc 
ñoåi thaønh  
5 tôø 100 ngaøn ñoàng 
1 tôø 50 ngaøn ñoàng 
1 tôø 20 ngaøn ñoàng 
1 tôø 10 ngaøn ñoàng 
1 tôø 5 ngaøn ñoàng 
1 tôø 2000 ñoàng 
1 tôø 1000 ñoàng 
Ta giôiù haïn chæ ñoåi tôùi ñôn vò 1000 ñoàng 
 
Töø thuaät  toaùn  töông töï nhö suy luaän cuûa ngöôøi  ñoåi tieàn ta coù chöông 
trình sau: 
 
program DoiTien; 
var Sotien :integer; 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 44 -

procedure Tinhsoto(Donvi:integer; var Sotien:integer); 
var Soto:integer; 
begin 
 

Soto := Sotien  div Donvi; 

 

Sotien :=  Sotien mod  Donvi; 

 

write(Soto : 1 , ‘ to ‘); 

 

case Donvi of 

 

100 : write(‘ mot tram ‘) ; 

 

50   : write(‘ nam muoi ‘); 

 

20   : write(‘ hai muoi ‘) ; 

 

10   : write(‘ muoi ‘) 

 

5     : write(‘ nam  ‘); 

 

2    : write(‘ hai  ‘) ; 

 

1    : write(‘ mot ‘) ; 

 end; 

{case} 

 

writeln(‘ ngan dong ‘); 

end
 
begin  
 

writeln(‘Nhap vao so tien can doi ( don vi ngan dong)’); 

 readln(Sotien); 
 

if Sotien >= 100 then Tinhsoto(100, Sotien); 

 

if Sotien >= 50 then Tinhsoto(50, Sotien); 

 

if Sotien >= 20 then Tinhsoto(20, Sotien); 

 

if Sotien >= 10 then Tinhsoto(10, Sotien); 

 

if Sotien >= 5 then Tinhsoto(5, Sotien); 

 

if Sotien >= 2 then Tinhsoto(2, Sotien); 

 

if Sotien >= 1 then Tinhsoto(1, Sotien); 

end
 
Caáu truùc if loàng nhau 
 
Xeùt baøi toaùn sau ñaây: 
Ba teân cöôùp cöôùp ñöôïc moät soá vaøng, khi veà ñeán saøo huyeät vì ñaõ khuya 
neân chuùng quyeát ñònh saùng hoâm sau seõ chia soá vaøng. Tuy nhieân, khi caû 
ba ñi nguû, moät teân thöùc daäy vaø chia soá vaøng ra laøm ba phaàn, coøn thöøa 
moät thoûi vaøng. Haén laáy moät phaàn cuøng vôùi thoûi thöøa roài ñi nguû . Hai teân 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 45 -

coøn laïi cuõng laøm töông töï vaø moãi laàn chia ñeàu dö moät thoûi vaøng. Saùng 
hoâm sau, trong laàn chia cuoái cuøng cuõng dö moät thoûi vaøng. Ba teân cöôùp 
tranh nhau thoûi vaøng naøy vaø cuoái cuøng baén nhau cheát. 
Hoûi soá vaøng coù theå laø bao nhieâu neáu toång soá khoâng lôùn hôn 500 thoûi? 
 
Baèng kyõ thuaät maõ giaû chuùng ta coù theå vieát thuaät toùan cuûa chöông trình 
nhö sau: 
for  moãi soá töø 1 ñeán 100  
 

if laàn chia cuûa teân cöôùp ñaàu tieân dö 1 then 

 

 

if laàn chia cuûa teân cöôùp thöù hai dö 1 then 

 

 

if laàn chia cuûa teân cöôùp thöù ba dö 1 then 

 

 

 

  

if laàn chia cuoái cuøng  dö 1  
then   chuùng ta coù moät lôøi giaûi 

Töø ñoù chuùng ta coù chöông trình sau  
 

program CuopVang; 
var Sothu, Sochia: integer; 
 
begin 
 

for sothu :=1 to 500 do  

 

 

if (sothu mod 3 ) = 1 then  

 

 

begin {lan chia cua ten cuop thu nhat} 

 

 

 

sochia = 2 * ( sothu div 3); 

 

 

 

if (sochia mod 3) = 1 then 

 

 

 

begin {lan chia cua ten cuop thu hai} 

 

 

 

 

sochia = 2 * ( sochia div 3); 

 

 

 

 

if (sochia mod 3) = 1 then 

 

 

 

 

begin {lan chia cua ten cuop thu ba} 

 

 

 

 

 

sochia = 2 * ( sochia div 3); 

 

 

 

 

 

if (sochia mod 3) = 1 then 

      writeln(Sothu, 

‘la 

mot 

loi 

giai’); 

 
 

 

 

 

end 

 

 

 

end 

 

 

end 

end
 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 46 -

 
 
 
 
 

IV-3 CAÁU TRUÙC VOØNG LAËP  KHOÂNG XAÙC ÑÒNH 
 
Caáu truùc repeat.. until coù cuù phaùp nhö sau: 
 
 

repeat 

  haønh 

ñoäng 

 

until  bieåu thöùc boolean; {ñieàu kieän thoaùt} 

 
Neáu bieåu thöùc boolean laø false thì haønh ñoäng ñöôïc laëp laïi cho ñeán khi 
bieåu thöùc naøy laø true. Do ñoù bieåu thöùc naøy ñöôïc goïi laø ñieàu kieän thoaùt 
voøng laëp. 
Chuùng ta ñaõ bieát roõ khaùi nieäm haønh ñoäng ôû chöông tröôùc. Rieâng vôùi caáu 
truùc repeat..until khi haønh ñoäng laø leänh hôïp thaønh ta khoâng caàn vieát 
begin vaø end
Ví duï: Ñeám soá chöõ soá  cuûa moät soá nguyeân döông nhaäp vaøo töø baøn phím. 
 
program DemsoChuso; 
var Sonhap, Sochuso: integer; 
begin 
 

writeln(‘Nhap vao mot so nguyen duong:’); 

 readln(Sonhap); 
 

Sochuso := 0; 

 

write(Sonhap, ‘ co’); 

 

repeat 

 

 

Sonhap := Sonhap div 10; 

 

 

Sochuso := Sochuso + 1; 

 

until Sonhap = 0; 

 

writeln(Sochuso, ‘ chu  so’); 

end
 
Caáu truùc while 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 47 -

  

while bieåu thöùc boolean  {ñieàu kieän vaøo voøng laëp} 
do haønh 

ñoäng; 

 

Trong caáu truùc while, haønh ñoäng trong voøng laëp chæ ñöôïc thöïc hieän khi 
bieåu thöùc boolean laø true, do ñoù bieåu thöùc naøy ñöôïc goïi laø ñieàu kieän vaøo 
voøng laëp. 
Chöông trình ñeám soá chöõ soá ñöôïc vieáât laïi baèng voøng laëp while 
 
program DemsoChuso; 
var Sonhap, Sochuso: integer; 
begin 
 

writeln(‘Nhap vao mot so nguyen :’); 

 readln(Sonhap); 
 

Sochuso := 0; 

 

write(Sonhap, ‘ co’); 

 

while Sonhap <> 0 do 

 

begin 

Sonhap := Sonhap div 10; 

 

 

Sochuso := Sochuso + 1; 

 

end

 

writeln(Sochuso, ‘ chu  so’); 

end
 
Baïn ñoïc haõy so saùnh kyõ vôùi chöông trình duøng voøng laëp while ñeå thaáy 
söï khaùc bieät giöõa hai caáu truùc naøy. 
 
Quy taéc vaøng cuûa voøng laëp: 
 Moät khi voøng laëp ñaõ baét ñaàu noù phaûi ñöôïc keát thuùc . Do ñoù ñieàu kieän 
vaøo hoaëc thoaùt voøng laëp phaûi chöùa moät bieán maø trò cuûa noù ñöôïc bieán ñoåi 
bôûi haønh ñoäng cuûa voøng laëp.  
Ví duï: Voøng laëp sau ñaây khoâng bao giôø thoaùt ñöôïc. 
 
dem := 0; 
repeat 
 writleln(dem); 
until dem = 100; 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 48 -

Laäp trình vôùi caùc voøng laëp 
Caùc voøng laëp ñöôïc duøng raát nhieàu trong thöïc teá. Ví duï: ta muoán moät troø 
chôi laëp laïi nhieàu laàn theo yù ngöôøi chôi, phaàn thaân chöông trình naøy coù 
theå vieát nhö sau: 
 
begin {mot chuong trinh tro choi} 
 

repeat  

  HuongDan; 
  Choi; 
 

 

writeln(‘Ban muon choi tiep khong (C/K)?’); 

  readln(Traloi); 
 

 

Ketthuc := Traloi = ‘K’;  

 

until Ketthuc ; 

end
 
Voøng laëp cuõng hay ñöôïc duøng ñeå kieåm tra döõ lieäu nhaäp. 
procedure KTNhap(var Trinhap : integer; Cantren, Canduoi :integer); 
begin  
 

repeat 

 

  writeln(‘Nhap vao mot so nguyen tu’, Canduoi, ‘den ’, Cantren 

); 
  readln(Trinhap); 
 

 

if Trinhap < Canduoi  then  

 

 

 

writeln(Trinhap, ‘ qua nho . Nhap lai ‘); 

 

 

else if Trinhap > Cantren then 

 

 

 

writeln(Trinhap, ‘ qua lon. Nhap lai ‘); 

 

until (Trinhap  <= Cantren) and(Trinhap >= Canduoi) 

end;{KiemTraNhap} 
 

 

Caùc voøng laëp cuõng raát hay ñöôïc duøng trong caùc baøi tính toång hay trung 
bình cuûa moät daõy soá. Thoâng thöôøng phaûi coù ñieàu kieän ñeå keát thuùc daõy 
soá . Kyõ thuaät hay gaëp laø duøng moät giaù trò ñaëc bieät goïi laø lính canh ñeå 
keát thuùc daõy. 
 
program TinhTrungbinh; 
const Linhcanh = -1; 
var    Tri, Tong, Trungbinh : real; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 49 -

 Dem 

:integer; 

begin 
 

Tong := 0; 

 

Dem := 0; 

 

Trungbinh := 0; {Khôûi tao} 

 

writeln(‘Nhap vao mot so :’);   
readln(Tri); 
if (Tri = Linhcanh) {truong hop khong co du lieu} 
then  writeln(‘Khong co du lieu de tinh trung binh’) 
else 
begin 
 

repeat  

  Dem 

:= 

Dem+1; 

Tong := Tong + Tri; 

 

 

writeln(‘Nhap vao mot so :’);   
readln(Tri); 

 

 

until Tri = Linhcanh; 

  Trungbinh 

:= 

Tong/Dem; 

 

 

writeln(‘Tri trung binh cua ‘, Dem, ‘so la: ‘, 

Trungbinh:10:4); 

end; {else} 

end

 

 
Söû duïng taát caû voøng laëp 
 
Pascal coù ba loaïi voøng laëp vaø chöông trình sau ñaây  seõ duøng caû ba loaïi. 
Chuùng ta muoán taïo ra caùc soá ñoái xöùng (tieáng Anh goïi laø palindrome). 
Giaûi thuaät ñeå taïo ra caùc soá naøy laø: 
Baét ñaàu baèng moät soá nguyeân. Neáu noù chöa phaûi laø soá ñoái xöùng. ñaûo 
ngöôïc soá ñoù, roài coäng soá ban ñaàu vaø soá ñaûo ngöôïc. Neáu soá môùi chöa 
phaûi laø soá ñoái xöùng, laïi tieáp tuïc nhö vaäy cho ñeán khi chuùng ta thu ñöôïc 
soá ñoái xöùng. 
Ví du: 101 laø soá ñoái xöùng. 561 chöa phaûi laø soá ñoái xöùng. Ñaûo ngöôïc vaø 
coäng ta coù, 561+165 = 726. 725 vaãn chöa laø soá ñoái xöùng , chöùng ta laøm 
tieáp: 726+627 = 1353. Tieáp tuïc moät laàn nöõa ta ñöôïc: 1353+3531 = 
4884. Soá naøy laø soá ñoái xöùng. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 50 -

 
ÔÛ böôùc phaân tích ñaàu tieân, chuùng ta vieát laïi thuaät toaùn döôùi daïng maõ giaû 
 

laáy moät soá 

 

while soá chöa phaûi laøsoá ñoái xöùng 

  ñaûo 

ngöôïc 

soá; 

 

 

coäïng soá ñaûo ngöôïc vôùi soá ban ñaàu; 

 

in keát quaû; 

 
 Laøm sao ñeå bieát ñöôïc moät soá laø soá ñoái xöùng? 
 Moät soá laø soá ñoái xöùng neáu chöõ soá 1 baèng chöõ soá n, chöõ soá thöù 2 baèng 
chöõ soá n-1, chöõ soá 3 = chöõ soá n-2 v.v.. 
Chöõ soá cuoái cuøng cuûa moät soá nguyeân ñöôïc tính bôûi: 
 

chöõ soá cuoái = soá mod 10 

Chöõ soá ñaàu ñöôïc tính bôûi 
 

chöõ soá ñaàu = soá  div(10 luyõ thöøa (soá chöõ  soá-1)) 

Nhö vaäy muoán tìm ñöôïc chöõ soá ñaàu, chuùng ta caàn bieát soá chöõ soá. Chuùng 
ta ñaõ bieát caùch laøm ñieàu naøy qua  chöông trình Ñeám soá chöõ soá. 
 
Laøm sao ñeå ñaûo ngöôïc moät soá? 
Neáu hieåu caùch ñeám soá chöõ soá, vieäc naøy seõ khoâng khoù. Ta laøm nhö sau: 
 

tính chöõ soá cuoái cuøng 

 

taùch noù ra khoûi  soá ban ñaàu baèng div; 

 

coäng vaøo vôùi toång tích luyõ ñaõ nhaân vôùi 10 

cho ñeán khi soá ban ñaàu baèng 0. 
 
Chuùng ta caàn phaûi chuù yù theâm moät ñieåm nöõa. Coù theå coù nhöõng soá phaûi 
laëp laïi raát nhieàu laàn môùi thaønh soá ñoái xöùng. khi ñoù seõ coù nguy cô traøn soá 
(overflow).  Chöông trình chuùng ta phaûi kieåm tra nguy cô traøn soá naøy. 
 
Baây giôø maõ giaû cuûa chuùng ta coù theå vieát ñaày ñuû hôn nhö sau: 
 
while ngöôøi duøng coøn muoán chaïy chöông trình 
 

nhaäp soá ban ñaàu; 

 

ñeám soá chöõ soá; 

 

kieåm tra xem coù phaûi laøsoá ñoái xöùng khoâng? 

 

kieåm tra xem coù nguy cô traøn khoâng? 

 

while (soá khoâng phaûisoá ñoái xöùng) and (khoâng coù nguy cô traøn) 

  ñaûo 

ngöôïc 

soá; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 51 -

 

 

coäng vôùi soá ban ñaàu; 

 

 

kieåm tra xem coù phaûi laøsoá ñoái xöùng khoâng? 

 

kieåm tra xem coù nguy cô traøn khoâng? 

in keát quaû 

 
Chuùng ta coù chöông trình sau. Khi ñoïc chöông trình, haõy chuù yù caùch 
duøng caùc voøng laëp. 
 
program PalindromeTest; 
var Original,Reversed,Reversals: longint; 
    Palindrome,InDangerOfOverFlow: boolean; 
 
procedure ReverseTheNumber(Original:longint; var Reversed: 
longint); 
          {Dao nguoc so} 
     begin 
          Reversed := 0; 
          while (Original <> 0) do 
          begin 
               Reversed := (Reversed*10) + (Original mod 10); 
               Original := Original div 10 
          end 
     end; {ReverseTheNumber} 
procedure CheckForOverFlow(Original:longint; var 
InDangerOfOverflow: boolean); 
          {Kiem tra xem co tran so khong? } 
          var Reversed: integer; 
          begin 
               Original := (Original div 10); 
               ReverseTheNumber(Original,Reversed); 
               InDangerOfOverFlow := (Original+Reversed) > (maxlongint 
div 10) 
               {maxlongint = 2 147 483 648} 
          end; {CheckForOverFlow} 
 
procedure CheckForPalindrome(Original: longint; var Palindrome: 
boolean); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 52 -

{Kiem tra xem mot so co phai la palindromekhong?  
 Thu tuc CountTheDigits nam trong thu tuc nay} 
var Divisor, Counter, FirstDigit, LastDigit : longint; 
    NumberOfDigits: integer; 
    procedure CountTheDigits(Original: longint; var NumberOfDigits: 
integer); 
    {Dem so chu so } 
    begin 
         NumberOfDigits := 0; 
         repeat 
               Original := Original div 10; 
               NumberOfDigits := NumberOfDigits + 1 
         until Original = 0; 
    end; {CountTheDigits} 
 
begin {CheckForPalindrome} 
      Palindrome := true; {Initialize Palindrome.} 
      CountTheDigits(Original,NumberOfDigits); 
      Divisor := 1; 
              {Tinh  10  luy thua NumberOfDigits-1.} 
      for Counter :=1 to NumberOfDigits-1 do Divisor := Divisor*10; 
 
      for Counter := 1 to NumberOfDigits div 2 do 
      begin 
           {Tinh va so sanh chu so dau va chu so cuoi } 
           FirstDigit := Original div Divisor; 
           LastDigit := Original mod 10; 
           if FirstDigit <> LastDigit then Palindrome := false; 
           {Loai bo chu so dau va chu so cuoi ra khoi Original.} 
           Original := (Original mod Divisor) div 10; 
           Divisor := Divisor div 100 
      end {for} 
end; {CheckForPalindrome} 
 
begin {Palindrome} 
writeln('Nhap vao mot so duong.'); 
readln(Original); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 53 -

 
repeat 
      write(Original:1 ,' can '); 
      Reversals := 0; 
      CheckForPalindrome(Original,Palindrome); 
      CheckForOverFlow(Original,IndangerOfOverFlow); 
      while not Palindrome and not InDangerOfOverFlow do 
      begin 
           ReverseTheNumber(Original, Reversed); 
           Reversals := Reversals+1; 
           Original := Original + Reversed; 
           CheckForPalindrome(Original,Palindrome); 
           CheckForOverFlow(Original,InDangerOfOverFlow) 
      end; {while} 
      if InDangerOfOverFlow then 
         writeln(' qua nhieu lan lap de thanh palindrome ') 
      else 
          writeln(Reversals:1, ' so lan lap de thanh ' , Original:1); 
      writeln(' Muon choi tiep? Nhap so am se ket thuc chöông trình'); 
      readln(Original) 
until Original < 0; 
end. {Palindrome} 
 
 

IV-4 ÑEÄ QUY 
 
Coù moät soá baøi toaùn coù baûn chaát laëp, nhöng raát khoù tìm lôøi giaûi baèng 
caùch laëp. Khi ñoù ngöôøi ta duøng kyõ thuaät ñeä quy. Trong kyõ thuaät ñeä quy, 
moät chöông trình con  goïi chính noù. Ví duï raát noåi tieáng laø baøi toaùn thaùp 
Haø noäi. Töông truyeàn  raèng ôû moät ngoâi ñeàn lôùn taïi Beùnares coù moät taám 
ñeá baèng ñoàng treân ñoù coù 3 caùi coïc baèng kim cöông. Thöông ñeá khi khai 
sinh ra theá giôùi  ñaõ xeáp 64 caùi ñóa baèng vaøng vôùi ñöôøng kính giaûm daàn 
treân moät caùi coïc.  Caùc nhaø sö lieân tuïc dòch chuyeån ñóa sang moät chieác 
coïc khaùc vôùi nguyeân taéc sau: 

Moãi laàn chæ ñöôïc dích chuyeån moät ñóa. 

Moät ñóa coù theå chuyeån töø coïc naøy sang coïc khaùc baát kyø 

Khoâng ñöôïc ñeå moät ñóa treân moät ñóa coù ñöôøng kính nhoû hôn 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 54 -

Khi caùc nhaø sö  chuyeån ñöôïc heát 64 chieác ñóa thì seõ taän theá. Ngöôøi ta 
öôùc tính laø neáu moãi laàn chuyeån ñóa maát moät giaây, thì ñeå chuyeån heát 
phaûi maát 58 tæ naêm. 
 
Ñaùnh soá 3 caùi coïc laø C1, C2 vaø C3. Giaû söû coù N ñóa  vôùi ñöôøng kính 
giaûm daàn naèm treân C1. 
Vôùi N = 1 lôøi giaûi laø hieån nhieân. Ta chuyeån ngay sang C2. 
Vôí N = 2 ta chuyeån ñóa beù nhaát ( ñóa 1) sang C3,  
  

Chuyeån ñóa 2 sang C2  
Chuyeån  ñóa 1 töø C3 sang C2. 

Töø ñoù suy ra vôùi N ñóa giaûi thuaät laø: 

Chuyeån (N-1) ñóa sang coïc trung gian. 
Chuyeån ñóa cuoái cuøng sang coïc ñích. 
Chuyeån (N-1) ñóa töø coïc trung gian sang coïc ñích. 

 
Neáu chuùng ta coù thuû tuïc DichChuyen(N_dia, TuCoc, ToiCoc, CocTrung 
Gian) thì ta coù giaûi thuaät ñöôïc theå hieän qua caùc lôøi goïi thuû tuïc: 
 DichChuyen(N-1,C1,C3,C2): 
 DichChuyen( 

1,C1,C2,C3); 

 DichChuyen(N-1,C3,C2,C1); 
 
Töø ñoù ta coù chöông trình 
program ThapHanoi; 
var  N: integer 
 
procedure DichChuyen(N,C1,C2,C3 : integer); 
begin 
 

if N = 1 then writeln(C1, ‘ -> ’, C2) 

 

else 

 

begin 
  DichChuyen(N-1,C1,C3,C2); 
  DichChuyen( 

1,C1,C3,C2); 

  DichChuyen(N-1,C3,C2,C1); 

 

end

end; {DichChuyen} 
 
begin 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 55 -

 

writeln (‘ Nhap so dia : ‘); 
readln(N); 
DichChuyen(N,1,2,3) 

end
 

 

Ñeä quy laø moät kyõ thuaät laäp trình raát ñaëc saéc, nhöng nhieàu vaán ñeà cuûa noù 
vöôït ra ngoaøi khuoân khoå cuûa giaùo trình naøy. Do ñoù chuùng ta seõ khoâng ñi 
saâu theâm. 

 

IV-5 SÖÛA LOÃI VAØ CHOÁNG LOÃI 
 
Loãi do vieát khoâng ñuùng bieåu thöùc boolean 
Raát nhieàu loãi lieân quan ñeán vieäc vieát caùc bieåu thöùc boolean phöùc taïp. 
Ví duï, leänh gaùn sau ñaây laø voâ nghóa trong Pascal 
 

RightAnswer := Response = (‘A’ or ‘B’); 

bôûi vì or  laø moät toaùn töû boolean vaø chæ duøng vôùi caùc toaùn haïng 
boolean. Caâu leänh ñuùng laø 
 

RightAnswer := (Response = ‘A’) or (Response = ‘B’); 

Cuõng caàn raát chuù yù ñeán caùc daáu ngoaëc. Hai bieåu thöùc sau laø khoâng ñoàng 
nhaát duø thoaït nhìn coù veû gioáng nhau 
 

not (Hot and Tired)  

 

(not Hot) and (not Tired) 

Bieåu thöùc beân traùi coù trò töông ñöông vôùi bieåu thöùc 
 

not(Hot) or not (Tired) 

Baïn ñoïc coù theå kieåm tra laïi baèng caùch duøng baûng söï thaät. 
 
Loãi  vôùi caáu truùc ifâ 
Loãi thöôøng gaëp vôùi caáu truùc if  thöôøng laø do khoâng duøng ñuùng  leänh hôïp 
thaønh khi caàn.  Ví duï ñoaïn chöông trình sau: 
if Debugging then 
 PrintCurrentValues; 

UpdateInput(ChangeData); 

else 
 GetRawInput(NewData); 
 

writeln(‘ Tieáp tuïc tính’) 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 56 -

Trình bieân dòch seõ baùo loãi taïi else. Baïn ñoïc haõy suy nghó ñeå söûa loãi naøy. 
 
Loãi vôùi voøng laëp 
 
Haàu heát caùc loãi gaén vôí voøng laëp laø loãi ngöõ nghóa. Caùc chöông trình ñeàu 
dòch ñöôïc, nhöng khoâng chaïy ñuùng. Caùc loãi naøy laø teä haïi nhaát, vì chæ coù 
theå tìm ra baèng caùch thöû hoaëïc baèng moät chöùng minh hình thöùc. Vieäc thöû 
chæ coù theå thöïc hieän ñöôïc vôùi moät ít döõ lieäu, do ñoù khoâng baûo ñaûm 
chöông trình ñuùng vôùi moïi döõ lieäu. Coøn vieäc chöùng minh hình thöùc noùi 
chung raát khoù khaên. 
Tuy nhieân töông ñoái deã daøng ñeå tin töôûng laø moät  voøng laëp chaïy ñuùng. 
Chuùng ta caàn khaûo saùt ba tình huoáng 

1.  Chöông trình khoâng ñi vaøo voøng laëp trong khi leõ ra noù phaûi 

vaøo. 

2.  Voøng laëp khoâng bao giôø thoaùt. 
3.  Voøng laëp keát thuùc nhöng khoâng thöïc hieän ñuùng soá laàn laëp. 

Chuùng ta coù theå deã daøng kieåm tra tính ñuùng ñaén cuûa voøng laëp baèng 
caùch khaûo saùt kyõ caùc ñieàu kieän  : 
 

Loái vaøo:Ñieàu kieän vaøo coù thoûa khoâng? Caùc bieán coù khôûi taïo ñuùng 

khoâng? Baïn caàn voøng while hay repeat? Hay laø chæ caàn voøng for
Loái ra: Ñieàu kieän thoaùt coù thoaû khoâng? Toaøn boä voøng laëp ñaõ ñöôïc thöïc 
hieäb, hay chæ laø caâu leänh ñaàu tieân?. Coù gì ñaûm baûo laø ñieàu kieän thoaùt 
ñöôïc thoaû khoâng? 
 

Sai moät (thöøa   hoaëc thieáu moät laàn laëp): Haõy theo veát voøng laëp. 

kieåm tra caùc trò luùc thoaùt xem coù nhö mong muoán khoâng? 
 
Haàu heát caùc loãi cô baûn laø ñaëït sai chaám phaåy hay khoâng duøng ñuùng leänh 
hôïp thaønh. Ví duï , xeùt ñoaïn chöông trình sau ñeå tính 5! 
 

Tich  := 1; 

 

Dem := 2; 
while Dem <= 5 do ; 
 

Tich := Tich * Dem; 

 

Dem := Dem + 1; 

writeln (Tich); 

Baïn ñoïc haõy suy nghó ñeå söûa caùc loãi  trong ñoaïn treân 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 57 -

Loãi sai-moät  coù theå laø cöïc kyø nghieâm troïng vì chuùng luoân cho keát quaû 
sai. Xeùt ñoaïn chöông trình sau ñeå tính toång caùc soá töø 1 ñeán 100. 
 

Tong := 0; 

 

Sotiep : =1 

 

repeat 

 

 

Tong := Tong + SoTiep; 

  Sotiep 

:= 

Sotiep 

+1; 

 

until Sotiep >= 100; 

Haõy xeùt kyõ xem ñoaïn chöông trình treân coù tính ñuû 100 soá khoâng? 
 
Moät loãi khaù tinh vi vaø khoù nhaän bieát laø duøng pheùp so saùnh = vôùi soá thöïc. 
Ví duï, xeùt voøng laëp sau ñaây: 
x:=0; 
repeat 
      writeln(x); 
      x:=x+0.1 
 
until (x=1); 
Thoïat nhìn voøng laëp coù veû seõ keát thuùc ñuùng khi x=1. Nhöng vì x laø soá 
thöïc, neân giaù trò ôû thôøi ñieåm x=1 thöïc söï coù theå laø 
x=0.99999999999999999 hoaëc x=1.00000000000000001. Tình huoáng 
naøy laøm cho ñieàu kieän x=1 khoâng thoûa  vaø voøng laëp khoâng keát thuùc 
ñöôïc. Ñeå khaéc phuïc loãi naøy, toát nhaát laø kieåm tra pheùp = trong moät 
khoûang laân caän sai soá. Ví duï thay vì vieát ñieàu kieän laø (x=1) , ta coù theå 
vieát (x>=1-0.0001) and (x<=1+0.00001). 
 
Töø khoaù Pascal môùi 

 

if 

 

then   

else   

not   and   or 

repeat 

until   

while  

do 

 
Khaùi nieäm môùi 
toaùn töû quan heä  toaùn töû  boolean  bieåu thöùc boolean 
ñieàu kieän vaøo 

 ñieàu kieän thoaùt  ñieàu kieän bieân 

reõ nhaùnh   

voøng laëp khoâng xaùc ñònh  

ñeä quy 

 
 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 58 -

BAØI TAÄP CHÖÔNG IV 

 

1.Trong moät ñeà thi moân laäp trình Pascal coù caâu sau: 
“Haõy phaùt bieåu moät caâu. Neáu caâu ñoù ñuùng, baïn rôùt moân naøy. Neáu 
caâu ñoù sai, baïn rôùt taát caû caùc moân khaùc  cuûa hoïc kyø” . Coù caùch phaùt 
bieåu naøo ñeå khoûi bò rôùt khoâng? 
2. Vieát laïi 2 leänh if sau baèng moät leänh if 

If n>=2 then n:= 3*n+1; 
If n>=7 then n:= n-7; 

3.So saùnh hai ñoaïn chöông trình sau: 
 

If (a<=b) and (a<=c) 
  Then  min :=a 
  Else if (b<=c) and (b<=a) 
  Then min := b 
  Else min :=c; 

 

min :=a; 
if b< min  
then min :=b; 
if c<min  
then min :=c; 
 
 

Coù gì khaùc bieät khoâng? Giaûi thích. 
4.Boán ñoaïn chöông trình sau tính toång caùc soá chaün töø 1 ñeán 5. Phaân 
tích öu khuyeát dieåm cuûa moãi ñoaïn 
Sum :=0 
For Counter :=1 to 5 do 
If not odd(Counter) then 
  Sum := Sum +Counter; 

Sum :=0 
For Counter :=2 to 4 do 
If not odd(Counter) then 
  Sum := Sum +Counter; 

Sum :=6; 

Sum :=5; 

 
6.  Vieát chöông trình tính toång sau: 
1 –1/2+1/3 –1/4 + … -1/1000 
 
Vieát theo nhieàu caùch: coäng töø traùi qua phaûi, töø phaûi qua traùi, coäng 
caùc soá haïng döông(cuõng theo hai chieàu) roài tröø ñi toång caùc soá haïng 
aâm. So saùnh caùc keát quaû. 
 
5. Vieát chöông trình tính goùc khuùc xaï khi bieát goùc tôùi(tính baèng ñoä), 
chieát suaát cuûa moâi tröôøng 1 vaø 2.  Chuù yù tröôøng hôïp khoâng coù khuùc 
xaï (phaûn xaï toaøn phaàân). 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 59 -

 
 
6.Vieát chöông trình tính haøm y(t) nhö sau: 

<

+

+

=

0

5

3

0

5

3

)

(

2

2

t

t

t

t

t

y

 

cho caùc giaù trò  töø –9 ñeán 9 vôùi böôùc baèng 3. 
7. Vieát chöông trình tính haøm y(x) = x

2

-3x+2 cho moïi x töø –1 ñeán 3 

vôùi böôùc 0.1. 
8. Vieát haøm tính giai thöøa 
 
9. Cuôùc phí chuyeån phaùt nhanh laø 10000ñoàng cho 2kg ñaàu tieân, vaø 
3750ñoàng  cho moãi kg treân möùc 2kg. Neáu kieän haøng naëng hôn 70kg, 
seõ coù theâm phuï thu 10000ñoàng. Caùc kieän haøng lôùn hôn 100kg khoâng 
ñöôïc chaáp nhaän. Vieát chöông trình nhaän vaøo khoái löôïng kieän haøng 
vaø tính ra cöùôc phí. 
 
10.Phaùt bieåu naøo sau ñaây chæ ñuùng vôùi voøng laëp while? Chæ ñuùng vôùi  
repeat .. until? Ñuùng hoaëc khoâng duùng vôùi caû hai caáu truùc? 

a)  Bieåu thöùc boolean ñöôïc ñaùnh giaù tröôùc khi vaøo voøng laëp. 
b)  Haønh ñoäng cuûa caáu truùc khoâng caàn vieát döôùi daïng leänh hôïp 

thaønh. 

c)  Bieåu thöùc boolean ñöôïc ñaùnh giaù ôû cuoái voøng laëp. 
d)  Haønh ñoäng cuûa voøng laëp ñöôïc thöïc hieän ít nhaát moät laàn. 
e)  Coù theå trôû thaønh voøng laëp voâ haïn. 
f)  Soá laàn laëp coù theå xaùc ñònh ñöôïc moät caùch chính xaùc. 
g)  Phaûi coù moät bieán ñeám. 
 

11.Moät haõng saûn xuaát maùy keùo thaáy raèng lôïi nhuaän cuûa chieác maùy 
keùo thöù n laø 500+100ln(n). Tuy nhieân, chi phí löu kho taêng vaø kho 
thöù k toán 100(2k-1). Cöù saûn xuaát 10 chieác maùy keùo phaûi laøm moät 
kho môùi. 
Vieát chöông trình ñeå tìm lôïi nhuaän toái öu. 
 
12.Vieát chöông trình nhaäp vaøo moät daõy soá  döông, keát thuùc baêøng –
999. 

a)Ñeám vaø in ra soá phaàn töû cuûa daõy. 
b)Tìm giaù trò trung bình 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

- 60 -

c)Tìm phaàn töû lôùn nhaát vaø nhoû nhaát cuøng vò trí cuûa nhöõng phaàn 
töû naøy. 

 
13. Vieát chöông trình tính haøm sau 



<

<

+

<

+

<

+

+

=

0

0

0

0

0

0

0

0

)

,

(

2

2

2

2

y

and

x

y

x

y

and

x

y

x

y

and

x

y

x

y

and

x

y

x

y

x

f

 

14.Vieát chöông trình tính haøm 

x

x

y

=

1

1

ln

)

(

 

Vieát voøng laëp ñeå cho pheùp tính vôùi nhieàu giaù trò x nhaäp vaøo. Neáu giaù 
trò nhaäp vaøo baát hôïp leä, chöông trình keát thuùc. 
15. Doøng chaûy qua moät diode ñöôïc cho bôûi 

trong ñoù 

 

)

1

(

/

0

=

kT

qV

D

D

e

I

i

i

D

 laø doøng chaûy qua diode,v

D

 laø hieäu theá treân diode 

I

0

 laø doøng roø 

q laø ñieän tích electron,q=1,6x10

-19

C. 

k laø haèng soá Boltzmann,k=1,38x10

-23

J/K. 

T laø nhieät ñoä tuyeät ñoái 
Doøng roø I

0

 baèng 2,0 µA. Vieát chöông trình  tính doøng  cho caùc giaù trò 

hieäu ñieän theá töø –1,0V ñeán +0,8V vôùi böôùc 0,1V. Laëp laïi quaù trình 
cho caùc nhieät ñoä 0

0

C, 25

0

C vaø 50

0

C. Chöông trình cuõng thöïc hieän 

vieäc ñoåi töø ñoä C ra ñoä K. 
16. Moät vaät 200kg treo vaøo moät caùi xaø nhö hình veõ. Caùi xaø ñöôïc gaén 
vaøo töôøng baèng moät choát vaø ñöôïc treo bôûi moät daây caùp daøi 8m. Söùc 
caêng cuûa daây caùp ñöôïc  

 
cho bôûi 

2

2

.

.

d

lp

d

lp

lc

W

=

T

 

 trong  doù 

T laø söùc caêng, W laø khoái löôïng 
vaät, lc laø chieàu daøi daây caùp, lp 
laø chieàu daøi xaø, vaø d laø khoaûng 
caùch doïc theo xaø tôùi ñieåm treo 
daây. Vieát chöông trình ñeå tìm 
khoaûng caùch d taïi ñoù söùc caêng 

background image

Kyõ thuaät laäp trình Pascal 

- 61 -

laø nhoû nhaát. Chöông trình caàn tính söùc caêng töø d=1m ñeán d=7m vôùi 
moãi böôùc 0,1m. 
17. Moät nhaø sinh vaät nghieân cöùu söï sinh saûn cuûa vi khuaån trong hai 
moâi tröôøng caáy khaùc nhau. Trong moâi tröôøng A vi khuaån nhaân ñoâi 
sau 60 phuùt, coøn trong moâi truôøng B vi khuaån nhaân ñoâi sau 90 phuùt, 
Giaû söû raèng moät con vi khuaån ñöôïc ñaëït ôû moãi moâi tröôøng vaøo luùc baét 
ñaàu thí nghieäm. Vieát chöông trình tính vaø in ra soá vi khuaån ôû moãi 
moâi tröôøng taïi caùc khoaûng thôøi gian 3 giôøø cho ñeán 24 giôø. So saùnh soá 
vi khuaån sau cuøng. 
 
18. Caùc haøm soá löôïng giacù thöôøng ñöôïc  tính baèng caùch duøng caùc 
chuoãi voâ haïn. Ví duï 

...

!

7

!

5

!

3

sin

7

5

3

+

+

=

x

x

x

x

x

 

hay laø 

=

=

1

1

2

1

)!

1

2

(

)

1

(

sin

n

n

n

n

x

x

 

trong ñoù x ño baèng radian. 
Vì maùy tính khoâng theå tính chuoãi voâ haïn , chuoãi thöôøng ñöôïc caét sau 
moät soá soá haïng. Soá soá haïng  ñöôïc giöõ laïi phaûi caàn ñuû ñoä chính xaùc.  
Chuoãi ñaõ caét vôùi sinx laø 

=

=

N

n

n

n

n

x

x

1

1

2

1

)!

1

2

(

)

1

(

sin

 

Vieát chöông trình nhaän giaù trò x baèng ñoä vaø tính sinx duøng haøm coù 
saün cuûa Pascal, Sau ñoù tính sinx baèng chuoãi, vôùi N=1,2,3,…,10. So 
saùnh giaù trò ôû 2 caùch. Caàn bao nhieâu soá haïng ñeå ñaït ñöôïc cuøng ñoä 
chính xaùc? 
 
19. Giaù trò cuûa haøm muõ  e

x

 coù theå tính baèng chuoãi voâ haïn sau: 

   

!

0

n

x

e

n

n

x

=

=

 

Vieát chöông trình tính  e

 duøng 12 soá haïng ñaàu tieân cuûa chuoãi, So 

saùnh vôùi giaù trò cuûa haøm exp(x) cuûa Pascal vôùi caùc giaù trò x=-10,-5,-
1,0,1,5,10 vaø 15 
 
20. Trung bình nhaân cuûa n soá ñöôïc ñònh nghóa laø 

 

n

n

x

x

x

x

tbn

...

3

2

1

=

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 62 -

Vieát chöông trình tính trung bình coäng vaø trung bình nhaân cuûa n soá 
döông. Chöông trình nhaäp vaøo daõy soá döông vaø keát thuùc khi ngöôøi 
duøng nhaäp vaøo moät soá aâm. 
 
 
 
21. Vieát chöông trình tính trung bình bình phöông 
 

=

=

N

i

i

x

N

tbbp

1

2

1

 

Ngöôøi duøng seõ nhaäp vaøo soá phaàn töû cuûa daõy roài sau ñoù nhaäp vaøo 
töøng phaàn töû. 
 
22. Vieát chöông trình tính trung bình ñieàu hoaø 
 

n

x

x

x

N

tbdh

1

...

1

1

2

+

+

+

=

 

Haõy töï choïn caùch nhaäp döõ lieäu.  
 
23. Ñoä tin caäy cuûa moät heä dieän töû thöôøng ñöôïc ño baèng thôøi gian 
trung bình giöõa caùc laàn hoûng(MTBF)
. Ñoái vôùi moât heä thoáng lôùn chöùa 
nhieàu phaàn töû , thöôøng ngöôøi ta tính MTBF cho moãi thaønh phaàn roài 
sau ñoù tính MTBF cho toaøn heä thoáng. 
   

 

 

MTBFn

MTBF

MTBF

MTBFht

1

....

2

1

1

1

1

+

+

+

=

 

 
Vieát chöông trình ñoïc vaøo soá caùc heä con, MTBF cuûa moãi heä vaø tính 
MTBF cho toaøn heä thoáng. Aùp duïng chöông trình ñeå tính MTBF cho 
moät heä thoáng raña bao goàm heä anten coù MTBF 2000giôø, boä truyeàn 
coù MTBF 8000giôø; boä thu coù MTBF 3000 giôø vaø moät maùy tính coù 
MTBF 5000giôø. 
                Hình minh hoaï moät  heä thoáng 
 
 
 
 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

Heä con 3
 

Heä 
con 2 

Heä 
con 1 

background image

Kyõ thuaät laäp trình Pascal 

- 63 -

 

MTBF1 

MTBF2

MTBF3

 

 

 
 
 
 
24. Vieát chöông trình giaûi gaàn ñuùng phöông trình cosx=x baèng 
phöông phaùp chia ñoâi. 
25. Vieát chöông trình tìm caùc nghieäm cuûa phöông trình cosx=sin2x 
trong khoaûng (-6,6) 
26. Vieát chöông trình giaûi phöông trình sinx –x

2

 = 0 trong khoaûng 

(0,1)baèng phöông phaùp chia ñoâi vaø vaø phöông phaùp Newton. So 
saùnh soá laàn laëp cuûa hai phöông phaùp. 
27. Nhieàu tích phaân khoâng theå tính tröïc tieáp ñöôïc ví duï nhö 

t

dx

x

x

0

sin

 . Trong tröôøng hôïp ñoù, caàn phaûi tính tích phaân baèng soá. Coù 

theå tính tröïc tieáp töø ñònh nghóa cuûa tích phaân, baèng caùch tính toång 
dieän tích cuûa caùc hình chöõ nhaät nhö trong hình veõ. Vieát chöông trình 
ñeå tính tích phaân treân trong khoaûng töø  0 ñeán π vôùi caùc böôùc ∆x 
laø,1;0,05;0,01;vaø 0,005. 

Haøm sinx/x

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

0

0.

2

0.

4

0.

6

0.

8

1

1.

2

1.

4

1.

6

1.

8

2

2.

2

2.

4

2.

6

2.

8

3

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 64 -

28. Ñeå tính gaàn ñuùng tích phaân, ta coøn coù theå duøng coâng thöùc 
Simpson. Aùp duïng coâng thöùc naøy ñeå tính 

t

dx

x

x

0

sin

 trong khoaûng töø töø  

0 ñeán π vôùi caùc böôùc ∆x laø 0,1;0,05;0,01;vaø 0,005. 
29.Naêm 2001, moät sinh vieân toát nghieäp nhaän möùc löông khôûi ñieåm 
laø 400000 doàng/thaùng. Cöù sau 3 naêm thì ñöôïc taêng moät baäc löông. 
Möùc taêng löông  baèng 15% möùc löông ñang laõnh.  Vieát chöông trình 
tính xem ñeán naêm naøo löông cuûa sinh vieân naøy vöôït möùc 1 trieäu 
ñoàng. 

 

CHÖÔNG V PHÖÔNG PHAÙP LAÄP TRÌNH 

 

 Chuùng ta ñaõ hoïc xong caùc caáu truùc laäp trình caên baûn. Chöông naøy neâu 
leân nhöõng ñieåm chung nhaát cuûa phöông phaùp laäp trình. 
 
Laäp trình laø moät ngheä thuaät cuõng laø moät khoa hoïc. Noù laø moät ngheä 
thuaät bôûi vì noù ñoøi hoûi trí töôûng töôïng toát, oùc saùng taïo vaø söï kheùo leùo. 
Laø moät khoa hoïc bôûi vì caùc kyõ thuaät vaø phöông phaùp tieâu chuaån ñöôïc 
aùp duïng. Maëc duø chính caùc vaán ñeà vaø caùc kyõ thuaät söû duïng ñeå giaûi 
quyeát chuùng thay ñoåi, coù vaøi böôùc chung trong quaù trình phaùt trieån phaàn 
meàm: 
 
1.  Phaân tích vaø ñaëc taû vaán ñeà 
2.  Choïn löïa caáu truùc döõ lieäu vaø phaùt trieån thuaät toaùn 
3.  Maõ hoaù chöông trình  
4.  Thöïc hieän vaø thöû  chöông trình 
5.  Baûo trì chöông trình 
 
Chuùng ta trình baøy ngaén goïn caùc böôùc treân. 
 

V-1 PHAÂN TÍCH VAØ ÑAËC TAÛ VAÁN ÑEÀ: 
 
Vaán ñeà ban ñaàu thöôøng ñöôïc moâ taû khoâng chính xaùc. Ngöôøi ñeà xuaát vaán 
ñeà thöôøng khoâng hieåu toát veà noù. Anh ta khoâng bieát caùch giaûi quyeát hoaëc 
khoâng hieåu veà khaû naêng vaø haïn cheá cuûa maùy tính. Do ñoù böôùc ñaàu tieân 
ñeå giaûi quyeát moät vaán ñeà  laø phaân tich vaø ñaëc taû noù moät caùch chính xaùc. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 65 -

Söï phaân tích naøy ñoøi hoûi tröôùc heát phaûi xaùc ñònh ñaàu ra (output), nghóa 
laø nhöõng thoâng tin naøo caàn taïo ra ñeå giaûi quyeát vaán ñeà. Sau khi ñaëc taû 
ñaàu ra cuûa vaán ñeà, caàn phaûi phaân tích chi tieát ñeå xaùc ñònh ñaàu 
vaøo
(input), ñoù laø nhöõng thoâng tin duøng ñeå giaûi baøi toaùn. Thoâng thöôøng 
phaùt bieåu baøi toaùn chöùa nhöõng thoâng tin khoâng phuø hôïp vaø phaûi xaùc 
ñònh phaàn thoâng tin naøo coù iùch.  
 
Ngoaøi vieäc ñaëc taû ñaàu ra vaø ñaàu vaøo coøn caàn theâm moät soá thoâng tin nöõa. 
Coù theå duøng phaàn cöùng vaø phaàn meàm naøo? Chöông trình daønh cho ñoái 
töôïng naøo, chuyeân gia hay ngöôøi môùi duøng maùy tính? Kinh phí vaø thôøi 
gian thöïc hieän ra sao?v.v… 
 
 
 

V-2.CHOÏN LÖÏA CAÁU TRUÙC DÖÕ LIEÄU VAØ PHAÙT TRIEÅN THUAÄT 
TOAÙN: 
Giai ñoaïn naøy laø giai ñoaïn khoù khaên nhaát. Vieäc choïn löïa caáu truùc döõ 
lieäu, vieäc thieát laäp caùc thuaät toaùn ñuùng ñaén laø nhöõng vaán ñeà maáu choát 
cuûa vieäc laøm phaàn meàm. Hai khía caïnh naøy laø quan troïng vaø khoâng theå 
taùch rôøi nhau. Niklaus Wirth, ngöôøi saùng laäp ra ngoân ngöõ Pascal ñaõ 
toång keát. 
 
 

Thuaät toaùn + Caáu truùc döõ lieäu = Chöông trình 

 
Caáu truùc döõ lieäu bao goàm nhöõng döõ lieäu nguyeân thuyû vaø caùc döõ lieäu coù 
caáu truùc nhö maûng, baûn ghi, taäp hôïp, danh saùch (seõ ñöôïc hoïc ôû caùc 
chöông sau). 
Trong tin hoïc thuaät toaùn duøng ñeå chæ moät thuû tuïc coù theå thöïc hieän baèng 
maùy tính vaø ñieàu naøy daãn ñeán moät soá giôùi haïn ñoái vôùi caùc leänh taïo neân 
thuû tuïc: 
 
1.  Chuùng phaûi roõ raøng ñeå coù theå bieát roõ leänh naøo laøm vieäc gì. 
2.  Chuùng phaûi ñuû ñôn giaûn ñeå maùy tính thöïc hieän ñöôïc. 
3.  Chuùng phaûi höõu haïn, nghóa laø thuaät toaùn phaûi keát thuùc sau moät soá 

höõu haïn caùc pheùp toaùn. 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 66 -

Caùc thuaät toaùn thöôøng ñöôïc moâ taû baèng maõ giaû. Vieäc phaân tích vaø kieåm 
nghieäm thuaät toaùn seõ deã daøng hôn neáu chuùng coù caáu truùc toát. Caùc thuaät 
toaùn vaø chöông trình coù caáu truùc ñöôïc thieát keá bôûi ba caáu truùc ñieàu 
khieån caên baûn : 
 
1. Tuaàn töï : caùc böôùc ñöôïc thöïc hieän laàn löôït, moãi böôùc ñuùng moät laàn. 
2.Löïa choïn: moät trong nhieàu thao taùc ñöôïc choïn ñeå thöïc hieän. 
3.Laëp laïi: moät hay nhieàu böôùc ñöôïc thöïc hieän laëp laïi. 
 
Ba cô cheá ñieàu khieån naøy thaät laø ñôn giaûn, nhöng trong thöïc teá chuùng 
ñuû maïnh ñeå xaây döïng baát kyø thuaät toaùn naøo. 
 

 

 
 

V-3.MAÕ HOAÙ CHÖÔNG TRÌNH: 
 
Khoâng phuï thuoäc vaøo ngoân ngöõ ñöôïc duøng, caùc chöông trình phaûi vieát 
ñuùng, deã ñoïc vaø deã hieåu.
  Tính ñuùng ñaén ñöông nhieân laø quan troïng 
nhaát. Chöông trình khoâng coù giaù trò gì neáu khoâng taïo ra keát quaû ñuùng. 
Nhöõng ngöôøi môùi laäp trình  thöôøng khoâng ñaùnh giaù ñöôïc taàm quan troïng 
cuûa thoùi quen laäp trình toát ñeå coù chöông trình deã ñoïc vaø deã hieåu. Ñieàu 
naøy laø do giöõa moâi tröôøng hoïc taäp vaø thöïc teá raát khaùc xa nhau.Nhöõng 
chöông trình cuûa sinh vieân thöôøng nhoû (khoaûng vaøi traêm doøng)vaø ñöôïc 
vieát moät caùch ñoäc laäp. Nhöõng chöông trình thöïc teá coù theå raát lôùn (heä 
ñieàu haønh Windows95 coù khoaûng 200 trieäu doøng leänh). Nhöõng chöông 
trình nhö vaäy ñöôïc vieát bôûi caùc nhoùm laäp trình vaø chuùng thöôøng ñöôïc 
baûo trì bôûi nhöõng ngöôøi hoaøn toaøn khaùc vôùi nhöõng laäp trình vieân ban 
ñaàu. Khi ñoù tính deã ñoïc, deã hieåu cuûa chöông trình seõ coù yù nghóa soáng 
coøn. 
Coù nhöõng kinh nghieäm laäp trình  goùp phaàn vaøo vieäc vieát chöông trình 
deã ñoïc, deã hieåu. Bôûi vì thoùi quen toát trong vieäc laäp trình laø raát cô baûn, 
neân chuù yù nhöõng ñieàu sau ñaây: 
 
Nguyeân taéc ñaàu tieân laø chöông trình phaûi coù caáu truùc toát 
Nhöõng lôøi khuyeân coù ích laø: 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 67 -

Duøng phöông phaùp phaân tích töø treân xuoáng 

Söû duïng caùc caáu truùc ñieàu khieån cô baûn ñeå vieát cho moãi khoái. Chæ ñi 
vaøo ôû ñænh vaø ñi ra ôû ñaùy cuûa khoái. 

Söû duïng caùc bieán ñiaï phöông trong chöông trình con. Caùc bieán chæ 
duøng trong moät chöông trình con chæ neân ñöôïc khai baoù trong 
chöông trình con ño.ù 

Söû duïng caùc tham soá ñeå trao vaø nhaän thoâng tin töø chöông trình con. 

Ñeå baûo veä tham  soá khoâng bò  thay ñoåi bôûi chöông trình con, neân 
duøng tham trò hôn laø tham bieán. 

Söû duïng caùc bieán traïng thaùi ñeå baùo hieäu caùc loãi hay caùc ñieàu kieän 
ñaëc bieät trong khi chaïy chöông trình con. 

Duøng caùc teân coù tính gôïi nhôù thay vì duøng soá. 

 Ví duï 

DoTangDanso := (0.1758 –0.1257)* Danso   laø raát khoù hieåu so vôùi 
  TileSinh := 0.1758; 

TileChet := 0.1257; 
DoTangDanso := (TileSinh – TileChet) *Danso 
 

-Coá gaéng vieát  ñôn giaûn vaø roõ raøng. Caùc thuû thuaät chæ ñeå minh hoaï söï 
kheùo leùo cuûa ngöôøi laäp trình neân traùnh. 
 
Nguyeân taéc thöù hai laø moïi chöông trình neân coù chuù thích 
 Ñaêïc bieät laø caùc chöông trình phaûi coù lôøi chuù thích môû ñaàu. Nhöõng chuù 
thích naøy giaûi thích muïc ñích cuûa chöông trình, thuaät toaùn maø noù söû 
duïng, teân ngöôøi vieát, ngaøy giôø vieát ..Ngoaøi ra moät ñieàu toát laø giaûi thích 
caùch ñaët teân haèng vaø bieán. 
Neân duøng chuù thích cho caùc phaàn then choát cuûa chöông trình, ví duï ñaàu 
vaø cuoái voøng laëp, hay choã reõ nhaùnh. 
Moät chöông trình con cuõng caàn coù chuù thích, ñaëc bieät laø thoâng tin noù 
nhaän vaø thoâng tin noù traû veà. 
 
Nguyeân taéc thöù ba laø chöông trình neân vieát theo moät phong caùch toát. 
 Nhöõng lôøi khuyeân cho phong caùch laäp trình toát laø 
-Moãi leänh cuûa chöông trình naèm treân moät doøng rieâng, 
 - Phoái hôïp chöõ in hoa vaø chöõ thöôøng ñeå taêng tính deã ñoïc, 
-In ñaäm caùc töø khoaù (haàu heát caùc trình soaïn thaûo chöông trình thoâng 
duïng hieän nay cho pheùp töï ñoäng laøm ñieàu naøy) 
- Duøng caùc khoaûng troáng ñeå deã ñoïc 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 68 -

Ñeå moät doøng traéng  tröôùc moãi phaàn chöông trình 

Taän duïng caùch vieát thuït ñaàu doøng 

 

V-4 THÖÏC HIEÄN VAØ THÖÛ CHÖÔNG TRÌNH 
 
 Raát hieám khi moät chöông trình vieát maø khoâng coù loãi. Caùc loãi cuù phaùp 
vaø caùc loãi luùc thöïc thi thöôøng deã tìm vaø deã söûa, bôûi vì coù nhöõng thoâng 
baùo  loãi cuûa  heä thoáng  giaûi thích vaø ñònh viï  nhöõng loãi naøy. Tuy nhieân, 
caùc

 

loãi

 

loâgic khoù tìm hôn nhieàu. Nhöõng loãi naøy laø do maõ hoaù khoâng 

chính xaùc thuaät toaùn hay do chính vieäc  thieát keá thuaät toaùn. 
 
Moät kyõ thuaät coù theå coù ích ñeå ñònh vò caùc loãi loâgic laø theo veát (trace) 
chöông trình baèng caùch theâm vaøo caùc leänh in ra taïm thôøi ñeå hieån thò giaù 
trò cuûa caùc bieán chuû yeáu trong caùc giai ñoaïn khaùc nhau. Haàu heát caùc 
coâng cuï laäp trình hieän nay ñeàu coù hoã trôï cho vieäc theo veát naøy. 
 
Trong moät vaøi öùng duïng, nhö trong caùc heä phoøng thuû chieán löôïc, caùc heä 
ñieàu khieån taøu vuõ truï, nhöõng loãi trong chöông trình laø caû moät tai hoaï vaø 
khoâng theå dung thöù ñöôïc. Trong nhöõng tröôøng hôïp nhö theá, tin töôûng 
vaøo keát quaû cuûa nhöõng laàn thöû nghieäm laø chöa ñuû. Caàn phaûi coù moät 
chöùng minh suy dieãn  raèng chöông trình laø ñuùng vaø noù luoân luoân cho ra 
keát quaû ñuùng. Vieäc kieåm tra thuaät toaùn/chöông trình laø phaàn quan troïng  
trong quaù trình phaùt trieån chöông trình, lyù töôûng laø khi coù theå chöùng 
minh moät caùch hình thöùc tính ñuùng ñaén  cuûa moãi chöông trình. Tuy 
nhieân, trong thöïc teá thôøi gian vaø coâng söùc  ñeå chöùng minh seõ raát lôùn. 
Maëc duø vaäy, vieäc “kieåm tra treân giaáy” chöông trình, theo veát moãi con 
ñöôøng thöïc hieän cuõng laø moät söï reøn luyeän toát veà laäp trình.  Ñieàu ñoù tuy 
khoâng baûo ñaûm raèng thuaät toaùn/chöông trình laø tuyeät ñoái ñuùng, nhöng 
noù laøm taêng söï tin caäy  vaøo tính ñuùng ñaén cuûa chöông trình vaø laøm hieåu 
roõ hôn chöông trình vaø vì vaäy coù theå tìm ra ñöôïc nhöõng loãi logic khoù 
phaùt hieän. Khi ngöôøi laäp trình daàn daàân coù kinh nghieäm, ñieàu quan troïng 
laø hoï tích luyõ ñöôïc nhöõng coâng cuï coù saün chöùa caùc thuaät toaùn maø  tính 
ñuùng ñaén ñaõ ñöôïc xaùc minh vaø hoï coù theå duøng moät caùch tín caäy. 
 

V-5 BAÛO TRÌ CHÖÔNG TRÌNH: 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 69 -

Sau moät thôøi gian, caùc chöông trình thöôøng caàn phaûi thay ñoåi. Thöôøng 
phaûi caûi tieán hay naâng caáp chöông trình. Caùc chöông trình coù theå thay 
ñoåi deã daøng neáu ñöôïc vieát coù tính ñôn theå(modular), vì chæ caàn thay ñoåi 
moät vaøiø module. 
Vieäc baûo trì chöông trình laø moät phaàn quan troïng cuûa coâng ngheä phaàn 
meàm vaø hôn 50% thôøi gian cuûa caùc nhaø laäp trình duøng vaøo vieäc baûo trì 
chöông trình. Vieäc baûo trì thöôøng ñöôïc thöïc hieän bôûi nhöõng ngöôøi 
khoâng tham gia vaøo thieát keá ban ñaàu. Do ñoù, caàn phaûi laøm heát söùc ñeå 
thieát keá nhöõng chöông trình deã ñoïc, chuù thích roõ raøng, coù caáu truùc toát ñeå 
coù theå deã hieåu, deã thay ñoåi vaø deã baûo trì. 
 

BAØI TAÄP CHÖÔNG V 

Haõy choïn moät chöông trình baïn ñaõ vieát ôû caùc chöông tröôùc vaø phaân tích 
theo quan ñieåm laäp trình coù phöông phaùp. Haõy söûa laïi chöông trình ñoù 
nhöõng  phöông phaùp neâu ra trong chöông naøy. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 70 -

CHÖÔNG VI MÔÛ ROÄNG KIEÅU DÖÕ LIEÄU THÖÙ TÖÏÏ 

 

VI –1 KIEÅU THÖÙ TÖÏ DO NGÖÔØI DUØNG ÑÒNH NGHÓA 
 
Pascal cho pheùp ngöôøi duøng töï dònh nghóa kieåu döõ lieäu baèng caùch lieät 
keâ. 
Ví duï: 
 type Mau = (do, cam., vang, luc, lam, cham , tim); 
 

Xemay = (Dream, Future, Wave, Viva, Spacy); 

Töø khoaù duøng ñeå ñònh nghóa kieåu laø type. 
 
Chuù yù laø caùc teân trong danh saùch lieät keâ phaûi tuaân theo ñuùng quy taéc ñaëït 
teân 
Khi ñaõ ñònh nghóa xong kieåu döõ lieäu, coù theå khai baùo caùc bieán thuoäc 
kieåu naøy. 
Ví duï: 
Mau1 : Mau; 
Xe: Xemay; 
 
Chuùng ta coù theå gaùn trò cho caùc bieán naøy: 
Mau1 := cam; 
Xe := Future; 
 
Khi coù theâm phaàn ñònh nghóa kieåu döõ lieäu, caáu truùc cuûa chöông trình 
Pascal trôû thaønh nhö sau: 
 

ñaàu chöông trình 

 phaàn 

ñònh 

nghóa 

  ñònh 

nghóa 

haèng 

  ñònh 

nghóa 

kieåu 

 phaàn 

khai 

baùo 

  khai 

baùo 

bieán 

 

 

khai baùo thuû tuïc vaø haøm 

 phaàn 

leänh 

 
Caùc kieåu döõ lieäu ñöôïc khai baùo theo kieåu lieät keâ naøy laø caùc kieåu thöù töï. 
Phaàn töû ñaàu tieân coù soá thöù töï laø 0.  Ta coù theå duøng haøm ord ñeå tìm thöù töï 
cuûa moät trò thuoäc kieåu naøo ñoù. ví duï: 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 71 -

ord(Future) =1 
Caùc haøm pred vaø succ cuõng duøng ñöôïc. Ví du: 
 pred(cam) = do 
vaø succ(do) = cam 
Haøm ord nhö vaäy cho pheùp ñoåi moät kieåu thöù töï baát kyø thaønh kieåu 
nguyeân. Pascal chuaån khoâng coù haøm bieán ñoåi ngöôïc laïi. TurboPascal 
cho pheùp bieán ñoåi ngöôïc laïi theo cuù phaùp: 
 

 Teân kieåu döõ lieäu(Soánguyeân) 

Ví duï Mau(3) = luc; 
 
 
 Laäp trình vôùi kieåu thöù töï do ngöôøi duøng ñònh nghóa 
 
Vì laø kieåu thöù töï, neân caùc kieåu töï ñònh nghóa naøy duøng ñöôïc trong caáu 
truùc For vaø Case. 
Ví duï chuùng ta caàn tính  löông haøng tuaàn theo giôø laøm vieäc. Löông giôø 
ngaøy thöù baûy seõ ñöôïc tính gaáp röôõi, coøn chuû nhaät seõ tính gaáp ñoâi. Chuùng 
ta coù chöông trình sau: 
program Tinhluong; 
const Mucthuong = 2000; 
{Tieàn thöôûng seõ  tính treân soá giôø thöïc teá, khoâng tính phuï troäi} 
type Ngay=(ThuHai,ThuBa,ThuTu , ThuNam, ThuSau, 
ThuBay,ChuNhat); 
var NgayLV : Ngay; 
 

LuongGio, TongLuong; GioTL,TienThuong : real; 

 GioLV: 

integer; 

begin 
 

writeln(‘ Nhap vao löông giôø.’); 

 readln(LuongGio); 
 

TongLuong := 0; 

 

TienThuong := 0; 

 

writeln(‘Nhaäp vaøo soá giôø laøm vieäc thöù hai ñeán chuû nhaät’); 

 

for NgayLV := ThuHai to ChuNhat do 

 

begin 

  readln 

(GioLV); 

 

 

case NgayLV of 

 

 

 

ThuBay : GioTL := 1.5 * GioLV; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 72 -

ChuNhat : GioTL := 2 * GioLV; 
ThuHai, ThuBa, ThuTu , ThuNam, ThuSau: 
  GioTL 

:= 

 

GioLV; 

 

 

end; {case} 
TienThuong := TienThuong + (GioLV*MucThuong); 
TongLuong:= TongLuong +(GioTL*LuongGio) 

 

end; {for} 

 
 

TongLuong := TongLuong + TienThuong; 

 

wrieln(‘Tong luong ca tuan la ‘,Tongluong:8:2) 

end
 
Kieåu döõ lieäu töï ñònh nghóa khoâng nhaäp ñöôïc töø baøn phím vaø cuõng khoâng 
in ra ñöôïc. Muoán nhaäp hay in ra chuùng ta phaûi vieát thuû tuïc rieâng. Ví duï 
thuû tuïc sau in ra ngaøy thöù cho kieåu Ngay ôû treân: 
 
procedure InThu(Thu:Ngay); 
begin 
 

case Thu of 

 

 

ThuHai : writeln( ‘Thöù hai’); 

 

 

ThuBa : writeln( ‘Thöù ba’); 

 

 

ThuTu : writeln( ‘Thöù  tö’); 

 

 

ThuNam : writeln( ‘Thöù  naêm’); 

 

 

ThuSau : writeln( ‘Thöù saùu’); 

 

 

ThuBay : writeln( ‘Thöù baûy’); 

  ChuNhat: 

writeln(‘Chuû 

nhaät’); 

end; 

end
 

VI-2 KIEÅU MIEÀN CON 
 
Ñoâi khi chuùng ta khoâng duøng heát giaù trò cuûa moät kieåu thöù töï, maø chæ 
duøng moät phaàn trong ñoù. Khi ñoù ta coù theå ñònh nghóa kieåu mieàn con: 
Ví duï: 
type
 Ngay= (ThuHai, ThuBa, ThuTu,ThuNam,ThuSau, 
ThuBay,ChuNhat); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 73 -

 

NgayLV = ThuHai..ThuSau;  {mieàn con cuûa Ngay} 

 

NgayNghi = ThuBay..ChuNhat; {mieàn con cuûa Ngay} 

 

Gio = 0..23   

 

{Mieààn con cuûa integer} 

ChuHoa = ‘A’..’Z’ 

{Mieàn con cuûa char} 

 
Caùc kieåu töï ñònh nghóa cuõng nhö kieåu mieàn con giuùp cho chöông trình 
deã ñoïc vaø deã kieåm tra loãi. 
 
Trong danh saùch tham soáù, caùc kieåu döõ lieäu phaûi laø kieåu ñaõ ñònh nghóa, 
khoâng cho pheùp vieát tröïc tieáp kieåu mieàn con. 
 
Chuùng ta seõ coù ví duï veà caùch duøng kieåu mieàn con trong caùc chöông sau. 
 
 
Töø khoaù  Pascal môùi 
type  
 
Khaùi nieäm môùi 
 Kieåu thöù töï do ngöôøi duøng ñònh nghóa 
Kieåu mieàn con 
 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 74 -

BAØI TAÄP CHÖÔNG VI 

1.Giaû söû baïn ñaõ ñònh nghóa vaø khai baùo nhö sau: 
type 
Rainbow=(Infrared,Red,Orange,Yellow,Green,Blue,Violet,Ultraviolet)

Spectrum =Infrared..Blue 
Var HotColors:Infrared..Green; 
 Colors:Rainbow; 
 ColColors:Yellow..Ultraviolet; 

a)  Bieán naøo coù theå ñöôïc truyeàn nhö ñoái cuûa moät tham trò kieåu 

Rainbow? 

b)  Bieán naøo coù theå ñöôïc truyeàn nhö ñoái cuûa moät tham trò kieåu 

Spectrum? 

c)  Bieán naøo coù theå ñöôïc truyeàn nhö ñoái cuûa moät tham bieán kieåu 

Spectrum? 

d)  Bieán naøo coù theå ñöôïc truyeàn nhö ñoái cuûa moät tham trò ñöôïc ñònh 

nghóa nhö sau: 
AnyProcedure(Hue:Infrared..Ultraviolet); 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 75 -

CHÖÔNG VII   MAÛNG VAØ CHUOÃI 

 

VII-1 MAÛNG: 
 
Maûng laø caáu truùc döõ lieäu phoå bieán nhaát, coù maët trong haàu heát caùc ngoân 
ngöõ laäp trình. Baïn coù moät daõy soá, moät baûng hay moät heä toaï ñoä? Haàu 
nhö moïi nhoùm giaù trò nhö theá ñeàu coù theå bieåu dieãn baèng maûng, bôûi vì 
caùc giaù trò maûng ñöôïc truy caäp theo vò trí thay vì theo teân. 
 

Ñònh nghóa vaø khai baùo  maûng 

Cuù phaùp khai baùo maûng coù daïng 
type teân maûng = array [kích thöôùc]  of kieåu phaàn töû; 
Kích thöôùc ñöôïc chæ ra baèng caùc caän cuûa maûng, caùc caän naøy phaûi laø kieåu 
thöù töï.  Kieåu phaàn töû coù theå laø kieåu döõ lieäu baát kyø. 
Sau khi ñònh nghóa, coù theå khai baùo moät bieán kieåu maûng theo cuù phaùp. 
var teân bieán : teân maûng; 
Vi duï: 
type vector = array [1..3] of real; {maûng moät chieàu} 
 matran 

array[1..10,1..20] of integer; {maûng hai chieàu} 

 

DemChuHoa = array[‘A’..’Z’] of integer; {“Chæ soá “ laø chöõ caùi} 

   

Dientro = array[-100..100] of real; { ño ñieän trôû töø 100

0

C ñeán 

100

0

C} 

var v: vector; 
 A,B: 

matran; 

        dch: DemChuHoa; 
 R: 

Dientro; 

 

Truy xuaát maûng 

Caùc phaàn töû maûng ñöôïc truy xuaát theo vò trí. Vò trí ñöôïc cho bôûi chæ soá 
ví duï A[1,5].  Töøng phaàn töû maûng laø moät bieán coù kieåu döõ lieäu laø kieåu 
phaàn töû cuûa noù vaø  thao taùc treân ñoù nhö vôùi bieán thoâng thöôøng. 
Ví duï:  A[1,1] := 1; 
 

A[2,3] := A[1,3] *B[2,3]; 

 
Ñaëc bieät chuùng ta coù theå gaùn hai maûng cuøng loaïi (töùc laø gaùn ñoàng thôøi 
cho moïi phaàn töû). Ví duï 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 76 -

 

A := B; 

Chuù yù tuy quen goïi laø chæ soá, nhöng chæ soá khoâng nhaát thieát phaûi laø soá vì 
ta bieát chæ soá chæ yeâu caàu laø kieåu thöù töï. Ví duï ta muoán ñeám trong 100 
laàn goõ kí töï vaøo baøn phím. soá laàn xuaát hieän caùc kí töï töø ‘A’ ñeán ‘Z’ laø 
bao nhieâu laàn? Khi ñoù kieåu döõ lieäu 
type   DemChuHoa = array[‘A’..’Z’] of integer; {“Chæ soá “ laø chöõ caùi} 
seõ laøm cho thuaät toaùn cuûa chöông trình raát ñôn giaûn 
 
program DemChu; 
type   DemChuHoa = array[‘A’..’Z’] of integer; {“Chæ soá “ laø chöõ caùi} 
var   I: integer; 
 

Ch : char; 

 

DCH : DemChuHoa 

 

begin 
for ch := ‘A’ to ‘Z’ do DCH[Ch] := 0; 

{Khôûi taïo} 

(* ñoïc 100 kí töï vaø ñeám} 
for  i:= 1 to 100 do 
 

begin 

  readln(Ch); 

ch := UpCase(Ch) ; {Bieán thaønh chöõ hoa} 
DCH[Ch] := DCH[Ch] + 1; 

 

end

for ch := ‘A’ to ‘Z’ do 
 

if DCH[Ch} >0 then writeln(‘So chu’,Ch, ‘ = ‘,DCH[Ch]:1) 

end
 

Maûng vaø voøng laëp for 

 
Moät caùch töï nhieân caùc thao taùc treân maûng thöôøng ñöôïc thöïc hieän baèng 
voøng laëp for, bôûi vì bieán ñeám coù theå duøng nhö chæ soá cuûa maûng . Ví duï: 
 procedure NhapMang(Var A : Mang; Canduoi, Cantren: integer); 
{Nhaäp döõ lieäu vaøo moät maûng} 
var i :integer; 
begin 
 

for i := Canduoi to Cantren do 

  readln(A[ 

i]); 

end

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 77 -

 
Töông töï vôùi maûng hai chieàu. Giaû söû ta coù kieåu döõ lieäu 
type Matran = array[1..10,1..20] of integer; 
var Bang : matran; 
Chuùng ta muoán tìm ra phaàn töû lôùn nhaát cuûa Bang. Baèng caùch  duyeät laàn 
löôït qua töøng haøng, ta seõ tìm ra ñöôïc phaàn töû lôùn nhaát. Ta coù thuû tuïc 
 
 procedure FindMax(var  Bang: Matran); 
 {Tìm phaàn töû lôùn nhaát cuûa matraän } 
var Max, Hang, Cot :integer; 
begin 
 

Max := Bang[1,1]; { Khôûi taïo} 
for Hang := 1 to 10 do 

 

 

for Cot := 1 to 20 do 

 

 

 

if (Bang[Hang,Cot] > Max) then 

    Max 

:= 

Bang[Hang,Cot]; 

writeln (‘Giaù trò lôùn nhaát trong baûng laø:’, Max:1) 

end; { FindMax} 
 
Khi xöû lyù maûng, höôùng tieáp caän töø döôùi leân cuõng coù ích nhö tieáp caän töø 
reân xuoáng. Phöông phaùp töø döôùi leân coù theå neâu toùm taét laø 
 
 

Tìm ra quy luaät, roài thieát keá thuaät toaùn 

 

Tieáp caän töø döôùi leân thöôøng daãn ñeán moät lôøi giaûi tröïc giaùc cuûa vaán ñeà 

 
Ví duï, giaû söû chuùng ta muoán khôûi taïo ma traän sau 
 

 

1   2   3   4 

 

 

5   6   7   8 

 

 

9 10 11 12 

                 13 14 15  16 
 
Chuùng ta khai baùo  
type Matran = array[1..4,1..4] of integer; 
var  a : Matran; 
Sau khi suy nghó, chuùng ta coù theå phaùt hieän ra quy luaät sau: 
 

a[i,j] := 4*(i-1) +j; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 78 -

Töø quy luaät naøy, thuû tuïc khôûi taïo maûng treân  ñöôïc vieát deã daøng. 
procedure Khoitao(var a: Matran); 
var i,j:integer; 
begin 
 

for i:= 1 to 4 do 

 

 

for j:=1 to 4 do 

   a[i,j] 

:= 

4*(i-1)+j; 

end
 
 
Baèng caùch chuyeån ñoåi ma traän treân, baïn ñoïc deã daøng taïo ra caùc ma traän 
sau 
1   5    9  13  

 

 4   3    2    1 

2   6  10  14  

 

 8   7    6    5 

3   7  11  15  

         12  11  10   9 

4   8  12  16  

         16  15  14  13 

 

VII-2 SAÉP XEÁP  
 
Saép xeáp laø moät trong nhöõng chuû ñeà ñöôïc khaûo saùt kyõ nhaát cuûa laäp trình. 
ÔÛ ñaây chuùng ta chæ neâu vaøi phöông phaùp caên baûn. 
 
 Saép xeáp baèng caùch noåi boït 
 YÙ töôûng cuûa phöông phaùp naøy laø: chuùng ta duyeät qua maûng töø döôùi 
leân,vaø ñoåi choã hai phaàn töû keá nhau neáu chuùng coù thöù töï ngöôïc. Sau moãi 
laàn duyeät phaàn töû nhoû nhaát trong nhöõng phaàn töû coøn laïi ñöôïc noåi leân 
treân (do ñoù coù teân laø noåi boït). Chuùng ta xem ví duï ôû baûng sau 
 

khôûi ñoäng  i =2 

i =3 

i =4 

i =5 

i =6 

i=7 

i=8 

44 
55 
12 
42 
94 
18 
06 
67 

06 
44 
55 
12 
42 
94 
18 
67 

06 
12 
44 
55 
42 
94 
18 
67 

06 
12 
18 
44 
55 
42 
94 
67 

06 
12 
18 
42 
44 
55 
67 
94 

06 
12 
18 
42 
44 
55 
67 
94 

06 
12 
18 
42 
44 
55 
67 
94 

06 
12 
18 
42 
44 
55 
67 
94 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 79 -

 

 
Ta coù chöông trình 
program BubbleTest; 
type Int_Arr = array[1..8] of integer; 
var i: integer; 
      a : Int_Arr; 
procedure BubbleSort(var a: Int_Arr; n:integer); 
var i,j:integer; 
   

procedure Switch( var a,b:integer); 

 

var c: integer; 

 

begin 

  c:= 

a; 

  a:= 

b; 

 

 

b:=c; 

 

end; {Switch} 

 
begin {BubbleSort} 
for i :=2 to n do 
for j := n downto i do 
 

if a[j-1]>a[j] then 

  Switch(a[j],a[j-1]); 
end; {BubbleSort} 
begin  

a[1]:=44; 
a[2] :=55; 
a[3]:= 12 
a[4] := 42; 
a[5] := 94; 
a[6] := 18; 
a[7] :=   6; 
a[8] := 67; 
for i := 1 to 8 do write(a[i]:4); 
writeln; 
BubbleSort(a,8); 
for i := 1 to 8 do write(a[i]:4); 
writeln; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 80 -

end

 
 

Vì saép xeáp laø vieäc raát thöôøng gaëp vôùi döõ lieäu, neân nhieàu phöông phaùp 
caûi tieán ñaõ ñöôïc ñöa ra. Trong soá ñoù  noåi tieáng nhaát laø Quicksort. 
Phöông phaùp naøy ñöôïc ñaët teân nhö vaäy vì toác ñoä raát nhanh, nhaát laø treân 
caùc maûng lôùn. 
Giaûi thuaät cuûa noù nhö sau. Choïn moät phaàn töû x (thöôøng naèm giöõa 
maûng). Duyeät töø beân traùi maûng cho ñeán khi coù moät phaàn töû a[i] >x, sau 
ñoù laïi duyeät töø beân phaûi maûng cho ñeán khi coù moät phaàn töû a[j] <x. Ñoåi 
choã a[i] vaø a[j] tieáp tuïc quaù trình duyeät vaø ñoåi choã cho tôùi khi hai phía 
gaëp nhau. Keát quaû laø maûng ñöôïc chia laø 2 phaàn: beân traùi laø caùc phaàn töû 
nhoû hôn  x vaø beân phaûi laø caùc phaàn töû lôùn hôn x. Vieäc laøm nhö vaäy ñöôïc 
goïi laø chia phaàn. Sau ñoù tieáp tuïc chia phaàn cho moãi phaàn, cho ñeán khi 
caùc phaàn chæ coøn laïi moät phaàn töû. Roõ raøng thuaät giaûi naøy coù tính ñeä quy. 
Ta coù chöông trình 
 
program QuickSortTest; 
type Int_Arr = array[1..8] of integer; 
var i: integer; 
      a : Int_Arr; 
procedure QuickSort(var item: Int_Arr; n:integer); 
var i,j:integer; 
(*******************************************) 
procedure PartialSort(left,right:integer; var a: Int_Arr); 
var i,j,k : integer; 
  (*******************************) 
 

procedure Switch( var a,b:integer); 

 

var c: integer; 

 

begin 

  c:= 

a; 

  a:= 

b; 

 

 

b:=c; 

 

end; {Switch} 

 

 

 
(*************************************) 
begin {PartialSott} 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 81 -

 

k := (a[left] + a[right]) div 2; 

 

i := left; 

 

j := right; 

 

repeat 

 

 

while a[i] < k do i := i+1; 

 

 

while k <a[j] do  j := j -1; 

 

 

if i<= j then 

 

 

begin 

   Switch(a[i],a[j]); 
   i 

:= 

i+1; 

   j 

:= 

-1; 

 

 

end

 

until i>j; 

 

 
if left <j  then PartialSort(left,j,a); 
if i< right then PartialSort(i,right,a); 

end; {PartialSort} 
begin  {QuickSort} 
 PartialSort(1,n,item) 
end; {QuickSort} 
 
begin  

a[1]:=44; 
a[2] :=55; 
a[3]:= 12; 
a[4] := 42; 
a[5] := 94; 
a[6] := 18; 
a[7] :=   6; 
a[8] := 67; 
for i := 1 to 8 do write(a[i]:4); 
writeln; 
QuickSort(a,8); 
for i := 1 to 8 do write(a[i]:4); 
writeln; 

end
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 82 -

VII-3 TÌM KIEÁM 

 

Tìm tuaàn töï 

Tìm kieám treân moät maûng laø vieäc thöôøng gaëp trong laäp trình. Vôùi moät 
maûng baát kyø, chöa ñöôïc saép xeáp, ngöôøi ta duøng caùch tìm tuaàn töï. Tìm 
tuaàn töï nghóa laø chuùng ta laàn löôït duyeät qua töøng phaàn töû cuûa maûng cho 
ñeán khi tìm ra phaàn töû caàn tìm. Ta coù chöông trình 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 83 -

program TimTuantu; 
type Int_Arr = array[1..100] of integer; 
var a:Int_Arr; 
i,j : integer; 
function  Timtt(x:integer; a: Int_Arr; n:integer) :integer; 
var i: integer; 
begin 
 

for i:= 1 to n do 

 

if x =a[i] then 

 

begin 

  Timtt 

:= 

i; 

 

 

exit; 

 

end

 

Timtt := 0 

end; {Timtt} 
 
begin 
 

for i := 1 to 100 do a[i] := random(100)+1; 

 

repeat 

 

 

writeln(‘ Nhaäp soá ñeå tìm (0 ñeå thoaùt): ‘); 

  readln(i); 
  j 

:= 

Timtt(i,a,100); 

 

 

if j = 0 then 

 

 

 

writeln(‘ So khoâng coù trong daõy’) 

 

 

else 

 

 

 

writeln(i,’ laø phaàn töû thöù’,j); 

  writeln; 
 

until i = 0; 

end
 

 

 

Tìm kieám nhò phaân 

 
Khi maûng ñaõ ñöôïc saép xeáp, coù theå tìm kieám treân maûng nhanh hôn nhieàu 
baøng caùch tìm nhò phaân. Ta chia ñoâi maûng, so saùnh phaàn töû caàn tìm vôùi 
phaàn töû giöõa. Neáu phaàn töû caàn tìm nhoû hôn phaàn töû giöõa, ta tìm ôû nöûa 
ñaàu. Neáu phaàn töû caàn tìm lôùn hôn phaàn töû giöõa, ta tìm ôû nöûa sau. Soá laàn 
tìm kieám seõ giaûm ñi raát nhieàu so vôùi tìm tuaàn töï  (log

2

n  so vôùi n/2). 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 84 -

Ta coù chöông trình 
program TimNhiphan; 
type Int_Arr = array[1..100] of integer; 
var a:Int_Arr; 
i,j : integer; 
 

 

(********************************) 
 (*  $i quick.inc *) 
(********************************) 
function Timnp (x:integer; a: Int_Arr; n:integer) :integer; 
var  high, low, mid :integer; 
begin 
 

low := 1; 

 

high := n; 

 

while high >= low do 

 

begin 

 

 

mid := (high+low) div 2; 

 

 

if x> a[mid] then 

   low:= 

mid 

+1 

 

 

else if x< a[mid] then 

    high 

:= 

 

mid 

–1 

 

 

 

else 

    

 high 

:= 

-1; 

 

end; {while} 

 

if high := -1 then  

Timnp := mid 

 

else 

  Timnp 

:= 

0; 

end; {Timnp} 
 
begin 
 

for i := 1 to 100 do a[i] := random(200)+1; 

 QuickSort(a,100); 
 

repeat 

 

 

writeln(‘ Nhaäp soá ñeå tìm (0 ñeå thoaùt): ‘); 

  readln(i); 
  j 

:= 

Timtnp(i,a,100); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 85 -

 

 

if j = 0 then 

 

 

 

writeln(‘ Soá khoâng coù trong daõy’) 

 

 

else 

 

 

 

writeln(i,’ laø phaàn töû thöù’,j); 

  writeln; 
 

until i = 0; 

end
 

KHI NAØO NEÂN DUØNG MAÛNG? 

 
Baïn ñaõ bieát  caùch duøng maûng nhö theá naøo, nhöng chöa bieát khi naøo neân 
duøng maûng?
 Nhieàu sinh vieân coù thoùi quen  duøng maûng ñeå giaûi quyeát 
vaán ñeà ngay caû khi khoâng caàn thieát. Laøm theá naøo chuùng ta coù theå bieát 
khi naøo caàn duøng maûng hoaëc khoâng? 
 
Noùi chung, neáu nhieàu döõ lieäu caàn phaûi löu tröõ ñoàng thôøi trong boä nhôù ñeå 
giaûi quyeát vaán ñeà moät caùch coù hieäu quaû, khi ñoù duøng maûng laø caùch 
thích hôïp. Traùi laïi, maûng seõ khoâng caàn thieát. Ví duï, xem xeùt vaán ñeà tính 
trung bình  cuûa moät daõy vaø vaán ñeà saép xeáp moät daõy.  
 
Trong baøi toaùn tính trung bình, chuùng ta caàn tính caùc toång. Caùc toång naøy 
coù theå tính laàn löôït ngay khi caùc phaàn töû ñöôïc nhaäp vaøo. Do ñoù chöông 
trình tính trung bình khoâng caàn thieát duøng moät maûng. Baïn coù theå duøng 
maûng ñeå löu tröõ soá lieäu roài tính toång nhöng ñieàu ñoù laø khoâng caàn 
thieát.(Xem laïi chöông trình tính trung bình ôû chöông IV) 
 
Traùi laïi saép xeáp moät daõy soá ñoøi hoûi toaøn boä daõy soá phaûi naèm trong boä 
nhôù tröôùc khi baïn coù theå saép xeáp. Do ñoù trong tröôøng hôïp naøy baïn baét 
buoäc phaûi duøng maûng. 
 
Duøng maûng khi khoâng caàn thieát seõ coù hai nhöôïc ñieåm chính 

1.  Caùc maûng khoâng caàn thieát seõ laõng phí boä nhôù. Maûng coù theå ngoán 

moät löôïng lôùn boä  nhôù, laøm cho chöông trình phình ra hôn möùc 
caàn thieát. Moät chöông trình lôùn caàn maùy tính maïnh hôn ñeå chaïy, 
vaø do ñoù seõ toán tieàn hôn 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 86 -

2.  Caùc maûng khoâng caàn thieát seõ haïn cheá khaû naêng cuûa chöông trình

Ñeå hieåu ñieàu naøy, haõy xeùt laïi ví duï veà tính trung bình. Neáu chuùng 
ta duøng maûng, giôùi haïn tôùi 1000 phaàn töû, thì noù chæ chaïy vôùi toái 
ña 1000 döõ lieäu. Neáu caàn chaïy nhieàu hôn, buoäc phaûi söûa laïi 
chöông trình. Trong khi ñoù, chöông trình khoâng duøng maûng coù 
theå chaïy khoâng bò vöôùng giôùi haïn treân naøy. 

 
 

VII-4 CHUOÃI 
 

 

Pascal chuaån khoâng coù kieåu döõ lieäu chuoãi. Vì chuoãi ngaøy nay laø moät 
kieåu döõ lieäu raát caàn thieát neân caùc phieân baûn hieän nay cuûa Pascal ñeàu coù 
kieåu döõ lieäu chuoãi. Kieåu chuoãi ñöôïc khai baùo nhö sau: 
 
 

type str = string[chieàudaøi]; 

 
trong ñoù chieàu daøi laø soá nguyeân coù giaù trò lôùn nhaát laø 255. Neáu khoâng 
khai baùo thì chieàu daøi maëc nhieân laø 255. Chuoãi ñöôïc löu nhö moät maûng 
kyù töï vôùi byte ñaàu tieân duøng ñeå chöùa chieàu daøi chuoãi. Ví duï 
type str10 = string[10] 
var s: str10; 
neáu gaùn s:=’HELLO’ ta coù chuoãi s ñöôïc löu nhö sau 
   0    1 

  2 

     3      4         5         6          7 

   

10 
5 H E L L O “ @ # & ~ 
Chuù yù raèng byte ñaàu tieân khoâng phaûi kí töï  5 maø laø soá 5 ôû daïng nhò phaân 
(00000101) vaø 5 byte cuoái cuøng coù theå chöùa döõ lieäu ngaãu nhieân. 
 
Theá maïnh cuûa kieåu chuoãi laø coù theå xöû lyù chuùng theo hai caùch: nhö laø 
moät döõ lieäu toaøn theå hay nhö laø moät maûng kyù töï. Caû hai caùch ñeàu coù 
nhönõg öu theá rieâng, nhö seõ xeùt trong muïc naøy. Caùc chuoãi cuõng coù theå so 
saùnh ñöôïc vôùi nhau. 
 
Caùc haøm vaø thuû tuïc cho chuoãi 
UpCase bieán moät chöõ thaønh chöõ hoa. 
Length traû veà chieàu daøi cuûa chuoãi. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 87 -

Concat hay +:Noái chuoãi coù theå duøng toaùn töû + hay haøm Concat 
(concatenate) 
 
program Noichuoi; 
var  s1,s2,s3: string[80]; 
begin 
 

s1:= ‘ Ñaây laø khuùc ñaàu “ 

 

s2 := ‘ Ñaây laø khuùc cuoái’; 

 

s3 := Concat(s1,s2); 

 

{s3 := s1 + s2);} 

 writeln(s3}; 
end
 
Sao cheùp chuoãi: haøm chuaån Copy cho pheùp sao cheùp moät chuoãi töø moät 
chuoãi ñaõ cho. haøm naøy caàn 3 ñoái: chuoãi ban ñaàu, vò trí baét ñaàu sao cheùp 
vaø soá kyù töï caàn sao cheùp. 
program DoCopy; 
var s: string[80]; 
    i: integer; 
begin 
 

s:= ‘Ñaây laø moät doøng daøi  seõ ñöôïc vieát ra thaønh coät ‘; 
i :=  1; 
while i< length(s) do 
begin 
 writeln(copy(s,i,10); 
 

i := i+10; 

end
writeln; 

end
 
 Xoaù : thuû tuïc Delete xoaù toaøn boä hay moät phaàn cuûa chuoãi. Gioáng nhö 
Copy, ta caàn chæ ra vò trí baét ñaàu vaø soá kyù töï caàn xoaù. Ví duï 
Delete(s,5,3) seõ xoaù 3 kyù töï, baét ñaàu töø kyù töï thöù naêm 
 
 Cheøn: thuû tuïc Insert cheøn moät chuoãi vaøo moät chuoãi khaùc. Thuû tuïc naøy 
nhaän 3 ñoái: chuoãi  cheøn, chuoãi ñöôïc cheøn, vaø vò trí cheøn. Chöông trình 
sau minh hoaï caùch duøng Delete vaø Insert. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 88 -

 
program TestInsert; 
var s1,s2 :string[80]; 
begin 
 s1:=’A’ 

s2 := ‘1234567890’ ; 
writeln (‘Cheøn  ‘, s1 , ‘ vaøo ‘,’ s2); 
Insert (s1,s2,3); 
writeln(s2); 
writeln(‘Xoaù ‘, s1, ‘ ra khoûi ‘, s2); 
Delete(s2,3,1); 
writeln(s2); 

end
 
Keát quaû chaïy chöông trình seõ laø: 
Cheøn A vaøo 1234567890 
12A34567890 
Xoaù A ra khoûi 12A34567890 
1234567890 
 
Tìm kieám: haøm Pos cho pheùp tìm kieám vò trí cuûa chuoãi con trong chuoãi. 
program TestPos; 
var  s: string[80]’ 
begin 

s := ‘This is a test string’; 
writeln(‘ The position of ‘’test’’ in “ ’, s’’ ‘” is: ‘, pos(‘test’,s); 
writeln; 
writeln(‘ The position of ‘’TEST’’ in “ ’, s’’ ‘” is: ‘, 

pos(‘TEST’,s); 

writeln; 

end
Keát quaû chöông trình laø: 
The position of ‘test’ in  “This is a test string” is: 11; 
The position of ‘TEST’ in “This is a test string” is: 0; 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 89 -

Chuyeån kieåu : Hai thuû tuïc Str vaø Val cho pheùp chuyeån ñoåi töø soá sang 
chuoãi vaø ngöôïc laïi.  Str nhaän hai ñoái, moät soá vaø moät bieán chuoãi. Chuùng 
ta coù theå thaáy caùch duøng Str trong caùc ví duï sau: 
var s: string[20]; 
Leänh 

     Keát 

quaû 

str(10,s); 

   ‘10’ 

str(10:4,s); 

   ‘ 

 

10’ 

str(3.2,s); 

   ‘ 

3.2000000000E+00’ 

str(3.2:0,s); 

   ‘3.2E+00’ 

str(3.2:10:3,s) 

 

 

‘     3.200’ 

Val nhaän 3 ñoái: chuoãi ñeå chuyeån thaønh soá, bieán soá ñeå nhaän keát quaû vaø 
moät bieán nguyeân ñeå baùo loãi. Chöông trình sau trình baøy caùch duøng Val 
 
program ChuoiThanh So; 
type MaxStr = string[20]; 
var r:real; code :integer; 
 
procedure WriteNumber(s:MaxStr); 
begin 
 val(s,r,code); 

if code = 0 then 

  writeln(r:0:3) 

else 

 

 

writeln(‘ Loãi khi chuyeån chuoãi thaønh soá’); 

end;{ WriteNumber} 
begin 
 

writeln(‘ Chuyeån chuoãi 123.23 thaønh soá ‘); 
WriteNumber(‘123.23’); 
writeln(‘Baây giôø chuyeån chuoãi s123.23’); 
WriteNumber(‘s123.23); 

end
 
Xöû lyù tröïc tieáp caùc kí töï 
 
Ta coù theå thao taùc treân caùc kyù töï cuûa moät chuoãi nhö caùc thao taùc ñoái vôùi 
phaàn töû maûng. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 90 -

 Ví duï, vì haøm Upcase chæ thöïc hieän ôû möùc kyù töï ta vieát haøm UpcaseStr  
ñeå bieán caû chuoãi thaønh chöõ hoa. 
 
program UpperCase; 
type MaxStr = string[255]; 
var s:MaxStr; 
function UpcaseStr(s: MaxStr) : MaxStr; 
var i,j: integer; 
begin 
 

j := ord(s[0]); {j := length(s);} 

 

for i:= 1 to j do 

  s[i] 

:= 

Upcase(s[i]); 

 UpCaseStr 

:= 

s; 

end
begin 
 s 

:= 

‘abc’; 

 writeln(s); 
 

writeln(‘Ñoåi thaønh chöõ hoa.’); 

 writeln(UpcaseStr(s)); 
 writeln; 
end
 
Ví duï sau laø haøm ñaûo ngöôïc moät chuoãi 
type strmax = string[255]; 
function Daonguoc(s:strmax):strmax; 
var l,i:integer; 
begin 
 

l := length(s); 
for i:=1 to l do Daonguoc[l –i+1] := s[i]; 
Daonguoc[0] := s[0]; {ñeå giöõ ñuùng chieàu daøi chuoãi} 

end
 
 
 
Tìm vaø thay theá trong chuoãi 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 91 -

Vaán ñeà vaø thay theá trong chuoãi raát hay gaëp. Phoái hôïp Pos,Delete  vaø 
Insert ta seõ giaûi quyeát ñöôïc vaán ñeà naøy. 
 
program TimvaThaythe; 
var  
 

ChuoiBu : string[255]; 
ChuoiTim. ChuoiThay : string[20]; 
i :integer; 

begin 

ChuoiTim := ‘An’; 
ChuoiThay := ‘Binh’; 
ChuoiBu := ‘Haõy baûo An traû cho toâi cuoán saùch.’; 
writeln(ChuoiBu); 
i := Pos(chuoiTim.ChuoiBu); 
Delete(ChuoiBu,i, Length(ChuoiTim)); 
Insert(ChuoiThay,ChuoiBu,i); 
writeln(ChuoiBu); 

end
 

VII-5 SÖÛA LOÃI VAØ CHOÁNG LOÃI: 
 
Moät loãi hay gaëp khi duøng maûng laø laàm laãn giöõa teân kieåu döõ lieäu vaø teân 
bieán. Ví duï khi coù 
 

type Matran = array[1..10,1..10] of real; 

vaøi ngöôøi laäp trình coù xu höôùng vieát Matran[5,5] := 1; thay vì duøng moät 
teân bieán kieåu Matran. Neân nhôù quy taéc 

Teân kieåu döõ lieäu khoâng bao giôø xuaát hieän ôû phaàn leänh 

 
Nhieàu loãi raát hay gaëp trong khi xöû lí maûng. Moät vaán ñeà coå ñieån laø tìm 
kieám moät trò coù theå khoâng coù trong maûng. Ví duï, giaû söû ta khai baùo 
 TheArray : array[1..20] of integer; 
Ñoaïn chöông trình sau muoán tìm phaàn töû baèng 0 trong maûng. 

Dem := 1; 
while (TheArray[Dem] <>0) do Dem := Dem+1; 
writeln(‘Phaàn töû  thöù ‘,Dem:1, ‘ baèng 0’); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 92 -

Ñoaïn maõ naøy chaïy toát neáu 0 coù maët trong TheArray. Tuy nhieân neáu 
khoâng coù phaàn töû naøo baèng 0, chuùng ta seõ gaëp loãi 
Run-time error 201: Range check error 
 
cho thaáy chæ  soá vöôït quaù taàm cuûa maûng.  Ngöôøi ta thöû söûa baèng ñoaïn 
sau 
 

Dem := 1; 
while (Dem <20) and (TheArray[Dem] <> 0) do Dem := 

Dem+1; 

writeln(‘Phaàn töû  thöù ‘,Dem:1, ‘ baèng 0’); 

Giaû söû TheArray khoâng chöùa giaù trò 0 hay phaàn töû  thöù 20 baèng 0. Trong 
caûû hai tröôøng hôïp, ñoaïn treân vaãn baùo 
 

 

Phaàn töû thöù 20 baèng 0 

Ta chæ söûa trieät ñeå baèng caùch theâm vaøo moät kieåm tra nöõa ñeå chaéc chaén 
laø tìm ñuùng phaàn töû baèng 0. 

Dem := 1; 
while ((Dem <20) and TheArray[Dem] <>0) do Dem := Dem+1; 
if TheArray[Dem] = 0 then 
 

writeln(‘Phaàn töû  thöù ‘,Dem:1, ‘ baèng 0’) 

else 
 

writeln(‘Khoâng coù phaàn töû naøo baèng 0’); 

*** 

Caùc maûng hai hay nhieàu chieàu thöôøng laøm roái trí. Loãi thoâng thöôøng laø 
duøng quaù nhieàu voøng laëp. Ví duï ta muoán in ra caùc phaàn töû treân ñöôøng 
cheùo chính cuûa moät ma traän vuoâng n*n. Moät giaûi phaùp tröïc giaùc, nhöng 
sai laø 
 
 

for i :=1 to n do 

 

 

for j := 1 to n do 

   writeln(a[i,j]); 
Chöông trình seõ in ra moïi phaàn töû cuûa ma traän. Lôøi giaûi ñuùng chæ caàn 
moät voøng laëp 
 

for i := 1 to n do writeln(a[i,i]); 

Baïn ñoïc thöû nghó caùch ñeå in ra ñöôøng cheùo chính kia cuûa ma traän. 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 93 -

Töø khoaù Pascal môùi 

array  

of 

[..]   string 

 

Khaùi nieäm môùi 

maûng  

phaàn töû  

chieàu  

chæ soá  

kích thöôùc maûng 

quicksort  saép xeáp noåi boït  tìm kieám tuaàn töï   tìm kieám nhò phaân  
chuoãi   

cheùp chuoãi    

cheøn vaøo chuoãi   thay  theá  trong  chuoãi

 

  

xoaù chuoãi 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 94 -

BAØI TAÄP CHÖÔNG VII 

1. Vieát chöông trình tính tích voâ höôùng cuûa 2 vector trong khoâng 
gian 3 chieàu. 
2. Vieát chöông trình tính tích coù höôùng cuûa 2 vector trong khoâng 
gian 3 chieàu. 
3. Neáu moät vaät bò löïc F keùo ñi vôùi vaän toác v , thì coâng suaát do löïc 
sinh ra treân vaät laø 
  

F.v 

Duøng chöông trình tính tích voâ höôùng ôû baøi taäp 1 ñeå tính coâng  suaát 
taïo ra bôûi löïc F= 4i+3j-2k treân vaät di chuyeån vôùi vaän toác v = 4i-
2j+1k. 
Chuù yù: Kyù hieäu in ñaäm laø vector, i,j,laø caùc vector ñôn vò
4. Vaän toác daøi lieân heä vôùi vaän toáâc goùc theo bieåu thöùc: 
   

vr x ω 

trong ñoù laø baùn kính vector, ω  laø vaän toác goùc. Neáu khoaûng caùch töø 
taâm traùi ñaát ñeán moät veä tinh laø r = 300000i+400000j+50000k vaø vaän 
toác goùc cuûa veä tinh laø 
ω = 

-6.10

-3

 i + 2.10

-3 

j – 9.10

-4

k, vaän toác daøi cuûa veä tinh laø bao 

nhieâu? Duøng chöông trình ôû baøi taäp 3 ñeå tính. 
5. Nhieät ñoä trung bình haøng naêm quan saùt ñöôïc taïi 36 toaï ñoä treân traùi 
ñaát ñöôïc cho trong baûng sau. 
Vieát chöông trình tính nhieät ñoä trung bình doïc theo moãi kinh ñoä vaø 
vó ñoä, roài tính nhieät ñoä trung bình treân moïi ñieåm. 
 90,0

0

kinh 

Ñoâng 

90,5

0

kinh 

Ñoâng 

91,0

0

kinh 

Ñoâng 

91,5

0

kinh 

Ñoâng 

92,0

0

kinh 

Ñoâng 

92,5

0

kinh 

Ñoâng 

30,0

0

vó 

Baéc 

18,2 22,1 22,5 24,1 24,4 24,2 

30,5

0

vó 

Baéc 

19,4 21,1 21,9 23,1 23,6 23,7 

31,0

0

vó 

Baéc 

18,9 20,5 20,9 21,5 22,8 23,0 

31,5

0

vó 

Baéc 

18,6 19,9 20,4 20,8 21,5 22,2 

32,0

0

vó 

Baéc 

18,1 19,3 19,8 20,2 20,9 21,2 

32,5

0

vó 

Baéc 

18,3 18,8 19,6 20,0 20,5 20,9 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 95 -

 
6. Vieát chöông trình nhaân hai ma traän. 
 
7. Ngöôøi ta muoán tính nhieät ñoä cuûa moät taám kim loïai moûng hình 
vuoâng coù nhieät ñoä 4 caïnh ñöôïc giöõ coá ñòïnh. Ñeå moâ phoûng taám kim 
loïai, ta coù theå söû duïng maûng hai chieàu, moãi phaàn töû laø nhieät ñoä taïi 
moät ñieåm cuûa taám. Vieát chöông trình nhaäp vaøo nhieät ñoä cuûa 4 caïnh, 
duøng caùc nhieät ñoä naøy  ñeå khôûi taïo caùc haøng vaø coät ngoaøi cuøng cuûa 
maûng. Sau ñoù xaùc ñònh nhieät ñoä caân baèng taïi moãi ñieåm baèng caùch  
tính giaù trò trung bình  ôû 4 ñieåm laân caän beân treân, beân traùi, beân phaûi 
vaø phía döôùi. Laëp laïi thuû tuïc naøy, hieån  thò maûng trong moãi böôùc laëp 
vaø keát thuùc laëp khi giaù trò nhieät ñoä môùi taïi moãi ñieåm sai khaùc giaù trò 
cuõ moät löôïng beù hôn moät löôïng voâ cuøng beù cho tröôùc. 
 
8. Vieát chöông trình giaûi heä phöông trình tuyeán tính baèng phöông 
phaùp khöû Gauss. 
 
9.Vieát chöông trình ñeå khôùp bình phöông toái thieåu tuyeán tính. Döõ 
lieäu nhaäp seõ ñöôïc truyeàn cho chöông trình con  theo hai maûng X vaø 
Y. 
 
10. Troø chôi Life, phaùt minh bôûi nhaø toaùn hoïc John H.Conway, moâ 
phoûng cuoäc soáng cuûa moât quaàn theå. Haõy xeùt moät maûng hình chöõ nhaät 
goàm caùc oâ con, moãi oâ coù theå chöùa moät caù theå. Neáu maûng ñöôïc xem 
laø voâ haïn caû hai chieàu, thì moãi oâ coù 8 oâ laùng gieàng, Trong moãi theá 
heä, söï sinh vaø söï cheát dieãn ra theo quy luaät sau ñaây: 
a.  Moät caù theå sinh ra trong oâ troáng coù ñuùng 3 caù theå laùng gieàng. 
b.  Moät caù theå cheát vì coâ ñôn neáu noù coù ít hôn hai caù theå laùng gieàng. 
c.  Moät caù theå cheát vì quaù ñoâng neáu coù nhieàu hôn ba caù theå laùng 

gieàng. 

d.  Taát caû caùc caù theå khaùc soáng soùt. 
Vieát chöông trình troø chôi Life vaø nghieân cöùu caùc maãu caáu hình ban 
ñaàu khaùc nhau. 
 
10. Vieát chöông trình thöïc hieän vieäc tìm vaø thay theá nhieàu laàn trong 
chuoãi. 
 
11. Vieát chöông trình ñoïc soá thaønh chöõ. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 96 -

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 97 -

 

CHÖÔNG VIII KIEÅU RECORD 

 

Record laø moät kieåu döõ lieäu thöôøng duøng ñeå quaûn trò döõ lieäu. Ngaøy nay, 
record thöôøng ñöôïc quaûn lyù baèng caùc heä cô sôû döõ lieäu chuyeân bieät. 
Chöông naøy chæ nhaèm neâu sô löôïc  khaû naêng laøm vieäc vôùi record cuûa 
Pascal. 

VIII-1 RECORD COÙ CAÁU TRUÙC COÁ ÑÒNH: 
Kieåu record (baûn ghi hay maåu tin) laø moät kieåu döõ lieäu nhieàu thaønh 
phaàn, caùc thaønh phaàn coù theå coù kieåu döõ lieäu khaùc nhau. Moãi thaønh phaàn 
ñöôïc goïi laø moät tröôøng (field). Cuù phaùp ñònh nghóa kieåu record coù daïng 
type  T = record  
  tr1 

T1; 

  tr2 

T2; 

 

 

… 

  trn 

:Tn; 

 

    end

trong ñoù T1, T2,.. ,Tn laø kieåu döõ lieäu cuûa caùc tröôøng tr1, tr2,.. trn. Ví duï: 
type  Sophuc = record 
   PT:real; 
   PA:real; 
 

 

      end;  

type Date = record 
   ngay 

1..31; 

   thang 

:1..12; 

nam : integer; 

 

 

end

type Diachi = record 
   Sonha 

string[6]; 

   Duong 

string[30]; 

   Thanhpho: 

string[30]; 

 

 

  end;  

type   sinhvien= record  

  maso 

string[10]; 

   ho: 

string[20]; 

ten: string[10]; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 98 -

            

ngaysinh :Date; 

   Cho_o 

:Diachi; 

 

end

Ví duï veå kieåu sinhvien cho thaáy caùc kieåu record coù theå loàng nhau. 
Khi ñaõ ñònh nghóa kieåu record, ta coù theå  khai baùo caùc bieán thuoäc kieåu 
naøy 
Ví duï: 
var  ngay1, ngay2:Date; 
 dc1,dc2: 

Diachi; 

 

svx,svy : sinhvien 
SVVL : array[1..200] of sinhvien; 

 
Thao taùc vôùi record 
 
Ñeå truy caäp vaøo moät tröôøng ta duøng cuù phaùp: 
teân_bieánrecord.tröôøng 
 Caùc thao taùc treân tröôøng naøy seõ phuï thuoäc kieåu döõ lieäu cuûa tröôøng. 
Ví duï: 
Ngay1.ngay :=20; 
Ngay1. thang := 10; 
Ngay1.nam := 1984; 
svx.ten := ‘Tam’; 
svx.ngaysinh := Ngay1; 
 
Chuù yù laø caâu leänh cuoái cuøng  töông ñöông vôùi ba leänh sau: 
svx.ngaysinh.ngay := 20; 
svx.ngaysinh.thang := 10; 
svx.ngaysinh.nam := 1984; 
 
Ñeå yù caùch duøng cuù phaùp daáu chaám lieân tieáp khi coù record loàng nhau. 
Coù theå gaùn tröïc tieáp hai bieán record cuøng kieåu (töùc laø gaùn ñoàng thôøi taát 
caû caùc tröôøng). Ví duï 
 svx 

:= 

svy; 

Hai pheùp toaùn so saùnh coù theå duøng ñöôïc treân cuøng kieåu record laø = vaø 
<>. 
Ví du: 
  if svx = svy then writeln (‘Cuøng moät sinh vieân’); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 99 -

 
Khoâng theå nhaäp xuaát tröïc tieáp record baèng read vaø write, cuõng nhö 
khoâng thöïc hieän ñöôïc caùc pheùp tính thoâng thöôøng. 
 
Ñeå khoûi laëp laïi nhieàu laàn teân bieán kieåu record ta coù theå duøng caâu leänh 
with … do. Ví duï ñeå nhaäp  döõ lieäu cho SVVL, ta coù theå vieát 
for i:= 1 to 200 do 
 

with SVVL[i] do 

 

begin 

 

 

write(‘Nhaäp maõ soá: ); readln(maso); 

 

 

write(‘Nhaäp hoï ñeäm: ); readln(ho); 

 

 

write(‘Nhaäp teân: ); readln(ten); 

 

 

with ngaysinh do 

 

 

begin 

   write(‘Nhaäp 

ngaøy 

sinh(1..31)’); 

readln(ngay); 

   write(‘Nhaäp 

thaùng 

sinh(1..12)’); 

readln(thang); 

   write(‘Nhaäp 

naêm 

sinh’); 

readln(nam); 

 

 

end

 

 

with  Cho_o do 

 

 

begin 

 

 

 

write(‘Nhaäp soá nhaø :’); readln(Sonha); 

   write(‘Nhaäp 

teân 

ñöôøng:’); 

readln(Duong); 

   write(‘Nhaäp 

thaønh 

phoá:’); 

readln(Thanhpho); 

 

 

end

end

Ví duï treân cuõng cho thaáy caùc leänh with .. do coù theå loàng nhau. 
 

VIII-2 RECORD COÙ CAÁU TRUÙC THAY ÑOÅI: 
 
Pascal cho pheùp taïo caùc record coù moät phaàn thay ñoåi. Ví duï ñeå quaûn lyù 
ñieåm cuûa sinh vieân caùc khoa khaùc nhau, ta coù theå ñònh nghóa caùc kieåu 
sau: 
type Khoa = (Toan, Ly, Hoa); 
 

Diem = 0..10; 

 DiemSV 

record 

   Hoten 

string[30]; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 100 -

   maso:string[10]; 
 

 

 

case sv_khoa of  

    Toan: 

(Hinhhoc, 

Daiso, 

Giaitich); 

    Ly 

(Co, 

Nhiet,Dien); 

    Hoa:(HoaDaicuong, 

HoaVoco, 

HoaHuuCo); 

 

 

 

end

Record coù caáu truùc thay ñoåi coù caùc ñaëc ñieåm sau: 
• 

record coù caáu truùc thay ñoåi thöôøng coù hai phaàn: phaàn coá ñònh vaø 
phaàn thay ñoåi. Phaàn coá ñònh luoân luoân ñaët tröôùc. 

• 

Phaàn thay ñoåi bao goàm moät tröôøng goïi laø tröôøng ñaùnh daáu (tag field) 
ñöôïc ñaët trong caâu leänh case. ÖÙng vôùi moäi giaù trò cuûa tröôøng ñaùnh 
daáu, ta coù caùc bieán theå cuûa record vôùi danh saùch caùc tröôøng töông 
öùng ñaëït sau caùc trò cuûa leänh case vaø toaøn boä danh saùch naøy ñöôïc ñaët 
trong ngoaëc ñôn. Ngay caû khi danh saùch caùc tröônøg naøy roãng, vaãn 
phaûi coù caëp ngoaëc ñôn (). 

• 

Tröôøng ñaùnh daáu laø moät kieåu ñôn giaûn vaø vaãn laø moät tröôøng bình 
thöôøng cuûa record 

• 

caâu leäch case ôû ñaây khoâng keát thuùc baèng end 

• 

Taát caû caùc teân bieán trong phaàn thay ñoåi phaûi khaùc nhau. 

 
Record coù caáu truùc thay ñoåi ñöôïc ñaët ra ñeå thoaû maõn yeâu caàu tieát kieäm 
boä nhôù, nhöng cuõng laøm cho vieäc laäp trình khaù phöùc taïp. Vôùi söï phaùt 
trieån cuûa phaàn cöùng hieän nay yeâu caàu tieát kieäm boä nhôù haàu nhö khoâng 
coøn yù nghóa nöõa. Do ñoù hieän nay haàu heát caùc heä quaûn trò döõ lieäu ñeàu 
duøng record coù caáu truùc coá ñònh. 
 
Döõ lieäu kieåu record coù quan heä chaët cheõ vôùi kieåu file nhö coù theå thaáy ôû 
chöông sau. 
 

Töø khoaù Pascal môùi 

record 

 

end    

with   

do    case   of 

 

Khaùi nieäm môùi 

kieåu record   

 

tröôøng  

record coù caáu truùc thay ñoåi 

tröôøng ñaùnh daáu 
 

 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 101 -

BAØI TAÄP CHÖÔNG VIII 

 
1.Vieát chöông trình thöïc hieän caùc pheùp toaùn treân soá phöùc. 
  
2.Vieát chöông trình thöïc hieän caùc pheùp toaùn treân kieåu thôøi gian tính 
baèng giôø, phuùt , giaây. 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 102 -

CHÖÔNG IX    KIEÅU FILE 

 
Caùc phaàn meàm thöïc söï thöôøng phaûi ñoïc döõ lieäu töø ñóa hoaëïc löu keát quaû 
ra ñóa. Döõ lieäu kieåu file (taäp tin, teäp) cuûa Pascal cho pheùp laøm ñieàu naøy. 
Pascal hoã trôï 3 kieåu file: vaên baûnñònh kieåu vaø khoâng ñònh kieåu. Trong 
giaùo trình naøy  ta chæ khaûo saùt file vaên baûn vaø file ñònh kieåu. 
 

IX-1. FILE VAÊN BAÛN 
 
File vaên baûn bao goàm caùc doøng keát thuùc bôûi daáu xuoáng haøng vaø daáu 
ñaàu doøng(maõ ASCII 10 vaø 13). File vaên baûn laø loaïi file raát thoâng duïng. 
Trong Pascal file vaên baûn  ñöôïc khai baùo nhö sau: 
 

var txtFile : Text; 

Moät bieán kieåu Text phaûi ñöôïc gaùn vôùi moät file treân ñóa baèng leänh 
assign tröôùc khi laøm vieäc. Ví duï 
 assign(txtFile,’vb.txt’); 
Sau khi coù leänh assign, moïi theo taùc treân file seõ thöïc hieän treân bieán 
txtFile. Caùc thao taùc chính treân file laø môû, ñoïc töø file hay vieát vaøo file 
vaø ñoùng file. 
 
Coù ba  caùch môû teäp laø resetrewrite vaø append
Reset laø môû file ñeå ñoïc. Neáu file naøy chöa coù treân ñóa maùy seõ baùo loãi. 
Reset cuõng ñaëït con troû teäp  vaøo ñaàu taäp tin. 
Rewrite vaø append ñeàu môû file ñeå vieát. Neáu duøng rewrite vôùi moät teäp 
ñaõ coù teäp naøy seõ bò xoaù vaø con troø teäp chuyeån veà ñaàu file. Traùi laïi, leänh 
append cho pheùp vieát theâm vaøo file coù saün baèng caùch ñaët con troû teäp 
vaøo cuoái file. Neáu duøng append vôùi moät file chöa coù, maùy seõ baoù loãi. 
Leänh close ñoùng moät file ñang môû. Tuy nhieân, moái quan heä giöõa bíeán 
file vaø file treân ñóa thieát laäp bôûi assign vaãn toàn taïi. 
 
Ñeå ñoåi teân Pascal duøng thuû tuïc rename 
assign(f, ‘FILE.OLD’); 
rename(f,FILE.NEW); 
 
Ñeå xoaù duøng thuû tuïc erase 
assign(f, ‘FILE.OLD’); 
erase(f) 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 103 -

 
 
Ñoïc file vaên baûn 
 Chöông trình sau minh hoaï voøng laëp caên baûn ñeå ñoïc file vaên baûn. 
program  Text1; 
var txtf :text; 
 s: 

string[80]; 

begin 
 assign(txtf,’vb.txt’); 

reset(txtf); 
while not eof(txtf) do 
begin 

readln(txtf,s); 
writeln(s); 

 

end

 

close(txtf) 

end
 
Haøm eof seõ traû veà true khi heát file. Do ñoù voøng laëp treân cho pheùp ñoïc 
cho ñeán khi heát file. 
Chuù yù caùch duøng readln(txtf,s). Khi coù ñoái ñaàu tieân laø bieán kieåu file, 
leänh read seõ ñoïc töø file maø  khoâng ñoïc töø baøn phím. 
 
Ñoïc döõ lieäu soá töø file vaên baûn 
Vì caùc  trình soaïn thaûo vaên baûn raát thuaän tieän, do ñoù moät caùch toát ñeå 
nhaäp döõ lieäu soá laø nhaäp töø file vaên baûn, khi ñoù caùc soá lieäu naøy coù theå 
kieåm tra, söûa ñoåi deã daøng.  Ví duï ta coù baûng soá sau trong file 
TEST.DAT 
 
11 

 27.53 

 6.414900000E+02 

21 

 50.83 

 1.184390000E+03 

31 

 74.13 

 1.728290000E+03 

41 

 97.43 

 2.278000000E+03 

51 

        120.73  

2.810000000E+03 

61 

        144.03  

3.359900000E+03 

71 

        167.33  

4.494167900E+03 

81 

        190.63  

4.987000000E+03 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 104 -

91 

        213.93  

5.520000000E+03 

 
Coät ñaàu tieân laø soá nguyeân, hai coät sau laø soá thöïc. Ta coù theå vieát chöông 
trình ñoïc soá lieäu töø file TEST.DAT ñeå tính trung bình caùc coät naøy. 
 
program Tinhtrungbinh; {Döõ lieäu ñoïc töø file} 
var f:text; 
 

i, dem :integer; 

 

itb,r1,r2,r1tb,r2tb : real; 

begin 
 assign(f,’TEST.DAT’); 
 reset(f); 
 

dem := 0; 

 

itb := 0; 

 r1tb 

:=0; 

 

r2tb := 0; 

 

while not eof(f) do 

 

begin 

  readln(f,i,r1,r2); 
  writeln(i:10, 

r1:10:3,r2:10:3); 

 

 

dem := dem + 1; 

 

 

itb := itb + i; 

 

 

r1tb := r1tb + r1; 

 

 

r2tb := r2tb +r2; 

 

end

 close(f); 
 

itb := itb/dem; 

 

r1tb := r1tb / dem; 

 

r2tb := r2tb / dem; 

 writeln; 

writeln(‘itb = ‘,itb:10:3, ‘r1tb = ‘,itb:10:3, ‘r2tb =’,r2tb:10:3); 

end
 
Vieát vaøo file vaên baûn 
Chöông trình sau cheùp noäi dung vaên baûn töø file naøy sang file khaùc 
 
program  Chepfilevb; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 105 -

var f1,f2 :text; 
 s: 

string[80]; 

begin 
 assign(f1,’vb.txt’); 

reset(f1); 
assign(f2, ‘vbmoi.txt’); 
rewrite(f2); 
while not eof(f1) do 
begin 

readln(f1,s); 
writeln(f2,s); 

 

end

 close(f1); 

close(f2); 

end
Chuù yù caâu leänh writeln(f2,s). Khi ñoái ñaàu tieân cuûa write laø bieán file, thì 
leänh naøy seõ vieát ra file thay vì vieát ra maøn hình. 
 

IX-2 FILE ÑÒNH KIEÅU: 
 
File ñònh kieåu laø file coù döõ lieäu thuoäc moät kieåu xaùc ñònh, nhö integer, 
real, hay record. File ñònh kieåu cho pheùp truy xuaát nhanh choùng hôn 
file vaên baûn. 
Bôûi vì vôùi file ñònh kieåu  khoâng coù khaùi nieäm doøng, neân khoâng ñöôïc 
duøng readln hoaëc writeln. Ñeå ñoïc hay vieát ta chæ duøng read vaø write.  
Chöông trình sau taïo ra moät file soá thöïc roài sau ñoù ñoïc laïi döõ lieäu töø file 
naøy. 
program RealFile; 
var r: real; 
       f: file of real; 
begin 
 assign(f,’REAL.DAT’); 
 rewrite(f); 
 

r := 100.234; 

 write(f,r); 
 

r := 132.234; 

 write(f,r); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 106 -

 

r := 9890.24; 

 write(f,r); 
 close(f); 
 reset(f); 
 

while not eof(f) do 

 

begin 

  read(f,r); 
  writeln(r:10:3); 
 

end
close(f); 

end
 
Chöông trình sau minh hoaï caùch duøng file ñònh kieåu record. 
program RecordFile; 
type Khach_hang = record 

  Ten 

string[30]; 

   Diachi 

string[40]; 

   Dienthoai: 

string[15]; 

 

 

 

end

var kh : Khach_hang; 
     fkh 

 : file of Khach_hang; 

 
procedure Taofile; 
var i: integer; 
begin 
 assign(fkh, 

‘KHACHHANG.DAT’); 

rewrite(fkh); 
with kh do 
begin 
 

Ten := ‘ Nguyen Van An’; 

 

Diachi := ‘ 5 Phan Dinh Phung ‘; 

 Dienthoai 

:= 

‘063-826786’; 

end
write(fkh,kh); 
with kh do 
begin 
 

Ten := ‘ Nguyen Van Phuc’; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 107 -

 

Diachi := ‘ 53 Nguyen Van Troi‘; 

 Dienthoai 

:= 

‘063-837456’; 

end
write(fkh,kh); 
with kh do 
begin 
 

Ten := ‘ Tran Van Binh’; 

 

Diachi := ‘ 25 Tran Phu  ‘; 

 Dienthoai 

:= 

‘063-836286’; 

end
write(fkh,kh); 
close(fkh); 

end
 
begin 
 Taofile; 
 Assign(fkh, 

‘KHACHHANG.DAT’); 

 reset(fkh); 
 

while not eof(fkh) do 

 

begin 

  read(fkh,kh); 
 

 

with kh do 

 

 

begin 

   writeln(Ten); 
   writeln(Diachi); 
   writeln(Dienthoai); 
 

 

end

 

end

 close(fkh); 
end
 

 

IX-3 TRUY CAÄP NGAÃU NHIEÂN TREÂN FILE ÑÒNH KIEÅU 
 
File vaên baûn, do baûn chaát cuûa noù, laø file truy caäp tuaàn töï. File ñònh kieåu 
cuõng ñöôïc truy caäp tuaàn töï, nhö ta thaáy ôû treân. Ngoaøi ra, file ñònh kieåu 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 108 -

coøn cho pheùp truy caäp ngaãu nhieân. Ñieàu naøy ñöôïc thöïc hieän nhôø caùc 
haøm vaø 
thuû tuïc sau: 
Thuû tuïc Seek(var f:file;p:integer) cho pheùp di chuyeån con troû teäp ñeán 
record thöù p. Chuù yù laø record ñaàu tieân ñöôïc ñaùnh soá laø 0. 
Haøm FilePos(f:file) :integer; traû veà soá thöù töï cuûa record trong file. 
Haøm FileSize(F:File);integer; traû veà toång soá record trong file. 
 
Chöông trình sau minh hoaï moät cô sôû döõ lieäu ñôn giaûn 
 
program DatabaseFile; 
type MaxStr = string[30]; 
 Khach_hang 

record 

    Ten 

MaxStr; 

    Tuoi: 

integer; 

    ThuNhap 

:real; 

 

 

 

     end

var kh : Khach_hang 

fkh : File of Khach_hang; 
 
procedure AddRec(Tennh: MaxStr; Tuoinh: integer; Thunhapnh: 
real); 
begin 
with
 kh do 
 

begin 

  Ten 

:= 

Tennh; 

  Tuoi 

:= 

Tuoinh; 

  ThuNhap 

:= 

ThuNhapnh; 

  write(fkh,kh); 
 

end

end
 
procedure WriteRec; 
begin 
writeln; 
with kh do 
 

begin 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 109 -

 

 

writeln(‘Teân : ‘, Ten); 

 

 

writeln(‘Tuoåi:   ‘, Tuoi); 

  writeln(‘Thu 

nhaäp:’, 

ThuNhap:10:2); 

 

end

end
 
begin 

assign(fkh,’KHACHHANG.DAT’); 
rewrite(fkh); 
 
AddRec(‘ An’, 30, 500000); 
AddRec(‘ Bình’, 60, 1500000); 
AddRec(‘ Phuù’, 45, 2500000); 
 
reset(fkh) 
writeln(‘ Toång soá record trong file laø ‘, FileSize(fkh)); 
writeln; 
 
(*In ra noäi dung cuûa record thöù ba *) 

(* Bôûi vì soá thöù töï cuûa record ñaàu laø 0, record thöù ba coù  
thöù töï laø 2 *) 

seek(fkh,2); 
writeln( Ñaây laø record thöù ‘, FilePos(fkh)+1); 
read(fkh,kh); 
WriteRec; 
 
(*thay ñoåi noäi dung cuûa record thöù nhaát *) 
seek(fkh,0); 
AddRec( ‘Van’, 20, 879060)õ; 
seek(fkh,0) 
writeln( Ñaây laø record thöù ‘, FilePos(fkh)+1); 
WriteRec; 
 
writeln (‘Nhaán Enter ..); 
readln; 
close(fkh); 

end
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 110 -

 

IX-4 TROÄN FILE 
 
Troän file laø quaù trình phoái hôïp 2 file ñaõ coù thöù töï thaønh moät file coù thöù 
töï. Coù theå noái 2 file laïi roài sau ñoù xeáp thöù töï, nhöng quaù trình ñoù seõ laâu 
hôn nhieàu so vôùi troän tröïc tieáp. 
 
Tieán trình troän laø nhö sau: ñoïc töø moãi file moät record ñaàu tieân, sau ñoù 
chöông trình baét ñaàu vaøo voøng laëp. Beân trong voøng laëp chöông trình so 
saùnh 2 record vaø vieáât record coù trò nhoû hôn vaøo file môùi. Moät record 
khaùc  ñöôïc ñoïc tieáp töø file. Quaù trình ñöôïc tieáp tuïc cho ñeán khi caû 2 file 
ñeàu heát döõ lieäu. 
 
Ñeå ñôn giaûn, chöông trình sau ñaây ñöôïc vieát ñeå troän 2 file vaên baûn, 
nhöng vieäc aùp duïng cho file ñònh kieåu cuõng hoaøn toaøn töông töï. Giaû söû 
ta coù 
 File1 

  File2 


Chöông trình sau seõ troän 2 file naøy thaønh file môí theo thöù töï. Chuù yù laø 
trong haøm DocDulieu, bieán kieåu file phaûi khai baùo laø tham bieán. 
 
program TronFile; 
type str80 = String[80]; 
var File1, File2, File3 : str80; 
procedure Tron(Fname1,Fname2,Fname3 : str80); 
var ok1,ok2 : boolean; 

f1,f2,f3 :text; 
i1,i2 : integer; 

 

function DocDulieu(var f:text;var i :integer) :boolean; 

 

begin 

 

 

if not eof(f) then 

 

 

begin 

   readln(f,i); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 111 -

   DocDulieu 

:= 

true; 

 

 

end 

 

 

else 

  DocDulieu 

:= 

false; 

end; {DocDulieu} 
 

begin {Tron} 
 assign(f1,Fname1); 
 reset(f1); 
 assign(f2,Fname2); 
 reset(f2); 
 assign(f3,Fname3); 
 rewrite(f3); 
 
 

ok1 := DocDulieu(f1,i1); 

 

ok2 := DocDulieu(f2,i2); 

 

 
while ok1 or ok2 do 
begin 
 

if ok1 and ok2 then { du lieu con o ca 2 file} 

 

begin 

 

 

if i1<i2 then 

 

 

begin 

   writeln(f3,i1); 
   ok1 

:= 

DocDulieu(f1,i1); 

 

 

end 

 

 

else 

 

 

begin 

   writeln(f3,i2); 
   ok2 

:= 

DocDulieu(f2,i2); 

 

 

end 

 

end 

 

else if ok1 then { du lieu chi con o file1} 

 

 

begin 

   writeln(f3,i1); 
   ok1 

:= 

DocDulieu(f1,i1); 

 

 

end 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 112 -

 

 

else if ok2 then { du lieu chi con o file2} 

 

 

 

begin 

    writeln(f3,i2); 
    ok2 

:= 

DocDulieu(f2,i2); 

 

 

 

end 

end; {while} 
close(f1); 
close(f2); 
close(f3); 

end; {Tron} 
(*****************************) 
begin{chöông trình chính} 

write(‘Nhaäp vaøo teân file1’); 
readln(File1); 
write(‘Nhaäp vaøo teân file2’); 
readln(File2); 
write(‘Nhaäp vaøo teân file3’); 
readln(File3); 
Tron(File1,File2,File3); 

end
 
 

IX-5 CHOÁNG LOÃI VAØ SÖÛA LOÃI: 
 
Boán loãi cô baûn khi laøm vieäc vôùi kieåu file laø 
1. Thöïc hieän thao taùc treân file khi chöa coù assign. 
2.  Ñoïc töø file chöa reset. 
3.  Vieát vaøo file chöa rewrite. 
4.  Ñoïc döõ lieäu khi ñaõ heát file. 
 
Ngoaøi ra caàn chuù yù laø khi bieán file trong danh saùch tham soá phaûi luoân 
luoân khai baùo laø tham bieán. 
 

Töø khoaù Pascal môùi 

file   of 

assign rewrite reset 

 text 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 113 -

Khaùi nieäm môùi 

file vaên baûn  

file ñònh kieåu 

ñoïc töø file  con troû teäp 

vieát vaøo file  

truy caäp tuaàn tö ï  truy caäp ngaãu nhieân 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 114 -

BAØI TAÄP CHÖÔNG IX 

 

1. Moät phaàn töû trong moät ma traän ñöôïc goïi laø cöïc ñaïi ñiaï phöông  
neáu noù lôùn hôn 8 phaàn töû laân caän. Ví duï trong ma traän sau phaàn töû  
(2,2) laø cöïc ñaïi ñòa phöông. 

5

3

2

3

14

7

2

7

1

Vieát chöông trình ñoïc moät ma traän töø moät taäp tin treân 

ñóa vaø tìm moïi cöïc ñaïi ñòa phöông trong ma traän ñoù. Doøng ñaàu cuûa 
taäp tin laø soá haøng vaø soá coät, caùc doøng tieáp theo laø giaù trò cuûa ma traän. 
 
2.Vieát chöông trình thöïc hieän vieäc tìm vaø thay theá trong moät taäp tin 
vaên baûn. 
 
3.  Vieát chöông trình thöïc hieän pheùp nhaân vaø coäng hai ma traän vôùi 

döõ lieäu ñöôïc ñoïc töø moät taäp tin vaø keát quaû ñöôïc vieát vaøo moät taäp 
tin khaùc. 

 

4. Vieát chöông trình ñoïc moät danh saùch sinh vieân töø moät file vaên baûn 

roài löu tröõõ vaøo moät file ñònh kieåu record. (Xem laïi caùch söû duïng 
record ôû chöông truôùc.) 

 

5. Vieát chöông trình troän danh saùch sinh vieân cuûa 2 lôùp.  

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 115 -

CHÖÔNG X 

 KIEÅU TAÄP HÔÏP (SET) 

 

X-1 KIEÅU TAÄP HÔÏP: 
 
Kieåu taäp hôïp duøng ñeå taïo  caùc bieán coù theå bieåu dieãn nhieàu hôn moät giaù 
trò cuûa moät kieåu thöù töï ñaõ cho. Cuù phaùp ñeå ñònh nghóa kieåu taäp hôïp laø 
type   teân = set of  kieåu_cô_baûn; 

Ví duï 
type
 CharcterSet = set of char; 
 

Vitamins = (A,B1,B2,B3,B6,B12,C,D,E); 

 Sinhto 

set of Vitamins; 

 
Soá phaàn töû  lôùn nhaát cuûa moät taäp hôïp trong Turbo Pascal laø 255. 
Moät khi ñaõ ñònh nghóa kieåu taäp hôïp, ta coù theå khai baùo caùc bieán 
Ví duï: 
var InputCharacters, OutputCharacters, ExtraCharacters : 
CharacterSet; 

SinhtoRau, SinhtoTraicay,SinhtoKhoang, SinhtoTH, SinhtoTuoi: 
Sinhto; 

 
Trong bieåu thöùc taäp hôïp,  caùc phaàn töû  cuûa moät taäp hôïp phaûi ñaët trong 
ngoaëc vuoâng. Traùi laïi teân bieán taäp hôïp khoâng caàn ñaët trong ngoaëc vuoâng 
Ví duï: 
OutputCharacters := [‘a’..’z’, ‘A’..’Z’, ‘0’..9’]; 
SinhtoTraicay := [A..B3, B12,C,E]; 
InputCharacter := OutputCharacters; 
SinhtoKhoang := []; 
Leänh gaùn cuoái cuøng taïo moät taäp hôïp roãng
 
Caùc pheùp toaùn treân taäp hôïp 
 
Pheùp hôïp kyù hieäu baèng daáu +. Hôïp cuûa hai taäp hôïp laø moät taäp hôïp chöùa 
taát caû caùc phaàn töû ôûø caû 2 taäp hôïp. 
Ví duï: SinhtoTh := SinhtoRau+SinhToTraicay 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 116 -

Pheùp hieäu  kyù hieäu baèng daáu -. Hieäu cuûa hai taäp hôïp laø moät taäp hôïp 
chöùa caùc phaàn töû coù maët trong taäp thöù nhaát maø khoâng coù  maët trong taäp 
thöù hai. 
Ví duï: ExtraCharacter := OutputCharacters –InputCharacters 
Pheùp giao  kyù hieäu baèng daáu *. Giao cuûa hai taäp hôïp laø moät taäp hôïp 
goàm caùc phaàn töû coù maët ôû caû 2 taäp hôïp. 
Ví du: SinhtoTuoi := SinhtoRau*SinhtoTraicay; 
 
Caùc pheùp toaùn boolean 

<> 
>=    ( A chöùa B) 
<=  (A chöùa trong B) 
in   (a thuoäc veà A) 
 
Chuù yù laø khoâng coù pheùp toaùn  >  vaø  < 
 
 

X-2 LAÄP TRÌNH VÔÙI KIEÅU TAÄP HÔÏP: 
 
Kieåu taäp hôïp cho pheùp trong moät soá tröôøng hôïp, giaûi quyeát nhöõng yeâu 
caàu thöïc teá raát thuaän tieän vaø ñôn giaûn. 
Ví duï1: Ñoïc vaøo moät chuoãi kyù töï  vaø in ra nhöõng nguyeân aâm vaø phuï aâm 
khoâng coù trong chuoãi ñoù. 
 
program Nguyen_Phuam; 
type kytu = ‘A’..’Z’; 
var i: integer; 
chuoi : string; 
ch : char; 
n_am, P-am, n1,n2 : set of kytu; 
 
begin 

n_am := []; 
p_am := []; 
n2 := []; 
n1 := [‘A’,’E’,’I’,’O’,’U’]; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 117 -

for ch := ‘A to ‘Z’ do  n2 := n2 +[ch]; 

 

n2 := n2 – n1; 

 

write(‘Ñoïc vaøo moät chuoãi: ‘); 

 readln(chuoi); 

i:=1; 
while i<= length(chuoi) do 
 

begin 

 

 

if upcase(chuoi[i]) in n1 then 

   n_am 

:= 

n_am 

[UpCase(chuoi[i])]; 

 

 

else  

p_am := p_am +[UpCase(chuoi[i])]; 

  i 

:= 

i+1 

 

end

n_am := n1 - n_am; 
p_am := n2 - p_am; 
 
write(‘ Nhöõng nguyeân aâm khoâng söû duïng:’); 
for ch:= ‘A’ to ‘U’ do 
if ch in n_am then write(ch); 
writeln; 
write(‘ Nhöõng phuï aâm khoâng söû duïng:’); 
for ch:= ‘B’ to ‘Z’ do 
if ch in p_am then write(ch); 
writeln; 
 

 

 

end
 
 
Ví duï 2: Treân 3 doøng soá lieäu nhaäp coù chöùa moãi doøng 20 soá nguyeân coù 
giaù trò giôùi haïn töø 1 ñeán 100. Haõy in ra nhöõng trò naøo coù caû treân 3 doøng; 
nhöõng trò naøo coù treân doøng 1 maø khoâng coù treân  doøng coøn laïi (in theo 
thöù töï taêng vaø khoâng in truøng trò). 
 
program Inso; 
type kn100 = 1..100; 
var  i, n : integer; 
 n1,n2,n3,n4 

set of kn100; 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 118 -

begin 

n := []; 
n2 := [] 
n3 := []; 
 writeln(‘Ñoïc vaøo soá lieäu cuûa doøng 1: ‘); 
for i := 1 to 20 do  
begin 

 readln(n); 

   

n1 := n1 + [n] 

end
writeln([Ñoïc vaøo soá lieäu cuûa doøng 2: ‘); 
for i := 1 to 20 do  
begin 
   readln(n); 
   

n2 := n2 + [n] 

end
writeln([Ñoïc vaøo soá lieäu cuûa doøng 3: ‘); 
for i := 1 to 20 do  
begin 
   readln(n); 
   

n3 := n3 + [n] 

end
n4 := n1*n2*n3; 
writeln (‘ Nhöõng trò coù treân caû ba doøng: ‘); 
n:= 0; 
for i:=1 to 100 do 
if
 i in n4 then 
  begin 
   write (i:4); 
   n:= n+1 
  end
if n= 0 then  
writeln (‘ Khoâng coù trò naøo’) 
else 

 

writeln(‘ Coù ‘, n, ‘ trò ‘); 

n4 := n1 –n2 –n3; 
writeln (‘ Nhöõng trò chæ coù treân doøng 1: ‘); 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 119 -

for i:=1 to 100 do 
if i in n4 then write (i:4); 
 

end. 
 

Töø khoaùù Pascal môùi 

 
set of  

in    

+  

 -  

 * 

 

Khaùi nieäm môù

 
kieåu cô baûn  

taäp hôïp  

taäp hôïp roãng 

hôïp   hieäu    

giao 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 120 -

BAØI TAÄP CHÖÔNG X 

 

1.  Vieát moät haøm tính soá caùc phaàn töû cuûa moät taäp hôïp. 
2.  Vieát moät chöông trình tìm taát caû nhöõng chöõ khoâng coù treân moät 

doøng vaên baûn cho tröôùc vaø hieån thò  chuùng theo thöù töï abc. 

3.  Thuaät toaùn sau goïi laø saøng Eratosthenes(276-194 tröôùc Coâng 

nguyeân). 

(*Khi thuaät toaùn naøy keát thuùc, caùc phaàn töû coøn laïi trong taäp hôïp 
Sang laø caùc soá nguyeân toá trong ñoaïn töø 2 ñeán n *) 
1.  Khôûi taïo taäp hôïp Sang ñeå chöùa caùc soá nguyeân töø 2 ñeán n. 
2.  Choïn phaàn töû Songuyento nhoû nhaát trong Sang. 
3.  While Songuyento

2

<=n, thöïc hieän caùc böôùc sau: 

a.  Loaïi tröø taát caû caùc phaàn töû coù daïng Songuyento*k,k>1 
b.  Thay Songuyento baêøng phaàn töû nhoû nhaát trong Sang lôùn 

hôn Songuyento 

Vieát moät chöông trình duøng thuaät toaùn saøng Eratosthenes ñeå tìm soá 
nguyeân toá. 

4.  Phoái hôïp caùc voøng For vaø taäp hôïp ñeå tìm caùc soá bieåu dieãn baèng 

chöõ trong baøi toaùn sau: 

SEND 

        +MORE 

 

 

 

        MONEY 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 121 -

 

PHUÏ LUÏC A 

 

CAÙC THOÂNG BAÙO LOÃI CUÛA TURBO PASCAL KHI BIEÂN DÒCH 
 
Caùc thoâng baùo naøy ñöôïc ñeå nguyeân daïng tieáng Anh ñeå giuùp cho baïn 
ñoïc quen vôùi thoâng baùo treân maùy tính. Ñeå thuaän tieän cho baïn ñoïc, 
chuùng toâi dòch ra tieáng Vieät ñoàng thôøi giaûi thích theâm moät soá tröôøng hôïp 
xaûy ra loãi. 
 
LOÃI #  

THOÂNG BAÙO LOÃI 

Out of memory 

Heát boä nhô.ù 

Identifier expected 

Thieáu teân (bieán, thuû tuïc hay haøm). 

Unknown identifier 

Teân chöa khai baùo hoaëc sai chính taû. 

Duplicate identifier 

Teân bò truøng. 

Syntax error 

Loãi cuù phaùp 

Error in real constant 

Haèng soá thöïc coù loãi. 

Error in integer constant 

Haèng soá nguyeân coù loãi. 

String constant exceeds line 

Loãi thieáu hoaëc thöøa daáu nhaùy ñôn(’) khi duøng haèng chuoãi. 
10 Unexpected end of file 
Thieáu daáu chaám (. ) ôû chöõ end cuoái chöông trình. 
11 Line too long 
Doøng quaù daøi. 
12 Type identifier expected 
Thieáu teân kieåu (trong khai baùo bieán). 
13 Too many open files 
Môû quaù nhieàu teäp. 
14 Invalid file name 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 122 -

Teân teäp khoâng hôïp leä. 
15 File not found 
Teäp khoâng tìm thaáy. 
16 Disk full 
Ñóa ñaày. 
17 Invalid compiler directive 
Chæ thò trình bieân dòch khoâng hôïp leä. 
18 Too many files 
Quaù nhieàu taäp tin. 
19 Undefined type in pointer definition 
Ñònh nghóa con troû chöa xaùc ñònh kieåu. 
20 Variable identifier expected 
Thieáu teân bieán. 
21 Error in type 
Loãi khi ñònh nghóa kieåu. 
22 Structure too large 
Caáu truùc quaù lôùn. 
23 Set base type out of range 
Kieåu cô baûn cuûa taäp hôïp quaù lôùn (toái ña 256 phaàn töû) 
24 File components may not be files or objects 
Caùc thaønh phaàn cuûa teäp khoâng theå laø teäp hay ñoái töôïng. 
25 Invalid string length 
Chieàu daøi chuoãi baát hôïp leä(toái ña 255). 
26 Type mismatch 
Kieåu döõ lieäu khoâng phuø hôïp. 
27 Invalid subrange base type 
Kieåu mieàn con baát hôïp leä. 
28 Lower bound > than upper bound 
Caän döôùi > caän treân. 
29 Ordinal type expected 
Caàn kieåu thöù töï (ví duï trong CASE vaø FOR) 
30 Integer constant expected 
Thieáu haèng soá nguyeân. 
31 Constant expected 
Thieáu  moät haèng. 
32 Integer or real constant expected 
Thieáu  haèng soá nguyeân hay thöïc. 
33 Pointer type identifier expected 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 123 -

Thieáu teân kieåu con troû. 
34 Invalid function result type 
Kieåu traû veà cuûa haøm baát hôïp leä. 
35 Label identifier expected 
Thieáu teân nhaõn. 
36 BEGIN expected 
Thieáu BEGIN. 
37 END expected 
Thieáu END 
38 Integer expression expected 
Thieáu bieåu thöùc nguyeân. 
39 Ordinal expression expected 
Thieáu bieåu thöùc kieåu thöù töï. 
40 Boolean expression expected 
Thieáu bieåu thöùc kieåu Booleanï. 
41 Operand types do not match operator 
Toaùn haïng khoâng phuø hôïp vôùi toaùn töû. 
42 Error in expression 
Bieåu thöùc coù loãi. 
43 Illegal assignment 
Leänh gaùn baát hôïp leä. 
44 Field identifier expected 
Thieáu teân tröôøng. 
45 Object file too large 
Teäp ñoái töôïng quaù lôùn. 
46 Undefined external 
Thuû tuïc hay haøm external chöa ñònh nghóa. 
47 Invalid object file record 
Baûn ghi teäp doái töôïng khoâng hôïp leä. 
48 Code segment too large 
Phaàn maõ quaù lôùn (toái ña 64K). 
49 Data segment too large 
Phaàn döõ lieäu quaù lôùn(toái ña 64K). 
50 DO expected 
Thieáu DO 
51 Invalid PUBLIC definition 
Ñònh nghóa PUBLIC khoâng hôïp leä 
52 Invalid EXTRN definition 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 124 -

Ñònh nghóa EXTRN khoâng hôïp leä. 
53 Too many EXTRN definitions 
Quaù nhieàu ñònh nghóa EXTRN 
54 OF expected 
Thieáu OF 
55 INTERFACE expected 
Thieáu INTERFACE 
56 Invalid relocatable reference 
Tham chieáu baûng ñònh vò khoâng hôïp leä. 
57 THEN expected 
Thieáu THEN 
58 TO or DOWNTO expected 
Thieáu TO hoaëc DOWNTO 
59 Undefined forward 
Chöa ñònh nghóa forward  
61 Invalid typecast 
Eùp kieåu khoâng hôïp leä. 
62 Division by zero 
Chia cho soá khoâng 
63 Invalid file type 
Kieåu teäp khoâng hôïp leä. 
64 Cannot Read or Write variables of this type 
Caùc bieán kieåu naøy khoâng theå ñoïc hoaëc vieát ñöôïc. 
65 Pointer variable expected 
Thieáu bieán con tro.û 
66 String variable expected 
Thieáu bieán kieåu chuoãi. 
67 String expression expected 
Thieáu bieåu thöùc kieåu chuoãi. 
68 Circular unit reference 
Tham chieáu loøng voøng trong unit. 
69 Unit name mismatch 
Teân unit khoâng phuø hôïp. 
70 Unit version mismatch 
Phieân baûn unit khoâng phuø hôïp. 
71 Internal stack overflow 
Traøn boä nhôù stack trong (do quaù nhieàu möùc loàng nhau) 
72 Unit file format error 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 125 -

Loãi khuoân daïng teäp unit. 
73 IMPLEMENTATION expected 
Thieáu IMPLEMENTATION 
74 Constant and case types don't match 
Haêøng choïn trong caáu truùc CASE khoâng khôùp vôùi bieåu thöùc choïn. 
75 Record variable expected 
Thieáu bieán kieåu record. 
76 Constant out of range 
Haèng quaù lôùn. 
77 File variable expected 
Thieáu bieán kieåu teäp. 
78 Pointer expression expected 
Thieáu bieåu thöùc con troû 
79 Integer or real expression expected 
Thieáu bieåu thöùc nguyeân hoaëc thöïc. 
80 Label not within current block 
Nhaõn khoâng thuoäc khoái hieän haønh. 
81 Label already defined 
Nhaõn ñaõ ñöôïc ñònh nghóa. 
82 Undefined label in preceding statement part 
Nhaõn xuaát hieän trong caâu leänh nhöng chöa ñöôïc ñònh nghóa. 
83 Invalid @ argument 
Ñoái cuûa @ khoâng hôïp leä 
84 UNIT expected 
Thieáu UNIT 
85 ";" expected 
Thieáu “;” 
86 ":" expected 
Thieáu “:” 
87 "," expected 
Thieáu “,” 
88 "(" expected 
Thieáu “(“ 
89 ")" expected 
Thieáu “)” 
90 "=" expected 
Thieáu “=” 
91 ":=" expected 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 126 -

Thieáu “:=” 
92 "[" or "(." Expected 
Thieáu “[“ hay “(“ 
93 "]" or ".)" expected 
Thieáu “]” hay “)” 
94 "." expected 
Thieáu “.” 
95 ".." expected 
Thieáu “..” 
96 Too many variables 
Quaù nhieàu bieán (toång kích thöôùc vöôït quaù 64K). 
97 Invalid FOR control variable 
Bieán kieåm soaùt voøng FOR khoâng hôïp leä (thöôøng do khoâng khai baùo 
ñòa phöông) 
98 Integer variable expected 
Thieáu bieán nguyeân 
99 File and procedure types are not allowed here 
Kieåu teäp vaø thuû tuïc khoâng ñöôïc pheùp. 
100 

 String length mismatch 

Chieàu daøi chuoãi khoâng phuø hôïp. 
101 

 Invalid ordering of fields 

Traät töï caùc tröôøng khoâng hôïp leä 
102 

 String constant expected 

Thieáu haèng chuoãi. 
103 

 Integer or real variable expected 

Thieáu bieán nguyeân hoaëc thöïc. 
104 

 Ordinal variable expected 

Thieáu bieán kieåu thöù töï. 
105 

 INLINE error 

Loãi INLINE 
106 

 Character expression expected 

Thieáu bieåu thöùc kieåu thöù töï. 
107 

 Too many relocation items 

Quaù nhieàu muïc ñònh vò. 
108 

 Overflow in arithmetic operation 

Traøn khi tính soá. 
109 

 No enclosing FOR, WHILE, or REPEAT statement 

Duøng break hay continue ôû ngoaøi voøng laëp 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 127 -

110 

 Debug information table overflow 

Traøn baûng thoâng tin söûa loãi 
 
112  CASE constant out of range 
Haèng quaù lôùn trong caáu truùc CASE (thöôøng laø do soá nguyeân vöôït 
quaù 32767) 
113  Error in statement 
Loãi trong phaùt bieåu (ví duï nhö khi tröôùc ELSE coù ;) 
114  Cannot call an interrupt procedure 
Khoâng goïi ñöôïc thuû tuïc ngaét 
116 

 Must  be in 8087 mode to compile 

Phaûi dòch trong cheá ñoä 8087 
117 

 Target address not found 

Ñòa chæ ñích khoâng tìm thaáy 
118 

 Include files are not allowed here 

Teäp bao haøm khoâng tìm thaáy 
119 

 NIL expected 

Thieáu NIL 
121 

 Invalid qualifier 

 Tính chaát baát hôïp leä. Loãi naøy thöôøng xuaát hieän khi duøng chæ soá vôùi 
bieán khoâng phaûi kieåu maûng, duøng teân tröôøng vôùi bieán khoâng phaûi 
kieåu record. 
122 

 Invalid variable reference 

Tham chieáu bieán khoâng hôïp leä 
123 

 Too many symbols 

Quaù nhieàu kyù hieäu (vöôït quaù 64K) 
124 

 Statement part too large 

Phaàn leänh quaù lôùn (vöôït quaù 24K) 
126 

 Files must be var parameters 

Teäp baét buoäc phaûi laø tham bieán 
127 

 Too many conditional symbols 

Quaù nhieàu kyù hieäu ñieàu kieän 
128 

 Misplaced conditional directive 

Chæ thò ñieàu kieän ñaët sai choã 
129 

 ENDIF directive missing 

Thieáu chæ thò ENDIF 
130 

 Error in initial conditional defines 

Loãi khi khôûi taïo diieàu kieän 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 128 -

131 

 Header does not match previous definition 

Phaàn ñaàu (thuû tuïc) khoâng khôùp vôùi ñònh nghóa 
132 

 Critical disk error 

Loãi ñóa nghieâm troïng 
133 

 Cannot evaluate this expression 

Khoâng theå tính ñöôïc bieåu thöùc (thöôøng do goïi haøm khi khai baùo 
haèng) 
134 

 Expression incorrectly terminated 

Bieåu thöùc keát thuùc khoâng ñuùng 
135 

 Invalid format specifier 

Ñaëc taû khuoân daïng khoâng hôïp leä 
136 

 Invalid indirect reference 

Tham chieáu giaùn tieáp khoâng hôïp leä 
137 

 Structured variables are not allowed here 

Bieán kieåu caáu truùc khoâng ñöôïc pheùp taïi ñaây 
138 

 Cannot evaluate without System unit 

Khoângtheå löôïng giaù vì thieáu unit System 
139 

 Cannot access symbol table 

Khoâng theå truy caäp baûng kyù hieäu 
140 

 Invalid floating-point operation 

Pheùp toaùn daáu chaám ñoäng khoâng hôïp leä 
141 

 Cannot compile overlays to memory 

Khoâng theå bieân dòch taäp overlay(che phuû) vaøo boä nhôù 
142 

 Procedure or function variable expected 

Thieáu bieán haøm hay thuû tuïc 
143 

 Invalid procedure or function reference 

Tham chieáu haøm hay thuû tuïc khoâng hôïp leä 
144 

 Cannot overlay this unit 

Khoâng theå overlay (che phuû) unit naøy 
145 

 Too many nested scopes in .TXT 

Quaù nhieàu phaïm vi loàng nhau trong vaên baûn (toái ña 512) 
146 

 File access denied 

Truy caäp file bò töø choái 
147 

 Object type expected 

Thieáu kieåu ñoái töôïng 
148 

 Local object types are not allowed 

Kieåu ñoái töôïng logic khoâgn ñöôï pheùp 
149 

 VIRTUAL expected 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 129 -

Thieáu VIRTUAL 
150 

 Method identifier expected 

Thieáu teân phöông thöùc 
151 

 Virtual constructors are not allowed 

Haøm taïo aûo khoâg ñöôïc pheùp 
152 

 Constructor identifier expected 

Thieáu teân haøm taïo 
153 

 Destructor identifier expected 

Thieáu teân haøm huyû 
154 

 Fail only allowed within constructors 

Thuû tuïc Fail chæ ñöôïc pheùp duøng trong haøm huyû 
155 

 Invalid combination of opcode and operands 

Toå hôïp toaùn haïng vaø maõ leänh khoâng hôïp leä 
156 

 Memory reference expected 

Thieáu tham chieáu boä nhôù 
157 

 Cannot add or subtract relocatable symbols 

Khoâng theå tröø hoaëc coäng baûng taùi ñònh vò 
158 

 Invalid register combination 

Toå hôïp thanh ghi khoâng hôïp leä 
159 

 286/287 instructions are not enabled 

Caùc leänh 286/287 khoâng duøng ñöôïc 
160 

 Invalid symbol reference 

Tham chieáu kyù hieäu khoâng hôïp leä 
161 

 Code generation error 

Loãi khi sinh maõ 
162 

ASM expected 

Thieáu ASM 
163 

 Duplicate dynamic method index 

Chæ soá phöông thöùc ñoäng  bò truøng 
164 

 Duplicate resource identifier 

Teân taøi nguyeân bò truøng 
165 

 Duplicate or invalid export index 

Chæ soá export truøng hay khoâng hôïp leä 
166 

 Procedure or function identifier expected 

Thieáu teân haøm hay thuû tuïc 
167 

 Cannot export this symbol 

Khoâng theå export kyù hieäu naøy 
168 

 Duplicate export name 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 130 -

Teân export bò truøng 

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 131 -

PHUÏ LUÏC B 

 

CAÙC THOÂNG BAÙO LOÃI KHI CHAÏY CHÖÔNG TRÌNH 
 
Loãi #  Thoâng baùo loãi 

Invalid function number 

Soá hieäu haøm khoâng hôïp leä 

File not found 

Teäp khoâng tìm thaáy 

Path not found 

Ñöôøng daãn khoâng tìm thaáy 

Too many open files 

Môû quaù nhieàu teäp 

File access denied 

Truy caäp file bò töø choái 

Invalid file handle 

Theû file khoâng hôïp leä 
12  Invalid file access code 
Maõ truy caäp file khoâng hôïp leä 
15  Invalid drive number 
Soá oå ñóa khoâng hôïp leä 
16  Cannot remove current directory 
Khoâng theå gôõ boû thö muïc hieän haønh 
17  Cannot rename across drives 
18  Khoâng theå ñoåi teân oå ñóa 
100  Disk read error 
Loãi ñoïc ñóa 
101  Disk write error 
Loãi ghi ñóa 
102  File not assigned 
Taäp tin chöa ñöôïc assign 
103  File not open 
Taäp tin chöa môû 
104  File not open for input 
Taäp tin chöa môû ñeå nhaäp 
105  File not open for output 
Taäp tin chöa môû ñeå xuaát 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 132 -

 
106  Invalid numeric format 
Khuoân daïng soá khoâng hôïp leä (nhaäp lieäu sai) 
200  Division by zero 
Chia cho soá khoâng 
201  Range check error 
Loãi khi kieåm tra taàm(ví duï chæ soá cuûa maûng vöôït giôùi haïn) 
202  Stack overflow error 
Loãi traøn boä nhôù stack 
203  Heap overflow error 
Loãi traøn boä nhôù heap 
204  Invalid pointer operation 
Pheùp toaùn con troû khoâng hôïp leä 
205  Floating point overflow 
Pheùp toaùn daáu chaám ñoäng quaù lôùn 
206  Floating point underflow 
Pheùp toaùn daáu chaám ñoäng quaù nhoû 
207  Invalid floating point operation 
Pheùp toaùn daáu chaám ñoäng khoâng hôïp leä 
210  Object not initialized 
Ñoái töôïng chöa khôûi taïo 
211  Call to abstract method 
Goïi phöông thöùc tröøu töôïng 
212  Stream registration error 
Loãi ñaêng kyù doøng 
213  Collection index out of range 
Chæ soá taäp hôïp vöôït taàm 
214  Collection overflow error 
Loãi traøn taäp hôïp 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 133 -

  
 

  TAØI 

LIEÄU 

THAM 

KHAÛO 

 
1. Doug Cooper and Michael Clancy, Oh! Pascal!  University of 
California, Berkeley-1982. 
 
2.Ñoaøn Nguyeân Haûi – Nguyeãn Trung Tröïc – Nguyeãn Anh Duõng, Laäp 
trình caên baûn
 

Ñaïi hoïc Baùch khoa TpHCM-1993 

 
3. Niklaus Wirth , Caáu truùc döõ lieäu + Giaûi thuaät = Chöông trình, 
NXB Ñaïi hoïc vaø Giaùo duïc chuyeân nghieäp- 1991 
 
4. Robert Sedgewick , Algorithms  Princeton University –1988. 
 
5.. Stephen K. O’Brien,  Turbo Pascal 6: The Complete Reference 
 NXB 

McGraw-Hill-1993 

 
6. Quaùch Tuaán Ngoïc, Ngoân ngöõ laäp trình Pascal, Ñaïi hoïc Baùch khoa 
Haø noäi-1990 
 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 

background image

Kyõ thuaät laäp trình Pascal 

- 134 -

 

   Nguyeãn Danh Höng                                                           Khoa Vaät Lyù 


Document Outline