Tài liệu sơ lược về ngôn ngữ lập trình pascal, dễ hiểu
Trang 1Nguy n Xuân My Tr i hu n luy n IOICamp.net
L C V NGÔN NG L P TRÌNH PASCAL
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 ntí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 nkhô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 nchú ý 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 ptrình Pascal có hai IDE ang c dùng ph bi n: Turbo Pascal và Free Pascal Tuynhiên Free Pascal s là IDE c dùng lâu dài vì có th ch y trong c môi tr ngWindows 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ôngqua 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àitoá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áytí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
Trang 2Nguy n Xuân My Tr i hu n luy n IOICamp.net
- 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)
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òngthô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:
Pascal có m t s t c bi t g i là khoá (Keyword) g m 52 t sau:
Trang 3Nguy n Xuân My Tr i hu n luy n IOICamp.net
DESTRUCTOR IMPLEMENTATION PROCEDURE USES
Khi s d ng Pascal gi i các bài toán (theo ngh a nêu trong ch ng tr c), trongphá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èmtheo 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àykhông gây nên khó kh n vì m t s t khoá n gi n th ng c dùng nhi utrong 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ùngcá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 chophé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áchkhai báo v chúng
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 ncá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
Trang 4Nguy 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 nhcá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 ngtrì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
Trang 5Nguy 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
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ó thdù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à
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
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ácfile 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 Edit Search Run Compile Debug Tools Options Windows Help
Trang 6Nguy n Xuân My Tr i hu n luy n IOICamp.net
-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
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ìnhkhông còn l i
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
Trang 7Nguy 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 saunà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áchkhai báo sau ây
Khi vi t các bi u th c s h c, các phép tính c ký hi u nh sau:
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ó thdù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
Trang 8Nguy 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 cchu 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áccù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 unhiê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ìnhCRT 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 icá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 baonhiêu, ta gõ t bàn phím sau ó gõ phím Enter
Trang 9Nguy 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ànphí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 pnh
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 dcò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 udò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:
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ànhình t ng, hi u, div và mod c a hai s ó
USES CRT;
Trang 10Nguy 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);
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ùngtrong 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à
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)
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
Trang 11Nguy n Xuân My Tr i hu n luy n IOICamp.net
Comp -9.2e18 9.2e18 19-20 8
Chú ý r ng ki u Comp luôn là s nguyên v i giá tr t -263+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:
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
Trang 12Nguy 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á
Trang 13Nguy n Xuân My Tr i hu n luy n IOICamp.net
IF C=0 THEN WRITELN('PH NG TRÌNH VÔ NH')
ELSE WRITELN('PH NG TRÌNH VÔ NGHI M')
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 itrà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ó thkhô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ínhluô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 ukhô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+}.
Trang 14Nguy n Xuân My Tr i hu n luy n IOICamp.net
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);
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 Q P Và Q P Ho c Q Không P
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á trTRUE ( úng) và FALSE (sai) Các giá tr True, False c xem là các giá tr c a
bi n ki u Boolean
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 atì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
Trang 17Nguy n Xuân My Tr i hu n luy n IOICamp.net
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 theoquy nh, ta có th dùng n ch ng trình sau:
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
Trang 20Nguy n Xuân My Tr i hu n luy n IOICamp.net
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
Repeat Nhóm l nh 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
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 tthúc và sau ó th c hi n l nh ti p theo c a ch ng trình
2.5 Ki u ký t
Trang 21Nguy n Xuân My Tr i hu n luy n IOICamp.net
Gi a các ký t có quan h so sánh < N u C1 và C2 là hai ký t , C1<C2 hay t ng
ng 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
Trang 22Nguy n Xuân My Tr i hu n luy n IOICamp.net
Trang 25Nguy n Xuân My Tr i hu n luy n IOICamp.net
l n xu t hi n trong xâu c g i là dài c a xâu Ta th a nh n m t xâu c bi t
i là xâu r ng Xâu r ng là xâu không có ký t nào (do ó có dài b ng 0) c
ký hi u là '', xâu này th ng c dùng kh i t o giá tr c a m t xâu ký t cxây d ng d n qua nhi u b c
hi n trong xâu Ví d xâu Khai báo s c ghi nh n nh sau:
Cách th hai
Tên bi n:String[N];
i cách khai báo này, xâu có dài không quá N v i N là s có giá tr nguyên
ng c th không l n h n 255 Giá tr c a bi n s c ghi nh n trong n N+1byte liên ti p trong ó byte u tiên ghi dài xâu còn các byte ti p theo l n l t m ibyte ghi m t ký t thu c xâu theo th t xu t hi n trong xâu
Ví d theo th ng kê, tên m i ng i Vi t Nam u không quá 30 ký t , ta có th khaibáo nh sau:
Var Ten:String[30];
u S là m t bi n ki u xâu ký t , v i i là m t s nguyên d ng t 1 n dài c a
S, S[i] ký hi u ký t th i c a xâu S tính t ký t trái nh t c a xâu Khi ó S[0] ghi
Trang 26Nguy n Xuân My Tr i hu n luy n IOICamp.net
Hàm Copy(S, M, N): Có giá tr b ng xâu con g m N ký t liên ti p c a xâu S
t u t ký t th M
Ví d n u S = 'abcdefghijk' thì Copy(S,3,4) = 'cdef'
u t ký t th M không có N ký t liên ti p thì Copy(S,M,N) cho ta n uôi
a xâu S b t u t ký t th M
Hàm Pos(S1, S2): Có giá tr b ng s nguyên d ng M là v trí xu t hi n u tiên
a xâu S1 trong xâu S2 n u S1 xu t hi n trong S2 và b ng 0 n u S1 không xu t hi ntrong S2
Ví d n u S1 = 'ab' và S2 = 'cabddab' thì Pos(S1,S2) = 2 nh ng n u S3 = 'db' thìPos(S3,S2) = 0
Th t c Delete(S, M, N); Th t c này xoá N ký t liên ti p b t u t ký
th M c a xâu S N u t ký t th M không có N ký t liên ti p thì sau khi th c
hi n l nh Delete(S,M,N), xâu S s b xoá i n cu i b t u t ký t th M
Ví d N u S = 'abcdefghijk' thì sau khi th c hi n l nh Delete(S,4,4);, S s là xâu'abchijk'
Th t c Insert(S1, S2, N); Th t c này chèn xâu ký t S1 vào tr c ký
Th t c Val(S, X, Code); V i th t c này, n u xâu S là d ng vi t c a m t s , k t
qu cho ta s X là d ng s c a S và giá tr c a Code (ki u Integer) s b ng 0 ( úng)
u xâu S không là d ng vi t c a m t s , k t qu cho ta giá tr c a Code khác 0 (sai)
Ví d n u S = '1.35' thì sau khi th c hi n l nh Val(S,X,Code), ta có X = 1.35 và Code
= 0 Nh ng n u S = '1,35' thì sau khi th c hi n l nh Val(S,X,Code), ta có Code ≠ 0
và d nhiên không có giá tr c a X
Trang 27Nguy n Xuân My Tr i hu n luy n IOICamp.net
Chú ý
ng nh khi s d ng l nh gán cho các bi n s , ta có th gán tr là m t ký t cho m t
bi n xâu ký t nh ng vi c gán tr là m t xâu ký t cho m t bi n ki u ký t là không
p l dù xâu ó có dài b ng 1
Trong ch ng trình, khi vi t m t xâu ký t c th , ta ph i vi t xâu ký t ó gi a hai
u ' nh ng khi nh p t bàn phím m t xâu ký t c th , ta ch gõ úng xâu ký t ó
Chú ý quan tr ng
Trong ch ng trình, ghi vi t m t xâu 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 xâu ký t c th , ta ch gõ úng các ký t thu c xâuó
write('Nhap xau ky tu thu nhat S1= ');readln(s1);
write('Nhap xau ky tu thu hai S2= ');readln(s2);
Trang 28Nguy n Xuân My Tr i hu n luy n IOICamp.net
writeln('Xau ',s,' sau khi xoa 5 ky tu lien tiep');
writeln('bat dau tu ky tu thu 3 bang ',s);
writeln('Xau nhap vao S = ',s);
writeln('Doan gom 5 ky tu lien tiep cua xau ',s);
writeln('bat dau tu ky tu thu 3 bang ',copy(s,3,5));
readln;
End.
Ví d 2 Vi t ch ng trình nh p t bàn phím m t ký t C và m t xâu ký t S Hãycho bi t s l n xu t hi n c a C trong S K t qu thông báo ra màn hình
gi i bài toán này, ta l n l t xét các ký t c a xâu S b t u t ký t th nh t n
Trang 29Nguy n Xuân My Tr i hu n luy n IOICamp.net
write('Nhap mot ky tu: ');readln(c);
write('Nhap mot xau ky tu: ');readln(s);
writeln('Ky tu ',c,' khong xuat hien trong xau ',s)
else writeln('Ky tu ',c,' xuat hien trong xau ',s)
readln;
End.
Ví d 3 Vi t ch ng trình nh p t bàn phím xâu ký t S Hãy cho bi t có hay không
t xâu ký t X≠S sao cho S là ghép m t s l n xâu X N u có xâu X nh v y, ch nxâu X có dài l n nh t có th c K t qu thông báo ra màn hình nh sau: N ukhông có xâu X nh v y, vi t s 0, n u có, vi t s K là dài xâu X
Ta có nh n xét sau: n u có xâu X, dài c a xâu X b ng K ph i là c c a N, dàixâu S và X ph i là n u g m K ký t c a S Do ó, v i m i giá tr K là c c a
N, ký hi u L = N div K, ta xét xâu S1 là ghép c a L n u g m K ký t c a S
u S1 = S, ta có n u ó là m t xâu X c n tìm Vì yêu câu ch n X có dài l n
nh t, ta xét các giá tr K gi m d n, giá tr u tiên tho mãn co X có dài l n nh t ghi nh n vi c có/không có xâu X, ta dùng m t bi n ki u Boolean Found màFound = True n u có X và b ng False n u không có X
Sau ây là ch ng trình
uses crt;
var