Tải bản đầy đủ (.pdf) (66 trang)

NGÔN NGỮ LẬP TRÌNH PASCAL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (384.45 KB, 66 trang )

Nguy n Xuân My

Tr i hu n luy n IOICamp.net

NGÔN NG

L
CV
L P TRÌNH PASCAL

1.1. Nh ng nét chung c a ngôn ng l p trình
Nh ta ã nói n trong ch ng 1, mu n trao cho máy tính th c hi n m t công vi c
nào ó hay nói cách khác gi i m t bài toán nào ó, thu t toán gi i bài toán ph i
c
di n t thành m t ch ng trình vi t b ng m t ngôn ng l p trình.
Có r t nhi u lo i ngôn ng l p trình b c cao (v n n ng). Tuy nhiên chúng u có m t
nét chung nh sau:
Quy nh m t s các ký t dùng
vi t ch ng trình, T p các ký t này
cg i
là ng ch cái c a ngôn ng .
Quy nh m t s t
c bi t v i các hàm ý c th g i là các khoá.
Quy nh cách vi t tên các i l ng mà ch ng trình c p n.
Quy nh u trúc chung c a m t ch ng trình và các quy nh khi vi t t ng ph n
a ch ng trình.
ch c m t th vi n các ch ng trình con chu n h tr ng i vi t ch ng trình.
Khi dùng m t ngôn ng nào ó vi t ch ng trình, ch ng trình ó
c g i là
ch ng trình ngu n (SourceProgram).
có th th c hi n


c, ch ng trình ó c n
c d ch sang ngôn ng máy. Công vi c ó do các IDE m nhi m. IDE là vi t t t
a ba ch ti ng Anh Integrated Development Envirement (Môi tr ng phát tri n
tích h p). V c b n máy tính không th "hi u" và th c hi n các ch ng trình ngu n
không vi t b ng ngôn ng máy (Xem ph n i c ng v Tin h c). IDE cho phép ta
ch ch ng trình vi t b ng ngôn ng l p trình sang ngôn ng máy và t o thêm các
ti n nghi cho vi c vi t và th c hi n ch ng trình trên c s ngôn ng l p trình. C n
chú ý r ng cùng m t ngôn ng l p trình, có nhi u IDE khác nhau. Ví d ngôn ng l p
trình Pascal có hai IDE ang
c dùng ph bi n: Turbo Pascal và Free Pascal. Tuy
nhiên Free Pascal s là IDE
c dùng lâu dài vì có th ch y trong c môi tr ng
Windows và Linux.
Trong ph n l n các tr ng trên th gi i, khi d y ngôn ng l p trình u tiên, ng i ta
th ng ch n ngôn ng Pascal. M t trong nh ng lý do chính vì Pascal là m t ngôn
ng khá chu n m c
th hi n các thu t toán và các ki u d li u liên quan; thông
qua quá trình h c ngôn ng này, h c sinh có th hi u
c nh ng ý t ng c b n c a
t ngôn ng l p trình b c cao. Trong ch ng này, chúng ta s gi i thi u nh ng ki n
th c c b n v ngôn ng này v i m c tiêu
vi t các ch ng trình gi i các bài
toán thông th ng trên c s IDE Turbo. Trong cu i ch ng này, s có m t ph l c
IDE Free-Pascal.
Ta c n luôn ý th c r ng Pascal là m t ph ng ti n
giao ti p gi a ng i và máy
tính. B n thân máy tính là m t thi t b v t lý,
"giao vi c" cho máy thông qua m t
ch ng trình, chúng ta c n ph i tuân th úng nh ng quy nh r t nghiêm ng t c a
l


c v ngôn ng l p trình Pascal

1


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

ngôn ng vì ch nh v y, ch ng trình m i có th d ch
c sang ngôn ng máy và
khi ó máy m i có th "hi u" và th c hi n
c.
1.2. B ch cái
vi t các l nh, Pascal ch n m t s ký t trong b ng mã ASCII dùng làm b ch cái
a mình. B ch cái này g m:
- Các ch cái th ng và hoa c a ti ng Anh:
A..Z, a..z
- Các ch s th p phân
0..9
- D u g ch chân (th ng dùng n i ch ) _ (có mã ASCII th p phân b ng 95)
- Ký t tr ng (mã ASCII th p phân b ng 32) gõ b ng phím dài Space
- Các ký t v i mã ASCII th p phân t 0 n 31 (các mã
u khi n)
- Các ký t
c bi t
+
(


)

*
:

/
;

=
^

<
@

>
{

[
}

]
$

.
#

,
'

- Các c p ký t vi t li n nhau dùng nh m t ký t


<=

>=

<>

Gán
:=

..

(*

*)

(.

.)

i v i các ký t khác c a b ng mã ASCII, Pascal không chính th c dùng làm các
ch cái c a mình. Tuy nhiên, nó có th x lý và trong các chú thích ho c các dòng
thông báo, ta có th dùng c các ký t này.
n chú ý r ng, khác v i cách vi t trong Toán h c, các c p d u ngo c (, ), {,
}, [, ] dùng trong Pascal có ý ngh a khác nhau:
(, ) dùng phân bi t các s h ng trong các bi u th c.
{, } dùng
ghi các chú thích trong ch ng trình.
gi i thích m t ph n
ch ng trình nào ó, ta có th vi t chú thích cho ph n ó và ph n chú thích

ph i t gi a { và }.
[, ] dùng cho các ki u d li u xâu, m ng và t p h p (Xem các ph n sau).
1.3. Khái ni m tên
Pascal có m t s t
c bi t g i là khoá (Keyword) g m 52 t sau:

l

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

c v ngôn ng l p trình Pascal

2


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

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 d ng Pascal
gi i các bài toán (theo ngh a nêu trong ch ng tr c), trong
phát bi u c a bài toán và trong quá trình gi i bài toán, có các i l ng ho c ã cho
ho c c n tính toán. Khi vi t ch ng trình, ta c n khai báo tên các i l ng này kèm
theo ki u d li u t ng ng.
Tên t ph i tuân theo các quy nh sau:
1. Ch g m các ch cái, ch s ho c d u g ch chân và không b t u b ng ch
, khi ó ch cái hoa hay th ng u
c hi u nh nhau
2. Không
c trùng v i các t khoá nêu trên.
i v i ng i Vi t Nam,
u này
không gây nên khó kh n vì m t s t khoá n gi n th ng
c dùng nhi u
trong ch ng trìntr, các t khoá r c r i ch c không ai dùng
t tên.
3.
dài có th tu ý nh ng Pascal ch quan tâm n không quá 63 ký t
u.
Nói chung, khi t tên các i l ng c n tính toán trong ch ng trình, ta nên dùng
các tên t t
g i nh ý ngh a c a nó.
Trong các m c ti p theo, ta s l n l t gi i thi u v các ki u d li u mà Pascal cho
phép dùng th hi n các i l ng khác nhau th ng g p trong các bài toán và cách
khai báo v chúng.
1.4. C u trúc chung c a m t ch ng trình Pascal
t ch ng trình Pascal t ng quát g m các ph n sau:
1. Ph n các khai báo,

2. Ph n các ch ng trình con,
3. Ph n ch ng trình chính.
Ph n ch ng trình chính nh t thi t ph i có, hai ph n khác tu theo yêu c u c th c a
ng i vi t ch ng trình, không nh t thi t ph i có.
1.4.1. Ph n khai báo
Ph n khai báo g m các m c sau:
a) Tên ch ng trình (m c này có th không c n có nh ng n u vi t, ph i vi t
úng).
Cách vi t
Program tên ch ng trình;
trong ó tên ch ng trình c n t theo úng các quy nh v tên.
b) Các h ng d n biên d ch (s
c gi i thi u d n khi c n)
c) Khai báo các n v (unit) ch ng trình c n dùng. File TURBO.TPL và các file
*.TPU bao g m m t s unit nh CRT, DOS, SYSTEM, GRAPH . . ó là th vi n
các th t c và các hàm chu n c a Pascal cho phép ng i vi t trình
c s d ng
l

c v ngôn ng l p trình Pascal

3


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

ngoài các th t c và các hàm chu n ã có s n. Ngoài ra, ng i vi t ch ng trình c ng
có th t o l p các unit c a riêng mình theo các quy nh c a Pascal.

Cách vi t
USES danh sách các unit;
Trong danh sách này, hai unit liên ti p cách nhau m t d u ph y.
d) M c Label. Li t kê tên các m c c a ch ng trình. Cách t tên m c gi ng nh
cách t tên ngo i tr
u ki n b t u b ng ch cái. Nói chung chúng tôi không ng
vi c vi t ch ng trình có khai báo này vì nó che d u tính c u trúc c a ch ng
trình.
Cách vi t
Label danh sách các m c;
Trong danh sách này, hai m c liên ti p cách nhau m t d u ph y.
e) M c Const. Khai báo các h ng (các i l ng không i).
Cách vi t
Const danh sách các tên h ng
Trong danh sách này, hai tên h ng liên ti p cách nhau m t d u ch m ph y.
Cách vi t m i h ng
Tên h ng=giá tr ;
g) M c Type. Khai báo các ki u d li u.
Cách vi t
Type danh sách các ki u
Cách vi t m i ki u
Tên ki u = Mô t ki u;
h) M c Var. Khai báo các i l ng (các bi n) dùng trong ch ng trình.
Cách vi t
Var danh sách các bi n
Cách vi t m i bi n
Tên bi n:tên ki u c a bi n;
u m t s bi n có cùng ki u, ta có th khai báo chung ki u, khi ó hai bi n liên ti p
khi khai báo chung ki u cách nhau m t d u ph y.
1.4.2. Các ch ng trình con

u trúc m i ch ng trình con hoàn toàn t ng t nh m t ch ng trình Pascal
ngo i tr vi c ch ng trình con ph i k t thúc b ng
END;
Ta s có m t m c riêng gi i thi u chi ti t h n v các ch ng trình con.
1.4.3. Ph n ch ng trình chính
Ph n này b t u b ng t khoá Begin ti p theo là các l nh và k t thúc b ng
END.
ây là t khoá end duy nh t trong ch ng trình có d u ch m kèm theo sau ánh u
k t thúc c a ch ng trình.
1.4.4. M t lo i ch ng trình n gi n: vi t thông báo ra màn hình
l

c v ngôn ng l p trình Pascal

4


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

minh ho cho khái ni m v m t ch ng trình Pascal ng th i gi i thi u l nh vi t
ra màn hình nh ng thông báo c n thi t gi i thích cho các l nh ph c t p sau này, ta
a ra m t vài ví d v nh ng ch ng trình n gi n nh t.
Ví d 1. Gi s ta mu n vi t ra màn hình thông báo Day la lop 10 Tin hoc, ch ng
trình sau th c hi n công vi c này.
Begin
Writeln('Day la lop 10 Tin hoc');
End.


Ví d 2. Gi s ta mu n vi t ra màn hình thông báo Day la lop 10 Tin hoc và trong
dòng ti p theo thông báo 'M i b n làm quen v i Turbo-Pascal', ch ng trình sau th c
hi n công vi c này.
Begin
Writeln('Day la lop 10 Tin hoc, ');
Writeln('Moi ban lam quen voi Turbo-Pascal');
End.

u ch

ng trình này

c s a thành

Begin
Write('Day la lop 10 Tin hoc, ');
Writeln('Moi ban lam quen voi Turbo-Pascal');
End.

Hãy th c hi n c hai th y s khác nhau gi a hai l nh Write và Writeln.
Qua hai ví d trên, khi mu n vi t m t dòng thông báo nào ó ra màn hình, ta có th
dùng l nh Write ho c Writeln, dòng thông báo
c vi t gi a m t c p d u nháy ' và
t gi a m t c p ngo c tròn.
t nh n xét r t b ích cho chúng ta sau này là các dòng l nh c a Pascal ph n l n
u k t thúc b ng d u ;.
1.5. Môi tr ng Pascal
Nói m t cách t ng quát, trong Tin h c, khi s d ng m t ph n m m nào ó, các ti n
nghi mà ph n m m ó cung c p cho ng i s d ng
c g i là môi tr ng c a ph n

m ó. Ví d ng i ta th ng nói n môi tr ng DOS, môi tr ng WINDOWS,
môi tr ng Linux . . .
Khi làm vi c v i Pascal v i t cách nh m t ph n m m, ta có môi tr ng Pascal.
làm vi c v i Pascal, trên máy tính c n có các file ch ng trình c n thi t. N u
mu n cài t y , hi n có hai b ch ng trình TP7.0 dùng cho môi tr ng DOS
và BP dùng cho môi tr ng WINDOWS. Tuy nhiên,
có th h c nh ng ph n
p n trong giáo trình này, ta ch c n hai file TURBO.EXE, TURBO.TPL.
b t u làm vi c v i Pascal, n u trong môi tr ng DOS, ta vào th m c ch a các
file trên và gõ TURBO r i gõ phím ENTER, còn trong môi tr ng WINDOWS, ta
m kép chu t vào bi u t ng c a Pascal hay BP. Sau ó s xu t hi n màn hình so n
th o ch ng trình Pascal nh hình v d i ây. Ta c ng g i màn hình nàylà m t c a
.
File
l

Edit

Search

Run

c v ngôn ng l p trình Pascal

Compile

Debug

Tools


Options

Windows

Help
5


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

-----------------------------NONAME00.PAS----------------------------_

1:1
---------------------------------------------------------------------F1 Help F2 Save F3 Open Alt+F9 Compile F9 Make Alt+F10 LocalMenu

Hai dòng trên và d i
c g i là Menu, m i m c trong Menu t ng ng v i m t
lo i vi c ta có th l a ch n, hai s trên dòng cu i cùng ng n cách nhau b ng d u hai
ch m (:) cho ta bi t v trí c a con tr so n th o ang dòng nào (s tr c) và c t nào
(s sau) c a ch ng trình ang so n. Vi c gi i thi u chi ti t v Menu s
c
c p
n d n qua t ng m c. Sau ây ta ch gi i thi u m t s m c c n thi t nh t trong giai
n ban u khi so n th o và ch y m t ch ng trình vi t b ng Pascal.
ây ta có th làm các vi c sau:
1. So n m i m t ch ng trình: Các b c l n l t ti n hành là
Gõ ch ng trình. Các thao tác so n th o v c b n gi ng nh trong m t h
so n th o v n b n.

Ghi file ch ng trình vào a: gõ phím ch c n ng F2, gõ ph n tên c b n c a
file r i gõ phím Enter.
Biên d ch ch ng trình: gõ ng th i hai phím Alt+F9. N u ch ng trình có
i, s có m t v t thông báo màu , gõ phím Enter ho c Esc, v t
s bi n
t và v trí con tr n m sát ngay ch sai u tiên c a ch ng trình. Sau khi
a sai n u có, c n ghi l i và ti n hành biên d ch l i cho t i khi ch ng trình
không còn l i.
Ch y ch ng trình: gõ ng th i hai phím Ctrl+F9.
Sau khi dùng xong ch ng trình, ta có th óng c a s c a ch ng trình ó
ng cách gõ ng th i hai phím Alt+F3.
2. N u mu n so n m t ch ng trình m i khác, ta có th l n l t gõ các phím F10, F,
N, ta s
c m t c a s m i và có th b t u m t vòng làm vi c nh trên.
Khi làm vi c v i Pascal, ta có th m nhi u c a s , m i c a s ng v i m t ch ng
trình ho c m t file d li u. Th ng các c a s này x p ch ng lên nhau, b ng cách gõ
phím F6, ta có th chuy n c a s cu i cùng lên trên cùng.
3. N u mu n m m t file ra m t c a s , ta gõ phím F3 r i gõ tên file c n m sau ó
gõ phím Enter.
5.
ra kh i Pascal, ta gõ ng th i hai phím Alt+X.
2. D LI U KI U
N GI N
Khi vi t ch ng trình Pascal,
i i l ng xu t hi n trong ch ng trình c n ph i
c khai báo tên và ki u c a nó trong m c Var. Tu theo bài toán c th , i l ng
ó có th là i l ng cho tr c, i l ng c n tính và nh ng i l ng phát sinh
l

c v ngôn ng l p trình Pascal


6


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

trong quá trình tính toán. Tu theo ý ngh a th c t c a chúng, ta c n ch n ki u d
li u khai báo.
i dung c a m c này nh m gi i thi u các ki u d li u n gi n. Lý do c a vi c
ch n thu t ng
n gi n không ch vì nói chung chúng n gi n mà
ti n dùng sau
này trong ph n các ch ng trình con.
2.1. D li u ki u s nguyên
2.1.1. Cách khai báo bi n ki u s nguyên
Khi có m t bi n ki u s nguyên, trong m c Var, ta có th ch n m t trong n m cách
khai báo sau ây.
Tên bi n:Shortint;
i khai báo này, bi n s nh n giá tr trong mi n -128..127 và m i bi n c n 1 byte b
nh .
Tên bi n:Byte;
i khai báo này, bi n s nh n giá tr trong mi n 0..255 và m i bi n c n 1 byte b
nh .
Tên bi n:Integer;
i khai báo này, bi n s nh n giá tr trong mi n -215..215-1 và m i bi n c n 2 byte
nh .
Tên bi n:Word;
i khai báo này, bi n s nh n giá tr trong mi n 0..216-1 và m i bi n c n 2 byte b

nh .
Tên bi n:Longint;
i khai báo này, bi n s nh n giá tr trong mi n -231..231-1 và m i bi n c n 4 byte
nh .
Pascal cho phép ta dùng hai h ng chu n: m t h ng ký hi u là MaxInt có giá tr b ng
giá tr l n nh t c a bi n ki u Integer (= 215-1), m t h ng ký hi u là MaxLongInt
có giá tr b ng giá tr l n nh t c a bi n ki u LongInt (= 231-1).
Khi mu n vi t các
u ki n so sánh gi a các bi n ki u s <, >, ≤, ≥, ≠, =, trong
ch ng trình ta vi t t ng ng nh sau:
<, >, <=, >=, <>, =
2.1.2. Các hàm và th t c chu n
Khi vi t các bi u th c s h c, các phép tính
c ký hi u nh sau:
C ng +
Tr
Nhân *
X Mod Y: Ph n d c a phép chia X cho Y
X Div Y: Th ng c a phép chia X cho Y
Chú ý r ng các hàm X Mod Y và X Div Y ch xác nh v i Y ≠ 0.
ng nh trong toán h c,
phân bi t các s h ng trong m t bi u th c, ta có th
dùng các d u ngo c. Tuy nhiên, c n chú ý r ng m c dù trong Toán h c, ta
c phép
l

c v ngôn ng l p trình Pascal

7



Nguy n Xuân My

Tr i hu n luy n IOICamp.net

dùng các lo i d u ngo c khác nhau, nh ng trong Pascal, khi vi t các bi u th c, ta ch
c dùng m t lo i d u ngo c duy nh t là các d u m óng ngo c tròn (, ).
u không dùng d u ngo c, th t u tiên th c hi n các phép toán s là:
Div và Mod, nhân, c ng và tr
Ví d , a*(b+c) là bi u th c
c vi t úng nh ng n u vi t a*[b+c] là sai, không
c
hi u là a nhân v i t ng c a b và c. N u vi t a*b+c thì bi u th c s có giá tr b ng
(a*b)+c.
i v i các bi n ki u s nguyên, Pascal có s n m t s hàm chu n và m t s th t c
chu n ph c v các tính toán ph bi n nh t.
Hàm (Function) chu n là hàm có s n c a Pascal. Hàm có th có ho c không có bi n.
Giá tr c a hàm ch có th dùng
tính toán, so sánh ho c gán cho m t bi n khác
cùng ki u. Khi dùng hàm, c n bi t rõ các bi n (n u có) c a nó ph i có ki u gì và ki u
li u c a hàm là ki u gì. Sau ây là m t s hàm chu n.
Hàm Sqr(X): Hàm có bi n X ki u s nguyên và giá tr b ng bình ph ng c a X.
Hàm Pred(X): Hàm có bi n X ki u s nguyên và có giá tr b ng X-1.
Hàm Succ(X): Hàm có bi n X ki u s nguyên và có giá tr b ng X+1.
Hàm Random(X): Hàm có bi n X ki u Word và có giá tr là m t s nguyên ng u
nhiên trong ph m vi 0..X-1. Khi dùng hàm này ta ph i khai báo n v ch ng trình
CRT trong m c Uses và tr c ó ph i g i th t c Randomize;
Bi u th c nguyên là bi u th c nh n
c t các bi n và các s nguyên liên k t b i
các hàm chu n nêu trên.

Th t c (Procedure) chu n là các l nh có s n c a Pascal. L nh này cho phép ta th c
hi n m t vi c nào ó. Th t c có th có ho c không có bi n và n u có bi n, ta c n
bi t rõ bi n ó có ki u gì. Mu n dùng th t c, ta vi t nó nh vi t m t l nh.
Th t c Inc(X); t ng giá tr c a bi n X ki u s nguyên m t n v .
Th t c Dec(X); gi m giá tr c a bi n X ki u s nguyên m t n v .
Th t c Inc(X,Y); thay giá tr A ang có c a bi n X ki u s nguyên b ng A c ng
i giá tr c a bi n ki u s nguyên Y ho c giá tr nguyên Y.
Th t c Dec(X,Y); thay giá tr A ang có c a bi n X ki u s nguyên b ng A tr
i giá tr c a bi n ki u s nguyên Y ho c giá tr nguyên Y.
2.1.3. Các cách nh n giá tr cho các bi n ki u s nguyên
nh n giá tr c a m t bi n ki u s nguyên, ta có th dùng m t trong hai cách sau:
- Dùng l nh gán
Tên bi n:=bi u th c có giá tr ki u s nguyên;
- Nh n t bàn phím b ng l nh
Read(tên bi n); ho c Readln(tên bi n);
Khi nh n giá tr t bàn phím, ta có th nh n giá tr cho m t s bi n b ng l nh
Read/Readln(tênbi n1, tênbi n2, . . ., tênbi nk);
Khi th c hi n l nh này, trên màn hình s xu t hi n con tr , mu n cho bi n giá tr bao
nhiêu, ta gõ t bàn phím sau ó gõ phím Enter.
l

c v ngôn ng l p trình Pascal

8


Nguy n Xuân My

Tr i hu n luy n IOICamp.net


Tuy nhiên
có th dùng ch ng trình m t cách ti n l i, khi nh n giá tr bi n t bàn
phím, ta nên vi t kèm thêm dòng thông báo gi i thích c n nh p giá tr nh th nào.
Do ó, ta nên dùng l nh nh n giá tr t ng bi n t bàn phím d i d ng m t c p l nh:
Write('Dòng thông báo');Readln(tên bi n);
Dòng thông báo này s
c vi t ra màn hình gi i thích cho ng i ch y ch ng trình
n nh p gì t bàn phím.
Ví d , n u ta c n nh p m t s nguyên d ng N≤100 t bàn phím, ta có th dùng c p
nh
Write('Nhap so nguyen duong N <= 100: ');Readln(N);

2.1.4. Cách vi t giá tr bi n nguyên ra màn hình
vi t giá tr c a bi n ki u nguyên ra màn hình, ta dùng l nh
Write(Tên bi n); ho c writeln(Tên bi n);
Hai l nh này u vi t ra màn hình giá tr c a bi n. S khác nhau ch ch sau khi
vi t ra màn hình b ng l nh Write, n u vi t ti p s vi t trên cùng dòng ang vi t d
còn sau khi vi t ra màn hình b ng l nh WriteLn, n u vi t ti p s chuy n xu ng u
dòng d i vi t.
Khi vi t nhi u s liên ti p trên m t dòng, ta nên dùng cách vi t có quy cách b ng
cách dùng l nh.
Write/writeln(Tên bi n:K);
trong ó K là h ng s nguyên d ng. L nh này có ngh a là dành K v trí liên ti p
vi t giá tr c a bi n, giá tr này vi t ph i nh t i v i K v trí này. N u s l ng s
ng i nhi u, vi c ch n K c n c vào hai u ki n:
1. K ph i l n h n s ch s nhi u nh t có th c a các s này
2. K nên là c c a 80 (s v trí trên m t dòng màn hình)
u ki n th nh t b o m hai s liên ti p cách nhau ít nh t m t d u tr ng; u ki n
th hai cho ta vi t
c các s thành các c t th ng hàng.

Ví d , n u ta c n vi t m t lo t s liên ti p, m i s có không quá 6 ch s thì v i m i
X, ta nên vi t ra màn hình b ng l nh
Write(X:8);
Sau ây là m t s ch ng trình ví d
n gi n.
Ví d 1. Ch ng trình
ngh ng i s d ng nh p t bàn phím tu i và vi t l i 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. Ch ng trình
ngh nh p t bàn phím hai s nguyên A, B và vi t ra màn
hình t ng, hi u, div và mod c a hai s ó.
USES CRT;
l

c v ngôn ng l p trình Pascal

9


Nguy n Xuân My


Tr i hu n luy n IOICamp.net

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 li u ki u s th c
2.2.1. Cách khai báo
Trong Pascal, s th c có hai cách vi t:
1. Cách vi t thông th ng theo ki u Anh-M : cách vi t này t ng t nh ta v n dùng
trong Toán h c, ch khác bi t là d u ng n cách gi a ph n nguyên và ph n phân là
u . thay vì d u , nh ta quen dùng.
2. Cách vi t d u ph y ng: N u M là s th c, ta luôn có m t cách duy nh t bi u
di n M d i d ng M = α.10K trong ó -1<α<1 và K là s nguyên. α
c g i là
ph n nh tr còn K
c g i là ph n b c. Khi ó, cách vi t d u ph y ng c a M
là αEK (*)

Ví d v i cách vi t thông th ng, ta có s 12.25, trong cách vi t d u ph y ng, s
này
c vi t d i d ng 0.1225e2.
Cách vi t này dùng
l u gi s th c trong b nh nh ng khi vi t không quy cách
th c ra màn hình, Pascal vi t d ng (*) v i α có ph n nguyên trong ph m vi 1..9 (ta
gi i thích khái ni m vi t có quy cách và không có quy cách trong m c 2.2.4).
Ví d
12.25 khi vi t 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 th c, ta nên nh r ng máy tính ch có th bi u
di n s th c v i m t s nh t nh ch s có ngh a (CSCN).
Pascal có 5 ki u dùng
khai báo các i l ng là s th c
c cho trong b ng d i
ây trong ó i v i b n ki u u, c t mi n giá tr ch mi n bi n thiên c a tr tuy t
ic as .
Tên
Real
Single
Double
Extended

l

Mi n giá tr T
2.9e-39..1.7e38
1.5e-45..3.4e38
5.0e-324..1.7e308
3.4e-4932..1.1e4932


c v ngôn ng l p trình Pascal

S CSCN
11-12
7-8
15-16
19-20

S Byte
6
4
8
10

10


Nguy n Xuân My

Comp

Tr i hu n luy n IOICamp.net

-9.2e18..9.2e18

19-20

8


63

Chú ý r ng ki u Comp luôn là s nguyên v i giá tr t -2 +1 n 263-1 v i 19-20 ch
có ngh a.
Khi ó mu n khai báo m t bi n ki u s th c, tu tình hu ng c th , ta có th ch n
t trong n m cách khai báo sau:
Tên bi n:Real;
Tên bi n:Single;
Tên bi n:Double;
Tên bi n:Extended;
Tên bi n:Comp;
Trong nh ng tính toán thông th ng, khi m t i l ng là s th c, ta nên ch n cách
khai báo u tiên.
2.2.2. Các hàm và th t c liên quan
Các phép tính s h c i v i các s th c
c ký hi u nh sau:
C ng +
Tr
Nhân *
Chia /
Các quy nh khi vi t các bi u th c s th c c ng gi ng nh
i v i bi u th c s
nguyên trong m c 2.1.2.
Sau ây là các hàm chu n tr giúp các tính toán v i s th c.
Hàm Abs(X): Hàm này có giá tr b ng tr tuy t i ki u s th c c a giá tr bi n ki u
th c X ho c s th c X.
Hàm ArcTan(X): Hàm này có giá tr là cung trong kho ng (-π/2, π/2) có tang ki u
th c b ng giá tr c a bi n ki u s th c X hay s th c X.
Hàm Exp(X): Hàm này có giá tr b ng lu th a c s e c a giá tr bi n ki u s th c
X ho c s th c X (eX).

Hàm Ln(X): Hàm này có giá tr b ng lô ga c s e c a giá tr bi n ki u s th c X
ho c s th c X.
Hàm Sin(X): Hàm này có giá tr b ng sin(X), X tính theo Radian.
Hàm Cos(X): Hàm này có giá tr b ng cosin(X), X tính theo Radian.
Hàm Pi: Hàm này cho ta giá tr c a s π (3.1415....).
Hàm Int(X): Hàm này có giá tr b ng ph n nguyên nh ng có ki u s th c c a giá tr
bi n ki u s th c X ho c s th c X (Ph n nguyên c a s th c X b ng s nguyên l n
nh t trong các s nguyên không l n h n X).
Hàm Frac(X) = X - Int(X): hàm này c ng có ki u s th c.
Hàm Sqr(X): Hàm này có giá tr b ng bình ph ng c a giá tr bi n ki u s th c X
ho c s th c X.
Hàm Sqrt(X): Hàm này nh n giá tr b ng c n b c hai c a giá tr không âm c a bi n
ki u s th c X ho c s th c không âm X. Chú ý r ng khi dùng hàm này, giá tr c a X
pahir không âm.
Hàm Random: Hàm này cho ta m t s th c ng u nhiên trong kho ng (0,1). Khi
dùng hàm này ta ph i khai báo n v ch ng trình CRT trong m c Uses và tr c ó
ph i có lênh Randomize;.
l

c v ngôn ng l p trình Pascal

11


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

Hàm Round(X): Hàm này nh n giá tr b ng s nguyên g n s th c X nh t nh ng có
ki u là ki u s nguyên. Trong tr ng h p ph n phân c a 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 b ng ph n nguyên c a giá tr bi n ki u s th c X
ho c s th c X nh ng có ki u là ki u s nguyên.
t bi u th c có giá tr th c là bi u th c ch a các bi n s th c, các s th c liên k t
i các hàm chu n.
t bi u th c s là bi u th c ch a các bi n s , các s liên k t b i các hàm chu n c a
các ki u s . Ki u c a m t bi u th c s là ki u c a bi n s ho c s có mi n giá tr
ng nh t.
2.2.3. Các cách nh n giá tr
nh n giá tr c a m t bi n ki u s th c, ta có th dùng m t trong hai cách sau:
Dùng l nh gán
Tên bi n:=bi u th c có giá tr ki u s ;
Nh n t bàn phím b ng l nh
Read/ReadLn(tên bi n);
Các
u c n chú ý khi dùng các l nh này c ng t ng t nh ã vi t trong cu i m c
2.1.3.
Chú ý quan tr ng
Khi dùng các l nh gán, bi n ki u s th c có th
c gán giá tr c a bi u th c s
nguyên ho c s th c nh ng n u bi n ki u s nguyên, ta không th gán cho nó giá tr
a bi u th c ki u s th c dù giá tr ó là s nguyên.
Ví d , v i các khai báo bi n
X:Integer;
Y:Real;,
nh gán th hai sau ây không h p l ngay c khi giá tr c a Y là s nguyên theo
ngh a Toán h c:
Y:=5;
X:=Y;
ây c ng là m t

u khác v i thói quen trong Toán h c. M t cách t ng quát, nh
gán các bi n s X:=Y ch có th
i v i các bi n Y có ki u v i mi n giá tr không l n
n mi n giá tr c a ki u bi n X.
2.2.4. Cách vi t giá tr bi n ra màn hình
Có hai cách vi t s th c ra màn hình:
Cách vi t không quy cách: dùng l nh
Write/writeln(Tên bi n);
Hai l nh này u vi t ra màn hình giá tr c a bi n. S khác nhau c ng t ng t nh
ã nói m c 2.1.4.
Các l nh vi t trên s vi t s th c d i d ng d u ph y ng. Mu n vi t s th c d ng
thông th ng, ta ph i dùng cách vi t có quy cách:
l

c v ngôn ng l p trình Pascal

12


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

Write/writeln(Tên bi n:K:L);
có ngh a là ta dùng K v trí
vi t giá tr c a bi n trong ó dùng L v trí cho các ch
c a ph n phân c a s . Vi c l a ch n các giá tr c a K và L do ng i l p trình c
ng s ch s c a s c n vi t ra, tuy nhiên rõ ràng L không th l n h n K-2.
Tr ng h p K=0, l nh có ngh a là dùng
ch

vi t giá tr .
Ví d . Ch ng trình nh p t bàn phím hai s th c b, c sau ó gi i ph ng trình b c
nh t bX + c = 0.
USES CRT;
VAR
B,C:REAL;
BEGIN
CLRSCR;
WRITE('NH P S TH C B: ');READLN(B);
WRITE('NH P S TH C C: ');READLN(C);
WRITELN('C N GI I PH NG TRÌNH BX + C = 0');
IF B=0 THEN
BEGIN
IF C=0 THEN WRITELN('PH NG TRÌNH VÔ
NH')
ELSE WRITELN('PH NG TRÌNH VÔ NGHI M')
END
ELSE WRITELN('PH NG TRÌNH CÓ M T NGHI M DUY NH T = ',-C/B:0:2);
END.

2.3. Bi u th c s h c
Trong l p trình, bi u th c s h c
c hi u là bi u th c nh n
c t các bi n ki u
, các h ng s nh m t s h u h n phép toán c ng, tr , nhân, chia, Div, Mod và các
hàm chu n ki u s c a Pascal. Khi vi t bi u th c s h c,
phân bi t các s h ng, ta
ch
c phép dùng các d u óng/m ngo c tròn ( và ).
tv n

t ra là khi trong m t bi u th c s h c có nhi u bi n ki u s khác nhau
thì ki u c a giá tr bi u th c s là ki u nào? Câu tr l i là ki u c a m t bi u th c s
c xác nh là ki u c a bi n tham gia bi u th c có mi n giá tr l n nh t, ch ng h n
tích m t bi n ki u s th c và m t bi n ki u s nguyên có ki u s th c, t ng m t bi n
ki u Longint v i m t bi n ki u Integer có ki u Longint, tích m t bi n ki u Integer
i m t bi n ki u Integer có ki u Integer. Do ó khi tính toán các s , ta c n d li u
tr c k t qu tính toán
tránh nh n
c giá tr không chính xác ho c b báo l i
tràn s h c (Arithmetic Overflow) n u tr c ó ta t d n biên d ch
{$Q+}
Ví d khi tính di n tích S c a m t hình ch nh t có hai c nh D và R, n u ta khai báo
D và R ki u Integer, m c dù ta khai báo S ki u Longint nh ng giá tr c a S có th
không nh n
c úng n u ta tính S b ng công th c S = DR. Nguyên nhân vì hai s
ki u Integer khi nhân v i nhau có th v t ra kh i ph m vi Integer.
k t qu tính
luôn úng, ta có th dùng hai l nh thay vì m t: S:=1; S:=S*D*R.
Trong ch ng trình sau n u nh p giá tr D = R =1000, ta s th y di n tích âm n u
không t d n biên d ch {$Q+}và b báo l i tràn s h c (Arithmetic Overflow) n u
tr c ó ta t d n biên d ch ki m soát các tính toán ra ngoài ph m vi c a ki u s
c khai báo: {$Q+}.
l

c v ngôn ng l p trình Pascal

13


Nguy n Xuân My


Tr i hu n luy n IOICamp.net

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 li u ki u lô gic (boolean)
2.4.1. Khái ni m
u ki n lôgic
t nh lô gic c ng còn g i là u ki n lô gic là m t
u kh ng nh mà ch có
úng m t trong hai kh n ng x y ra là úng hay sai. úng/sai
c g i là các giá tr
chân lý hay g i t t là giá tr và trong Pascal ta dùng các tên True, False.
Ví d 5 là s nguyên t là m t m nh
lô gic có giá tr úng nh ng à i ti ng m ru
nhè nh không là m t m nh lô gic.
i hai u ki n lô gic P và Q, ta có th l p các u ki n lô gic sau:
P và Q
P ho c Q
Không P
Các phép và, ho c, Không

c g i là các phép toán lô gic.
Giá tr c a các u ki n này
c cho trong b ng sau.
P
úng
úng
Sai
Sai

Q
úng
Sai
úng
Sai

P Và Q
úng
Sai
Sai
Sai

P Ho c Q
úng
úng
úng
Sai

Không P
Sai
Sai

úng
úng

Trong l p trình, i l ng ki u lôgic là các i l ng ch nh n m t trong hai giá tr
TRUE ( úng) và FALSE (sai). Các giá tr True, False
c xem là các giá tr c a
bi n ki u Boolean.
Các i l ng ki u lô gic th ng th hi n d i d ng các
u ki n lô gic nh
u
ki n so sánh giá tr c a các bi n, có hay không có m t s ki n nào ó, tìm th y/ch a
tìm th y l i gi i . . .
Các
u ki n lô gic th ng do các
u ki n lô gic n gi n ghép l i nh các liên t
và, ho c, không . . . Khi vi t các
u ki n lô gic ph c h p, Pascal dùng các t khoá
sau th hi n các liên t ó:
AND - và
OR - hay là/ho c
NOT - không
l

c v ngôn ng l p trình Pascal

14


Nguy n Xuân My


Tr i hu n luy n IOICamp.net

Khi ó, n u các
u ki n thành ph n là các
u ki n so sánh,
u ki n này ph i
c t trong m t c p ngo c n. Ví d v m t toán h c, ta vi t 3Pascal ta ph i vi t
(3Các cách vi t sau là sai
33ng nh khi vi t các bi u th c s h c,
phân bi t các thành ph n trong
u ki n
lô gic, ta ch
c dùng các d u ngo c tròn. N u không dùng d u ngo c tròn, th t
u tiên s là Not, And, Or.
Sau ây là m t s
u ki n lô gic vi t trong so sánh v i m t s
u ki n th ng g p
trong toán h c.
Toán h c
x≠0
X ∈ [a,b]
X ∉ [a,b]
X là chính ph

ng


p trình
x<>0
(X>=a) and (X<=b) a<=X<=b
(X<a) or (x>b)
(X>=0) and (Frac(Sqrt(X))=0)
(X>=0) and
(Int(Sqrt(X))=Sqrt(x))

i v i ki u d li u này có m t hàm chu n
Odd(X): i bi n s nguyên X, hàm nh n giá tr True, n u X l , hàm nh n giá tr
False n u X ch n.
2.4.2. Vi c nh n giá tr và vi t giá tr ra màn hình.
Khác v i các ki u d li u s , bi n ki u Boolean ch có th nh n giá tr b ng l nh gán:
Tên bi n :=
u ki n lô gic;
Ta c ng có th vi t giá tr c a
u ki n lô gic và nói riêng là bi n ki u boolean ra
màn hình b ng m t trong hai l nh
Write( KLG) ho c WriteLn( KLG)
2.4.3. Câu l nh If < KLG> Then <Nhóml nh1> Else <Nhóml nh2>
Khi gi i m t s bài toán, ta th ng có các câu bi n lu n nh :
ng 1
u m t K nào ó tho mãn thì . . .
di n t câu này, ta có th dùng câu l nh sau:
IF < KLG> THEN <Nhóml nh>;
(*)
Trong câu l nh (*), n u
u ki n lô gic úng, nhóm l nh
c th c hi n sau ó s
th c hi n l nh ti p theo c a ch ng trình, n u

u ki n lô gic không úng, l nh ti p
theo c a ch ng trình
c th c hi n.
ng 2
u m t K nào ó tho mãn thì . . . n u không thì . . . . (2)
l

c v ngôn ng l p trình Pascal

15


Nguy n Xuân My

di n

Tr i hu n luy n IOICamp.net

t câu này, ta có th dùng câu l nh sau:
IF < KLG> THEN <Nhóml nh1> ELSE <Nhóml nh2>;

(**)

Trong câu l nh (**), n u
u ki n lô gic úng, nhóm l nh 1
c th c hi n, n u
không, nhóm l nh 2
c th c hi n; sau ó s th c hi n l nh ti p theo c a ch ng
trình.
Khi dùng các l nh này, ta ph i tuân theo các quy nh sau:

1.
u nhóm l nh có h n m t l nh, ta ph i t trong m t c p Begin-End.
2. Sát tr c Else không có d u ;.
3. Các nhóm l nh trong câu l nh If . . . Then <Nhóm L nh 1> Else 2> c ng có th l i có câu l nh d ng If . . . Then . . . Else . . . khi ó c n quy c
vi c hi u Else nào g n v i If nào. Quy c ó là nh sau: Else g n v i If
ngay tr c nó không n m gi a m t c p Begin-End và ch a có Else.
Ch ng trình gi i ph ng trình b c hai cho trong ph n Bài t p và th c hành c a M c
1 có th dùng minh ho cho quy c này.
Ví d 1
uses crt;
var
m,n:longint;
Begin
clrscr;
write('Nhap so nguyen M = ');readln(m);
write('Nhap so nguyen N = ');readln(n);
if n<>0 then
begin
if m mod n = 0 then
writeln(m,' chia het cho ',n)
else writeln(m,' khong chia het cho ',n);
end
else writeln('Khong chia duoc cho so khong');
readln;
End.

Ví d 2
uses crt;
var

a,b,c:Real;
Begin
clrscr;
write('Nhap so th c A = ');readln(a);
write('Nhap so thuc B = ');readln(b);
write('Nhap so thuc C = ');readln(c);
if (a<=b)and(b<=c) then
writeln(b:0:2, nam giua ,a:0:2, va
if (a<=c)and(c<=b) then
writeln(c:0:2, nam giua ,a:0:2, va
if (b<=a)and(a<=c) then
l

c v ngôn ng l p trình Pascal

,c:0:2);
,b:0:2);

16


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

writeln(a:0:2, nam giua
if (b<=c)and(c<=a) then
writeln(c:0:2, nam giua
if (c<=a)and(a<=b) then
writeln(a:0:2, nam giua

if (c<=b)and(b<=a) then
writeln(b:0:2, nam giua
readln;
End.

,b:0:2,

va

,c:0:2);

,b:0:2,

va

,a:0:2);

,c:0:2,

va

,b:0:2);

,c:0:2,

va

,a:0:2);

2.4.4. Câu l nh REPEAT <Nhóml nh> UNTIL < KLG>;

2.4.4.1. Gi i thi u l nh
Câu l nh này có tên là l nh l p v i s b c l p không xác nh. M c ích c a nó là
th c hi n m t cách l p i l p l i m t s l n m t nhóm l nh, s l n l p ph thu c vào
t u ki n lô gic.
Khi th c hi n l nh này, các l nh trong nhóm l nh
c th c hi n, sau ó, n u KLG
úng thì s th c hi n l nh ti p theo c a ch ng trình còn n u KLG sai, s quay l i
th c hi n nhóm l nh c nh th cho t i khi KLG úng.
2.4.4.2. L nh Break
Trong câu l nh Repeat ... Until ...; khi th c hi n các l nh trong nhóm l nh, n u l nh
Break
c th c hi n thì vòng l p k t thúc và sau ó th c hi n l nh ti p theo c a
ch ng trình. Ta có th hi u cách dùng l nh này qua các ch ng trình ví d d i ây.
2.4.4.3. Các ví d
Ví d 1. Nh p d li u úng quy nh
nh Repeat . . . có th dùng b t bu c ng i s d ng ch ng trình nh p d
li u theo úng m t s quy nh nào ó. Nh ng quy nh ó s
c th hi n b i m t
u ki n lô gic ( KLG). Mu n ng i s d ng ch ng trình nh p d li u úng theo
quy nh, ta có th dùng
n ch ng trình sau:
Repeat
. . . . . . .
{Các l nh nh p d li u}
. . . . . . .
Until DKLG;
Ch ng h n mu n nh p m t s nguyên d ng N không l n h n 100, ta có th dùng
các l nh:
Repeat
clrscr;

write( Nhap
readln(n);

so

nguyen

duong

N

khong

lon

hon

100:

);

until (n>0)and(n<=100)and(Frac(n)=0);
Khi th c hi n
n l nh này, n u nh p không úng m t s nguyên d ng không l n
n 100, ng i nh p s ph i nh p l i cho t i khi úng các l nh ti p theo m i
c
th c hi n.
l

c v ngôn ng l p trình Pascal


17


Nguy n Xuân My

Ví d 2. S e

Tr i hu n luy n IOICamp.net

c

nh ngh a nh gi i h n
lim (1 + 1/n)n

nà∞
ó là m t s vô t siêu vi t v i giá tr x p x 2,7132... S e có th tính g n úng b ng
công th c
e ≈ 1 + 1/1! + 1/2! + . . + 1/n!
khi ó sai s s không quá 1/n!.
Bài toán t ra là cho tr c m t sai s SS nào ó, ta c n tính s e v i sai s không
quá SS. Thu t toán tính s e d a vào công th c tính g n úng nói trên. Ta s tính e
ng cách c ng liên ti p vào s 1 các s có d ng 1/1!, 1/2!, . ., 1/k!. Sau m i l n
ng, ta só sánh 1/k! v i SS, n u nó nh h n, quá trình tính k t thúc. S b c l p l i
thao tác c ng không xác nh
c tr c mà tu thu c giá tr c a sai s SS.
Sau ây là ch ng trình
Uses Crt;
Var
E, SS, THEM:Real;

N:integer;
Begin
Clrscr;
Write('B n c n tính s e v i sai s : '); Readln(SS);
E:=1;N:=0;THEM:=1;
Repeat
THEM:=THEM/(N+1);
E:=E+THEM;
N:=N+1;
Until THEMWriteln('e v i sai s không quá ',SS:0:6,' b ng: ',E);
Readln
End.

Ví d 3. Ta bi t r ng n u f(x) là hàm s liên t c có giá tr t i A và B trái d u nhau thì
có giá tr C v i A < C < B sao cho f(C) = 0. Nói chung giá tr c a C không tính
c
chính xác mà ch g n úng v i m t sai s SS nào ó cho tr c.
Bài toán t ra là cho tr c m t hàm s liên t c f(X), m t sai s SS và hai s th c A,
B. Hãy ki m tra xem f(A) và f(B) có trái d u nhau hay không. N u chúng trái d u,
hãy tìm nghi m c a ph ng trình f(X) = 0 v i sai s không quá SS.
Thu t toán mà ta gi i thi u
ây thu c lo i thu t toán "S n s t trên sa m c". Ý
ng c a lo i thu t toán này là s n m t con s t trên m t sa m c mênh mông, ta
chia ôi sa m c, b ng m t cách nào ó (Ví d nh v tinh!) ta nh n bi t
c n a sa
c có s t , ta l i chia ôi n a ó r i l i chia ôi n a có s t . . . m t lúc nào ó
ph n sa m c có s t khá bé thì ta có th d dàng "b t"
cs t .
Trong tr ng h p ang xét, trong

n [A,B] f(X) có nghi m. Xem
n ó nh "sa
c" và nghi m là s t . Chia ôi
n ó thành hai
n (hai n a sa m c)
[A,(A+B)/2] và [(A+B)/2,B]. N u f((A+B)/2) = 0, ta thu
c nghi m c n tìm, n u
l

c v ngôn ng l p trình Pascal

18


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

không,
n ch a nghi m s là m t trong hai
n con mà giá tr c a f t i hai u
mút trái d u nhau. Thay
n [A,B] b i
n con ch a nghi m và l i ti p t c quá
trình chia ôi nh trên. Có hai kh n ng x y ra:
1. Ho c ta thu
c nghi m t i trung m c a m t
n con nào ó
2. Ho c ta nh n
cm t

n ch a nghi m mà
dài c a nó nh h n SS. Khi
ó ta có th nh n u trung
mc a
n ó làm giá tr c a nghi m v i sai s
không quá SS.
l n chia ôi
n có nghi m không xác nh tr c
c mà ph thu c t ng hàm f
th và sai s SS, nh ng ta k t thúc quá trình ó khi m t trong hai kh n ng 1 ho c
2 x y ra.
Ta xét m t ví d . Gi s C là m t s th c d ng và K là m t s nguyên d ng, ta c n
tìm c n s h c b c K c a C.
Gi s X là c n b c K c a C thì f(X) = XK – C = 0
u C = 1 rõ ràng X = 1;
u C < 1, ch n a = 0; b = 1. N u C > 1, ch n a = 1; b = C. Nh v y trong tr ng
p C ≠ 1, hàm f trái d u t i hai u mút
n [a,b]. B ng cách dùng thu t toán trên,
ta có th tìm X v i sai s nh h n SS cho tr c.
Sau ây là ch ng trình v i K = 2.
uses crt;
var
x,a,b,c,ss,fa,fb,td,ftd:real;
BEGIN
repeat
clrscr;
writeln;
writeln('Tinh can bac hai cua mot so thuc duong C');
write('Nhap so thuc duong C = ');readln(c);
until c>0;

repeat
clrscr;
writeln('Voi sai so ss cho truoc');
write('Nhap sai so SS duong va nho hon 0.001: '); readln(ss);
until (ss>0)and(ss<0.001);
if c=1 then writeln('Can bac 2 cua ',c:0:0,' bang ',1)
else
begin
if c<1 then begin a:=0;b:=1;end else begin a:=1;b:=c;end;
repeat
td:=(a+b)/2;
ftd:=td*td-c;
if ftd=0 then break;
fa:=a*a-c;
fb:=b*b-c;
if fa*ftd<0 then b:=td else a:=td;
until b-al

c v ngôn ng l p trình Pascal

19


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

writeln('Can bac 2 cua ',c:0:3,' bang ',td:0:3);
end;

readln;
END.

tính c n b c K, khó kh n là vi c tính giá tr hàm f(X) = XK - C t i các m a và b.
Ta có th thay l nh fa:=a*a-c b ng
n ch ng trình trong ó bi n I dùng
m s l n nhân v i a.
fa:=1;i:=0;
Repeat
Inc(i);fa:=fa*a;
Until i=k;
fa:=fa-c;
ng t
i v i l nh fb:=b*b-c và ftd:=td*td-c.
2.4.5. Câu l nh While < KLG> Do <Nhóm l nh>;
2.4.5.1. Gi i thi u l nh
Câu l nh này c ng có tên là l nh l p v i s b c l p không xác nh. M c ích c a
nó là th c hi n m t cách l p i l p l i m t s l n m t nhóm l nh, s l n l p ph thu c
vào m t u ki n lô gic.
Khi th c hi n l nh này, n u KLG úng, các l nh trong nhóm l nh
c th c hi n,
sau ó, n u KLG v n úng thì s quay l i th c hi n nhóm l nh, n u không, l nh l p
t thúc và th c hi n l nh ti p theo c a ch ng trình.
Khi vi t l nh này, Pascal quy nh n u nhóm l nh có h n m t l nh, nhóm l nh ph i
t gi a m t c p Begin-End.
i l nh Repeat... có th chuy n i thành m t l nh While... và ng c l i theo s
cho trong b ng sau ây trong ó DK là
u ki n lô gic.
While
Repeat


Nhóm l nh
Do
n u
nhóm Not(DK)
Until DK;
l nh
th c Nhóm l nh
hi n
ít
While DK Do Nhóm nh t
m t Repeat
nh
Nhóm l nh
n
Until
Not(DK);
Ta có th chuy n vi c dùng l nh Repeat-Until thành l nh While-Do trong các ví d 2
và 3 trên.
2.4.5.2. L nh Break
ng t nh
i v i câu l nh Repeat ... Until ...; khi th c hi n các l nh
trong nhóm l nh c a l nh While . . ., n u l nh Break
c th c hi n thì vòng l p k t
thúc và sau ó th c hi n l nh ti p theo c a ch ng trình.
2.5. Ki u ký t
l

c v ngôn ng l p trình Pascal


20


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

Ta hi u ký t là các ký t thu c b ng mã ASCII. Có t t c 256 ký t v i các s hi u
0 n 255. S hi u c a ký t
c g i là mã ASCII (th p phân) c a ký t . Ví d
ký t A có mã ASCII b ng 65, ký t a có mã ASCII b ng 97. Chú ý r ng có m t ký
c bi t g i là ký t tr ng th hi n trong các v n b n là ph n tr ng ng n cách gi a
hai t vi t liên ti p. Ký t này
c gõ b ng phím Space - phím dài nh t trên bàn
phím và có mã ASCII b ng 32.
Gi a các ký t có quan h so sánh <. N u C1 và C2 là hai ký t , C1ng C2>C1 n u C1 ng tr c C2 trong b ng mã ASCII.
Khi mu n vi t các
u ki n so sánh gi a các bi n ki u ký t <, >, ≤, ≥, ≠, =, trong
ch ng trình ta vi t t ng ng nh sau:
<, >, <=, >=, <>, =
2.5.1. Cách khai báo
khai báo bi n ki u ký t , ta vi t:
Tên bi n:Char;
Bi n ki u ký t dùng m t byte b nh
ghi nh n giá tr .
2.5.2. Các hàm và th t c liên quan
Hàm Chr(X): Có giá tr là ký t có mã ASCII th p phân b ng giá tr c a bi n X
ki u Byte ho c s nguyên X trong ph m vi 0..255.
Hàm Ord(C): Có giá tr là mã ASCII th p phân c a ký t là giá tr c a C.

Hàm Pred(C): Có giá tr b ng ký t
ng ngay tr c ký t là giá tr c a C trong
ng mã ASCII.
Hàm Succ(C): Có giá tr b ng ký t
ng ngay sau ký t là giá tr c a C trong
ng mã ASCII.
Hàm UpCase(C): Có giá tr b ng ch cái hoa ng v i ký t là giá tr c a C n u ký
là giá tr c a C là ch cái và b ng C n u C không là ch cái.
Hàm ReadKey: có giá tr b ng ký t gõ t bàn phím.
Bi u th c ký t g m các bi n và các ký t liên k t b i các hàm chu n.
2.4.3. Các cách nh n giá tr
ng t nh
i v i các bi n ki u s ,
nh n giá tr cho m t bi n ki u ký t , ta có
th dùng m t trong hai cách:
Dùng l nh gán
Tên bi n:=bi u th c có giá tr là ký t ;
Nh n t bàn phím b ng l nh
Readln/Read(tên bi n);
2.4.4. Cách vi t giá tr bi n ra màn hình
vi t giá tr c a bi n ki u ký t ra màn hình, ta dùng l nh
Write/writeln(Tên bi n ki u ký t );
Hai l nh này u vi t ra màn hình giá tr c a bi n. S khác nhau Write/writeln
ng t ng t nh ã nói cu i m c 2.1.4.
Ta c ng có th dùng cách vi t có quy cách nh khi vi t các s
l

c v ngôn ng l p trình Pascal

21



Nguy n Xuân My

Tr i hu n luy n IOICamp.net

Write/writeln(bi u th c ki u ký t :K);
khi ó ta s có K v trí vi t giá tr và giá tr luôn
c vi t ph i nh t trong ph m vi
ó.
Chú ý quan tr ng
Trong ch ng trình, khi vi t m t ký t c th , ta ph i vi t ký t ó gi a hai d u '
nh ng khi nh p t bàn phím m t ký t c th , ta ch gõ úng ký t ó.
2.4.5. Các ví d
Ví d 1. Vi t ch ng trình nh p t bàn phím m t ký t C và cho bi t kh n ng nào
trong các kh n ng sau x y ra:
C là ch cái th ng
C là ch cái hoa
C là ch s
C không là ch cái hay ch s
Sau ây là ch ng 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 th c hi n m t ch ng trình làm m t vi c nào ó ví d gi i ph ng trình
c hai t ng quát, ta muôn th c hi n ch ng trình ó liên ti p v i các d li u vào
khác nhau. Ta có th s a các ch ng trình ã có nh sau.
{Ph n các khai báo thêm bi n YK ki u Char}
. . . . .
Begin
Repeat
<Các l nh th c hi n m t vi c nào ó>
. . . . .
Write( Ban co muon tiep tuc khong (C/K)? );
Yk:=readkey;
Until Upcase(yk)=
;
End.

l

c v ngôn ng l p trình Pascal

22



Nguy n Xuân My

Tr i hu n luy n IOICamp.net

Ví d 3. Nh p t bàn phím hai ký t X và Y. Hãy cho bi t X hay Y
ng mã ASCII

ng tr

c trong

uses crt;
var
x,y:char;
Begin
clrscr;
write('Nhap ky tu X = ');readln(x);
write('Nhap ky tu Y = ');readln(y);
if xwriteln(x,' dung truoc ',y,' trong bang ma ASCII');
if x=y then writeln(x,' bang ',y);
if x>y then
writeln(x,' dung sau ',y,' trong bang ma ASCII');
readln;
end.

2.5. Câu l nh CASE <bi uth c> OF <Cáctìnhhu ng> END;
2.5.1. Gi i thi u l nh
Trong khi gi i nhi u bài toán, có th l i gi i ph thu c vào nhi u tình hu ng (vi t t t
là TH), m i tình hu ng

c quy nh b i m t s giá tr c a m t bi u th c có giá tr

nguyên hay ký t . Khi ó ta có th dùng câu l nh này
di n t quá trình bi n
lu n.
nh có m t trong hai d ng sau:
ng th nh t
Case Bi uth c Of
TH1:Nhóml nh1;
TH2:Nhóml nh2;
. . .
THK:Nhóml nhK;
End;
i l nh d ng th nh t, khi th c hi n, n u giá tr c a bi u th c thu c tình hu ng I,
1≤I≤K nhóm l nh I
c th c hi n, sau ó th c hi n ti p l nh ngay sau l nh Case.
ng th hai
Case Bi uth c Of
TH1:Nhóml nh1;
TH2:Nhóml nh2;
. . .
THK:Nhóml nhK;
Else Nhóml nhK+1;
End;
i l nh d ng th hai, khi th c hi n, n u giá tr c a bi u th c thu c tình hu ng I,
1≤I≤K nhóm l nh I
c th c hi n n u không, nhóm l nh K+1
c th c hi n, sau
ó th c hi n ti p l nh ngay sau l nh Case.
Khi dùng l nh này, Pascal có các quy nh sau:

1. Bi u th c ch có th có giá tr ho c ki u ký t ho c ki u s nguyên.
l

c v ngôn ng l p trình Pascal

23


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

2. Các tình hu ng có th là m t giá tr c th c a bi u th c ho c m t
n giá tr
liên ti p mà bi u th c có th nh n. Khi ó,
n giá tr
c vi t nh sau: Giá
tr
u. .Giá tr cu i.
3.
u nhóm l nh có h n m t l nh thì nhóm l nh ph i t gi a m t c p BeginEnd.
2.5.2. Các ví d
Ví d 1. Nh p t bàn phím m t ký t và c n thông báo ký t ó là ch cái/ch s /d u
phép toán/tr ng h p khác.
uses crt;
var
ch:char;
Begin
clrscr;
write('Moi ban nhap mot ky tu ');readln(ch);

case Ch of
'A'..'Z','a'..'z':WriteLn('Ky tu la chu cai');
'0'..'9':WriteLn('Ky tu la chu so');
'+','-','*','/':WriteLn('Ky tu la dau phep toan');
else
WriteLn('Ky tu khong la chu cai hay chu so hay dau phep toan');
end;
readln;
End.

Ví d 2. Trên m t b ng ô vuông kích th c MxN, M và N nguyên d ng có giá tr
không l n h n 100000. Các dòng ô vuông ánh s t 1 n M t trên xu ng d i,
các c t ô vuông ánh s t 1 n N t trái sang ph i. M t rô b t ng ô thu c dòng
X, c t Y.
t l nh
u khi n chuy n ng c a rô b t g m hai s nguyên H, K, H thu c mi n
giá tr 1..4 ch h ng chuy n ng c a rô b t c n th c hi n: 1 (B c), 2 (Nam), 3
ông) và 4 (Tây), K là m t s nguyên d ng th hi n s b c di chuy n. Sau khi
nh n l nh, rô b t s di chuy n theo h ng H K ô tính t ô [X,Y].
Sau khi th c hi n m t l nh, có hai kh n ng x y ra:
1. Rô b t i ra ngoài b ng.
2. Rô b t v n trong b ng.
Vi t ch ng trình nh p các giá tr M, N, X, Y, H, K t bàn phím và thông báo ra màn
hình các thông tin sau:
Dòng th nh t ghi s 1 ho c 2 tu theo kh n ng 1 ho c 2 x y ra.
u dòng th nh t ghi s 2, dòng th hai ghi ch s dòng và ch s c t c a ô mà rô
t ng sau khi th c hi n l nh.
uses crt;
var
m,n,h,x,y,k,kn:longint;

Begin
clrscr;
l

c v ngôn ng l p trình Pascal

24


Nguy n Xuân My

Tr i hu n luy n IOICamp.net

write('So dong cua bang M = ');readln(m);
write('So cot cua bang N = ');readln(n);
write('Vi tri dong cua ro bot X = ');readln(x);
write('Vi tri cot cua ro bot Y = ');readln(y);
write('Huong chuyen dong cua ro bot (so nguyen 1..4):
readln(h);
write('So buoc chuyen dong cua ro bot: ');readln(k);
case h of
1:
begin
dec(x,k);
if x<1 then kn:=1 else kn:=2;
end;
2:
begin
inc(x,k);
if x>m then kn:=1 else kn:=2;

end;
3:
begin
inc(y,k);
if y>n then kn:=1 else kn:=2;
end;
4:
begin
dec(y,k);
if y<1 then kn:=1 else kn:=2;
end;
else kn:=0;
end;
if kn=0 then writeln('Gia tri huong nhap khong dung');
if kn=1 then writeln('Ro bot ra ngoai bang');
if kn=2 then
begin
writeln('Ro bot o trong bang');
writeln('Vi tri moi cua Ro bot: dong ',x,', cot ',y);
end;
readln;
End.

');

Ví d 3. Ch ng trình sau nh p t bàn phím tháng trong ph m vi 1..12 và m t n m
nào ó sau ó thông báo ra màn hình s ngày c a tháng ó.
USES CRT;
VAR
T,N,SN:INTEGER;

BEGIN
WRITE('B n c n tính s ngày c a tháng ');READLN(T);
WRITE('N m ');READLN(N);
CASE T OF
l

c v ngôn ng l p trình Pascal

25


×