Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 1
LC V
NGÔN NG LP TRÌNH PASCAL
1.1. Nhng nét chung ca ngôn ng lp trình
Nh ta ã nói n trong chng 1, mun trao cho máy tính thc hin mt công vic
nào ó hay nói cách khác gii mt bài toán nào ó, thut toán gii bài toán phi c
din t thành mt chng trình vit bng mt ngôn ng lp trình.
Có rt nhiu loi ngôn ng lp trình bc cao (vn nng). Tuy nhiên chúng u có mt
nét chung nh sau:
Quy nh mt s các ký t dùng vit chng trình, Tp các ký t này c gi
là ng ch cái
ca ngôn ng.
Quy nh mt s tc bit vi các hàm ý c th gi là các khoá.
Quy nh cách vit tên
các i lng mà chng trình cp n.
Quy nh u trúc chung ca mt chng trình và các quy nh khi vit tng phn
a chng trình.
chc mt th vin các chng trình con chun
h tr ngi vit chng trình.
Khi dùng mt ngôn ng nào ó vit chng trình, chng trình ó c gi là
chng trình ngun (SourceProgram). có th thc hin c, chng trình ó cn
c dch sang ngôn ng máy. Công vic ó do các IDE m nhim. IDE là vit tt
a ba ch ting Anh Integrated Development Envirement (Môi trng phát trin
tích hp). V c bn máy tính không th "hiu" và thc hin các chng trình ngun
không vit bng ngôn ng máy (Xem phn i cng v Tin hc). IDE cho phép ta
ch chng trình vit bng ngôn ng lp trình sang ngôn ng máy và to thêm các
tin nghi cho vic vit và thc hin chng trình trên c s ngôn ng lp trình. Cn
chú ý rng cùng mt ngôn ng lp trình, có nhiu IDE khác nhau. Ví d ngôn ng lp
trình Pascal có hai IDE ang c dùng ph bin: Turbo Pascal và Free Pascal. Tuy
nhiên Free Pascal s là IDE c dùng lâu dài vì có th chy trong c môi trng
Windows và Linux.
Trong phn ln các trng trên th gii, khi dy ngôn ng lp trình u tiên, ngi ta
thng chn ngôn ng Pascal. Mt trong nhng lý do chính vì Pascal là mt ngôn
ng khá chun mc th hin các thut toán và các kiu d liu liên quan; thông
qua quá trình hc ngôn ng này, hc sinh có th hiu c nhng ý tng c bn ca
t ngôn ng lp trình bc cao. Trong chng này, chúng ta s gii thiu nhng kin
thc c bn v ngôn ng này vi mc tiêu vit các chng trình gii các bài
toán thông thng trên c s IDE Turbo. Trong cui chng này, s có mt ph lc
IDE Free-Pascal.
Ta cn luôn ý thc rng Pascal là mt phng tin giao tip gia ngi và máy
tính. Bn thân máy tính là mt thit b vt lý, "giao vic" cho máy thông qua mt
chng trình, chúng ta cn phi tuân thúng nhng quy nh rt nghiêm ngt ca
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 2
ngôn ng vì ch nh vy, chng trình mi có th dch c sang ngôn ng máy và
khi ó máy mi có th "hiu" và thc hin c.
1.2. B ch cái
vit các lnh, Pascal chn mt s ký t trong bng mã ASCII dùng làm b ch cái
a mình. B ch cái này gm:
- Các ch cái thng và hoa ca ting Anh:
A Z, a z
- Các ch s thp phân
0 9
- Du gch chân (thng dùng ni ch) _ (có mã ASCII thp phân bng 95)
- Ký t trng (mã ASCII thp phân bng 32) gõ bng phím dài Space
- Các ký t vi mã ASCII thp phân t 0 n 31 (các mã u khin)
- Các ký tc bit
+ - * / = < > [ ] . ,
( ) : ; ^ @ { } $ # '
- Các cp ký t vit lin nhau dùng nh mt ký t
Gán
<= >= <> := (* *) (. .)
i vi các ký t khác ca bng mã ASCII, Pascal không chính thc dùng làm các
ch cái ca mình. Tuy nhiên, nó có th x lý và trong các chú thích hoc các dòng
thông báo, ta có th dùng c các ký t này.
n chú ý rng, khác vi cách vit trong Toán hc, các cp du ngoc (, ), {,
}, [, ] dùng trong Pascal có ý ngha khác nhau:
(, ) dùng phân bit các s hng trong các biu thc.
{, } dùng ghi các chú thích trong chng trình. gii thích mt phn
chng trình nào ó, ta có th vit chú thích cho phn ó và phn chú thích
phi t gia { và }.
[, ] dùng cho các kiu d liu xâu, mng và tp hp (Xem các phn sau).
1.3. Khái nim tên
Pascal có mt s tc bit gi là khoá (Keyword) gm 52 t sau:
ABSOLUTE EXTERNAL MOD SHR
AND FILE NIL STRING
ARRAY FOR NOT THEN
BEGIN FORWARD OBJECT TO
CASE FUNCTION OF TYPE
CONST GOTO OR UNIT
CONSTRUCTOR IF PACKED UNTIL
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 3
DESTRUCTOR IMPLEMENTATION PROCEDURE USES
DIV IN PROGRAM VAR
DO INLINE RECORD VIRTUAL
DOWNTO INTERFACE REPEAT WHILE
ELSE INTERRUPT SET WITH
END LABEL SHL XOR
Khi s dng Pascal gii các bài toán (theo ngha nêu trong chng trc), trong
phát biu ca bài toán và trong quá trình gii bài toán, có các i lng hoc ã cho
hoc cn tính toán. Khi vit chng trình, ta cn khai báo tên các i lng này kèm
theo kiu d liu tng ng.
Tên t phi tuân theo các quy nh sau:
1. Ch gm các ch cái, ch s hoc du gch chân và không bt u bng ch
, khi ó ch cái hoa hay thng u c hiu nh nhau
2. Không c trùng vi các t khoá nêu trên. i vi ngi Vit Nam, u này
không gây nên khó khn vì mt s t khoá n gin thng c dùng nhiu
trong chng trìntr, các t khoá rc ri chc không ai dùng t tên.
3. dài có th tu ý nhng Pascal ch quan tâm n không quá 63 ký tu.
Nói chung, khi t tên các i lng cn tính toán trong chng trình, ta nên dùng
các tên tt gi nh ý ngha ca nó.
Trong các mc tip theo, ta s ln lt gii thiu v các kiu d liu mà Pascal cho
phép dùng th hin các i lng khác nhau thng gp trong các bài toán và cách
khai báo v chúng.
1.4. Cu trúc chung ca mt chng trình Pascal
t chng trình Pascal tng quát gm các phn sau:
1. Phn các khai báo,
2. Phn các chng trình con,
3. Phn chng trình chính.
Phn chng trình chính nht thit phi có, hai phn khác tu theo yêu cu c th ca
ngi vit chng trình, không nht thit phi có.
1.4.1. Phn khai báo
Phn khai báo gm các mc sau:
a) Tên chng trình (mc này có th không cn có nhng nu vit, phi vit
úng).
Cách vit
Program tên chng trình;
trong ó tên chng trình cn t theo úng các quy nh v tên.
b) Các hng dn biên dch (sc gii thiu dn khi cn)
c) Khai báo các n v (unit) chng trình cn dùng. File TURBO.TPL và các file
*.TPU bao gm mt s unit nh CRT, DOS, SYSTEM, GRAPH . . ó là th vin
các th tc và các hàm chun ca Pascal cho phép ngi vit trình c s dng
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 4
ngoài các th tc và các hàm chun ã có sn. Ngoài ra, ngi vit chng trình cng
có th to lp các unit ca riêng mình theo các quy nh ca Pascal.
Cách vit
USES danh sách các unit;
Trong danh sách này, hai unit liên tip cách nhau mt du phy.
d) Mc Label. Lit kê tên các mc ca chng trình. Cách t tên mc ging nh
cách t tên ngoi tru kin bt u bng ch cái. Nói chung chúng tôi không ng
vic vit chng trình có khai báo này vì nó che du tính cu trúc ca chng
trình.
Cách vit
Label danh sách các mc;
Trong danh sách này, hai mc liên tip cách nhau mt du phy.
e) Mc Const. Khai báo các hng (các i lng không i).
Cách vit
Const danh sách các tên hng
Trong danh sách này, hai tên hng liên tip cách nhau mt du chm phy.
Cách vit mi hng
Tên hng=giá tr;
g) Mc Type. Khai báo các kiu d liu.
Cách vit
Type danh sách các kiu
Cách vit mi kiu
Tên kiu = Mô t kiu;
h) Mc Var. Khai báo các i lng (các bin) dùng trong chng trình.
Cách vit
Var danh sách các bin
Cách vit mi bin
Tên bin:tên kiu ca bin;
u mt s bin có cùng kiu, ta có th khai báo chung kiu, khi ó hai bin liên tip
khi khai báo chung kiu cách nhau mt du phy.
1.4.2. Các chng trình con
u trúc mi chng trình con hoàn toàn tng t nh mt chng trình Pascal
ngoi tr vic chng trình con phi kt thúc bng
END;
Ta s có mt mc riêng gii thiu chi tit hn v các chng trình con.
1.4.3. Phn chng trình chính
Phn này bt u bng t khoá Begin tip theo là các lnh và kt thúc bng
END.
ây là t khoá end duy nht trong chng trình có du chm kèm theo sau ánh u
kt thúc ca chng trình.
1.4.4. Mt loi chng trình n gin: vit thông báo ra màn hình
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 5
minh ho cho khái nim v mt chng trình Pascal ng thi gii thiu lnh vit
ra màn hình nhng thông báo cn thit gii thích cho các lnh phc tp sau này, ta
a ra mt vài ví d v nhng chng trình n gin nht.
Ví d 1. Gi s ta mun vit ra màn hình thông báo Day la lop 10 Tin hoc, chng
trình sau thc hin công vic này.
Begin
Writeln('Day la lop 10 Tin hoc');
End.
Ví d 2. Gi s ta mun vit ra màn hình thông báo Day la lop 10 Tin hoc và trong
dòng tip theo thông báo 'Mi bn làm quen vi Turbo-Pascal', chng trình sau thc
hin công vic này.
Begin
Writeln('Day la lop 10 Tin hoc, ');
Writeln('Moi ban lam quen voi Turbo-Pascal');
End.
u chng trình này c sa thành
Begin
Write('Day la lop 10 Tin hoc, ');
Writeln('Moi ban lam quen voi Turbo-Pascal');
End.
Hãy thc hin c hai thy s khác nhau gia hai lnh Write và Writeln.
Qua hai ví d trên, khi mun vit mt dòng thông báo nào ó ra màn hình, ta có th
dùng lnh Write hoc Writeln, dòng thông báo c vit gia mt cp du nháy ' và
t gia mt cp ngoc tròn.
t nhn xét rt b ích cho chúng ta sau này là các dòng lnh ca Pascal phn ln
u kt thúc bng du ;.
1.5. Môi trng Pascal
Nói mt cách tng quát, trong Tin hc, khi s dng mt phn mm nào ó, các tin
nghi mà phn mm ó cung cp cho ngi s dng c gi là môi trng ca phn
m ó. Ví d ngi ta thng nói n môi trng DOS, môi trng WINDOWS,
môi trng Linux . . .
Khi làm vic vi Pascal vi t cách nh mt phn mm, ta có môi trng Pascal.
làm vic vi Pascal, trên máy tính cn có các file chng trình cn thit. Nu
mun cài t y , hin có hai b chng trình TP7.0 dùng cho môi trng DOS
và BP dùng cho môi trng WINDOWS. Tuy nhiên, có th hc nhng phn
p n trong giáo trình này, ta ch cn hai file TURBO.EXE, TURBO.TPL.
bt u làm vic vi Pascal, nu trong môi trng DOS, ta vào th mc cha các
file trên và gõ TURBO ri gõ phím ENTER, còn trong môi trng WINDOWS, ta
m kép chut vào biu tng ca Pascal hay BP. Sau ó s xut hin màn hình son
tho chng trình Pascal nh hình v di ây. Ta cng gi màn hình nàylà mt ca
.
File Edit Search Run Compile Debug Tools Options Windows Help
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 6
NONAME00.PAS
_
1:1
F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 LocalMenu
Hai dòng trên và di c gi là Menu, mi mc trong Menu tng ng vi mt
loi vic ta có th la chn, hai s trên dòng cui cùng ngn cách nhau bng du hai
chm (:) cho ta bit v trí ca con tr son tho ang dòng nào (s trc) và ct nào
(s sau) ca chng trình ang son. Vic gii thiu chi tit v Menu sc cp
n dn qua tng mc. Sau ây ta ch gii thiu mt s mc cn thit nht trong giai
n ban u khi son tho và chy mt chng trình vit bng Pascal.
ây ta có th làm các vic sau:
1. Son mi mt chng trình: Các bc ln lt tin hành là
Gõ chng trình. Các thao tác son tho v c bn ging nh trong mt h
son tho vn bn.
Ghi file chng trình vào a: gõ phím chc nng F2, gõ phn tên c bn ca
file ri gõ phím Enter.
Biên dch chng trình: gõ ng thi hai phím Alt+F9. Nu chng trình có
i, s có mt vt thông báo màu , gõ phím Enter hoc Esc, vt s bin
t và v trí con tr nm sát ngay ch sai u tiên ca chng trình. Sau khi
a sai nu có, cn ghi li và tin hành biên dch li cho ti khi chng trình
không còn li.
Chy chng trình: gõ ng thi hai phím Ctrl+F9.
Sau khi dùng xong chng trình, ta có thóng ca s ca chng trình ó
ng cách gõ ng thi hai phím Alt+F3.
2. Nu mun son mt chng trình mi khác, ta có th ln lt gõ các phím F10, F,
N, ta sc mt ca s mi và có th bt u mt vòng làm vic nh trên.
Khi làm vic vi Pascal, ta có th m nhiu ca s, mi ca sng vi mt chng
trình hoc mt file d liu. Thng các ca s này xp chng lên nhau, bng cách gõ
phím F6, ta có th chuyn ca s cui cùng lên trên cùng.
3. Nu mun m mt file ra mt ca s, ta gõ phím F3 ri gõ tên file cn m sau ó
gõ phím Enter.
5. ra khi Pascal, ta gõ ng thi hai phím Alt+X.
2. D LIU KIU N GIN
Khi vit chng trình Pascal, i i lng xut hin trong chng trình cn phi
c khai báo tên và kiu ca nó trong mc Var. Tu theo bài toán c th, i lng
ó có th là i lng cho trc, i lng cn tính và nhng i lng phát sinh
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 7
trong quá trình tính toán. Tu theo ý ngha thc t ca chúng, ta cn chn kiu d
liu khai báo.
i dung ca mc này nhm gii thiu các kiu d liu n gin. Lý do ca vic
chn thut ngn gin không ch vì nói chung chúng n gin mà tin dùng sau
này trong phn các chng trình con.
2.1. D liu kiu s nguyên
2.1.1. Cách khai báo bin kiu s nguyên
Khi có mt bin kiu s nguyên, trong mc Var, ta có th chn mt trong nm cách
khai báo sau ây.
Tên bin:Shortint;
i khai báo này, bin s nhn giá tr trong min -128 127 và mi bin cn 1 byte b
nh.
Tên bin:Byte;
i khai báo này, bin s nhn giá tr trong min 0 255 và mi bin cn 1 byte b
nh.
Tên bin:Integer;
i khai báo này, bin s nhn giá tr trong min -2
15
2
15
-1 và mi bin cn 2 byte
nh.
Tên bin:Word;
i khai báo này, bin s nhn giá tr trong min 0 2
16
-1 và mi bin cn 2 byte b
nh.
Tên bin:Longint;
i khai báo này, bin s nhn giá tr trong min -2
31
2
31
-1 và mi bin cn 4 byte
nh.
Pascal cho phép ta dùng hai hng chun: mt hng ký hiu là MaxInt có giá tr bng
giá tr ln nht ca bin kiu Integer (= 2
15
-1), mt hng ký hiu là MaxLongInt
có giá tr bng giá tr ln nht ca bin kiu LongInt (= 2
31
-1).
Khi mun vit các u kin so sánh gia các bin kiu s <, >, ≤, ≥, ≠, =, trong
chng trình ta vit tng ng nh sau:
<, >, <=, >=, <>, =
2.1.2. Các hàm và th tc chun
Khi vit các biu thc s hc, các phép tính c ký hiu nh sau:
Cng + Tr - Nhân *
X Mod Y: Phn d ca phép chia X cho Y
X Div Y: Thng ca phép chia X cho Y
Chú ý rng các hàm X Mod Y và X Div Y ch xác nh vi Y ≠ 0.
ng nh trong toán hc, phân bit các s hng trong mt biu thc, ta có th
dùng các du ngoc. Tuy nhiên, cn chú ý rng mc dù trong Toán hc, ta c phép
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 8
dùng các loi du ngoc khác nhau, nhng trong Pascal, khi vit các biu thc, ta ch
c dùng mt loi du ngoc duy nht là các du móng ngoc tròn (, ).
u không dùng du ngoc, th tu tiên thc hin các phép toán s là:
Div và Mod, nhân, cng và tr
Ví d, a*(b+c) là biu thc c vit úng nhng nu vit a*[b+c]
là sai, không c
hiu là a nhân vi tng ca b và c. Nu vit a*b+c thì biu thc s có giá tr bng
(a*b)+c.
i vi các bin kiu s nguyên, Pascal có sn mt s hàm chun và mt s th tc
chun phc v các tính toán ph bin nht.
Hàm (Function) chun là hàm có sn ca Pascal. Hàm có th có hoc không có bin.
Giá tr ca hàm ch có th dùng tính toán, so sánh hoc gán cho mt bin khác
cùng kiu. Khi dùng hàm, cn bit rõ các bin (nu có) ca nó phi có kiu gì và kiu
liu ca hàm là kiu gì. Sau ây là mt s hàm chun.
Hàm Sqr(X): Hàm có bin X kiu s nguyên và giá tr bng bình phng ca X.
Hàm Pred(X): Hàm có bin X kiu s nguyên và có giá tr bng X-1.
Hàm Succ(X): Hàm có bin X kiu s nguyên và có giá tr bng X+1.
Hàm Random(X): Hàm có bin X kiu Word và có giá tr là mt s nguyên ngu
nhiên trong phm vi 0 X-1. Khi dùng hàm này ta phi khai báo n v chng trình
CRT trong mc Uses và trc ó phi gi th tc Randomize;
Biu thc nguyên là biu thc nhn c t các bin và các s nguyên liên kt bi
các hàm chun nêu trên.
Th tc (Procedure) chun là các lnh có sn ca Pascal. Lnh này cho phép ta thc
hin mt vic nào ó. Th tc có th có hoc không có bin và nu có bin, ta cn
bit rõ bin ó có kiu gì. Mun dùng th tc, ta vit nó nh vit mt lnh.
Th tc Inc(X); tng giá tr ca bin X kiu s nguyên mt n v.
Th tc Dec(X); gim giá tr ca bin X kiu s nguyên mt n v.
Th tc Inc(X,Y); thay giá tr A ang có ca bin X kiu s nguyên bng A cng
i giá tr ca bin kiu s nguyên Y hoc giá tr nguyên Y.
Th tc Dec(X,Y); thay giá tr A ang có ca bin X kiu s nguyên bng A tr
i giá tr ca bin kiu s nguyên Y hoc giá tr nguyên Y.
2.1.3. Các cách nhn giá tr cho các bin kiu s nguyên
nhn giá tr ca mt bin kiu s nguyên, ta có th dùng mt trong hai cách sau:
- Dùng lnh gán
Tên bin:=biu thc có giá tr kiu s nguyên;
- Nhn t bàn phím bng lnh
Read(tên bin); hoc Readln(tên bin);
Khi nhn giá tr t bàn phím, ta có th nhn giá tr cho mt s bin bng lnh
Read/Readln(tênbin1, tênbin2, . . ., tênbink);
Khi thc hin lnh này, trên màn hình s xut hin con tr, mun cho bin giá tr bao
nhiêu, ta gõ t bàn phím sau ó gõ phím Enter.
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 9
Tuy nhiên có th dùng chng trình mt cách tin li, khi nhn giá tr bin t bàn
phím, ta nên vit kèm thêm dòng thông báo gii thích cn nhp giá tr nh th nào.
Do ó, ta nên dùng lnh nhn giá tr tng bin t bàn phím di dng mt cp lnh:
Write('Dòng thông báo');Readln(tên bin);
Dòng thông báo này sc vit ra màn hình gii thích cho ngi chy chng trình
n nhp gì t bàn phím.
Ví d, nu ta cn nhp mt s nguyên dng N≤100 t bàn phím, ta có th dùng cp
nh
Write('Nhap so nguyen duong N <= 100: ');Readln(N);
2.1.4. Cách vit giá tr bin nguyên ra màn hình
vit giá tr ca bin kiu nguyên ra màn hình, ta dùng lnh
Write(Tên bin); hoc writeln(Tên bin);
Hai lnh này u vit ra màn hình giá tr ca bin. S khác nhau ch ch sau khi
vit ra màn hình bng lnh Write, nu vit tip s vit trên cùng dòng ang vit d
còn sau khi vit ra màn hình bng lnh WriteLn, nu vit tip s chuyn xung u
dòng di vit.
Khi vit nhiu s liên tip trên mt dòng, ta nên dùng cách vit có quy cách
bng
cách dùng lnh.
Write/writeln(Tên bin:K);
trong ó K là hng s nguyên dng. Lnh này có ngha là dành K v trí liên tip
vit giá tr ca bin, giá tr này vit phi nht i vi K v trí này. Nu s lng s
ng i nhiu, vic chn K cn c vào hai u kin:
1. K phi ln hn s ch s nhiu nht có th ca các s này
2. K nên là c ca 80 (s v trí trên mt dòng màn hình)
u kin th nht bo m hai s liên tip cách nhau ít nht mt du trng; u kin
th hai cho ta vit c các s thành các ct thng hàng.
Ví d, nu ta cn vit mt lot s liên tip, mi s có không quá 6 ch s thì vi mi
X, ta nên vit ra màn hình bng lnh
Write(X:8);
Sau ây là mt s chng trình ví dn gin.
Ví d 1. Chng trình ngh ngi s dng nhp t bàn phím tui và vit li ra
màn hình.
USES CRT;
VAR TUOI:BYTE;
BEGIN
CLRSCR;
WRITE('MOI BAN CHO BIET TUOI CUA BAN: ');READLN(TUOI);
WRITELN('CAM ON, TOI DA BIET BAN ',TUOI,' TUOI');
READLN;
END.
Ví d 2. Chng trình ngh nhp t bàn phím hai s nguyên A, B và vit ra màn
hình tng, hiu, div và mod ca hai só.
USES CRT;
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 10
VAR A,B:INTEGER;
BEGIN
CLRSCR;
WRITE('BAN HAY NHAP SO NGUYEN A = ');READLN(A);
WRITE('BAN HAY NHAP SO NGUYEN B = ');READLN(B);
WRITELN('TONG CUA ',A,' VA ',B,' BANG ',A+B);
WRITELN('HIEU CUA ',A,' VA ',B,' BANG ',A-B);
WRITELN('TICH CUA ',A,' VA ',B,' BANG ',A*B);
IF B<>0 THEN
BEGIN
WRITELN('THUONG CUA PHEP CHIA ',A,' CHO ',B,' BANG ',A DIV B);
WRITELN('PHAN DU CUA PHEP CHIA ',A,' CHO ',B,' BANG ',A MOD B);
END;
READLN;
END.
2.2. D liu kiu s thc
2.2.1. Cách khai báo
Trong Pascal, s thc có hai cách vit:
1. Cách vit thông thng theo kiu Anh-M: cách vit này tng t nh ta vn dùng
trong Toán hc, ch khác bit là du ngn cách gia phn nguyên và phn phân là
u . thay vì du , nh ta quen dùng.
2. Cách vit du phy ng: Nu M là s thc, ta luôn có mt cách duy nht biu
din M di dng M = α.10
K
trong ó -1<α<1 và K là s nguyên. αc gi là
phn nh tr còn K c gi là phn bc. Khi ó, cách vit du phy ng ca M
là αEK (*)
Ví d vi cách vit thông thng, ta có s 12.25, trong cách vit du phy ng, s
này c vit di dng 0.1225e2.
Cách vit này dùng lu gi s thc trong b nh nhng khi vit không quy cách
thc ra màn hình, Pascal vit dng (*) vi α có phn nguyên trong phm vi 1 9 (ta
gii thích khái nim vit có quy cách và không có quy cách trong mc 2.2.4).
Ví d
12.25 khi vit không quy cách ra màn hình s là 1.225e001.
0.0825 s là 8.25e-002.
Khi dùng máy tính tính toán các s thc, ta nên nh rng máy tính ch có th biu
din s thc vi mt s nht nh ch s có ngha (CSCN).
Pascal có 5 kiu dùng khai báo các i lng là s thc c cho trong bng di
ây trong ó i vi bn kiu u, ct min giá tr ch min bin thiên ca tr tuyt
i ca s.
Tên Min giá tr T S CSCN S Byte
Real 2.9e-39 1.7e38 11-12 6
Single 1.5e-45 3.4e38 7-8 4
Double 5.0e-324 1.7e308 15-16 8
Extended 3.4e-4932 1.1e4932 19-20 10
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 11
Comp -9.2e18 9.2e18 19-20 8
Chú ý rng kiu Comp luôn là s nguyên vi giá tr t -2
63
+1 n 2
63
-1 vi 19-20 ch
có ngha.
Khi ó mun khai báo mt bin kiu s thc, tu tình hung c th, ta có th chn
t trong nm cách khai báo sau:
Tên bin:Real;
Tên bin:Single;
Tên bin:Double;
Tên bin:Extended;
Tên bin:Comp;
Trong nhng tính toán thông thng, khi mt i lng là s thc, ta nên chn cách
khai báo u tiên.
2.2.2. Các hàm và th tc liên quan
Các phép tính s hc i vi các s thc c ký hiu nh sau:
Cng + Tr - Nhân * Chia /
Các quy nh khi vit các biu thc s thc cng ging nhi vi biu thc s
nguyên trong mc 2.1.2.
Sau ây là các hàm chun tr giúp các tính toán vi s thc.
Hàm Abs(X): Hàm này có giá tr bng tr tuyt i kiu s thc ca giá tr bin kiu
thc X hoc s thc X.
Hàm ArcTan(X): Hàm này có giá tr là cung trong khong (-π/2, π/2) có tang kiu
thc bng giá tr ca bin kiu s thc X hay s thc X.
Hàm Exp(X): Hàm này có giá tr bng lu tha c s e ca giá tr bin kiu s thc
X hoc s thc X (e
X
).
Hàm Ln(X): Hàm này có giá tr bng lô ga c s e c t bi
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 12
Hàm Round(X): Hàm này nhn giá tr bng s nguyên gn s thc X nht nhng có
kiu là kiu s nguyên. Trong trng hp phn phân ca X là 0.5, hàm này nhân giá
tr làm tròn lên.
Hàm Trunc(X): Hàm này có giá tr bng phn nguyên ca giá tr bin kiu s thc X
hoc s thc X nhng có kiu là kiu s nguyên.
t biu thc có giá tr thc là biu thc cha các bin s thc, các s thc liên kt
i các hàm chun.
t biu thc s là biu thc cha các bin s, các s liên kt bi các hàm chun ca
các kiu s. Kiu ca mt biu thc s là kiu ca bin s hoc s có min giá tr
ng nht.
2.2.3. Các cách nhn giá tr
nhn giá tr ca mt bin kiu s thc, ta có th dùng mt trong hai cách sau:
Dùng lnh gán
Tên bin:=biu thc có giá tr kiu s;
Nhn t bàn phím bng lnh
Read/ReadLn(tên bin);
Các u cn chú ý khi dùng các lnh này cng tng t nhã vit trong cui mc
2.1.3.
Chú ý quan trng
Khi dùng các lnh gán, bin kiu s thc có th c gán giá tr ca biu thc s
nguyên hoc s thc nhng nu bin kiu s nguyên, ta không th gán cho nó giá tr
a biu thc kiu s thc dù giá tró là s nguyên.
Ví d, vi các khai báo bin
X:Integer;
Y:Real;,
nh gán th hai sau ây không hp l ngay c khi giá tr ca Y là s nguyên theo
ngha Toán hc:
Y:=5;
X:=Y;
ây cng là mt u khác vi thói quen trong Toán hc. Mt cách tng quát, nh
gán các bin s X:=Y ch có thi vi các bin Y có kiu vi min giá tr không ln
n min giá tr ca kiu bin X.
2.2.4. Cách vit giá tr bin ra màn hình
Có hai cách vit s thc ra màn hình:
Cách vit không quy cách: dùng lnh
Write/writeln(Tên bin);
Hai lnh này u vit ra màn hình giá tr ca bin. S khác nhau cng tng t nh
ã nói mc 2.1.4.
Các lnh vit trên s vit s thc di dng du phy ng. Mun vit s thc dng
thông thng, ta phi dùng cách vit có quy cách:
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 13
Write/writeln(Tên bin:K:L);
có ngha là ta dùng K v trí vit giá tr ca bin trong ó dùng L v trí cho các ch
ca phn phân ca s. Vic la chn các giá tr ca K và L do ngi lp trình c
ng s ch s ca s cn vit ra, tuy nhiên rõ ràng L không th ln hn K-2.
Trng hp K=0, lnh có ngha là dùng ch vit giá tr.
Ví d. Chng trình nhp t bàn phím hai s thc b, c sau ó gii phng trình bc
nht bX + c = 0.
USES CRT;
VAR
B,C:REAL;
BEGIN
CLRSCR;
WRITE('NHP S THC B: ');READLN(B);
WRITE('NHP S THC C: ');READLN(C);
WRITELN('CN GII PHNG TRÌNH BX + C = 0');
IF B=0 THEN
BEGIN
IF C=0 THEN WRITELN('PHNG TRÌNH VÔ NH')
ELSE WRITELN('PHNG TRÌNH VÔ NGHIM')
END
ELSE WRITELN('PHNG TRÌNH CÓ MT NGHIM DUY NHT = ',-C/B:0:2);
END.
2.3. Biu thc s hc
Trong lp trình, biu thc s hc c hiu là biu thc nhn c t các bin kiu
, các hng s nh mt s hu hn phép toán cng, tr, nhân, chia, Div, Mod và các
hàm chun kiu s ca Pascal. Khi vit biu thc s hc, phân bit các s hng, ta
chc phép dùng các du óng/m ngoc tròn ( và ).
t vn t ra là khi trong mt biu thc s hc có nhiu bin kiu s khác nhau
thì kiu ca giá tr biu thc s là kiu nào? Câu tr li là kiu ca mt biu thc s
c xác nh là kiu ca bin tham gia biu thc có min giá tr ln nht, chng hn
tích mt bin kiu s thc và mt bin kiu s nguyên có kiu s thc, tng mt bin
kiu Longint vi mt bin kiu Integer có kiu Longint, tích mt bin kiu Integer
i mt bin kiu Integer có kiu Integer. Do ó khi tính toán các s, ta cn d liu
trc kt qu tính toán tránh nhn c giá tr không chính xác hoc b báo li
tràn s hc (Arithmetic Overflow) nu trc ó ta t dn biên dch
{$Q+}
Ví d khi tính din tích S ca mt hình ch nht có hai cnh D và R, nu ta khai báo
D và R kiu Integer, mc dù ta khai báo S kiu Longint nhng giá tr ca S có th
không nhn c úng nu ta tính S bng công thc S = DR. Nguyên nhân vì hai s
kiu Integer khi nhân vi nhau có th vt ra khi phm vi Integer. kt qu tính
luôn úng, ta có th dùng hai lnh thay vì mt: S:=1; S:=S*D*R.
Trong chng trình sau nu nhp giá tr D = R =1000, ta s thy din tích âm nu
không t dn biên dch {$Q+}và b báo li tràn s hc (Arithmetic Overflow) nu
trc ó ta t dn biên dch kim soát các tính toán ra ngoài phm vi ca kiu s
c khai báo: {$Q+}.
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 14
Uses CRT;
Var
d,r:integer;
Begin
ClrScr;
Write('Nhap chieu dai hinh chu nhat = ');ReadLn(d);
Write('Nhap chieu rong hinh chu nhat = ');ReadLn(r);
Writeln('Dien tich hinh chu nhat = '),d*r);
ReadLn;
End.
2.4. D liu kiu lô gic (boolean)
2.4.1. Khái nim u kin lôgic
t nh lô gic cng còn gi là u kin lô gic là mt u khng nh mà ch có
úng mt trong hai kh nng xy ra là úng hay sai. úng/sai c gi là các giá tr
chân lý hay gi tt là giá tr và trong Pascal ta dùng các tên True, False.
Ví d 5 là s nguyên t là mt mnh lô gic có giá trúng nhng à i ting m ru
nhè nh không là mt mnh lô gic.
i hai u kin lô gic P và Q, ta có th lp các u kin lô gic sau:
P và Q
P hoc Q
Không P
Các phép và, hoc, Khôngc gi là các phép toán lô gic.
Giá tr ca các u kin này c cho trong bng sau.
P Q P Và Q P Hoc Q Không P
úng úng úng úng Sai
úng Sai Sai úng Sai
Sai úng Sai úng úng
Sai Sai Sai Sai úng
Trong lp trình, i lng kiu lôgic là các i lng ch nhn mt trong hai giá tr
TRUE (úng) và FALSE (sai). Các giá tr True, False c xem là các giá tr ca
bin kiu Boolean.
Các i lng kiu lô gic thng th hin di dng các u kin lô gic nhu
kin so sánh giá tr ca các bin, có hay không có mt s kin nào ó, tìm thy/cha
tìm thy li gii . . .
Các u kin lô gic thng do các u kin lô gic n gin ghép li nh các liên t
và, hoc, không . . . Khi vit các u kin lô gic phc hp, Pascal dùng các t khoá
sau th hin các liên tó:
AND - và
OR - hay là/hoc
NOT - không
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 17
writeln(a:0:2, nam giua ,b:0:2, va ,c:0:2);
if (b<=c)and(c<=a) then
writeln(c:0:2, nam giua ,b:0:2, va ,a:0:2);
if (c<=a)and(a<=b) then
writeln(a:0:2, nam giua ,c:0:2, va ,b:0:2);
if (c<=b)and(b<=a) then
writeln(b:0:2, nam giua ,c:0:2, va ,a:0:2);
readln;
End.
2.4.4. Câu lnh REPEAT <Nhómlnh> UNTIL <KLG>;
2.4.4.1. Gii thiu lnh
Câu lnh này có tên là lnh lp vi s bc lp không xác nh. Mc ích ca nó là
thc hin mt cách lp i lp li mt s ln mt nhóm lnh, s ln lp ph thuc vào
t u kin lô gic.
Khi thc hin lnh này, các lnh trong nhóm lnh c thc hin, sau ó, nu KLG
úng thì s thc hin lnh tip theo ca chng trình còn nu KLG sai, s quay li
thc hin nhóm lnh c nh th cho ti khi KLG úng.
2.4.4.2. Lnh Break
Trong câu lnh Repeat Until ; khi thc hin các lnh trong nhóm lnh, nu lnh
Break c thc hin thì vòng lp kt thúc và sau ó thc hin lnh tip theo ca
chng trình. Ta có th hiu cách dùng lnh này qua các chng trình ví d di ây.
2.4.4.3. Các ví d
Ví d 1. Nhp d liu úng quy nh
nh Repeat . . . có th dùng bt buc ngi s dng chng trình nhp d
liu theo úng mt s quy nh nào ó. Nhng quy nh ó sc th hin bi mt
u kin lô gic (KLG). Mun ngi s dng chng trình nhp d liu úng theo
quy nh, ta có th dùng n chng trình sau:
Repeat
. . . . . . .
{Các lnh nhp d liu}
. . . . . . .
Until DKLG;
Chng hn mun nhp mt s nguyên dng N không ln hn 100, ta có th dùng
các lnh:
Repeat
clrscr;
write(Nhap so nguyen duong N khong lon hon 100: );
readln(n);
until (n>0)and(n<=100)and(Frac(n)=0);
Khi thc hin n lnh này, nu nhp không úng mt s nguyên dng không ln
n 100, ngi nhp s phi nhp li cho ti khi úng các lnh tip theo mi c
thc hin.
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 20
writeln('Can bac 2 cua ',c:0:3,' bang ',td:0:3);
end;
readln;
END.
tính cn bc K, khó khn là vic tính giá tr hàm f(X) = X
K
- C ti các m a và b.
Ta có th thay lnh fa:=a*a-c bng n chng trình trong ó bin I dùng
m s ln nhân vi a.
fa:=1;i:=0;
Repeat
Inc(i);fa:=fa*a;
Until i=k;
fa:=fa-c;
ng ti vi lnh fb:=b*b-c và ftd:=td*td-c.
2.4.5. Câu lnh While <KLG> Do <Nhóm lnh>;
2.4.5.1. Gii thiu lnh
Câu lnh này cng có tên là lnh lp vi s bc lp không xác nh. Mc ích ca
nó là thc hin mt cách lp i lp li mt s ln mt nhóm lnh, s ln lp ph thuc
vào mt u kin lô gic.
Khi thc hin lnh này, nu KLG úng, các lnh trong nhóm lnh c thc hin,
sau ó, nu KLG vn úng thì s quay li thc hin nhóm lnh, nu không, lnh lp
t thúc và thc hin lnh tip theo ca chng trình.
Khi vit lnh này, Pascal quy nh nu nhóm lnh có hn mt lnh, nhóm lnh phi
t gia mt cp Begin-End.
i lnh Repeat có th chuyn i thành mt lnh While và ngc li theo s
cho trong bng sau ây trong ó DK là u kin lô gic.
Repeat
Nhóm lnh
Until DK;
While
Not(DK) Do
Nhóm lnh
While DK Do Nhóm
nh
⇔
n
u nhóm
l
nh thc
hi
n ít
nh
t mt
n
Repeat
Nhóm lnh
Until
Not(DK);
Ta có th chuyn vic dùng lnh Repeat-Until thành lnh While-Do trong các ví d 2
và 3 trên.
2.4.5.2. Lnh Break
ng t nhi vi câu lnh Repeat Until ; khi thc hin các lnh
trong nhóm lnh ca lnh While . . ., nu lnh Break c thc hin thì vòng lp kt
thúc và sau ó thc hin lnh tip theo ca chng trình.
2.5. Kiu ký t
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 21
Ta hiu ký t là các ký t thuc bng mã ASCII. Có tt c 256 ký t vi các s hiu
0 n 255. S hiu ca ký tc gi là mã ASCII (thp phân) ca ký t. Ví d
ký t A có mã ASCII bng 65, ký t a có mã ASCII bng 97. Chú ý rng có mt ký
c bit gi là ký t trng th hin trong các vn bn là phn trng ngn cách gia
hai t vit liên tip. Ký t này c gõ bng phím Space - phím dài nht trên bàn
phím và có mã ASCII bng 32.
Gia các ký t có quan h so sánh <. Nu C1 và C2 là hai ký t, C1<C2 hay tng
ng C2>C1 nu C1 ng trc C2 trong bng mã ASCII.
Khi mun vit các u kin so sánh gia các bin kiu ký t <, >, ≤, ≥, ≠, =, trong
chng trình ta vit tng ng nh sau:
<, >, <=, >=, <>, =
2.5.1. Cách khai báo
khai báo bin kiu ký t, ta vit:
Tên bin:Char;
Bin kiu ký t dùng mt byte b nh ghi nhn giá tr.
2.5.2. Các hàm và th tc liên quan
Hàm Chr(X): Có giá tr là ký t có mã ASCII thp phân bng giá tr ca bin X
kiu Byte hoc s nguyên X trong phm vi 0 255.
Hàm Ord(C): Có giá tr là mã ASCII thp phân ca ký t là giá tr ca C.
Hàm Pred(C): Có giá tr bng ký tng ngay trc ký t là giá tr ca C trong
ng mã ASCII.
Hàm Succ(C): Có giá tr bng ký t ng ngay sau ký t là giá tr ca C trong
ng mã ASCII.
Hàm UpCase(C): Có giá tr bng ch cái hoa ng vi ký t là giá tr ca C nu ký
là giá tr ca C là ch cái và bng C nu C không là ch cái.
Hàm ReadKey: có giá tr bng ký t gõ t bàn phím.
Biu thc ký t gm các bin và các ký t liên kt bi các hàm chun.
2.4.3. Các cách nhn giá tr
ng t nhi vi các bin kiu s, nhn giá tr cho mt bin kiu ký t, ta có
th dùng mt trong hai cách:
Dùng lnh gán
Tên bin:=biu thc có giá tr là ký t;
Nhn t bàn phím bng lnh
Readln/Read(tên bin);
2.4.4. Cách vit giá tr bin ra màn hình
vit giá tr ca bin kiu ký t ra màn hình, ta dùng lnh
Write/writeln(Tên bin kiu ký t);
Hai lnh này u vit ra màn hình giá tr ca bin. S khác nhau Write/writeln
ng tng t nhã nói cui mc 2.1.4.
Ta cng có th dùng cách vit có quy cách nh khi vit các s
Nguyn Xuân My Tri hun luyn IOICamp.net
lc v ngôn ng lp trình Pascal 22
Write/writeln(biu thc kiu ký t:K);
khi ó ta s có K v trí vit giá tr và giá tr luôn c vit phi nht trong phm vi
ó.
Chú ý quan trng
Trong chng trình, khi vit mt ký t c th, ta phi vit ký tó gia hai du '
nhng khi nhp t bàn phím mt ký t c th, ta ch gõ úng ký tó.
2.4.5. Các ví d
Ví d 1. Vit chng trình nhp t bàn phím mt ký t C và cho bit kh nng nào
trong các kh nng sau xy ra:
C là ch cái thng
C là ch cái hoa
C là ch s
C không là ch cái hay ch s
Sau ây là chng trình.
uses crt;
var
c:char;
Begin
clrscr;
write('Nhap ky tu C = ');readln(c);
if (c>='a')and(c<='z') then
writeln(c,' la chu cai thuong')
else
if (c>='A')and(c<='Z') then writeln(c,' la chu cai hoa')
else
if (c>='0')and(c<='9') then writeln(c,' la chu so')
else
writeln(c,' khong la chu so, chu cai');
readln;
End.
Ví d 2. Khi thc hin mt chng trình làm mt vic nào ó ví d gii phng trình
c hai tng quát, ta muôn thc hin chng trình ó liên tip vi các d liu vào
khác nhau. Ta có th sa các chng trình ã có nh sau.
{Phn các khai báo thêm bin YK kiu Char}
. . . . .
Begin
Repeat
<Các lnh thc hin mt vic nào ó>
. . . . .
Write(Ban co muon tiep tuc khong (C/K)? );
Yk:=readkey;
Until Upcase(yk)=;
End.