môc lôc Bµi 1
ChuÈn bÞ lËp tr×nh b»ng Turbo Pascal.............................2
Bµi 2
C¸c kiÓu d÷ liÖu trong Turbo Pascal..................................2
Bµi 3
Mét sè c©u lÖnh – Hµm trong Turbo Pascal......................3
Bµi 4
C©u lÖnh lÆp trong turbo pascal......................................3
Bµi 5
Ch¬ng tr×nh con trong Pascal..........................................5
Bµi 6
D÷ liÖu cã cÊu tróc - kiÓu m¶ng.......................................6
Bµi 7
D÷ liÖu kiÓu x©u ký tù.....................................................7
Bµi 8
D÷ liÖu kiÓu b¶n ghi.......................................................14
Bµi 9
D÷ liÖu kiÓu tÖp (File)....................................................19
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809
Bµi 1
ChuÈn bÞ lËp tr×nh b»ng Turbo Pascal
Nªu thuËt to¸n ®Ó thùc hiÖn c¸c c«ng viÖc sau: - T×m nghiÖm cña ph¬ng tr×nh bËc nhÊt; t×m nghiÖm cña ph¬ng tr×nh bËc II - In ra c¸c íc sè cña mét sè nguyªn cho tríc - X¸c ®Þnh mét sè cã ph¶i lµ nguyªn tè hay kh«ng? - X¸c ®Þnh bé ba sè thùc a,b,c cã ph¶i lµ ®é dµi ba c¹nh cña tam gi¸c hay kh«ng?
Bµi 2
C¸c kiÓu d÷ liÖu trong Turbo Pascal
1. C¸c c©u lÖnh sau, c©u nµo sai cau nµo ®óng? Write(‘Hoi Tin Hoc Viet Nam’); Write(‘Co so Tin hoc Hai Quang’); Wirte(‘Xin Chao Cac Ban’); Realn(m); 2. KiÓm tra l¹i ch¬ng tr×nh sau sai chç nµo? Söa l¹i cho ®óng. Var a,b,c:Integer; cc:Char; tong:Real; Begin Writeln(‘CHUONG TRINH KIEM TRA KIEN THUC BAI CU’) Write(‘Moi ban nhap so a: ’); Readln(a); Write(‘Moi ban nhap so d: ’); Readln(tong); c:=a+tong; cc:=a; c:=5; Write(‘Tong hai so tren la: ’,c); Readln; Trang 2
Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 End.
Bµi 3
Mét sè c©u lÖnh – Hµm trong Turbo Pascal
1. KiÓm tra l¹i ch¬ng tr×nh sau sai chç nµo? Söa l¹i cho ®óng. Var a,b,c:Integer; Begin Writeln(‘CHUONG TRINH KIEM TRA KIEN THUC BAI CU’) Write(‘Moi ban nhap so a: ’); Readln(a); Write(‘Moi ban nhap so d: ’); Readln(d); c:=a+b; Write(‘Tong hai so tren la: ,c:8:4); Readln; End. 2. NhËp vµo ba sè thùc, kiÓm tra ®ã cã ph¶i lµ ®é dµi ba c¹nh cña tam gi¸c hay kh«ng. NÕu ®óng, thùc hiÖn c¸c c«ng viÖc sau: - TÝnh chu vÞ, diÖn tÝch cña tam gi¸c ®ã. - KiÓm tra xem ®ã lµ tam gi¸c c©n hay ®Òu hay vu«ng hay tam gi¸c thêng. 3. LËp ch¬ng tr×nh gi¶i ph¬ng tr×nh bËc nhÊt. 4. LËp ch¬ng tr×nh t×m nghiÖm cña ph¬ng tr×nh bËc hai. Bµi 4
C©u lÖnh lÆp trong turbo pascal
1. LËp ch¬ng tr×nh tÝnh c¸c tæng sau: s1 = 1+2+3+ . . . +n s2=1+1/2+1/3+ . . . +1/n Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trang 3
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 s3= 1-1/2+1/3-1/4 . . . -1/(2n) s4=1+1/2!+1/3!+ . . . +1/n! 2. LËp ch¬ng tr×nh nhËp vµo mét d·y sè nguyªn d¬ng, tÝnh tæng c¸c sè ®ã. 3. TÝnh c¸c tæng trong bµi tËp 3 (bµi häc sè 3) víi sai sè epxilon cho tríc. (0<epxilon<1). Cã kiÓm tra ®iÒu kiÖn nhËp. 4. Dïng cÊu tróc lÆp Repeat . . . Until ®Ó x¸c ®Þnh mét sè nguyªn nhËp vµo tõ bµn phÝm cã ph¶i lµ sè nguyªn tè hay kh«ng. 5. LËp ch¬ng tr×nh t×m íc chung lín nhÊt vµ béi chung nhá nhÊt cña hai sè nguyªn d¬ng nhËp vµo tõ bµn phÝm. 6. Mét sè nguyªn d¬ng ®îc gäi lµ sè hoµn h¶o nÕu tæng tÊt c¶ c¸c íc cña nã (trõ nã) b»ng chÝnh nã. ViÕt ch¬ng tr×nh kiÓm tra mét sè nhËp vµo tõ bµn phÝm cã ph¶i lµ sè hoµn h¶o hay kh«ng? 7. LËp ch¬ng tr×nh in ra mµn h×nh tÊt c¶ c¸c sè nguyªn tè nhá h¬n mét sè n cho tríc. 8. LËp ch¬ng tr×nh in ra mµn h×nh tÊt c¶ c¸c sè hoµn h¶o nhá h¬n mét sè n cho tríc. 9. LËp ch¬ng tr×nh nhËp vµo mét sè nguyªn. KiÓm ta xem sè ®ã cã bao nhiªu ch÷ sè, In c¸c ch÷ sè ®ã ra mµn h×nh, mçi ch÷ sè trªn mét dßng. 10. LËp ch¬ng nhËp vµo mét sè tõ 1 ®Õn 7. Cho biÕt thêi kho¸ biÓu cña ngµy ®ã. 11. ViÕt ch¬ng tr×nh tÝnh gi¸ trÞ cña Cos(x) theo c«ng thøc: Cos(x) = 1 −
x 2 x 4 x 6 x8 + − + − 2! 4! 6! 8!
12. LËp ch¬ng tr×nh gi¶i hÖ ph¬ng tr×nh:
Trang 4
Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 a1 x + b1 y + c1 = 0 a 2 x + b 2 y + c 2 = 0
13. ViÕt ch¬ng tr×nh nhËp vµo mét sè nguyªn n tõ bµn phÝm (0
14. TÝnh tæ hîp chËp k cña n ( C n ). 15. In ra mµn h×nh 100 sè ®Çu tiªn cña d· sè Fib«naci.
Bµi 5
Ch¬ng tr×nh con trong Pascal
1. X©y dùng c¸c ch¬ng tr×nh con ®Ó thùc hiÖn c¸c viÖc sau: - TÝnh giai thõa cña mét sè nguyªn. - X¸c ®Þnh mét sè cã ph¶i lµ nguyªn tè hay kh«ng? - X¸c ®Þnh mét sè cã ph¶i lµ sè hoµn h¶o hay kh«ng? 2. Sö dông c¸c ch¬ng tr×nh con ë bµi 1, thùc hiÖn c¸c viÖc sau: - NhËp vµo mét d·y c¸c sè nguyªn, x¸c ®Þnh sè nµo lµ sè hoµn h¶o, sè nµo lµ sè nguyªn tè, sè nµo kh«ng ph¶i lµ hoµn h¶o vµ nguyªn tè. 3. Gi¶i ph¬ng tr×nh bËc hai b»ng c¸ch sö dông ch¬ng tr×nh con. 4. Sö dông ch¬ng tr×nh con ®· t¹o ë bµi 1, thùc hiÖn c¸c phÐp tÝnh sau: S = 1 + 2! + 3! + 4! . . . +n! (n<=13) S = 1 + 1/(2*2!) + 1/(3*3!) + . . . + 1/(n*n!) (n<=13) In ra c¸c sè nguyªn tè nhá h¬n 1000 In ra c¸c sè hoµn h¶o trong kho¶ng 100 ®Õn 1000 TÝnh tæng c¸c sè nguyªn tè trong kho¶ng 100 ®Õn 500. Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trang 5
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 NhËp vµo mét sè nguyªn trong kho¶ng 10 ®Õn 10000. TÝnh tæng c¸c ch÷ sè cña sè ®ã. (Sè 9203 cã tæng c¸c ch÷ sè lµ14). TÝnh Sin cña x (®¬n vÞ Radian) theo c«ng thøc: Sinx = x – x3/3! + x5/5! - . . . . . . . +(-1)n+1x2n+1/(2n+1)!
Bµi 6
D÷ liÖu cã cÊu tróc - kiÓu m¶ng
1. NhËp vµo mét m¶ng mét chiÒu c¸c sè nguyªn. In ra c¸c phÇn tö cña m¶ng ®ã. 2. NhËp vµo mét m¶ng mét chiÒu c¸c sè nguyªn vµ thùc hiÖn c¸c c«ng viÖc sau: - In ra tÊt c¶ c¸c sè nguyªn tè cña m¶ng. - In ra tÊt c¶ c¸c sè hoµn h¶o cña m¶ng - TÝnh tæng c¸c phÇn tö cña m¶ng - TÝnh trung b×nh céng c¶ c¸c phÇn tö lµ sè ch½n - TÝnh tæng c¸c phÇn tö t¹i vÞ trÝ lÎ 3. NhËp vµo mét m¶ng hai chiÒu c¸c sè thùc, in ra c¸c phÇn tö cña m¶ng vµ thùc hiÖn c¸c viÖc sau: - TÝnh tæng c¸c phÇn tö cña m¶ng - TÝnh tæng c¸c phÇn tö trªn dßng 3 - TÝnh trung b×nh céng c¸c phÇn tö trªn cét 4 4. NhËp vµo hai ma trËn cÊp MxN, tÝnh tæng hai ma trËn ®ã vµ in ra c¸c phÇn tö cña ba ma trËn trªn.
Trang 6
Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 5. NhËp vµo mét ma trËn vu«ng cÊp m c¸c phÇn tö nguyªn. Vµ thùc hiÖn c¸c c«ng viÖc sau: - In ra m¶ng míi víi c¸c phÇn tö lµ c¸c sè ®¶o t¬ng øng cña m¶ng ban ®Çu. - TÝnh tæng b×nh ph¬ng c¸c phÇn tö trªn ®êng chÐo chÝnh. - TÝnh tæng nghÞch ®¶o cña c¸c phÇn tö trªn ®êng chÐo phô. - TÝnh tæng tÊt c¶ c¸c sè hoµn h¶o cña ma trËn - TÝnh b×nh qu©n c¸c sè nguyªn tè cña ma trËn 6. NhËp vµo m¶ng mét chiÒu c¸c sè nguyªn, thùc hiÖn c¸c c«ng viÖc sau: - TÝnh c¨n bËc hai cña tæng c¸c phÇn tö cã chØ sè chia cho 3 d 2. (m¶ng cã >10 phÇn tö) - TÝnh tæng c¨n bËc hai cña c¸c phÇn tö cã chØ sè chia cho 4 d 3. 7. NhËp vµo hai tËp hîp c¸c sè thùc (gäi lµ tËp A vµ tËp B), mçi tËp hîp cã Ýt nhÊt lµ 5 phÇn tö. - X¸c ®Þnh giao cña hai tËp hîp A vµ B - X¸c ®Þnh hîp cña hai tËp hîp trªn. - X¸c ®Þnh phÇn bï cña B trong A (HoÆc A trong B)
Bµi 7
D÷ liÖu kiÓu x©u ký tù
1. Kh¸i niÖm: D÷ liÖu kiÓu x©u ký tù (chuçi) lµ mét m¶ng bao gåm mét sè (kh«ng qu¸ 255) c¸c ký tù (Character). Sè ký tù tèi ®a cña mét chuçi do ngêi lËp tr×nh ®Þnh nghÜa (Khai b¸o). Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trang 7
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 1.1 C¸ch khai b¸o + Khai b¸o gi¸n tiÕp: Type Tenkhieu = String[n]; Var Tenbien: Tenkieu; Trong ®ã, String lµ tõ kho¸; n lµ ®é dµi tèi ®a cña chuçi stn; 1<=n<=255. Trêng hîp n=255 ta kh«ng cÇn ph¶i khai b¸omµ ta chØ cÇn khai b¸o víi tõ kho¸ String; + Khai b¸o trùc tiÕp: Var st:String[n]. Khi gÆp khai b¸o nh trªn, ta ®îc chuçi st, cã ®é dµi tèi ®a lµ n ký tù. NÕu nhËp d÷ liÖu cho chuçi st mµ nhiÒu h¬n n ký tù, Pascal sÏ tù ®éng c¾t bá c¸c ký tù ë vÞ trÝ n+1. 1.2 Truy xuÊt vµ truy nhËp d÷ liÖu kiÓu chuçi V× chuçi ký tù lµ lµ mét m¶ng bao gåm mét sè ký tù nªn ta cã thÓ coi ®©y lµ mét m¶ng c¸c phÇn tö kiÓu Character ®Ó truy nhËp ®Õn tõng ký tù cña chuçi nh c¸ch truy nhËp, truy xuÊt cña m¶ng mét chiÒu. Ngoµi ra, th«ng thêng ta truy nhËp, truy xuÊt biÕn kiÓu chuçi ký tù th«ng qua tªn biÕn. VÝ dô: Var st:String[100];{st:array[1..100] Of Char;} {Var st:array[1..100] of char} Begin St:= ‘Cong hoa’; Write(‘Chuoi st cua ban la:’ ,st); Write(‘Ky tu thu ba cua chuoi do la: ‘,st[3]); St[2]:=’a’; Write(‘Chuoi st moi la: ‘,st); Trang 8
Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 Readln; End. 2. C¸c phÐp to¸n trªn chuçi ký tù 2.1 PhÐp g¸n Ta cã thÓ thùc hiÖn phÐp g¸n trong chuçi ký tù nh c¸c kiÓu d÷ liÖu kh¸c. VÝ dô: st:=‘Hello’;st1:=‘Pascal’; st2:=’I’’ m a teacher’; Chó ý: H»ng chuçi ký tù ®îc ®Æt gi÷a cÆp dÊu nh¸y (‘’). DÊu nh¸y trong chuçi h»ng ®îc ký hiÖu b»ng hai dÊu nh¸y (‘’); Trong vÝ dô trªn, chuçi st2 cã gi¸ trÞ lµ: I’ m a teacher. 2.2 PhÐp ghÐp nèi chuçi Pascal cho phÐp ngêi lËp tr×nh cã thÓ ghÐp nãi c¸c chuçi ng¾n thµnh mét chuçi dµi theo thø tù c¸c chuçi ghÐp nèi. VÝ dô: St1:= ‘Hello’;st2:= ‘How are you?’ St:=st1+ ‘ ’+st2; Khi ®ã, chuçi st cã gi¸ trÞ lµ: ‘Hello How are you?’ (§Ó ghÐp nèi chuçi, Pascal dïng to¸n tö + ).
2.3 PhÐp so s¸nh chuçi Pascal dïng b¶ng m· ASCII ®Ó so s¸nh c¸c ký tù cïng vÞ trÝ trong hai chuçi víi nhau. VÝ dô: St:=’ABCD’; st2:=’ABCD’ th× st=st2. Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan
ChÝ HiÕu
Trang 9
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 St:=’ABCD’;st1:=’ABDC’ th× st<st1. St=’ABCD’; st1=’ABCDA’ Th× st<st1. St:=’ABCD’;st1:=’aBCD’ th× st<st1. 3. Mét sè thñ tôc, hµm trªn chuçi ký tù. 3.1 Hµm x¸c ®Þnh ®é dµi chña chuçi Tªn hµm: Length D¹ng hµm: Length(st); KÕt qu¶: Cho ®é dµi thùc cña chuçi st. 3.2 Hµm sao chÐp chuçi ký tù Tªnhµm: Copy D¹ng hµm: Copy(st,m,n); KÕt qu¶: Cho mét chuçi cã n ký tù, lÊy tõ ký tù thø m chña chuçi st. VÝ dô: Var st,st1:=string[200]; Begin St:=’ABCDEF’; Write(‘Do dai cua chuoi st la: ’, Length(st)); St1:=Copy(st,3,2); Write(‘Chuoi s1 co gia tri la: ‘,st1); Readln; End. 3.3 Thñ tôc xo¸ mét sè ký tù trong chuçi Tªn thñ tôc: DELETE Trang 10 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 D¹ng thñ tôc: Delete(st,m,n); KÕt qu¶: Xo¸ ®i n ký tù cña chuçi st, tõ vÞ trÝ thø m. VÝ dô: st:=’ABCDEFGH’; Delete(st,3,4); Write(st); 3.4 Thñ tôc chÌn thªm mét sè ký tù vµo chuçi Tªn thñ tôc: INSERT D¹ng thñ tôc: Insert (st1,st2,n); KÕt qu¶: ChÌn chuçi st2 vµo chuçi st1, t¹i vÞ trÝ n (cña chuçi st1) VÝ dô: St1:= ‘ABCGH’; st2:= ‘DEF’; Insert(st1,st2,4); Write(st1); 3.5 Thñ tôc ®æi sè thµnh chuçi Tªn thñ tôc: STR D¹ng thñ tôc: Str(n,st); KÕt qu¶: §æi sè n thµnh chuçi st víi c¸c ký tù cña chuçi nµy lµ tÊt c¶ c¸c ch÷ sè cña sè n. VÝ dô: N:=12345; Str(n,st);{12345=>’12345’} Write(st);{st=’12345’} Write(st[3]);
3.6 Thñ tôc ®æi chuçi sè thµnh sè Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan Trang 11
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 Tªn thñ tôc: VAL D¹ng thñ tôc: Val(st,n,code); KÕt qu¶: §æi chuçi sè st thµnh sè n. NÕu ®æi ®îc, Code cã gi¸ trÞ b»ng 0. NÕu kh«ng ®æi ®îc, Code cã gi¸ trÞ b»ng vÞ trÝ cña ký tù sai trong chuçi st; n b»ng 0. VÝ dô: Val(‘123.45’,m,n);{m=123.45} K:=m+15;{k=138.45} Write(m:8:2, k:8:2);{In ra sè 123.45
vµ 138.45}
Val(‘123.34.45’,m,n); {cho: n=7; m=0) K:=m+10;{k=10;} Write(k); Lu ý: - NÕu sö dông khai b¸o chuçi ký tù trong danh s¸ch ®èi sè cña CTC th× ta phai khai b¸o b»ng ®Þnh nghÜa kiÓu cho chuçi ký tù cÇn sö dông ë ch¬ng tr×nh chÝnh bëi tõ kho¸ TYPE. VÝ dô: Type ht20=String[20]; Var st,st1:ht20; Procedure Thutc( var xau:ht20;m,n:integer); ...... (C¸ch
sö
dông:
Procedure
Thutuc(Var
xau:string[20];m,n:Integer); lµ sai)
Bµi tËp Trang 12 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 1. ViÕt ch¬ng tr×nh nhËp vµo mét x©u ký tù. KiÓm tra xem ®ã cã ph¶i lµ x©u sè hay kh«ng? 2. Mét chuçi ®îc gäi lµ Paladom nÕu chuçi ®ã ®èi xøng qua g¬ng. LËp ch¬ng tr×nh nhËp vµo mét chuçi ký tù, kiÓm tra xem chuçi ®ã cã ph¶i lµ chuçi Paladom hay kh«ng? 3. NhËp vµo danh s¸ch tªn cña mét líp häc sinh. S¾p xÕp danh s¸ch ®ã theo Alfabet cña tªn. 4. NhËp vµo mét sè nguyªn trong kho¶ng 10 ®Õn 1000. §äc sè ®ã. VÝ dô: NhËp sè 9203 th× ®äc ra lµ sè ChÝn ngh×n hai tr¨m linh ba. TÝnh tæng c¸c ch÷ sè cña sè ®ã ( sè 9203 cã tæng c¸c ch÷ sè lµ 14). 5. ViÕt ch¬ng tr×nh nhËp vµo mét x©u ký tù gåm c¸c tõ. LËp mét thñ tôc ®Ó lo¹i bá c¸c ký tù trèng v« nghÜa. 6. ViÕt ch¬ng tr×nh nhËp vµo mét x©u tõ bµn phÝm. H·y ®Õm trong x©u ®ã cã bao nhiªu tõ? (Tõ lµ mét d·y liªn tôc c¸c ký tù kho¸c kho¶ng tr¾ng). 7. ViÕt ch¬ng tr×nh In ra mµn h×nh mét dßng ch÷ ch¹y liªn tôc tõ ph¶i qua tr¸i mµn h×nh cho ®Õn khi gâ mét phÝm bÊt kú. 8. NhËp mét x©u S tõ bµn phÝm. X©u S gåm n sè thùc ®îc viÕt c¸ch nhau bëi dÊu phÈy, vÝ dô S= ‘1.23,3.45,-0.85,9.098,-5.78’. H·y chuyÓn c¸c sè tõ x©u S vµo m¶ng sè thùc A[n]. 9. NhËp tõ bµn phÝm mét x©u ký tù S. XÐt xem cã hay kh«ng mét x©u X (cã ®é dµi nhá nhÊt) sao cho S lµ ghÐp cña mét sè lÇn liªn tiÕp tõ X. VÝ dô: S = ‘abcabcabcabc’ th× X = ‘abc’; cßn nÕu S = ‘abcac’ th× kh«ng cã x©u X. Th«ng b¸o kÕt qu¶ ra mµn h×nh. Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan Trang 13
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 10. NhËp tõ bµn phÝm hai x©u S1 vµ S2. XÐt xem cã hay kh«ng mét x©u X sao cho c¶ S1 vµ S2 ®Òu lµ ghÐp cña mét sè lÇn liªn tôc tõ x©u X (cã ®é dµi nhá nhÊt). Thån b¸o kÕt qu¶. 11. NhËp vµo tõ bµn phÝm hai x©u S1 vµ S2. H·y xÐt xem cã hay kh«ng S1 (S2) cã ®îc nhËn tõ S2 (S1) b»ng c¸ch g¹ch ®i mét sè ký tù hay kh«ng? Bµi 8
D÷ liÖu kiÓu b¶n ghi
1. Kh¸i niÖm - ®Þnh nghÜa C¸c kiÓu d÷ liÖu cã cÊu tróc ta ®· ®îc häc (M¶ng, x©u) ®Òu ®îc t¹o b»ng tËp hîp c¸c phÇn tö cã cïng kiÓu chuÈn. Trong thùc tÕ chóng ta cÇn c¸c cÊu tróc mµ trong ®ã, c¸c phÇn tö cña nã thÓ cã kiÓu d÷ liÖu kh¸c nhau nhng cã liªn kÕt víi nhau. §Ó t¹o ®îc kiÓu cÊu tróc ®ã, Turbo Pascal ®Þnh nghÜa cho ta B¶n ghi (hay cßn gäi lµ thÎ ghi - RECORD). Nãi c¸ch kh¸c, ®Ó m« t¶ mét ®èi tîng mµ c¸c phÇn tö d÷ liÖu cã m« t¶ kiÓu kh¸c nhau trong Turbo Pascal, ta dïng cÊu tróc kiÓu RECORD. Nh vËy RECORD lµ mét ph¬ng tiÖn linh ho¹t nhÊt ®Ó x©y dùng c¸c kiÓu d÷ liÖu míi. 2. M« t¶ - khai b¸o §Ó m« t¶ kiÓu B¶n ghi trong Turbo Pascal, ta dïng tõ kho¸ RECORD, tiÕp theo lµ danh s¸ch m« t¶ c¸c phÈn tö d÷ liÖu (sau nµy ®îc gäi lµ Trêng (Field)). M« t¶ kiÓu RECORD bao giê còng ®îc kÕt thóc b»ng tõ kho¸ END; §Ó khai b¸o mét kiÓu T, cã cÊu tróc RECORD víi danh s¸ch c¸c trêng cã tªn lµ t1,t2,t3, . . ., tn vµ cã m« t¶ kiÓu t¬ng øng lµ K1, K2, K3, . . ., Kn, ta cã c¸ch viÕt tæng qu¸t sau: TYPE T = RECORD Trang 14 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 t1: K1; t2: K2; t3: K3; ....... tn: Kn; END; VÝ dô: Mét ®Þa chØ nhµ bao gåm c¸c d÷ liÖu: Sè nhµ, tªn phè, tªn thµnh phè, tªn TØnh; ta m« t¶ mét kiÓu RECORD cã tªn lµ Dia_chi nh sau:
TYPE Dia_chi =
RECORD
So_nha: Integer; Ten_Pho: String[30]; Ten_TPho: String[15]; Ten_Tinh: String[20]; END; §Ó m« t¶ thêi gian (DATE), ta cã 3 trêng: Ngµy, Th¸ng vµ n¨m, ta m« t¶ nh sau: TYPE DATE =
RECORD Ngay: 1 . . 31; Thang: 1 . . 12; Nam: Integer;
END;
Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan Trang 15
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 TYPE Nhansu = RECORD Hoten: String[35]; Ngaysinh: DATE; Diachi: Dia_chi; Heso,lc: Real; END; 3. Truy xuÊt – truy nhËp §Ó truy xuÊt – truy nhËp ®Õn tõng trêng cña mét RECORD, ta dïng tªn biÕn B¶n ghi, sau ®ã ®Õn dÊu chÊm (.) vµ tªn trêng.
VÝ dô: VAR Nguoi, nguoi1: Nhansu; BEGIN Write(‘Mêi nhËp Hä vµ tªn : ’);Readln(Nguoi.Hoten); Write(‘Mêi nhËp N¨m sinh: ’); Readln(Nguoi.Ngaysinh.nam); Writeln(‘Mêi nhËp ®Þa chØ: ’); Write(‘ Sè nhµ: ’); Readln(Nguoi.Diachi.So_nha); Write(‘ Tªn phè: ’); Readln(Nguoi.Diachi.Ten_pho); Write(‘ Thµnh phè: ’); Readln(Nguoi.Diachi.Ten_Tpho); Write(‘ TØnh: ’); Readln(Nguoi.Diachi.Ten_Tinh); Write(‘Mêi nhËp hÖ sè l¬ng: ’);Readln(Nguoi.heso); Nguoi.lc:=Nguoi.heso*290000; Nguoi1:=Nguoi; Trang 16 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 ............................................... END. 4. C©u lÖnh With D¹ng lÖnh: With Do ; VÝ dô: VAR Nguoi, nguoi1: Nhansu; BEGIN With Nguoi Do Begin Write(‘Mêi nhËp Hä vµ tªn : ’);Readln(Hoten); With Ngaysinh Do Begin Write(‘Mêi nhËp N¨m sinh: ’); Readln(nam); End; With Diachi Do Begin Writeln(‘Mêi nhËp ®Þa chØ: ’); Write(‘ Sè nhµ: ’); Readln(So_nha); Write(‘ Tªn phè: ’); Readln(Ten_pho); Write(‘ Thµnh phè: ’); Readln(Ten_Tpho); Write(‘ TØnh: ’); Readln(Ten_Tinh); End; Write(‘Mêi nhËp hÖ sè l¬ng: ’);Readln(heso); Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan Trang 17
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 lc:=heso*290000; End; Nguoi1:=Nguoi;
With Nguoi, Ngaysinh Do Begin Ngay:=15; Thang:=10; Nam:=1980; End; ............................................... END.
Bµi tËp 1.
ViÕt ch¬ng tr×nh nhËp vµo hä tªn, §iÓm To¸n, Lý, Ho¸ vµ trung b×nh cña häc sinh mét líp. Trong ®ã trung b×nh = (§iÓm to¸n + ®iÓm lý + ®iÓm ho¸)/3.
a) In danh s¸ch theo thø tù t¨ng dÇn cña ®iÓm trung b×nh. b) In danh s¸ch theo thø tù t¨ng dÇn cña Tªn. c) In danh s¸ch häc sinh cã ®iÓm trung b×nh tõ 5 trë lªn. d) In danh s¸ch häc sinh giái. Häc sinh giái lµ häc sinh cã ®iÓm trung b×nh trªn 8 vµ ®iÓm c¸c m«n ph¶i tõ 7 trë lªn. e) In danh s¸ch häc sinh ph¶i kiÓm tra l¹i tõng m«n. Ghi chó: Mçi häc sinh ph¶i ®îc in trªn mét dßng víi ®Çy ®ñ c¸c trêng. C¸c gi¸ trÞ cïng mét trêng ph¶i th¼ng trong mét cét.
Trang 18 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809
D÷ liÖu kiÓu tÖp (File)
Bµi 9 1. Khai b¸o
• Khai b¸o b»ng m« t¶ kiÓu: Type Kieu_TepT = FILE OF KPT; Var Biªntep: Kieu_TepT; • Khai b¸o trùc tiÕp: Var Biªntep: FILE OF KPT; VÝ dô: TYPE Nhansu = RECORD Hoten:String[35]; Namsinh: Integer; Quequan: String[50]; End; Var
f1: FILE OF Integer; f3: FILE OF Boolean;
f5: FILE OF Char;
f2: FILE OF Real; f4: FILE OF Nhansu;
f6: FILE OF Array[1..30] Of Real;
2. CÊu tróc vµ ph©n lo¹i tÖp CÊu tróc cña mét tÖp phô thuéc vµo kiÓu phÇn tö cña tÖp (TÊt c¶ c¸c phÇn tö cña tÖp ph¶i cã cïng mét kiÓu phÇn tö). C¸c phÇn tö ®îc s¾p xÕp thµnh mét d·y (nh cuén phim mµ mçi ¶nh lµ mét phÇn tö). Mçi tÖp ®Òu ®îc kÕt thóc bëi mét dÊu hiÖu ®Ó b¸o hÕt tÖp lµ EOF(F) (End Of File). Pascal cã hµm chuÈn kiÓu Boolean (Hµm EOF) víi tham sè lµ biÕn tÖp ®Ó kiÓm tra xemm con trá tÖp ®· ë
Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan Trang 19
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 vÞ trÝ cuèi cïng hay cha. NÕu con trá cha ë cuèi th× hµm cã gi¸ trÞ lµ FALSE. ViÖc ph©n lo¹i tÖp ®îc dùa trªn viÖc bè trÝ c¸c phÇn tö cña tÖp trong bé nhí ngoµi vµ c¸ch truy cËp vµo tÖp: TÖp truy cËp tuÇn tù (B¨ng tõ)vµ TÖp truy cËp ngÉu nhiªn (§Üa tõ, ®Üa quang). 3. Më tÖp míi ®Ó lu d÷ liÖu §Ó t¹o mét tÖp ®Ó lu d÷ liÖu, Pascal dïng 02 thñ tôc ®i liÒn nhau theo thø tù: ASSIGN(Bien_Tep, Ten_Tep); REWRITE(Bien_Tep); §Ó ghi d÷ liÖu vµo tÖp, ta dïng lÖnh WRITE, víi có ph¸p nh sau: Write(Bien_Tep, Danh s¸ch c¸c gi¸ trÞ cÇn ghi vµo); Bíc cuèi cïng cña viÖc ghi d÷ liÖu vµo tÖp lµ ph¶i ®ãng tËp b»ng thñ tôc
CLOSE(Bien_Tep);
Chó ý: C¸c gi¸ trÞ ®îc ghi vµo ph¶i cã cïng kiÓu víi kiÓu phÇn tö cña tÖp. Khi mét tÖp ®îc më ®Ó ghi th× tÖp ®ã lµ tÖp rçng, nÕu tÖp ®ã ®· tån t¹i th× tÖp cò sÏ bÞ xo¸. V× vËy, cÇn kiÓm tra sù tån t¹i cña mét tÖp tríc khi më ®Ó ghi. VÝ dô: §Ó ghi c¸c sè nguyªn tõ 10 ®Õn 100 vµo mét tÖp cã tªn lµ SONGUYEN.DAT, ta dïng ®o¹n ch¬ng tr×nh nh sau: PROGRAM TAO_TEP; VAR
i:Integer; f: FILE OF Integer;
BEGIN ASSIGN(f, “SONGUYEN.DAT”); REWRITE(f); Trang 20 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 For i:=10 to 1000 do Write(f,i); CLOSE(f); End. Mét tÖp cã thÓ lµm tham sè cña CTC víi lêi khai b¸o b¾t buéc ph¶i sau tö kho¸ Var. Tøc lµ tÖp ®îc dïng lµm tham biÕn. 4. §äc d÷ liÖu tõ tÖp ®· cã §Ó ®äc d÷ liÖu tõ mét tÖp, Pascal dïng 02 thñ tôc ®i liÒn nhau theo thø tù: ASSIGN(Bien_Tep, Ten_Tep); RESET(Bien_Tep); §Ó ®äc d÷ liÖu tõ tÖp, ta dïng lÖnh READ, víi có ph¸p nh sau: Read(Bien_Tep, Danh s¸ch c¸c biÕn cÇn lÊy gi¸ trÞ); Chó ý: C¸c biÕn ®îc lÊy gi¸ trÞ ph¶i cã cïng kiÓu víi kiÓu phÇn tö cña tÖp. Ta chØ cã thÓ ®äc gi¸ trÞ cña tÖp ®Ó g¸n vµo c¸c biÕn vµ chØ cho c¸c biÕn mµ th«i. Tríc khi ®äc d÷ liÖu ph¶i kiÓm tra xem con trá tÖp ®· ë cuèi tÖp hay cha. NÕu cha ë cuèi tÖp th× míi ®äc ®îc. NÕu trá tÖp ®· ë cuèi tÖp mµ vÉn cè t×nh ®äc th× sÏ g©y ra lçi. Sau khi ®äc tÖp xong nªn ®ãng tÖp l¹i nh viÖc ghi d÷ liÖu vµo tÖp b»ng thñ tôc CLOSE(Biªn_Tep). VÝ dô: §Ó ®äc c¸c sè nguyªn vµ in ra mµn h×nh c¸c gÝ trÞ cña nã tõ tÖp cã tªn lµ SONGUYEN.DAT, ta dïng ®o¹n ch¬ng tr×nh nh sau: PROGRAM TAO_TEP; VAR
i:Integer; f: FILE OF Integer; Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan Trang 21
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 BEGIN ASSIGN(f, “SONGUYEN.DAT”); RESET(f); While NOT EOF(f) do Begin Read(f,i); Write(i:8); End; CLOSE(f); End. 5. TÖp truy cËp trùc tiÕp Ta cã thÓ dïng lÖnh
SEEK(Bien_Tep,No), víi No lµ sè thø tù cña
phÇn tö trong tÖp (PhÇn tö ®Çu tiªn cña tÖp ®îc ®¸nh sè lµ 0). 6. C¸c CTC xö lý tÖp trong Pascal FileSize (Bien_Tep): Hµm cho biÕt sè phÇn tö cña tÖp. FilePos(Bien_Tep): Hµm cho biÕt vÞ trÝ hiÖn thêi cña con trá tÖp. Erase(Bien_Tep): Thñ tôc xo¸ tÖp trªn ®Üa ®îc Ên ®Þnh víi Bien_Tep. Rename(Bien_Tep,Ten_Tep): Thñ tôc ®æi tªn tÖp ®îc Ên ®Þnh víi Bien_Tep thµnh tÖp míi cã tªn lag Ten_Tep. 7. TÖp v¨n b¶n Trong Pascal cã mét kiÓu tÖp ®· ®îc ®Þnh nghÜa tríc, ®ã lµ tÖp v¨n b¶n ®îc ®Þnh nghÜa víi tõ kho¸ TEXT. Khai b¸o: Var f,f1,f2: TEXT; •
§Ó ghi d÷ liÖu vµo tÖp v¨n b¶n ta cã thÓ sö dông mét trong ba c¸ch sau:
Write(Bien_Tep, Danh s¸ch c¸c gi¸ trÞ); Trang 22 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 Writeln(Bien_Tep, Danh s¸ch c¸c gi¸ trÞ); Writeln(Bien_Tep); Lu ý: Trong danh s¸ch c¸c gi¸ trÞ ®ã kh«ng ®îc cã biÕn kiÓu cÊu tróc. •
§Ó ®äc d÷ liÖu tõ tÖp v¨n b¶n ta cã thÓ sö dông mét trong ba c¸ch sau:
Read(Bien_Tep, Danh s¸ch c¸c BiÕn); Readln(Bien_Tep, Danh s¸ch c¸c BiÕn); Readln(Bien_Tep); 8. C¸ch kiÓm tra tÖp khi më §Ó biÕt ®îc mét tÖp khi më ®· tån t¹i hay cha, ta dïng ®o¹ ch¬ng tr×nh sau: ASSIGN(Bien_Tep,Ten_Tep); {$I-}
{ChuyÓn viÖc kiÓm tra Vµo/Ra cho ngêi dïng}
Reset(Bien_Tep); If (IOResult=0) then Write(‘TÖp nµy ®· tån t¹i’); {$I+}
Bµi tËp 1. ViÕt ch¬ng tr×nh ghi vµo mét tÖp c¸c sè nguyªn ®îc nhËp tõ bµn phÝm. 2. ViÕt ch¬ng tr×nh ghi d÷ liÖu vµo mét tÖp T3 chøa c¸c sè nguyªn b»ng c¸ch ghÐp nèi hai tÖp sè nguyªn T1 vµ T2. 3. ViÕt ch¬ng tr×nh ®Õm sè ch÷ c¸i trong mét tÖp v¨n b¶n. 4. ViÕt ch¬ng tr×nh ®Õm sè tõ trong mét tÖp v¨n b¶n Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan Trang 23
ChÝ HiÕu
Trung t©m tin häc minh trÝ
75 B¹ch liªu -
Vinh 038 3556012 - 0904 778809 5. Cho mét tÖp v¨n b¶n ®· cã s½n. ViÕt ch¬ng tr×nh ®Õm sè lÇn xuÊt hiÖn cña mét ch÷ c¸i trong tÖp v¨n b¶n ®ã. 6. ViÕt ch¬ng tr×nh qu¶n lý c¸n bé trong mét c¬ quan. Trong ®ã, ch¬ng tr×nh cho phÐp thªm c¸n bé, cËp nhËt d÷ liÖu cña mét c¸n bé nµo ®ã vµ cã thÓ In ra danh s¸ch c¸n bé. Híng dÉn: Ch¬ng tr×nh qu¶n lý c¸n bé gåm c¸c th«ng tin sau: Thø tù, hä tªn, n¨m sinh, hÖ sè l¬ng. Sö dông c¸c Modul ch¬ng tr×nh (CTC) ®Ó thùc hiÖn c¸c c«ng viÖc: Thªm, bít, CËp nhËt, In danh s¸ch.
Trang 24 Ng«n ng÷ lËp tr×nh Turbo PASCAL - Biªn so¹n: Phan ChÝ HiÕu