Download - CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Transcript
Page 1: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 1: Ch��ng trình và thu�t gi�i Trang 1

Ch��ng I

CH�NG TRÌNH VÀ THUT GI�I I. Ch��ng trình (Program) 1.Khái ni�m Ch��ng trình là m�t dãy liên ti�p các l�nh. Th�c hi�n các l�nh �ó g�i là thi hành ch��ng trình. Các ch��ng trình �u có các tính cht chung sau �ây: - Các l�nh ���c thi hành m�t cách tu�n t�, thi hành xong m�t l�nh m i thi hành l�nh k� ti�p. - Khi thi hành ch��ng trình c�n thêm d� li�u t� bên ngòai, �iu này làm cho ch��ng trình tr� nên phong phú và t�ng quát. Ch��ng trình có th� ���c vi�t b�ng các ngôn ng� l�p trình khác nhau. 2.Ngôn ng� l�p trình.

Có hàng tr�m lo�i ngôn ng� l�p trình khác nhau, m�i lo�i ngôn ng� �u có cú pháp riêng c�a nó. Ngôn ng� l�p trình có th� ���c phân chia thành 3 lo�i chính : ngôn ng� máy, h�p ng� và ngôn ng� cp cao.

2.1 Ngôn ng� máy Ngôn ng� máy (mã máy) là ngôn ng� nn t�ng c�a b� vi x� lý. Bao g�m

các câu l�nh là nh�ng dãy s� nh� phân 0 và 1 rt khó ��c, khó vi�t . Ch� có các chuyên gia v máy tính m i vi�t ���c. �u �i�m c�a vi�c vi�t ch��ng trình b�ng ngôn ng� máy là l�p trình viên có th� �iu khi�n máy tính tr�c ti�p và ��t ���c chính xác �iu mình mu�n làm, t�c �� thi hành ch��ng trình nhanh và kích th� c ch��ng trinh nh . Nh��c �i�m c�a ch��ng trình ngôn ng� máy là thông th�!ng s" mt rt nhiu th!i gian �� vi�t, rt khó ��c, khó tìm l�i và ch��ng trình ph# thu�c vào b� vi x� lý nên ch��ng trình ch� ch�y ���c trên nh�ng máy tính có cùng b� vi x� lý mà thôi. Ngôn ng� máy còn ���c g�i là ngôn ng� cp thp (low-level language) 2.2 H�p ng� H�p ng� ���c phát tri�n nh�m giúp các l�p trình viên d$ nh các ch� th� c�a ch��ng trình h�n. Các ch��ng trình h�p ng� còn bao g�m các ch� th� v% mô (macro instruction) có th� t�o ra nhiu l�nh mã máy. Các ch��ng trình h�p ng� ���c chuy�n sang mã máy thông qua m�t ch��ng trình �&c bi�t g�i là trình h�p d�ch (assembler). M&c dù h�p ng� t��ng ��i d$ dùng h�n mã máy nh�ng h�p ng� v'n ���c xem là ngôn ng� cp thp b�i vì nó v'n còn rt g�n v i t�ng thi�t k� c�a máy tính. 2.3 Ngôn ng� c p cao Ngôn ng� cp cao g�n g(i h�n v i ý ni�m ngôn ng� mà h�u h�t m�i ng�!i �u bi�t, nó bao g�m các danh t�, ��ng t�, ký hi�u h�c, liên h� và các thao tác lu�n lý. Các y�u t� này có th� ���c ph�i h�p, liên k�t v i nhau t�o thành m�t hình th)c c�a câu. Các "câu" này ���c g�i là các m�nh � c�a ch��ng trình (program statement). Chính vì nh�ng �&c �i�m này, các l�p trình viên d$ dàng ��c và d$ h�c ngôn ng� cp cao h�n so v i ngôn ng� máy ho&c h�p ng�. M�t l�i �i�m quan tr�ng là ngôn ng� cp cao thông th�!ng không ph# thu�c vào máy tính, ngh%a là các ch��ng trình vi�t b�ng ngôn ng� cp cao có th� ch�y trên các lo�i máy tính khác nhau (s� d#ng các b� vi x� lý khác nhau). 2.4 Các ngôn ng� l�p trình thông dng

Hi�n nay có rt nhiu ngôn ng� l�p trình cp cao là :BASIC, COBOL, C, FORTRAN, PASCAL.v.v.. Ngày này còn có thêm rt nhiu các ngôn ng� l�p trình h� ng ��i t��ng rt ti�n l�i cho các l�p trình viên nh� : C++, Visual Basic , Visual C, Denphi, Javal .v.v..

Page 2: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 1: Ch��ng trình và thu�t gi�i Trang 2

3.Trình thông d�ch và biên d�ch M�i ch��ng trình ���c vi�t b�ng các ngôn ng� không ph�i là ngôn ng� máy cu�i cùng �u ph�i ���c chuy�n ��i sang ngôn ng� máy tr� c khi ���c thi hành. Ch��ng trình ngôn ng� cp cao ���c d�ch sang ngôn ng� máy b�ng m�t trong hai cách: b�ng trình biên d�ch (compiler) ho&c trình thông d�ch (interpreter). 3.1 Trình biên dch :

S" chuy�n ��i toàn b� ch��ng trình sang mã máy, r�i ch)a k�t qu� vào �%a �� có th� thi hành v sau. Trình biên d�ch t�o ra m�t danh sách l�i c�a tt c� m�nh � trong ch��ng trình vi ph�m cú pháp c�a ngôn ng�. Danh sách này giúp l�p trình viên d$ dàng s�a ��i ch��ng trình. 3.2 Trình thông dch :

Thay vì chuy�n ��i toàn b� ch��ng trình ngu�n nh� trình biên d�ch, trình thông d�ch ch� d�ch t�ng l�nh và thi hành t�ng l�nh. L�i �i�m c�a trình thông d�ch là l�p trình viên v'n có th� ch�y m�t ch��ng trình v'n còn l�i cú pháp. Ch� khi thông d�ch ��n câu l�nh có l�i cú pháp, quá trình thi hành ch��ng trình m i b� ng�ng l�i và trình thông d�ch s" thông báo l�i. ng�!i l�p trình c�n c) vào l�i �� s�a ch�a. II.Thu�t gi�i. 1. Ý ngh�a

Thu�t gi�i là m�t ph��ng pháp, t�ng b� c h� ng d'n, th� hi�n l!i gi�i c�a m�t vn � - m�t bài toán . Trong khoa h�c máy tính, thu�t gi�i ���c ��nh ngh�a là mt dãy hu h�n các b��c rõ ràng và có th thi hành ���c, quá trình hành �ng theo các b��c này ph�i d�ng và cho ���c k�t qu� nh� mong mu�n. 2.Các ��c tr�ng c�a thu�t gi�i Thu�t gi�i có các �&c tr�ng c� b�n là : 2.1.Xác �nh : M�i thu�t gi�i �u ph�i xác ��nh rõ ràng, không m�p m!. 2.2. H�u h�n: M�i thu�t gi�i sau m�t s� h�u h�n b� c ph�i k�t thúc và cho ra k�t q�a. 2.3: �úng : Thu�t khi th�c hi�n xong các b� c , ph�i cho ra k�t qu� �úng �*n.

Ngoài ra thu�t gi�i có các �&c tr�ng khác nh� : +�u vào, ��u ra, tính hi�u q�a và tính t�ng quát. 3. Các ph��ng pháp bi�u di�n thu�t gi�i

Trong th�c t� ng�!i ta th�!ng có 2 ph��ng pháp bi�u di$n thu�t : - Dùng ngôn ng� t� nhiên - Dùng L�u �� - S� �� 3.1. Ngôn ng� t� nhiên

Ng�!i l�p trình dùng ngôn ng� c�a mình �� mô t� thu�t . Ng�!i l�p trình li�t kê có th) t� các b� c c�a thu�t gi�i . Tuy v�y thu�t gi�i th�!ng dài dòng khó hi�u và th�!ng không theo m�t qui t*c nht ��nh. Ví d 1 : Thu�t gi�i ph��ng trình b�c hai ax2+bx+c=0 (a<>0) B*t ��u 1. Yêu c�u cho bi�t giá tr� c�a 3 h� s� a, b, c 2. N�u a=0 thì

2.1. Yêu c�u ��u vào không ��m b�o. 2.2. K�t thúc gi�i thu�t .

3. Tr�!ng h�p a khác 0 thì 3.1. Tính giá tr� ∆ = b2-4ac

Page 3: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 1: Ch��ng trình và thu�t gi�i Trang 3

3.2. N�u ∆ > 0 thì 3.2.1. Ph��ng trình có hai nghi�m phân bi�t x1 và x2

3.2.2. Giá tr� c�a hai nghi�m ���c tính theo công th)c sau

3.2.3. K�t thúc. 3.3. N�u ∆ = 0 thì 3.3.1. Ph��ng trình có nghi�m kép x0 3.3.2. Giá tr� c�a nghi�m kép là : x=-b/2a 3.3.3. K�t thú c. 3.4. N�u ∆ < 0 thì 3.4.1. Ph��ng trình vô nghi�m. K�t thúc. Ví d� 2 :Thu�t gi�i tìm h�p có tr�ng l��ng n&ng nht ��t v�n �� : Có n h�p có kh�i l��ng khác nhau và m�t cái cân �%a. Hãy ch� ra cách cân �� tìm ���c h�p có tr�ng l��ng n&ng nht : Thu�t gi�i c# th� nh� sau: B*t ��u 1. N�u ch� có 1 h�p (n=1) thì 1.1. H�p �ó chính là h�p n&ng nht. 1.2. K�t thúc gi�i thu�t . 2. Ng��c l�i n�u có t� hai h�p tr� lên (n>1) 2.1. Ch�n hai h�p bt k, và �&t lên bàn cân. 2.2. Gi l�i hp n�ng h�n, ct h�p nh- h�n sang ch� khác. 3. N�u còn h�p ch�a ���c cân th�c hi�n các b� c sau, n�u không còn h�p nào n�a, sang b� c 5. 3.1. Ch�n m�t h�p bt k, và �� lên �%a cân còn tr�ng. 3.2. Gi l�i hp n�ng h�n, ct h�p nh- h�n sang ch� khác. 4. Tr� l�i b� c 3. 5. H�p còn l�i trên cân chính là h�p n&ng nht. K�t thúc. 3.2. L�u �� - s� �� kh�i L�u �� hay s� �� kh�i là m�t công c# tr�c quan �� di$n ��t các thu�t gi�i. Bi�u di$n thu�t gi�i b�ng l�u �� s" giúp ng�!i ��c theo dõi ���c s� phân cp các tr�!ng h�p và quá trình x� lý c�a thu�t . Ph��ng pháp l�u �� th�!ng ���c dùng trong nh�ng thu�t có tính r*c r�i, khó theo dõi ���c quá trình x� lý. Trong thu�t gi�i dùng l�u �� th�!ng dùng các hình v" qui � c sau �� mô t� các b� c. Ch� ��!ng �i c�a d� li�u Ch� �i�m b*t ��u và k�t thúc. Ch)a các thao tác x� lý Ch� thao tác ki�m tra �iu ki�n

a

bx

21

∆+−=

a

bx

22

∆−−=

Page 4: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 1: Ch��ng trình và thu�t gi�i Trang 4

. trên ch� là các ký hi�u c� b�n và th�!ng ���c dùng nht. Trong th�c t�, l�u �� còn có nhiu ký hi�u khác nh�ng th�!ng ch� ���c dùng trong nh�ng l�u �� l n và ph)c t�p. Ví d�1 : L�u �� thu�t gi�i, gi�i Ph��ng trình b�c hai. Ví d� 2: L�u �� tìm ph�n t� l n nht trong dãy s�.

K�t thúc

a=0 Thông báo sai

Nh�p l�i

D:=b2-4ac

D=0

Nh�p b,c

Nh�p a

Pt có nghi�m kép

x1,2=-b/2a

D>0 Pt có 2 nghi�m

x1=-b+ D /2a

x2=-b- D /2a Pt vô nghi�m

s

s

s

B*t ��u

Page 5: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 1: Ch��ng trình và thu�t gi�i Trang 5

Bài t�p : 1.Hãy vi�t thu�t gi�i h� ph��ng trình b�c nht 2 /n s� a1x+b1y =c1 a2x+b2y =c2 Bi�t r�ng : 2.Vi�t thu�t gi�i tim s� l n nht trong 3 s� a, b, c. 3.Vi�t thu�t gi�i tìm s� Pibonanci th) n v i F0 =0, F1=1, Fn=Fn-2+Fn-1 4.Vi�t thu�t gi�i tim các s� nguyên t� trong dãy s� n s� t� a1 .. an 5.Vi�t gi�i thu�t tìm USCLN, BSCNN c�a 2 s� a, b. 6.Vi�t gi�i thu�t tính t�ng l0 , t�ng ch1n c�a dãy n s� t� nhiên a1 . . an 7.Vi�t thu�t gi�i tìm n! =1*2*3*. .*n. 8.Xác ��nh d� li�u và d� li�u ra cho các thu�t gi�i sau a.Ki�m tra xem ba s� cho tr� c a, b, c có th� là �� dài ba c�nh c�a m�t tam giác hay không ? b.Tính trung bình c�ng c�a 2 s� a, b c.Dùng m�t c�c ph# �� tráo n� c � hai c�c cho tr� c d.Tìm chu vi và di�n tích c�a hình tròn có bán kính cho tr� c 9.Có hai bình A và B . Bình A có dung tích 8 lít, bình B có dung tích 5 lít . Trình bày các b� c th�c hi�n �� ly ���c 2 lít n� c. 10.Vi�t thu�t gi�i vi�t gi�i thu�t xác ��nh ma tr�n ��n v�. 11.Vi�t thu�t gi�i in ra ma tr�n chuy�n v� c�a ma tr�n �ã nh�p tr� c. 12.Vi�t thu�t gi�i In ra ma tr�n tích cu� hai ma tr�n �ã nh�p tr� c. 13. Có 3 bình A, B, C. Bình A có dung tích 8 lít và ��ng ��y 8 lít r��u, bình B có dung tích 5 lít, bình C có dung tích 3 lít. Trình bày các b� c th�c hi�n �� có ���c 4 lít r��u � bình A và 4 lít r��u � bình B. 14. M�t ng�!i có 1 con gu, 1 con dê và 1 cái b*p c�i. N�u không có ng�!i � bên chúng thì con gu s" �n th�t con dê ho&c con dê s" �n b*p c�i. Thuyn ch� có th� ch� ���c ng�!i �ó v i con gu ho&c con dê ho&c b*p c�i. Ng�!i �ó làm th� nào �� mang chúng sang sông.

D

Dx

abba

cbbc

ba

ba

bc

bc

x =−

−==

2121

2121

22

11

22

11

D

Dy

abba

caaa

ba

ba

ac

ac

y =−

−==

2121

2121

22

11

22

11

Page 6: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 6

Ch��ng 2 GI�I THI�U NGÔN NG� LP TRÌNH PASCAL

I.Gi�i thi�u chung 1.Xu t x� : PASCAL là ngôn ng� l�p trình cp cao ���c giáo s� Niklaus Wirth � tr�!ng ��i h�c K2 thu�t Zurich (Th#y s%) thi�t k� và công b� vào n�m 1971. Ông �&t tên cho ngôn ng� c�a mình là Pascal �� t��ng nh nhà h�c n�i ti�ng ng�!i Pháp � th� k3 17: Blaise Pascal, ng�!i �ã sáng ch� ra chi�c máy tính c� khí ��u tiên c�a nhân lo�i. Thành công c�a ngôn ng� Pascal là � ch�: nó là ngôn ng� ��u tiên ��a ra và th� hi�n ���c khái ni�m l�p trình có c u trúc. Ý t��ng v m�t ch��ng trình có cu trúc xut phát t� suy ngh% cho r�ng có th� chia m�t bài l n, ph)c t�p thành nhiu bài nh , ��n gi�n h�n. N�u m�i bài nh ���c gi�i quy�t b�ng m�t ch��ng trình con, thì khi liên k�t các ch��ng trình con này l�i s" t�o nên m�t ch��ng trình l n gi�i quy�t ���c bài ban ��u. B�ng cách chia m�t ch��ng trình thành các ch��ng trình con nh� v�y, ng�!i th�o ch��ng có th� l�p trình �� gi�i quy�t riêng l0 t�ng ph�n m�t, t�ng kh�i m�t, ho&c có th� t� ch)c �� nhiu ng�!i cùng tham gia, m�i ng�!i ph# trách m�t vài kh�i. Ð&c bi�t khi ph�i thay ��i hay s�a ch�a trong m�t kh�i thì �iu �ó s" ít �nh h��ng ��n các kh�i khác. Ngày nay, Ngôn ng� Pascal ���c dùng �� vi�t các ch��ng trình )ng d#ng trong nhiu l%nh v�c. V i v�n ph�m sáng s�a, d$ hi�u, v i kh� n�ng �� m�nh, Pascal ���c xem là ngôn ng� thích h�p nht �� gi�ng d�y � các tr�!ng ph� thông và ��i h�c. 2. Turbo Pascal T� khi ph�n mm Pascal c�a Niclau Wirth ra �!i các hãng ph�n mm �ã liên t#c phát tri�n thành các Pascal riêng nh� : IOS Pascal chu/n , IBM Pascal c�a MicroSoft, Turbo Pascal c�a hãng Borland , nh�ng Turbo Pascal (TP) có nhiu �u �i�m nên ���c s� d#ng r�ng rãi �� gi�ng d�y. II.S� d ng ph!n m"m Turbo Pascal 1. Kh#i �$ng Turbo Pascal: Trong ph�n này s" trình bày cách s� d#ng Turbo Pascal 7.0.phiên b�n th�!ng ���c dùng ph� bi�n hi�n nay. 1.1. Các t�p tin chính c�a Turbo Pascal: TP có hàng tr�m t�p tin nh�ng �� ch�y ���c Turbo Pascal 7.0, ch� c�n hai t�p tin sau là �� : - TURBO.EXE : t�p tin chính c�a TP - TURBO.TPL : t�p tin ch)a các th� vi�n c�a TP N�u mu�n v" �� h�a thì ph�i có thêm các t�p tin:GRAPH.TPU, t�p tin ch)a th� vi�n �� h�a *.BGI : các t�p tin màn hình �� h�a *.CHR : các t�p tin t�o ki�u ch� N�u mu�n xem h� ng d'n s� d#ng Turbo Pascal thì c�n có thêm t�p tin TURBO.HLP 1.2. Kh#i �$ng Turbo Pascal: Thông th�!ng hi�n nay các máy s� d#ng h� �iu hành Windows nên có các kh�i ��ng nh� sau : - Tr�!ng h�p có s1n m�t Shortcut ch)a Turbo Pascal � trên Desktop : hãy Double click vào bi�u t��ng Shortcut c�a Turbo Pascal. - Tr�!ng h�p không có s1n m�t Shortcut ch)a Turbo Pascal: hãy ch�n l�nh Start, ch�n ti�p l�nh Run, r�i gõ vào ��!ng d'n ��y �� c�a t�p tin TURBO.EXE, ch4ng h�n: C:\TP\TURBO.EXE ↵ , n�u kh�i ��ng TP t� �%a C.

Page 7: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 7

A:\TP\TURBO.EXE ↵ , n�u kh�i ��ng TP t� �%a A. 1.3. C�a s� màn hình Turbo Pascal và cách ch�n l�nh :

Trong c�a s� này, dòng trên cùng là m�t th�c ��n ngang, li�t kê 9 nhóm l�nh chính c�a TP. Mu�n ch�n m�t l�nh trong th�c ��n này, có th� ti�n hành theo m�t trong hai cách: + Cách 1: Gõ phím F10. Lúc này, trên th�c ��n xut hi�n m�t khung sáng (th�!ng là màu xanh). Mu�n ch�n l�nh nào thì gõ các phím m(i tên ← , → d!i

khung sáng ��n l�nh �ó r�i Enter. M�t th�c ��n con c�a l�nh v�a ch�n hi�n ra, g�i là th�c ��n hàng d�c. Ví d#, khi ch�n l�nh File, ta ���c th�c ��n con nh� sau: +� ch�n m�t l�nh trong th�c ��n hàng d�c, hãy gõ các phím m(i tên ↑ , ↓ d!i khung sáng ��n l�nh �ó r�i Enter. Khi không mu�n ch�n l�nh nào thì gõ phím ESC �� tr� v vùng so�n th�o. + Cách 2 : Ch�n m�t l�nh trong th�c ��n ngang b�ng cách gõ ��ng th!i phím Alt v i phím ch� cái ��u tiên c�a tên l�nh mu�n ch�n. Ví d#, mu�n ch�n menu File thì gõ ��ng th!i hai phím Alt và F (vi�t t*t là Alt-F), t��ng t�, mu�n ch�n menu Compile thì gõ Alt-C. + Cách 3 : Dùng phím gõ t*t Có m�t s� l�nh ���c gán cho nh�ng phím �&c bi�t g�i là phím "gõ t*t”, ví d# l�nh Open: F3, l�nh Save : F2, l�nh Exit : Alt-X. +� th�c hi�n nh�ng l�nh này, thay vì ph�i ch�n nó t� trong th�c ��n, ta ch� c�n gõ phím nóng t��ng )ng v i

Con tr dùng �� so�n th�o

ch��ng trình

Page 8: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 8

nó. Ví d#, thay vì ch�n l�nh Open thì gõ phím F3, thay vì ch�n l�nh Save thì gõ phím F2,... D� i th�c ��n ngang là vùng so�n th�o dùng �� gõ ch��ng trình vào. +�u c�a vùng này hi�n tên c�a t�p tin �ang so�n, và n�u ng�!i th�o ch��ng ch�a �&t tên thì TP s" �&t m�t tên m&c nhiên là NONAME00.PAS.

Dòng cu�i cùng tóm t*t m�t s� phím " gõ t*t" hay dùng, nh� phím F1 �� xem h� ng d'n, phím F2 �� l�u t�p tin lên �%a, phím F3 dùng �� m� xem m�t t�p tin, phím F10 �� kh�i ��ng th�c ��n,.v.v. 1.4. Thoát kh�i Turbo Pascal Ch�n l�nh File trong th�c ��n ngang, ch�n ti�p l�nh Exit trong th�c ��n d�c (vi�t g�n là ch�n l�nh File/ Exit) ho&c gõ c&p phím gõ t*t Alt-X 1.5. Các b� c th�c hi�n m�t ch��ng trình Pascal +� so�n và ch�y m�t ch��ng trình Pascal trong Turbo Pascal, nên ti�n hành các b� c nh� sau: - B� c 1: Kh�i ��ng Turbo Pascal - B� c 2: Nhn F2 �&t tên cho ch��ng trình. - B� c 3: So�n th�o ( gõ ) ch��ng trình . B�n hãy gõ ch��ng trình m'u sau vào vùng so�n th�o c�a Turbo Pascal :

-B� c 4: D�ch và s�a l�i: Ch�n l�nh Compile/ Compile (ho&c gõ c&p phím Alt-F9 hay F9). Máy s" d�ch ch��ng trình sang mã máy, n�u g&p l�i thì d�ng và hi�n thông báo l�i màu � � ��u màn hình, ��ng th!i con tr �&t � v� trí có l�i. Ng�!i th�o ch��ng ph�i t� mình s�a l�i, r�i gõ Alt-F9 �� d�ch và s�a l�i ti�p cho ��n khi h�t l�i. Du hi�u cho bi�t vi�c d�ch �ã xong là màn hình xut hi�n c�a s� thông báo có dòng ch� �&c tr�ng là:

- B� c 5: L�u tr� l�i ch��ng trình lên �%a: ch�n l�nh File/ Save ho&c gõ phím F2. - B� c 6: Ch�y th� ch��ng trình: Ch�n l�nh Run/ Run ho&c gõ phím nóng Ctrl-F9 (vi�t t*t là ^F9). M�i l�n ch�y th�, ta c�n nh�p m�t b� d� li�u c# th� và

Page 9: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 9

ki�m tra xem k�t q�a in lên màn hình có �úng không và có phù h�p v i th�c ti$n không?. n�u sai c�n ki�m tra l�i. 2. M$t vài k% thu�t trong so&n th�o 2.1. Thao tác trên kh�i: Ta g�i kh�i là m�t �o�n v�n b�n g�m m�t hay nhiu dòng liên ti�p. Ký t� ��u tiên c�a kh�i g�i là ��u kh�i, ký t� cu�i cùng c�a kh�i g�i là cu�i kh�i. D� i �ây là m�t kh�i g�m hai dòng l�nh:

Write(‘ Nhap chieu dai va chieu rong hinh chu nhat: ‘);

Readln(a,b);

a) +ánh du kh�i: - +�a con tr v ��u kh�i - Gi� phím Shift, ��ng th!i nhn liên ti�p các phím m(i tên ← , ,↓ ,→ kéo vùng sáng ph� ��n cu�i kh�i.

b) Sao chép kh�i: - +ánh du kh�i c�n sao chép - +�a con tr ��n n�i c�n chép t i - Gõ l�nh ^K_C

c) Di chuy�n kh�i: - +ánh du kh�i c�n di chuy�n - +�a con tr ��n n�i c�n chuy�n kh�i t i -Gõ l�nh ^K_V

d) Xóa kh�i: - +ánh du kh�i c�n xóa - Gõ l�nh ^K_Y e) Che ho&c hi�n l�i kh�i �ã �ánh du : l�nh ^K_H 2.2. Các phím l�nh so�n th�o thông dng - Phím Home : ��a con tr v ��u dòng hi�n th!i - Phím End : ��a con tr v cu�i dòng hi�n th!i - Phím Delete : xóa ký t� ngay t�i v� trí con tr . N�u con tr �ang �)ng � cu�i c�a dòng trên mà gõ phím Delete thì s" n�i dòng d� i vào cu�i dòng trên. -Phím Back Space : Xóa ký t� tr� c con tr . - C&p phím Ctrl_Y:xóa toàn b� dòng hi�n th!i và �ôn các dòng � d� i lên. - Nhóm phím Ctrl_Q_Y : xóa t� v� trí con tr ��n cu�i dòng. - Các phím ← , ,↓ ,→ : d!i con tr theo h� ng m(i tên. - Phím Insert :Dùng �� chuy�n ��i ch� �� chèn �è - Phím Enter : Xu�ng dòng Trong ch� �� vi�t chèn: gõ Enter có tác d#ng ��a con tr xu�ng ��u dòng d� i, do �ó toàn b� các ch� �)ng sau con tr (n�u có) s" b� c*t xu�ng dòng d� i. Khi con tr �ang �)ng � ��u m�t dòng mà Enter thì s" t�o ra m�t dòng tr�ng ngay t�i v� trí �ó. III. Các ph!n t� c� b�n c�a ngôn ng� Pascal 1.T�p ký t� c� b�n : M�i ngôn ng� �u ���c xây d�ng t� m�t t�p ký t� nào �ó. Ngôn ng� Pascal ���c xây d�ng trên b� ký t� c� b�n, g�m:

- Các ch� cái la tinh: A, B, C,...,Z, a, b, c,..., z - Các ch� s� :0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - Các ký hi�u �&c bi�t: +, -, *, /, =, <, {, }, [, ], %, $, &, #, ... - Ký t� g�ch n�i ‘_’ và ký t� tr*ng ‘ ‘ ( space)

Page 10: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 10

2. T' khóa (Keyword) Có m�t s� t� ���c Pascal dành riêng cho vi�c xây d�ng các câu l�nh, các khai báo, các phép tính,... g�i là t� khóa. Ng�!i l�p trình không ���c �&t m�t tên m i (tên bi�n, tên h�ng, tên hàm, tên th� t#c,...) trùng v i m�t trong các t� khóa. D� i �ây là danh sách các t� khóa c�a Pascal : Absolute, and, array, begin, case, const, div, do, downto, else, end, file, for, forward, function, goto, if, implementation, in, inline, interface, interrupt, label, mod, nil, not, of, or, packed, procedure, program, record, repeat, set, shl, shr, string, then, to, type, unit, until, uses, var, while, with, xor Các t� khóa có th vi�t d��i d�ng ch hoa hay ch th��ng hay xen k� ch hoa v�i ch th��ng ��u ���c. Ví d# vi�t begin hay Begin hay BEGIN là nh� nhau. 3.Tên (identifier) Các bi�n, các h�ng, các hàm, các th� t#c, ... ���c s� d#ng trong ch��ng trình �u c�n ph�i �&t tên, còn g�i là ��nh danh hay danh hi�u. Các tên này do ng�!i th�o ch��ng t� �&t và ph�i ��m b�o �úng quy t*c: tên ph�i b*t ��u b�ng ch� cái, k� �ó có th� là ch� cái, ch� s�, hay du g�ch n�i ‘_’. Tên không ���c �&t trùng v i t� khóa. Chiu dài c�a tên t�i �a là 127 ký t�. Thông th�!ng tên nên �&t ng*n g�n và có tính g�i nh . Ví d#:Delta, X1, X2, i, j , Chuc_vu, Luong,Phuong_Trinh_Bac_Hai… 4.Tên chu(n Trong Pascal có m�t s� tên �ã ���c �&t s1n r�i, g�i là tên chu/n, ch4ng h�n : Abs, Arctan, Boolean, Byte, Char, Cos, Copy, Delete, Eof, False, Longint, Ord, Integer, Real, Readln, Writeln, True, Text, ... Pasal có th cho phép ng��i th�o ch��ng ��t l�i tên chu�n, nh�ng không nên ��t l�i. 5.Câu l�nh trong Pascal Câu l�nh là ph�n vi�c mà ch��ng trình ph�i th�c hi�n �� x� lý d� li�u �ã ���c khai báo. Trong ch��ng trình các câu l�nh ���c vi�t cách nhau m�t du chm ph�y (;). Có 2 lo�i : Câu l�nh ��n và l�nh ghép. 5.1 Câu l�nh ��n gi�n : Bao g�m các l�nh +L�nh gán (:=) : Dùng �� gán giá tr� cho bi�n s� �ã khai báo -D�ng l�nh : Bi�n s� := Bi�u th)c; Ví d# : x:=10; d:=a*b; +L�nh G�i th� t#c : Dùng �� g�i th� t#c trong ch��ng trình -D�ng l�nh <Tên th� t#c> Ví d#: Clrscr; Halt; 5.2 L�nh ghép : Bao g�m m�t nhóm l�nh t� 2 l�nh tr� lên ���c �&t trong hai t� khoá Begin và End; Ví d# : Begin TG:=A; A:=B;B:=TG; End; IV. C u trúc c�a ch��ng trình Pascal 1.C u trúc chung Ch��ng trình là m�t dãy các câu l�nh ch� th� cho máy các công vi�c ph�i th�c hi�n. M�t ch��ng trình Pasccal ��y �� g�m ba ph�n chính : - Ph�n tiêu �� - Ph�n khai báo - Ph�n thân ch��ng trình 1.1. Ph!n tiêu �" ch��ng trình

Ph�n này b*t ��u b�ng t� khóa Program, ti�p ��n là tên ch��ng trình do ng�!i s� d#ng t� �&t, cu�i cùng k�t thúc b�ng du chm ph/y ‘;’.

Page 11: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 11

Ví d# : Program Btap1; ho&c : Program Giai_pt_bac2; Ph�n tiêu � chi�m m�t dòng, còn g�i là ph�n ��u c�a ch��ng trình, nó có th không có. 1.2. Ph!n khai báo Ph�n khai báo có nhi�m v# gi i thi�u và mô t� các ��i t��ng, các ��i l��ng s" tham gia trong ch��ng trình Nó g�m có 7 lo�i khai báo sau .

- USES Khai báo ��n v� s� d#ng (Unit) - LABEL Khai báo nhãn, - CONST Khai báo h�ng - TYPE khai báo ki�u d� li�u m i, - VAR Khai báo bi�n - PROCEDURE khai báo các ch��ng trình con là th� t#c - PUNCTION Khai báo các ch��ng trình con là hàm.

Tùy theo yêu c�u c# th� mà m�i khai báo này có th có ho�c không có khai báo. 1.3. Ph!n thân ch��ng trình +ây là ph�n ch� y�u nht c�a m�t ch��ng trình, b�t buc ph�i có. Thân ch��ng trình b*t ��u b�ng t� khóa BEGIN và k�t thúc b�ng END. (có du chm � cu�i). Gi�a kh�i BEGIN và END là các l�nh. M�i l�nh ph�i k�t thúc b�ng du chm ph/y ‘;’. Begin Các l�nh; End. 2.Khai báo trong ch��ng trình Turbo Pascal 2.1 Khai báo ��n v� s� d ng (Unit) Turbo Pascal có s1n trên 300 hàm và th� t#c chu/n, chúng ���c phân thành t�ng nhóm theo ch)c n�ng, g�i là các th� vi�n hay ��n v� ch��ng trình ( Unit) bao g�m : System ,Crt, Graph, Dos, Printer, .v.v. . Mu�n s� d#ng các hàm hay th� t#c c�a ��n v� nào, tr� System còn l�i ta ph�i khai báo, Cách khai báo nh� sau : Uses Tendonvi ; Ví d� : - Mu�n s� d#ng ��n v� CRT Uses CRT ;

- Mu�n s� d#ng c� hai th� vi�n CRT và GRAPH, ta khai báo : Uses CRT, GRAPH ; Chú thích : M�t s� hàm và th� tc trong ��n v s� dng màn hình CRT +Th� tc ClsScr - D�ng th� t�c: ClrScr; - Ch�c n ng : Xóa màn hình k�t qu� , ��a con tr v t�a �� 1,1 +Th� tc GotoXY - D�ng th� t�c : GotoXY(x,y); - Ch�c n ng : +�a con tr ��n t�a �� c�t x, dòng y - Ví d# : GotoXY(10,5) : +�a con tr v t�a �� c�t 10, dòng 5. +Th� tc Delay - D�ng th� t�c Delay(time) - Ch�c n ng : D�ng th�c hi�n ch��ng trình time miligiây. -Ví d# : Delay(200); +Th� tc TextColor - D�ng th� t#c TextColor(màu)

Page 12: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 12

- +�nh mà cho dòng ch� vi�t lên màn hình theo b�ng màu sau : Color Màu Color Màu Color Màu

0 Black 6 Brown 12 LightRed 1 Blue 7 LightGray 13 LightMagenta 2 Green 8 DarkGray 14 Yellow 3 Cyan 9 LightBlue 15 Whlte 4 Red 10 LightGreen 5 Magenta 11 LightCyan

Ví d# : Tectcolor(Red) hay Textcolor(4) 2.2 Khai báo h)ng s� H�ng là ��i l��ng có gía tr� không ��i, �� khai báo h�ng ta dùng t� khóa Const cách khai báo nh� sau : Const Tên_h�ng_s� = H�ng s� ; Ví d# : Const N=10 ; 2.3 Khai báo bi�n s� Bi�n là ��i l��ng có giá tr� thay ��i trong ch��ng trình, chúng ���c dùng trong ch��ng trình �� l�u tr� các d� li�u, tham gia vào các bi�u th)c tính và các quá trình x� lý trong máy. Cách khai báo bi�n s� nh� sau : Var Tên_bi�n_s� : ki�u d� li�u; Ví d# : Var x, y : Real ; i, k : Integer; 2.4 Khai báo (��nh ngh�a) m$t ki�u d� li�u m�i Ngoài các ki�u d� li�u mà b�n thân ngôn ng� �ã có s1n nh� ki�u th�c, ki�u nguyên, ki�u ký t�, ki�u lôgic,.v.v. ng�!i dùng có th� t� xây d�ng các ki�u d� li�u m i ph#c v# cho ch��ng trình c�a mình, nh�ng ph�i mô t� sau t� khóa TYPE cách khai báo nh� sau TYPE tên ki�u d� li�u m i = ki�u d� li�u m i . Ví d#, ta ��nh ngh%a m�t ki�u d� li�u m i có tên là Mang : Type Mang = Array[1..10] of Real; 4.Ví d Vi�t ch��ng trình cho phép nh�p vào h� tên, mã s�, các �i�m , Lý c�a m�t sinh viên, tính �i�m trung bình theo công th)c : Dtb=(Toan+ly)/2 In H� tên, mã s�, các �i�m , Lý và �i�m trung bình c�a sinh viên �ó lên màn hình. PROGRAM VIDU; Uses CRT;

Var Ho_ten, Maso : String[20]; Toan, Ly, Dtb : Real;

Begin Write(‘ Nhap Ho va ten : ‘); Readln(Ho_ten); Write(‘ Nhap ma so : ‘); Readln(Maso); Write(‘ Nhap diem Toan : ‘); Readln(Toan); Write(‘ Nhap diem Ly : ‘); Readln(Ly);

Dtb:= (Toan+Ly) / 2; { In lên màn hình các d� li�u v sinh viên } TextBackGround(Green); { �&t màu nn là Green } TextColor(Red); { �&t màu ch� là Red}

Clrscr ;

Page 13: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 13

Writeln(‘ KET QUA THI CUA SINH VIEN:’); Writeln(‘Ho va ten : ‘, Ho_ten); Writeln(‘Ma so : ‘, Maso); Writeln(‘Diem Toan : ‘, Toan:3:1); Writeln(‘Diem Ly : ‘, Ly:3:1); Writeln(‘Diem Tbinh : ‘, Dtb:3:1);

Readln; END. Ghi chú : +� so�n và ch�y ���c m�t ch��ng trình nh� trên c�n ph�i bi�t s� d#ng ph�n mm Turbo Pascal ( vi�t t*t là TP ). IV.Các ki�u d� li�u ��n gi�n dùng trong Pascal Trong TP dùng m�t s� ki�u d� li�u g�i là d� li�u ��n gi�n chu/n nh� sau: 1.Ki�u nguyên : Dùng �� bi�u di$n các s� nguyên, ph�m vi bi�u di$n c�a s� nguyên t� 1 byte ��n 4 byte

Tên ki�u Ph�m vi gía tr� S� byte ShortInt -128 .. 127 1 Byte 0..255 1 Integer -32768 .. 32767 2 Word 0 .. 65535 2 LongInt -2147483648 .. 2147483647 4

+Các phép toán trên ki�u nguyên : - Các phép toán : C�ng(+), tr�(-), nhân(*),chia(/) - Phép chia ly ph�n nguyên (DIV): 10 Div 3 =3, 10 div 5 =2. - Phép chia ly ph�n d�(Mod): 15 mod 5 =0, 16 mod 3 =1.

+ Các hàm có ��i s� nguyên : -Hàm PRED(k) : ��i s� k nguyên, tr� v s� nguyên �)ng ngay tr� c k, t)c

là k-1 . Ví d#: Pred (5) = 4, Pred (-6) = -7. -Hàm SUCC(k) : ��i s� k nguyên, tr� v s� nguyên �)ng ngay sau k, t)c

là k+1 . Ví d#: Succ (5) = 6, Succ (-6) = -5. +Các th� t#c có ��i s� nguyên: Có hai th� t#c khá thông d#ng là:

-Th� t�c INC(k) : t�ng k lên m�t ��n v�. Ví d#, sau khi th�c hi�n các l�nh : k:=5; Inc(k); thì gía tr� sau cùng c�a k là 6. V�y, l�nh Inc(k); t��ng ���ng v i l�nh k:=k+1; hay k:=Succ(k);

-Th� t�c DEC(k) : gi�m k �i m�t ��n v�. Ví d#, sau khi th�c hi�n các l�nh : k:=5; Dec(k); thì gía tr� c�a k s" là 4. V�y, l�nh Dec(k) ; t��ng ���ng v i l�nh k:=k-1; hay k:=Pred(k); 2.Ki�u th�c : Dùng �� bi�u di$n các s� th�c, ph�m vi bi�u di$n c�a s� th�c t� 4 ��n 10 byte.

Tên ki�u Ph�m vi gía tr� S� byte Real 2.9*10-39 .. 1.7*1038 6

Single 1.5*10-45 .. 3.4*1038 4

Double 5.0*10-324 .. 1.7*10308 8

Extended 3.4*10-4932 .. 1.1*104932 10

Comp -9.2*1018 .. 9.2*1018 8

+Các phép toán trên s� th�c : Có 4 phép toán s� h�c là nhân (*), chia (/), c�ng (+) và tr� (-). Khi m�t

trong các s� h�ng tham gia tính toán là ki�u th�c thì k�t q�a c�a phép toán c(ng là m�t s� th�c. (Phép toán DIV, MOD không dùng cho các s� th!c. )

Page 14: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 14

+Các hàm có ��i s� nguyên ho�c th�c -Hàm ABS(x): tính tr� tuy�t ��i c�a x Ví d#: Abs(5 - 8) = 3 -Hàm SQR(x): tính bình ph��ng c�a x: Ví d#: Sqr(4.0) = 16.0, Sqr(2) = 4 Trong các hàm d� i �ây, ��i s� x có th� là nguyên hay th�c, nh�ng gía tr� tr� v luôn luôn là ki u th!c:

-Hàm SQRT(x): tính , (x ? 0) - Hàm EXP(x) : tính ex - Hàm LN(x): tính lnx, (x > 0) - Các hàm SIN(x), COS(x), và ARCTAN(x): tính sinx, cosx và arctgx. - Hàm INT(x) : cho s� th�c b�ng ph�n nguyên c�a x. Ví d# : Int(12.55) = 12.0 Int(1+10/3)=4.0 -Hàm FRAC(x) : cho s� th�c b�ng ph�n l0 c�a x. Ví d# : Frac(12.55) = 0.55 Hai hàm ��c bi�t d��i �ây cho k�t q�a là s� nguyên: -Hàm TRUNC(x): cho s� nguyên là ph�n nguyên c�a x. Ví d# : Trunc(12.55) = 12 Trunc(-2.98) = -2 - Hàm ROUND(x): cho s� nguyên b�ng cách làm tròn x. Ví d# : Round(12.45) = 12 Round(-2.98) = -3 3.Ki�u ký t� (Char): Nh�n m�t trong các ký t� trong b�ng mã ASCII, M�i ký t� trong b�ng mã ASCII g�i là m�t h�ng ký t�, chi�m �� dài 1 byte, và khi vi�t trong Pascal ph�i ���c �&t trong c&p nháy ��n: ‘0’, ‘1’, ‘A’, ‘B’, ‘$’,... +Các hàm liên quan ��n ký t� :

- Hàm PRED(ch): cho ký t� �)ng ngay tr� c ký t� ch trong b�ng mã. Ví d#: Pred(‘B’)=‘A’ -Hàm SUCC(ch): cho ký t� �)ng ngay sau ký t� ch trong b�ng mã. Ví d#: Succ(‘A’)=‘B’. -Hàm UpCase(ch): ��i ký t� ch thành ch� hoa. Ví d#: Upcase( ‘a’ ) = ‘A’, Upcase( ‘b’ ) = ‘B’, Upcase( ‘A’ ) = ‘A’ . -Hàm ORD(ch) : cho mã c�a ký t� ch. Ví d#: Ord (‘A’) = 65, Ord (‘a’) = 97 . -Hàm CHR(k) : ��i s� k nguyên, 0< k < 255, cho ký t� có mã b�ng k.

Ví d#: Chr (65)= ‘A’ , Chr (97)= ‘a’, Chr(32) là ký t� tr*ng 4.Ki�u logic (boolean) Ki�u boolean ch� có hai gía tr� là TRUE (�úng) và FALSE (sai), không phân bi�t ch� hoa hay ch� th�!ng. V quan h� th) t� thì FALSE< TRUE. M�i gía tr� boolean chi�m m�t byte b� nh . Các phép toán lôgic g�m có: NOT, AND, OR và XOR. N�u A và B là hai ��i l��ng lôgic thì NOT A, A and B, A or B và A xor B c(ng là nh�ng ��i l��ng lôgic có k�t q�a ���c cho � b�ng sau:

A B A and B A or B A xor B

True True True True False True False False True True False True False True True False False False False False

5.Ki�u chu*i (String) : là m�t chu�i ký t�. Khi gán h�ng chu�i , h�ng chu�i ph�i ���c rào trong c&p du nháy ��n Ví d# : ‘Turbo Pacal’, ‘12345’.

Page 15: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 15

V.Các l�nh nh�p xu t d� li�u . Nh�p và xut d� li�u là hai khâu quan tr�ng trong qúa trình x� lý thông tin.

H�u nh� ch��ng trình nào c(ng ph�i gi�i quy�t vn � nh�p, xut d� li�u. Có nh�p ���c d� li�u thì m i có d� li�u �� tính hay x� lý. Có d� li�u xut ra thì m i bi�t ���c k�t q�a c�a qúa trình x� lý trong máy. 1. L�nh nh�p d� li�u 1.1.Ý ngh�a :Dùng �� nh�p d� li�u cho bi�n nguyên hay th�c hay chu�i. 1.2 .D�ng l�nh có 3 d�ng nh� sau : 1. Read(x1, x2, ..., xn); 2. Readln(x1, x2, ..., xn); 3. Readln;

Trong �ó x1,x2…xn �ã ���c khai báo ki�u d� li�u trong ph�n khai báo. - D�ng 1 và d�ng 2 dùng �� nh�p d� li�u cho các bi�n s� �ã ���c khai báo. - D�ng 1 khi nh�p xong d� li�u � ngay sau bi�n s� xn, còn d�ng 2 khi nh�p xong con tr t� ��ng nh�y xu�ng ��u hàng k� ti�p. - D�ng 3 không dùng �� nh�p d� li�u, mà có tác d#ng d�ng th�c hi�n ch��ng trình ch! nhn phím enter.

Ghi chú : Khi nh�p d� li�u cho các bi�n s� , các giá tr� vi�t cách nhau ít nht m�t kh ang tr*ng. 2. L�nh xu t d� li�u. 2.1 Ý ngh�a : Dùng �� in các d� li�u lên màn hình 2.2 .D�ng l�nh : có 3 d�ng th� t#c in d� li�u nh� sau:

1. Write( bt1, bt2 , ... , btn ); 2. Wrteln(bt1, bt2 , ... , btn ); 3. Writeln;

Trong �ó bt1, bt2, ..., btn là các bi�u th)c c�n ph�i in gía tr� lên màn hình. Trong tr�!ng h�p ��n gi�n, m�i bi�u th)c này có th� là m�t bi�n, m�t h�ng, hay m�t hàm. - D�ng 1: in d� li�u xong con tr � ngay sau btn, còn d�ng 2 khi in xong con tr nh�y ngay xu�ng ��u hàng k� ti�p. - D�ng 3: không dùng �� in d� li�u lên màn hình mà có tác d#ng ��a con tr xu�ng ��u hàng k� ti�p. Ví d�: cho x, y là hai bi�n th�c và gán x:=100/4; y:=-9/300; thì hai l�nh sau : Writeln(‘ x= ‘, x); Writeln(‘ y= ‘, y); s" in lên màn hình : x = 2.5000000000E+01 y = -3.0000000000E-02 2.2. In d� li�u d�ng s� có �nh d�ng: a). In s� th!c có ��nh d�ng: In các s� th�c theo cách trên rt khó ��c. Vì th� các s� th�c th�!ng ���c in có ��nh d�ng, gi�ng nh� cách vi�t s� thông th�!ng, b�ng l�nh: Writeln( bi�uth)c : n : k ); Trong �ó n và k là các s� t� nhiên, n ��nh dùng n c�t �� in gía tr� c�a bi�u th)c, trong �ó có k c�t dành cho ph�n th�p phân. Ví d#: cho x, y là các bi�n ki�u th�c và: x:=100/4; y:=-123.4824; Hai l�nh sau : Writeln(‘ x=‘, x:6:2); Writeln(‘ y=‘, y:10:3); s" in lên màn hình: x= 25.00 ( tr� c s� 2 có 1 ký t� tr*ng)

Page 16: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 2:Gi i thi�u Ngôn ng� l�p trình Pascal Trang 16

y= -123.482 (tr� c du - có 2 ký t� tr*ng) N�u n nh h�n chiu dài c�a s� c�n in thì s� s" ���c in ra v i ��y �� các ch� s� trong ph�n nguyên. Ví d#, khi th�c hi�n các l�nh sau : x:=12345.675; Writeln(‘x= ‘, x:0:2); trên màn hình s" hi�n : x=12345.68

. �ây máy �ã làm tròn s� khi b s� l0 cu�i cùng. 2.3 Ví d PROGRAM VIDU;

Uses CRT; Var Ten : String[18]; Maso : String[11];

Begin CLRSCR; Write(‘ Nhap ho va ten: ‘); Readln(Ten); Write(‘ Nhap ma so sv : ‘); Readln(Maso); Writeln; Writeln(‘ ********************** ’); { in 22 d�u * } Writeln(‘*’, Ten:19, ‘*’:2); { in 1 d�u *, in Ten chi�m 19

ct, in ti�p d�u * chi�m 2 ct } Writeln(‘* Ma so:’ , Maso:12, ‘*’:2); { in * Ma so, in

Maso chi�m 12 ct, in ti�p d�u * chi�m 2 ct } Writeln(‘**********************’); { in 22 d�u * } Readln;

End. Bài t�p ch��ng 2 1. Nh�p 2 s� nguyên a, b t� bàn phím. In ra t�ng, tích, hi�u, th��ng c�a a và b 2. +�c t� bàn phím di�n tích c�a �áy l n B1 và di�n tích �áy nh B2 và chiu cao h c�a m�t hình chóp c#t .Tính th� tích hình chóp c#t theo công th)c sau : V = (1/3)* (B1+B2 + B1*B2) *h 3. +�c t� bàn phím bàn kính R1, bán kính R2, là ��!ng sinh l và chiu cao h c�a m�t hình chóp c#t. Tính di�n tích xung quanh và th� tích hình chóp c#t theo công th)c sau: Di�n tích xung quanh S = (PI/2 * (R1R2) *I Th� tích V = (1/3) * (PI*h*(R1² + R2² + R1*R2)) 4. Vi�t ch��ng trình nh�p vào �i�m Toán, Lí, Hoá c�a m�t thí sinh theo h� s� t��ng )ng 3 : 2 : 1 . Hãy tính và in �i�m trung bình. 5.Vi�t ch��ng trình tính l�c hút F gi�a hai v�t có kh�i l��ng M và N cách nhau m�t kh ang d theo công th)c : V i G là l�c hp d'n = 6.673* 10 –8 cm2 /gs2(M tính b�ng gram,D tính b�ng cm) 6.Vi�t ch��ng trình nh�p 3 s� nguyên d��ng a, b, c sau �ó tính và in ra màn hình giá tr� trung bình c�ng s , c và trung bình nhân p c�a 3 s� �ó

Bi�t r�ng : 3

cbas

++= 3/1

)(abcp =

7.Vi�t ch��ng trình nh�p 3 s� nguyên d��ng a, b, c là s� �ó 3 c�nh c�a m�t tam giác. Hãy tính và in ra màn hình di�n tích s c�a tam giác �ó. Bi�t r�ng : s=sqrt(p*(p-a)*(p-a)*(p-c)) trong �ó p=0.5*(a+b+c).

2

*

d

NMGF =

Page 17: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 17

Ch��ng III CÁC L�NH +I,U KI�N – VÒNG L-P

I. Các l�nh �i"u ki�n 1.L�nh nh�y không �i"u ki�n - Cú pháp : Goto <Nhãn> - Ch�c n ng : Nh�y ngay ��n l�nh �ã ���c �ánh du b�ng nhãn �ã ���c khai báo. Ghi chú: Cách khai báo nhãn trong ph�n khai báo. Label <Nhãn> V i <Nhãn> là m�t t� t� �&t. 2. Câu l�nh IF 2.1. Câu l�nh If d�ng 1 Cú pháp :

IF <Ði"uki�n> THEN <L�nh> ; Ðiu ki�n là m�t bi�u th)c lôgic cho k�t

q�a TRUE (�úng) hay FALSE (sai). L�nh có th� là m�t l�nh ��n gi�n ho&c m�t l�nh có cu trúc. Ý ngh�a: Máy ki�m tra �iu ki�n, n�u Ðiuki�n là �úng thì th�c hi�n l�nh L�nh, ng��c l�i n�u Ðiuki�n là sai thì th�c hi�n l�nh k� ti�p sau if Ví d� : Nh�p vào h� tên và �i�m trung bình (DTB) c�a m�t sinh viên. Hãy phân lo�i sinh viên theo DTB nh� sau: Lo�i là Kém n�u DTB<5, là Tbình n�u 5 =< DTB<7, là Khá n�u 7 <= DTB<9, là Gi i n�u DTB >= 9. In h� tên, �i�m trung bình và phân lo�i sinh viên. PROGRAM PhanloaiSinhvien; { Phân lo�i sinh viên } Var Ho_ten: String[18]; DTB: Real; Loai: String[6]; Label aa; Begin Write(‘ Nhap ho va ten :’); Readln(Ho_ten); aa:Write(‘ Nhap �iem trung binh :’);Readln(DTB); If DTB<0 then Begin Writeln(‘Diem trung binh <0 ! Xin nhap lai ‘); Readln; Goto aa; End; { phân lo�i theo DTB } If DTB< 5 then Loai:=‘Kem’; If (DTB>= 5) and (DTB<7) then Loai:=‘Tbinh’; If (DTB >= 7) and (DTB< 9) then Loai:=‘Kha’; If DTB >= 9 then Loai:=‘Gioi’;

Writeln(Ho_ten, #32 , DTB:4:1 , #32 , Loai); { #32 là ký t� tr*ng }

Page 18: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 18

Readln; End. 2.2. Câu l�nh IF d�ng 2 +Cú pháp :

IF Ði"uki�n THEN L�nh1 ELSE L�nh2 ;

Chú ý : -Tr� c ELSE không có du chm ph/y. -L�nh1 và L�nh2 có th� là m�t l�nh ghép, t)c

là g�m nhiu l�nh ���c �&t trong kh�i begin và end; . +Ý ngh�a c�a l�nh: Máy ki�m tra �iu ki�n, N�u Ðiuki�n là �úng thì th�c hi�n L�nh1, ng��c l�i, n�u Ðiuki�n là sai thì th�c hi�n Lênh2. Ví d�: Vi�t ch��ng trình nh�p vào hai s� a và b, tìm và in s� nh nht và s� l n nht c�a chúng: PROGRAM Tim_Max_Min; { Tim so lon nhat va so nho nhat c�a hai so } Var a, b, Max, Min : Real; Begin Write(‘ Nhap a va b :’);Readln(a,b); If a < b then begin Max:= b; Min:= a; end else { tr� c else không có du ; } begin Max:= a; Min:= b; end; Writeln(‘ So lon nhat la: ‘ , Max:6:2); Writeln(‘ So nho nhat la: ‘ , Min:6:2); Readln; End. 2.3. Câu l�nh IF l�ng nhau : Trong câu l�nh IF, n�u L�nh1 ho&c L�nh2, ho&c c� hai, l�i là câu l�nh IF thì ta có cu trúc IF l�ng nhau. Ch4ng h�n d� i �ây là hai câu l�nh IF... ELSE l�ng nhau : IF Ði"uki�n1 THEN If Ði"uki�n2 then L�nh1 else L�nh2 ELSE L�nh3 ;

+ki�n

L�nh 1 L�nh 2

Sai

+úng

L�nh k� ti�p

Page 19: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 19

Ví d# : Vi�t ch��ng trình nh�p vào h� tên m�t ch� h�, ch� s� �i�n k� tháng tr� c (chiso1) và ch� s� �i�n k� tháng này (chiso2), tính tin �i�n tháng này cho h�, bi�t r�ng :

M�i kw trong 100 kw ��u tiên có ��n gía là 500�, T� kw th) 101 ��n kw th) 200 có ��n giá 800�, T� kw th) 201 tr� lên có ��n gía 1000�.

PROGRAM Tinh_tien_dien; { Tính tin �i�n } Var Ho_ten: String[18]; chiso1, chiso2, Ldtt, Tien : Real; Label aa; Begin Write(‘ Nhap ho va ten :’); Readln(Ho_ten) aa: Write(‘ Nhap ch� s� tháng tr� c, ch� s� tháng này: ‘);Readln( chiso1, chiso2); If chiso2<chiso1 Then Begin Writeln(‘Ban nhap sai du lieu ! Xin nhap lai’); Readln; Goto aa; End; Ldtt:=chiso2 - chiso1; If Ldtt<= 100 then Tien:=Ldtt*500 else if Ldtt <=200 then Tien:=100*500+(Ldtt - 100)*800 else Tien:=100*500 + 100*800 + (Ldtt - 200) * 1000; Writeln(‘ H� và tên là ‘, Ho_ten); Writeln(‘ Tin ph�i tr� là ‘ , Tien:10:2); Readln; End. 3. Câu l�nh CASE 3.1. Cú pháp L�nh CASE có hai d�ng, chúng ch� khác nhau � m�t �i�m là trong d�ng 2 có ELSE L�nh n+1, còn trong d�ng 1 thì không ( hình v").

CASE bi�uth)c OF h�ng1 : L�nh1; h�ng2 : L�nh2; . . . . h�ngn : L�nhn; END; D�ng 1

CASE bi�uth)c OF h�ng1 : L�nh1; h�ng2 : L�nh2; . . . . h�ngn : L�nhn; ELSE L�nhn+1; END; D�ng 2

Chú ý - L�nh CASE ph�i k�t thúc b�ng END;

Page 20: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 20

- Ki�u d� li�u c�a bi�uth)c ch� là ki�u d� li�u ��m ���c nh�: nguyên, ký t�, Lôgic, ho&c ki�u li�t kê hay ki�u �o�n con, không ���c là ki�u th�c hay ki�u chu�i.. 3.2: Ý ngh�a: Khi g&p l�nh Case trong ch��ng trình máy th�c hi�n theo các b� c sau :

B� c 1: Tính gía tr� c�a bi�uth)c B� c 2: So sánh và l�a ch�n: - N�u gía tr� c�a bi�uth)c = Gt1 thì th�c hi�n L�nh1 - N�u gía tr� c�a bi�uth)c = Gt2 thì th�c hi�n L�nh2 - N�u gía tr� c�a bi�uth)c = Ctn thì th�c hi�n L�nhn B� c 3:

a) chuy�n ngay sang l�nh k� ti�p sau End ( n�u là d�ng 1) b) th�c hi�n L�nh n+1, r�i chuy�n sang l�nh k� ti�p sau End (n�u là d�ng 2) . S� �� 2.3. Các ví d : PROGRAM Tim_so_ngay_cua_thang; { Xác ��nh s� ngày c�a tháng } Var Thang, Nam, Songay : Integer ; Begin Write(‘Nh�p Thang, Nam : ‘); Readln(Thang, Nam); If (Thang<1) or ( Thang>12) then writeln(‘ Nh�p sai ’) else begin Case Thang OF 4, 6, 9, 11 : Songay:=30; 1, 3, 5, 7, 8, 10, 12 : Songay:=31; 2 : begin If Nam mod 4 = 0 then Songay:=29

else Songay:=28; end;

Sai

L�nh k�

GT=gt

L�nh1 GT=gt

L�nh2 GT=gt

L�nh3

+úng

+úng

Sai

Sai

Page 21: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 21

End; { H�t Case } Writeln(‘ S� ngày là : ‘ , Songay); end; Readln; End. Ví d 2: Xây d�ng th�c ��n cho phép l�a ch�n m�t trong b�n vi�c : tính t�ng , tính hi�u, tính tích ho&c tính th��ng c�a hai s� x, y nh�p t� bàn phím. Màn hình c�n hi�n ra b�n m#c sau cho m�i ng�!i l�a ch�n : A. TÍNH T5NG HAI S6 B. TÍNH HI7U HAI S6 C. TÍNH TÍCH HAI S6 D. TÍNH TH�8NG HAI S6 Ch��ng trình ���c vi�t nh� sau : PROGRAM Thuc_Don; Uses Crt; Var x, y : Real; Ch : Char; Begin Clrscr; Write('Nhap x va y:'); Readln(x, y); Gotoxy(10, 3); Write('A. TINH TONG HAI SO'); Gotoxy(10, 5); Write('B. TINH HIEU HAI SO'); Gotoxy(10, 7); Write('C. TINH TICH HAI SO'); Gotoxy(10, 9); Write('D. TINH THUONG HAI SO'); Gotoxy(2,11); Write('-Ban chon muc nao (A, B, C, D) ?:'); Readln(Ch); CASE Ch of 'A', 'a': Writeln('Tong =', x+y :6:2); 'B', 'b': Writeln(' Hieu =', x-y :6:2); 'C', 'c': Writeln(' Tich =', x*y :6:2); 'D', 'd': If y<>0 then Writeln(' Thuong =', x/y:6:2 ) else Writeln(' Khong xac dinh !'); ELSE Writeln(' Khong co muc ', Ch); END; Readln; End. 2.3. Câu l�nh CASE l�ng nhau Trong cu trúc CASE, khi m�t trong các L�nh1, L�nh2, ..., L�nhn hay L�nhn+1 l�i là m�t l�nh CASE thì ta có cu trúc CASE l�ng nhau. Ví d# 3: M�t xí nghi�p tính tin th��ng hàng tháng cho công nhân theo công th)c : Tin th��ng= H� s� * 200. Trong �ó H� s� ���c tính d�a vào k�t q�a bình ch�n phân lo�i lao ��ng (lo�i A, B hay C) và n�i làm vi�c (c� s� 1 hay c� s� 2) c�a m�i ng�!i trong tháng, c# th� nh� sau :

Page 22: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 22

Lo�i C� s� 1 C� s� 2

A 2.0 2.5

B 1.5 1.8

C 1.0 1.0

Vi�t ch��ng trình nh�p h� tên, phân lo�i lao ��ng và n�i làm vi�c c�a m�t công nhân, tính tin th��ng cho ng�!i �ó. PROGRAM Tinh_tien_thuong; Var Ho_ten: String[20]; Loai : Char; Coso : Byte; Heso, Thuong : Real; Begin Write(‘ Nh�p h� và tên: ‘); Readln(Ho_ten); Write(‘ Nh�p c� s� làm vi�c (1,2): ‘); Readln(Coso); Write(‘ Nh�p phân lo�i lao ��ng (A,B,C) : ‘);Readln(Loai); CASE Loai OF ‘A’, ‘a’: Case Coso of 1: Heso:=2.0; 2: Heso:=2.5; end; ‘B’, ‘b’: Case Coso of 1: Heso:=1.5; 2: Heso:=1.8; end; ‘C’, ‘c’: Heso:=1.0; END; { H�t CASE } Thuong:=Heso*200; Writeln(‘H� và tên Tin th��ng ‘); Writeln(Ho_ten , Thuong:8:2 ); Readln; End. II.CÁC L�NH VÒNG L-P 1. Câu l�nh l�p FOR 1.1. Câu l�nh FOR d�ng 1 - Cú pháp:

FOR bi�n s� := <Giá tr� ��u>TO <Giá tr� cu�i> DO L�nh; - Yêu c�u: bi�n s� ph�i thu�c ki�u d� li�u ��n gi�n ��m ���c, th�!ng là ki�u nguyên, ký t� hay lô gic, không th� là ki�u th�c hay chu�i. - Cách th�c ho�t �ng c�a FOR: B��c 1: Gán giá tr� cho bi�n s� := giá tr� ��u B��c 2: Th�c hi�n vi�c so sánh: -N�u bi�n s� <= Giá tr� cu�i thì th�c hi�n b� c 3;

Bi�n s�:=Gt��u

Bi�n<=Gtcu�i

L�nh

Bi�n:=Bi�n+1

+úng

Sai

Thóat

Page 23: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 23

-N�u bi�n s� >Giá tr� cu�i thì thóat ra kh i vòng l&p , th�c hi�n l�nh k� ti�p. B��c 3: Th�c hi�n l�nh sau DO B��c 4 : T�ng gía tr� c�a bi�n s� : bi�n s�:=Succ(bi�n s�); Quay l�i b� c 2. 1.2. Các ví d Ví d� 1: Hãy vi�t ch��ng trình tính t�ng : S= 12 + 22+ 32+...+ 102 PROGRAM Tong1; Var N, i : Integer; S : LongInt; Begin Write(‘ Nh�p N :’); Readln(N); S:=0; For i:=1 to N do S:=S+i*i ; Writeln(‘S= ‘, S); Readln; End. Ví d� 2: Bài tính giai th�a c�a mt s�. PROGRAM Giai_thua; Var N, i : Integer; S : LongInt; Begin Write(‘Nh�p s� d��ng N : ‘); Readln(N); S:=1; For i:=1 to N do S:=S * i ; Writeln(‘Giai thua = ‘, S); Readln; End. 2. Câu l�nh FOR d&ng 2 -Cú pháp:

FOR bi�n s� := <Giá tri cu�i> DOWNTO <Giá tr� ��u> DO L�nh; -Cách th�c ho�t �ng c�a FOR d�ng 2: B��c 1: Gán giá tr� cho bi�n s� := giá tr� cu�i B��c 2: Th�c hi�n vi�c so sánh: -N�u bi�n s� >= Giá tr� ��u th�c hi�n b� c 3; -N�u bi�n s� <Giá tr� ��u thì thóat ra kh i vòng l&p , th�c hi�n l�nh k� ti�p. B��c 3: Th�c hi�n l�nh sau DO B��c 4 : Gi�m gía tr� c�a bi�n : bi�n s�:=Pred(bi�n s�); Quay l�i b� c 2.

Bi�n :=Gt��u

Bi�n>=Gtcu�i

L�nh

Bi�n:=Bi�n-1

+úng

Sai

Thóat

Page 24: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 24

Ví d# 1 : In các ch� cái theo th) t� ng��c t� Z ��n A thành hai dòng : Z, Y, X, ..., C, B, A z, y, x, ... , c, b, a Ch��ng trình ���c vi�t nh� sau: PROGRAM In_Ky_tu_nguoc; Var : Char; Begin For ch:=‘Z’ downto ‘A’ do write(ch:3 ); Writeln; For ch:=‘z’ downto ‘a’ do write(ch :3 ); Writeln; Readln; End. 3. Câu l�nh FOR l�ng nhau Trong cu trúc FOR, khi L�nh c(ng là m�t l�nh FOR thì ta có cu trúc FOR l�ng nhau: FOR bi�n1:= m1 TO m2 DO {1} FOR bi�n2:=n1 TO n2 DO L�nh; {2} Cách th)c ho�t ��ng c�a l�nh này nh� sau: Ð�u tiên cho bi�n1:=m1 và làm l�nh � dòng {2}. Vì dòng {2} là l�nh FOR nên v i m�i gía tr� c�a bi�n2=n1, ..., n2, �u ph�i làm L�nh, k�t q�a là L�nh ���c làm n2-n1+1 l�n. Bây gi! t�ng: bi�n1:=Succ(bi�n1), r�i l�i làm l�nh FOR � dòng {2}, k�t q�a l�nhP ���c làm thêm n2-n1+1 l�n n�a.v.v. Qúa trình trên c) ti�p t#c cho ��n khi bi�n1=m2+1 thì d�ng. L�nh FOR {1} làm m2-m1+1 l�n l�nh FOR {2}, còn chính l�nh FOR {2} l�i làm n2-n1+1 l�n L�nh. Vì th� l�nh ���c làm tt c� là (m2-m1+1)*(n2-n1+1) l�n. Ví d#: In hình ch� nh�t �&c nh� d� i �ây: PROGRAM In_hinh_chu_nhat_chu_A; Uses Crt; Var I,j,n,m :Integer; Begin Clrscr; Write(‘Hay nhap chieu rong =’);Readln(n); Write(‘Hay nhap chieu dai =’);Readln(m); For i:=1 to n do begin for j:=1 to m do write(‘A’); Writeln; end; Readln; End.

Page 25: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 25

Ví d# 2: Tìm các s� Fibonaci. Dãy s� Fibonaci ���c xây d�ng nh� sau:

U0=1, U1=1 , Uk=Uk-1 + Uk-2 v i m�i k= 2, 3, 4, ... PROGRAM In_Fibonaci; Var N, i, U, U0, U1 : Integer; Begin Write(‘ Nh�p N :’); Readln(N); U0:=1; U1:=1; Writeln( N+1 , ‘ s� Fibonaci ��u tiên là :’ ); Write(U0:3 , U1:3); For i :=2 to N do begin U:=U0+U1; Write(U:3); U0:=U1; U1:=U; end; Readln; End. 3. Câu l�nh WHILE 3.1 Cú pháp WHILE Ðiuki�n DO L�nh ; -Ý ngh�a : Th�c hi�n l�nh trong khi +iu ki�n còn �úng, khi �iu ki�n sai thóat ra kh i vòng l&p , th�c hi�n l�nh k� ti�p. 3.2. Các ví d� v� l�nh While Ví d� 1 : Nh�p s� t� nhiên N, dùng l�nh WHILE tính S=N!: PROGRAM Giai_thua_2;{ Tinh S=N! b�ng l�nh WHILE..} Var N, i : Integer; P : LongInt; Begin Write(‘ Nh�p N > 0 : ‘ ); Readln(N); P:=1; i :=1; While i<= N do begin P:=P*i; i:=i+1; end; Writeln(‘ Giai thua = ‘, P); Readln; End.

+iu ki�n

L�nh

+úng

Sai

Thóat

Page 26: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 26

Ví d# 2: Vi�t ch��ng trình tính tin g�i ngân hàng. PROGRAM Tien_gui_Ngan_hang; Var Tienvon, Laisuat, Sotien, S : Real; N : Byte; Begin Write(‘ Nh�p tin v�n, lãi sut và s� tin S c�n có: ‘); Readln(Tienvon, Laisuat, S); Sotien:=Tienvon; N:=0; { N là s� tháng g�i } While Sotien< S do begin N:=N+1; Sotien:= Tienvon + Tienvon*Laisuat ; Tienvon:=Sotien; end; Writeln(‘ C�n g�i ‘, N , ‘ tháng ‘); Writeln(‘ S� tin s" có = ‘ , Sotien:6:2); Readln; End. 4. Câu l�nh Repeat 4.1 Cú pháp REPEAT L�nh; UNTIL Ðiuki�n 4.2 Ý ngh�a: Th�c hi�n l�nh cho ��n khi �iu ki�n �úng, Khi �iu ki�n �úng thóat ra kh i vòng l&p th�c hi�n l�nh k� ti�p. 4.3. Các ví d� v� l�nh Repeat Ví d# 1: Tìm bi s� chung nh" nh�t c�a hai s� nguyên d��ng M và N. Bài này có nh�ng cách gi�i khác nhau, d� i �ây là m�t cách ��n gi�n. Tr� c h�t, hãy xem cách tìm BSCNN c�a hai s� M=5 và N=9. Vì N>M nên ta s" tìm trong t�p các b�i s� c�a N :{ 9, 18, 27, 36, 45, ...} s� nh nht chia h�t cho M, �ó là s� 45. M�t cách t�ng quát, g�i Max là s� l n nht c�a M và N. Ð�u tiên ta gán : BSCNN:=0; Sau �ó c) làm l�nh BSCNN:=BSCNN+Max cho ��n khi BSCNN chia h�t cho c� M và N thì d�ng. Trong ch��ng trình ta dùng l�nh repeat �� nh�p hai s� M, N ��m b�o d��ng. PROGRAM BSCNN; { Tìm BSCNN c�a M và N } Var M, N, Max, BSCNN : Integer; Begin Repeat Write(‘ Nh�p M và N d��ng :’); Readln(M, N);

+iu ki�n

L�nh

+úng

Sai

Thóat

Page 27: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 27

Until (M>0) and (N>0); If N >M then Max:=N else Max:=M; BSCNN:=0; Repeat BSCNN:=BSCNN + Max; Until (BSCNN mod N=0) and (BSCNN mod M=0) ; Writeln(‘ B�i s� chung nh nht= ‘, BSCNN) ; Readln; End. Ví d# 2: Thi�t k� � ch�y nhi�u l�n mt ch��ng trình. Trong Turbo Pascal, m�i l�n mu�n ch�y ch��ng trình ta ph�i gõ c&p phím Ctrl và F9 (vi�t t*t là ^F9), �iu này s" bt ti�n n�u c�n ch�y ch��ng trình nhiu l�n )ng v i các b� d� li�u th� khác nhau. Cu trúc sau �ây cho phép ta ch�y ch��ng trình m�t s� l�n theo ý mu�n: REPEAT { Các l�nh c�a ch��ng trình} Write(‘ Ti�p t#c n�a không (Y/N) ? :’); Readln(Traloi); UNTIL (Traloi =‘N’) or ( Traloi=‘n’); Ghi chú: Traloi là m�t bi�n ki�u ký t� (Char); Sau khi th�c hi�n xong {các l�nh c�a ch��ng trình }, n�u mu�n ch�y ti�p thì ta gõ phím phím Y , n�u mu�n d�ng thì gõ phím N . Chú ý : l�nh Readln(Traloi); có th� thay b�ng: Traloi:=Readkey; Hàm Readkey thu�c th� vi�n CRT cho k�t q�a là m�t ký t� gõ t� bàn phím, nó khác l�nh Readln(Traloi) � ch� là khi nh�p ký t� ta không c�n ph�i Enter. Ch��ng trình d� i �ây cho phép th�c hi�n m�t s� l�n vi�c : in tam giác cân �&c có chiu cao m (0<m<20) : PROGRAM In_tam_giac; Uses CRT; Var k, j, m: integer; Traloi : Char ; Begin REPEAT Clrscr; Write(‘ Nh�p m (0<m<20) : ‘);Readln(m); Writeln(‘*’ :m); { in ��nh } { In hai c�nh bên c�a tam gíac } For k:=1 to m-2 do Begin Write(chr(32): m-k-1); { in m-k-1 ký t� tr*ng} For j:=1 to 2*k+1 do Write(‘*’); { in 2k+1 du *} Writeln; End; For k:=1 to 2*m-1 do Write(‘*’); {in c�nh �áy} Writeln; Write(‘ Ti�p t#c n�a không (Y/N) ?: ‘); Readln( Traloi);

Page 28: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 3: Các l�nh �i�u ki�n – vòng l�p Trang 28

UNTIL (Traloi=‘N’) or ( Traloi=‘n’); End. 5. So sánh các l�nh For, While và Repeat - L�nh For dùng cho các vòng l&p có s� l�n l&p �ã bi�t tr� c - L�nh While hay Repeat t�ng quát h�n l�nh For, dùng ���c cho tt c� các lo�i vòng l&p, nh�ng th�!ng dùng cho các vòng l&p có s� l�n l&p ch�a bi�t tr� c. - L�nh While và Repeat khác nhau � �i�m sau: L�nh While ki�m tra �iu ki�n tr� c , nên có th� không th�c hi�n m�t l�n nào. L�nh Repeat ki�m tra �iu ki�n sau nên ít nht th�c hi�n m�t l�n. Bài t�p �ng d ng 1. Vi�t ch��ng trình nh�p và 3 s� th�c. In ra s� l n nht và s� nh nht trong 3 s�. 2. Vi�t ch��ng trình nh�p vào ngày tháng n�m và m�t s� nguyên n (n<=255). Tính ngày tháng n�m sau n. 3. Vi�t ch��ng trình nh�p �i�m c�a m�t sinh viên g�m 3 môn Tóan , Lý , Hóa. Tính +i�m trung bình TB và in ra : " Xut s*c " N�u �i�m trung bình TB = 10 " Gi i " N�u �i�m trung bình TB = 9 " Khá" N�u �i�m trung bình TB = 7 ho&c 8 " Trung bình " N�u �i�m trung bình TB TB = 5 ho&c 6 " Y�u " N�u �i�m trung bình TB = 0 ��n 4 4. Vi�t ch��ng trình gi�i và bi�n lu�n h� ph��g trình b�c nht có 2 /n s� x, y ax + by = c dx + ey = f Trong �ó a, b, c, d, e, f là các s� th�c nh�p t� bàn phím. 5.Vi�t ch��ng trình in lên màn hình ch� I, Z, Σ v i chiu cao n l0 nh�p t� bàn phím ví d# n =5.

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

* * * * * * * * * * * * * * * V i n là s� l0 nh�p t� bàn phím

6.Vi�t ch��ng trình tính các t�ng sau v i n nh�p t� bàn phím a) S =1+3+5+…..n

b) � 7.Vi�t ch��ng trình nh�p vào m�t s� n , In ra các s� nguyên t� <= n. 8.Vi�t ch��ng trình nh�p vào m�t s� nguyên n , In ra các s� nguyên ch1n ra m�t hàng, c s� nguyên l0 ra m�t hàng khác có giá tr� t� 1 ��n n.

nn

nS ++++= ...

3

3

2

2100

32

Page 29: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 29

Ch��ng IV CH�NG TRÌNH CON

I.Nh�ng khái ni�m chung 1. Khái ni�m v" ch��ng trình con Ch��ng trình con (subprogram) là m�t �o�n ch��ng trình có ch)c n�ng gi�i quy�t m�t vn � chuyên bi�t mà ch��ng trình chính c�n ph�i th�c hi�n m�t s� l�n )ng v i các gía tr� khác nhau c�a tham s�. Ch4ng h�n, n�u ph�i tính m�t lo�t các gía tr� e1, e2, e3, ..., e10 thì ta nên vi�t m�t ch��ng trình con có nhi�m v# tính ex v i x la ��i s� bt k, & �&t tên là EXP(x). M�i khi c�n tính m�t trong các gía tr� e1, e2, ..., e10 , ta ch� c�n g�i tên ch��ng trình con �ó nh�ng thay x b�ng m�t giá tr� c# th� 1, 2, ...,10. Vi�c s� d#ng ch��ng trình con không ch� có tác d#ng làm cho ch��ng trình chính b t r�!m rà, b t dài dòng mà còn �&c bi�t có ý ngh%a trong vi�c t� ch)c ch��ng trình. Khi ph�i gi�i quy�t m�t bài l n, ng�!i ta tìm cách chia nó ra thành nhiu bài nh . M�i bài nh ���c gi�i quy�t riêng r" b�ng m�t ch��ng trình con s" d$ dàng h�n khi ph�i ki�m tra l�i và ki�m tra thu�t . Vi�c còn l�i là ghép các ch��ng trình con này �� t�o thành m�t ch��ng trình l n, �ó là ch��ng trình chính. Có hai lo�i ch��ng trình con là hàm và th� t#c. S� khác nhau c� b�n c�a hàm và th� t#c là � ch�: hàm luôn luôn tr� v m�t gía tr� duy nht thông qua tên hàm và do �ó có th� s� d#ng hàm nh� s� d#ng m�t bi�u th)c, còn th� t#c thì không tr� v giá tr� nào qua tên th� t#c và nó ���c s� d#ng nh� m�t l�nh ��n gi�n. 2. Hàm (Function) 2.1. Các ��c tr�ng c�a hàm Các y�u t� �&c tr�ng cho m�t hàm g�m có:

-Tên hàm -Ki u d li�u c�a các tham s� -Ki u d li�u c�a gía tr� hàm

Ví d# : -Hàm Sqrt(x): cho c�n hai c�a x. Tên hàm là Sqrt, tham s� x là nguyên hay th�c còn gía tr� hàm ki�u th�c, ví d# Sqrt(4)=2.0. -Hàm Chr(k): cho ký t� có mã là k. Tên hàm là Chr, tham s� k ki�u nguyên còn gía tr� hàm ki�u ký t�, ví d# Chr(65)=‘A’. -Hàm Odd(k): cho True hay False tùy theo k là l0 hay ch1n. Tên hàm là Odd, tham s� k ki�u nguyên và gía tr� hàm ki�u lôgic? ví d# Odd(4)=False. -Hàm Copy( St, k, n): cho chu�i con g�m n ký t� c�a St tính t� v� trí k. Tên hàm là Copy, có ba tham s� là St ki�u chu�i, k và n ki�u nguyên, và gía tr� hàm ki�u chu�i. ví d# Copy(‘ABCD’, 2, 3) = ‘BCD’. -Hàm Readkey : không có tham s�, gía tr� hàm ki�u ký t�, hàm nh�n m�t ký t� ���c gõ t� bàn phím. Tóm l�i, hàm có th� không có tham s� ho&c có m�t ��n nhiu tham s�, nh�ng hàm luôn tr� v� mt gía tr� duy nh�t. 2.2. Khai báo hàm t� vi�t Tt c� các hàm có s1n trong Turbo Pascal g�i là các hàm chu/n, chúng có th� ���c s� d#ng mà không c�n ph�i khai báo. Tuy nhiên s� l��ng các hàm chu/n

Page 30: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 30

th�!ng không �áp )ng ���c yêu c�u �a d�ng c�a ng�!i s� d#ng, cho nên khi th�o ch��ng, ta th�!ng ph�i t� xây d�ng thêm các hàm m i. Các hàm t� vi�t c�n ph�i ���c khai báo trong ph�n khai báo c�a ch��ng trình chính, theo cú pháp sau: Function Tênhàm(tênthams�: ki uthams� : ki�ugíatr� ; { Các khai báo dùng trong hàm } Const ... Type ... Var ... Begin {Các l�nh c�a hàm} Tênhàm:=Bi�uth)c; End; 2.3. Các ví d Ví d# 1: Nh�p dãy các s� th�c x1, x2, ..., xn, tính t�ng :

Phân tích: Gi� s� �ã có hàm Canba(z) tính c�n b�c ba c�a z, t)c là :

khi �ó, t�ng S ���c tính nh� sau:

S:=0; For i:=1 to N do S:=S + Canba(x[i]); Vn � còn l�i là ph�i vi�t hàm tính c�n ba c�a z. Hàm này có tên là Canba, tham s� z ki�u th�c, và gía tr� hàm c(ng ki�u th�c, nó ���c xây d�ng trong ch��ng trình nh� sau: PROGRAM VIDU; Var x : Array[1..20] of Real; S : Real; N, i : integer; FUNCTION Canba( z: Real) :Real; { Hàm tính c n b�c ba c�a z} Var F: Real; Begin If z=0 then F:= 0; If z>0 then F:= exp( 1/3*Ln(z) ); If z<0 then F:= - exp( 1/3*Ln(-z) ); Canba:=F ;{Tên hàm:=bi�u th)c}; End; BEGIN { vào ch��ng trình chính} Repeat Write(‘ nhap N: ‘);Readln(N); Until ( N>0) and ( N<21); S:=0;

Page 31: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 31

For i:=1 to N do begin Write(‘nhap x[‘, i, ‘]:’); Readln(x[i]); S:=S + Canba( x[i] ); end; Writeln(‘ S= ‘, S:8:2); Readln; END. 3. Th� t c (Procedure) 3.1. Th� tc và cách khai báo

T��ng nh� hàm, th� t#c c(ng là m�t ch��ng trình con, song th� t#c khác hàm � ch�: n�u nh� hàm luôn tr� v� mt gía tr� duy nh�t thông qua tên hàm thì th� t�c l�i không tr� v� mt gía tr� nào thông qua tên g�i c�a nó mà nó có tác d#ng nh� m�t l�nh.

Th� t#c Readln(x, y, z) có nhi�m v# nh�p các gía tr� t� bàn phím cho các bi�n x, y, z. Th� t#c Write(x, y, z) in gía tr� c�a x, y, z. Th� t#c Gotoxy(x, y) ��nh v� con tr vào to� �� c�t x, dòng y trên màn hình. Th� t#c Clrscr thì ch� ��n gi�n là xóa màn hình .v.v. . Nh� v�y th� t#c có th� không có tham s� ho&c có t� m�t ��n nhiu tham s�. 3.2 Th� tc t� vi�t

Ngoài các th� t#c chu/n �ã có s1n trong Turbo Pascal, ng�!i th�o ch��ng có th� t� xây d�ng các th� t#c m i nh�ng ph�i khai báo theo cú pháp sau: Procedure Tênth�t#c( tênthams� : ki uthams� ) ; { Các khai báo Const, Type, Var dùng trong th� t#c } Begin {Các l�nh c�a th� t#c } End;

Ðo�n khai báo trên ph�i ���c �&t phí d� i trong ph�n khai báo c�a ch��ng trình chính. 3.3. Các ví d v" th� t c Ví d 1: Gi�i ph�ong trình b�c hai ax2+bx+c=0 b�ng vi�t th� t#c V gi�i thu�t chúng ta qua các b� c sau : B��c 1 : Nh�p các bi�n s� a,b,c B��c 2 : Tính Denta=b2-4ac; -N�u Denta >0 Ph��ng trình có 2 nghi�m phân bi�t. x1:=(-b+sqrt(denta)/2a x2:=(-b-sqrt(denta)/2a -N�u Denta =0 ph��ng trình có m�t nghi�m kép. x1=x2=-b/2a -N�u Denta<0 Ph��ng trình vô nghi�m. Ph��ng trình c# th� nh� sau: PROGRAM Giai_Phuong_Trinh_Bac_Hai; Uses Crt; Var a,b,c,x1,x2,Denta:Real; Procedure DentaDuong;

Page 32: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 32

Begin X1:=(-b+sqrt(Denta)/2/a; X2:=(-b-sqrt(Denta)/2/a; Writeln(‘Phuong trinh co hai nghiem phan biet’); Writeln(‘ x1 =’,x1:8:2); Writeln(‘ x2 =’,x2:8:2); Readln; End; Procedure Dentaam; Begin Writeln(‘Phuong trinh vo nghiem’); Readln; End; Procedure Dentakhong; Begin Writeln(‘Phuong trinh co mot nghiem kep’); Readln; End; Begin ClrScr; Write(‘Hay nhap cac he so a, b, c =’);Readln(a,b,c); Denta:=b*b-4*a*c; If Denta=0 then Dentakhong; If Denta<0 then Dentaam; If Denta >0 then Dentaduong; Readln; End. II. Tham s� tr� s� và tham s� bi�n s� Trong khai báo � ��u c�a ch��ng trình con, các tham s� hình th)c có t� khóa Var �)ng tr� c g�i là tham s� bi�n, ng��c l�i, n�u không có t� khóa Var �i tr� c thì g�i là tham s� tr�. Ví d#, trong khai báo hàm tính l(y th�a zk, ta vi�t : Function Lt(z : Real ; k: Byte) : Real;

thì z và k �u là các tham hình th)c s� tr� . Còn theo khai báo c�a th� t#c Doicho : Procedure Doicho(Var u, v : Real) ;

thì u và v �u là các tham hình th)c s� bi�n. 1. Tham s� tr� s� Tham s� tr� hình th)c ���c cp m�t ô nh riêng khi ch��ng trình con ���c g�i và b� xóa b khi ch��ng trình con ch�y xong. Nó ���c coi nh� m�t bi�n ��a ph��ng, nh�n gía tr� ban ��u là tham s� th�c s� ���c chuy�n ��n t� ch��ng trình chính qua l!i g�i ch��ng trình con. Sau �ó ch��ng trình con có th� thay ��i giá tr� c�a tham s� tr� hình th)c � bên trong ch��ng trình con, song �iu �ó không làm thay ��i gía tr� c�a tham s� th�c s�.

Page 33: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 33

2. Tham s� bi�n s� Trong l!i g�i ch��ng trình con các tham s� bi�n s� th!c s! ch# có th là bi�n s� , không th là h$ng s� hay bi u th�c. Ví d#, các l�nh sau �ây là sai : Doicho(3, 4); { Sai vì 3 và 4 là các h$ng} Doicho(a+1, b); { Sai vì a+1 là mt bi u th�c} Gi� s� trong ch��ng trình chính có hai bi�n th�c a, b có gía tr� a=4 và b=3. Ð� hoán ��i gía tr� c�a a và b ta dùng l�nh: Doicho(a, b); Vì u và v là các tham s� bi�n hình th�c nên ch��ng trình con s" ��ng nht u v i a và ��ng nht v v i b. M�i thay ��i c�a tham s� u trong ch��ng trình con �u là thay ��i c�a chính bi�n a, t��ng t�, m�i thay ��i c�a tham s� v �u là thay ��i c�a chính bi�n b. K�t q�a là tr� c khi g�i th� t#c Doicho(a,b) thì a=3, b=4, sau khi th�c hi�n th� t#c xong thì a=4, b=3. V�y, các bi�n ���c truy�n vào ch��ng trình con d��i d�ng tham s� bi�n thì s� thay �%i theo tham s� bi�n hình th�c t��ng �ng trong ch��ng trình con. Th!c ch�t c�a s! truy�n tham s� ��i v�i các tham s� bi�n là s! truy�n ��a ch#. +Ví d� 1: Trong ch��ng trình d� i �ây, th� t#c TT có hai tham s� a và b : a là tham s� tr� còn b là tham s� bi�n. Hãy xem s� thay ��i gía tr� c�a hai bi�n x, y c�a ch��ng trình chính tr� c và sau khi g�i th� t#c TT: PROGRAM VIDU1; Var x, y: Integer; PROCEDURE TT( a : integer ; Var b : integer); Begin a:=a+6; b:=b+8; Writeln(‘a= ’, a); Writeln(‘b= ’, b); End; BEGIN x:=4; y:=7; TT(x,y); Writeln(‘x= ’, x); Writeln(‘y= ’, y); Readln; END.

Tính cht trên �ây c�a tham s� bi�n cho phép khai thác thêm các kh� n�ng c�a th� t#c và hàm. Ta bi�t th� t#c không tr� v gía tr� nào thông qua tên nó, còn hàm thì tr� v m�t gía tr� duy nht qua tên hàm. Song m�t ch��ng trình con hoàn toàn có th� tr� v hai hay nhiu gía tr� thông qua các tham s� bi�n, nh� ví d# 2. +Ví d� 2: Ch��ng trình sau nh�p vào hai c�nh a, b c�a hình ch� nh�t và s� d#ng m�t th� t#c �� tính c� di�n tích và chu vi.

Page 34: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 34

PROGRAM Vidu2 ; Var a,b, S, L: Real; Procedure TINH( c1, c2 : Real ; Var DT, CV : Real); { Tính di�n tích DT và chu vi CV theo hai c�nh c1 và c2} Begin DT:=c1*c2; CV:=2*(c1+ c2); End; BEGIN Write(‘ Nh�p hai c�nh a, b: ‘); Readln(a,b); TINH(a, b, S, L); Writeln(‘Dien tích= ’, S:4:1); Writeln(‘Chu vi = ’, L:4:1); Readln; END. III. Ph&m vi tác d ng c�a các khai báo 1. Bi�n toàn c c và bi�n ��a ph��ng Vì ch��ng trình con c(ng là m�t ch��ng trình nên trong ch��ng trình con c(ng có khai báo bi�n, khai báo h�ng, .v.v., c(ng có khai báo ch��ng trình con c�a riêng nó, ... Các bi�n ���c khai báo trong ch��ng trình chính g�i là bi�n toàn c#c (global variable), chúng dùng ���c � m�i n�i k� t� lúc khai báo cho ��n khi k�t thúc ch��ng trình. Các bi�n ���c khai báo trong m�t ch��ng trình con g�i là bi�n ��a ph��ng (local variable). S� d% g�i là ��a ph��ng vì chúng ch� có tác d#ng trong ch��ng trình con n�i nó ���c khai báo mà thôi. +Ví d� : Xét ch��ng trình d� i �ây : Program Vidu; Var x: Integer; Procedure TTUC1; Var y: Integer; Begin y:=x+5; Writeln(y); End; BEGIN x:=10; TTUC1; Writeln(y); { l�nh này b� l�i} Readln; END.

Page 35: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 35

2. Ph&m vi tác d ng c�a các khai báo

Ph�m vi tác d#ng hay t�m tác d#ng c�a bi�n (hay h�ng, ki�u d� li�u, ch��ng trình con) là khu v�c mà trong �ó nó có th� s� d#ng ���c, ngoài khu v�c �ó nó b� xem là ch�a khai báo. V�y ph�m vi s� d#ng c�a bi�n trong ch��ng trình con , là các bi�n �ã khai báo trong ch��ng trình con và “cha” c�a nó. Ví d� : N�u ch��ng trình chính và th� t#c B có khai báo hai bi�n trùng tên là x, thì trong th� t#c B ch� có bi�n x ��a ph��ng c�a B là có tác d#ng, còn bi�n x c�a ch��ng trình chính t�m th!i b� che �i. Ra kh i th� t#c B, bi�n x ��a ph��ng c�a B b� xóa và bi�n x toàn c#c ho�t ��ng l�i bình th�!ng. +Ví d� 4: Xét ch��ng trình sau: Program Vidu4; Var x: Integer; Procedure B; Var x: Integer; Begin x:=5; Writeln(x); End; BEGIN x:=10; B; Writeln(x); Readln; END.

Page 36: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 36

IV.S� tham kh�o tr��c và s� �� qui 1. Tham kh�o tr��c (Forward reference) Bình th�!ng khi trong ch��ng trình chính có hai ch��ng trình con A, B ���c khai báo k� ti�p nhau A tr� c, B sau, thì B g�i ���c A nh�ng A không g�i ���c B. Khi �ó �� A g�i ���c B ta ph�i ti�n hành khai báo ph�n ��u c�a B v i t� khóa Forward tr� c khi khai báo B ��y ��. +Ví d� PROGRAM Vidu; Procedure B; Forward ; { khai báo tham kh�o B tr��c} Procedure A; Begin Writeln(‘ Chào ch� ‘); B; End; Procedure B; Begin Writeln(‘ Chào anh ‘); End; BEGIN A; Readln; END. 2. S� �� qui (Recursion): M�t th� t#c hay hàm có th� g�i chính nó, khi �ó ta nói có s� �� qui. Ví d# 7: Tính S= k! b�ng �� qui. Ta vi�t :

Mu�n tính k! ta ph�i tính ���c (k-1)!, mu�n tính (k-1)! l�i ph�i tính (k-2)!, ..., suy ra cu�i cùng ph�i tính ���c 0!, nh�ng vì 0!=1 nên qúa trình k�t thúc. Ch��ng trình sau nh�p N, tính và in gía tr� N!. Trong ch��ng trình có xây d�ng và s� d#ng m�t hàm �� quy tính k! : PROGRAM Vidu1; { Tính N! b$ng �� qui} Var N : Byte; Function Gt( k : Byte) : Real; { Hàm tính k! b$ng �� qui} Begin If k=0 then Gt:= 1 else Gt:= k* Gt(k-1); End; BEGIN Repeat Write(‘ Nh�p N: ‘); Readln(N);

Page 37: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 4: Ch��ng trình con Trang 37

Until N>0; Writeln( N, ‘ != ‘, Gt(N):0:0 ); Readln; END. +Ví d� 2 Tính s� h�ng U(k) c�a dãy Fibonaci b�ng �� qui: U(0)=1, U(1)=1, U(k)=U(k-1) + U(k-2) v i k>1. Ta vi�t: U(k) = 1 n�u k=0 ho&c k=1 = U(k-1) + U(k-2) n�u k>1. Ch��ng trình sau in ra s� Fibonaci th) N b�ng cách g�i hàm �� qui Fibo. PROGRAM Vidu2; { Tính s� Fibonaci th� N } Var N : Integer; Function Fibo( k : Integer) : Integer; { Hàm tính s� Fibonaci th� k b$ng �� qui} Begin If k=0 then Fibo:= 1 else if k=1 then Fibo:=1 else Fibo:=Fibo(k-1) + Fibo( k-2); End; BEGIN Write(‘ Nh�p N: ‘); Readln(N); Writeln( ‘ S� Fibo th) ‘, N, ‘ = ‘, Fibo(N) ); Readln; END. Bài t�p �ng d ng 1.Vi�t ch��ng trình con tính giai th�a c�a m�t s� a. 2.Vi�t ch��ng trình con ki�m tra m�t s� nguyên x có là s� nguyên t� hay không? 3.Vi�t Ch��ng trình con Tìm USCLN, BSCNN c�a hai s� a,b. 4.Vi�t ch��ng trình con tính bình ph��ng c�a m�t s� a. 5.Vi�t ch��ng trình con tính C�n b�c 2 c�a m�t s� a. 6.Vi�t ch��ng trình con tính C�n b�c 3 c�a m�t s� a.

Page 38: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 38

Ch��ng V D� LI�U CÓ C.U TRÚC

I.Khái ni�m v" d� li�u có c u trúc Trong Turbo Pascal ta �ã dùng các ki�u d� li�u vô h� ng ( ��n gi�n chu/n) nh� các ki�u : Boolean, s� nguyên, s� th�c, char, �o�n con, li�t kê. Ngoài ra Pascal còn cho phép ta xây d�ng các ki�u d� li�u khác t� các ki�u ��n gi�n chu/n, �ó là d� li�u có cu trúc. D� li�u có cu trúc c�a Pascal có các ki�u : M�ng(Array), chu�i(String), T�p h�p(Set), B�n ghi(Record), T�p tin(File), Con tr (Pointer). Ngôn ng� cho phép dùng nhiu d� li�u cu trúc ph)c t�p thì ngôn ng� �ó càng m�nh và d$ s� d#ng. II.C u trúc d� li�u m�ng 1. M�ng và cách khai báo m�ng M�ng là m�t t�p g�m nhiu ph�n t� có cùng chung m�t ki�u d� li�u. M�i ph�n t� c�a m�ng có m�t ��i l��ng xác ��nh v� trí t��ng ��i c�a ph�n t� �ó so v i các ph�n t� khác trong m�ng, g�i là ch# s�. Các y�u t� �� xác ��nh m�t m�ng g�m có: -Tên m�ng - Ki�u d� li�u chung c�a các ph�n t� trong m�ng - Ki�u d� li�u c�a ch� s� và ph�m vi c�a ch� s�. Ki�u d� li�u c�a các ph�n t� m�ng là m�i ki�u d� li�u mà m�t bi�n có th� có. Ki�u ch� có th� là ki�u ��m ���c : nguyên, ký t�, lôgic, li�t kê hay �o�n con. 2.M�ng m$t chi"u 2.1 Khai báo m�ng m�t chi�u TYPE Tênki�um�ng = Array[m1 . . m2] of Tênki�ud�li�u; . �ây m1, m2 là hai h�ng xác ��nh ph�m vi c�a ch� s�, chúng có chung m�t ki�u d� li�u và m1< m2. Ví d# :

Type Mang1 = array[0..10] of Real; Mang2 = array[1..5] of String[18]; Mang3 = array[‘a’..’d’] of Integer; 2.2: Khai báo bi�n m�ng VAR Tênm�ng : Tênki�um�ng ; Ví d#: Var A : Mang1; Hten: Mang2; B: Mang3; 2.3 Khai báo m�ng có gán tr ban ��u Pascal cho phép v�a khai báo m�ng v�a gán gía tr� ban ��u cho các ph�n t� m�ng, ch4ng h�n nh� d� i �ây: Const X : array[1..5] of Integer = (12, 14, 16, 18, 20) ;

Page 39: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 39

Khi �ó X là m�t m�ng g�m 5 ph�n t� cùng ki�u nguyên và có giá tr� X[1]=12, X[2]=14, X[3]=16, X?4]=18, X[5]=20. 2.4 Khai báo tr�c ti�p bi�n m�ng VAR Tênm�ng : Array[m1 . . m2] of Tênki�ud�li�u ; Ví d#: Cho khai báo d� i �ây: Var A : Array[0..10] of Real; Hten: Array[1..5] of String[18]; B: Array[‘a’..’d’] of Integer; 2.5 Truy xu�t các ph�n t� m�ng Các x� lý trên m�ng ���c quy v x� lý t�ng ph�n t� m�ng. Ð� xác ��nh m�t ph�n t� c�a m�ng, ta dùng cách vi�t : Tênm�ng[ ch� s� c�a ph�n t�] Các phép x� lý trên ph�n t� m�ng +Phép gán : Ta có th� gán m�t giá tr� cho m�t ph�n t� m�ng

Ví d# : A[0]:= 15.8; A[1]:= 2*A[0]; Hten[3]:= ‘Nguyen Thi Loan’; B[‘a’]:=100; +Nh�p d� li�u : Khi nh�p d� li�u cho các ph�n t� c�a m�t m�ng , ta có th� dùng câu l�nh For, While hay Repeat. Ví d#, nh�p d� li�u cho các ph�n t� c�a m�ng A 10 ph�n t�: For i:=0 to 10 do begin Write(‘A[‘,I,’]=’);Readln(A[i]); end; ho&c (dùng While) : i:=0; While i<= 10 do begin Write(‘A[‘,I,’]=’);Readln(A[i]); i:=i+1; end; +In d� li�u : Ð� in các gía tr� c�a m�ng A lên màn hình, ta vi�t : For i:=0 to 10 do Write(A[i]:6:2); 2.6. Các bài c� b�n v� m�ng + +�m các ph�n t� m�ng th a mãn m�t �iu ki�n nào �ó.

Ta xét ví d# nh�p m�t m�ng A có N ph�n t�, in m�ng A lên màn hình, và ��m xem m�ng A có bao nhiêu s� d��ng : PROGRAM DemSo; { Ð�m s� d��ng trong m�ng} Type Kmang = Array[1..20] of Real; Var A: Kmang; i, N, Dem : Integer; Begin

Page 40: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 40

Repeat Write(‘ Nh�p s� ph�n t� N : ‘); Readln(N); Until (N>0) and ( N<21); { nh�p m�ng } For i:=1 to N do begin Write(‘Nh�p A[‘ , i , ‘ ]: ‘);Readln( A[i] ); end; { In m�ng A} Writeln(‘ M�ng A là : ’); For i:=1 to N do Write(A[i]:3:0); Writeln; { ��m s� d��ng } Dem:=0; or i:=1 to N do If A[i]>0 then Dem:=Dem+1; Writeln(‘ S� s� d��ng = ‘ , Dem ); Readln; End. + Bài tóan tìm s� l�n nh�t c�a dãy A1, A2, ..., An. G�i Max là bi�n ch)a s� l n nht ph�i tìm, th� thì : B� c 1: Gán Max:=A[1]; B� c 2: N�u Max<A[2] thì gán Max:=A[2]; B� c 3: N�u Max<A[3] thì gán Max:=A[3]; ... B� c n: N�u Max<A[n] thì gán Max:=A[n]; + Bài s�p x�p m�ng t ng d�n (hay gi�m d�n) Có nh�ng ph��ng pháp s*p x�p m�ng khác nhau, � �ây ch� xin gi i thi�u m�t ph��ng pháp, tuy ch�a ph�i là hay nh�ng ��n gi�n và d$ hi�u cho nh�ng ng�!i m i l�p trình, �ó là ph��ng pháp l�a ch�n tr�c ti�p (Bubble sort). Ý t��ng c�a ph��ng pháp là nh� sau: B� c 1: Tìm s� nh nht trong các ph�n t� A[1], A[2],.., A[n] và �� vào v� trí ��u tiên A[1]. B� c 2: Tìm s� nh nht trong các ph�n t� A[2], A[3],.., A[n] và �� vào v� trí th) hai A[2]..v.v. B� c n-1: Tìm s� nh nht trong hai ph�n t� A[n-1], A[n] và �� vào v� trí n-1. Tóm l�i, thu�t s*p x�p dãy A t�ng ���c vi�t nh� sau: For i:=1 to N-1 do For j:=i+1 to N do if A[i]>A[j] then begin { Ð�i ch� A[i] và A[j] } Z:=A[i]; A[i]:=A[j]; A[j]:=Z; end;

Page 41: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 41

Trong �ó N là s� ph�n t� c�a dãy A còn Z là m�t bi�n trung gian có cùng ki�u d� li�u v i các ph�n t� c�a m�ng A. Ch��ng trình d� i �ây tìm s� l n nht c�a m�ng A và s*p dãy A t�ng d�n: PROGRAM Tangdan; Uses CRT; Type Kmang = array[1..20] of Real; Var i, j, N : Integer; A: Kmang; z, Max : Real; Begin Clrscr; Repeat Write(‘ Nh�p s� ph�n t� N : ‘); Readln(N); Until (N>0) and ( N<21); For i:=1 to N do { nh�p m�ng } begin Write(‘Nh�p A[‘, i, ‘]: ‘); Readln(A[i]); end; { Tìm s� l n nht } Max :=A[1]; For i :=1 to N do if Max< A[i] then Max:=A[i]; Writeln(‘ S� l n nht là: ’ , Max : 4:1); { s*p x�p dãy t�ng } For i:=1 to N-1 do For j:=i+1 to N do If A[i]>A[j] then begin { ��i ch� A[i] và A[j] } z:=A[i]; A[i]:=A[j]; A[j]:=z; end; Writeln(‘ Dãy �ã s*p t�ng là : ‘); For i:=1 to N do Write(A[i]:3:0); Readln; End. + Ki m tra m�ng có th"a mt tính ch�t không. Ta th�!ng g&p bài ki�m tra xem m�i ph�n t� c�a m�ng A có th a mãn m�t �iu ki�n không, ví d# m�ng A có ph�i là dãy t�ng không, có ph�i là dãy ��i x)ng không, có ph�i là m�t cp s� c�ng không v.v... Cách th�c hi�n nh� sau : Ta x� d#ng m�t bi�n Kiemra ki�u Boolean th�c hi�n nh� sau: Kiemtra:=TRUE; For i:=1 to N do if A[i] không th a �iu ki�n then Kiemtra:= FALSE; Vi�c xác ��nh �iu ki�n là tùy t�ng bài c# th�.

Page 42: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 42

Ví d#: Ki�m tra xem A có ph�i là m�t dãy ��i x)ng không ? Dãy 1 3 5 4 5 3 1 là ��i x)ng. Dãy 1 3 5 4 2 3 1 là không ��i x)ng vì A[3] khác A[5]. Gi� thi�t bi�n Kiemtra �ã ���c khai báo ki�u Boolean. Trong ch��ng trình ta dùng các l�nh sau: Kiemtra:=TRUE; For i:=1 to N do if A[i]<>A[N-i+1] then Kiemtra:=FALSE; If Kiemtra=TRUE then writeln(‘ Dãy A ��i x)ng’) else Writeln( ‘Dãy A không ��i x)ng ‘); 3. M�ng hai chi"u (ma tr�n) 3.1. Khai báo m�ng hai chi�u +Ki u d li�u

TYPE Tênki�um�ng= Array[n1..n2 , m1..m2] of Tênki�udli�u; Trong �ó n1, n2 là các h�ng có cùng ki�u d� li�u và n1.. n2, chúng xác ��nh ph�m vi c�a ch� s� th) nht, g�i là ch� s� dòng. T��ng t� m1, m2 là các h�ng có cùng ki�u d� li�u và m1 .. m2, chúng xác ��nh ph�m vi c�a ch� s� th) hai, g�i là ch� s� c�t. Gi�ng nh� m�ng m�t chiu, ki�u d� li�u c�a các ch� s� ch� có th� là ki�u ��m ���c: nguyên, ký t�, lô gic, li�t kê hay �o�n con, không ���c là ki u th!c hay chu�i. + Bi�n m�ng VAR Tênm�ng : Tênki�um�ng ; Ví d# : Type Kmang1 = array[1..2, 1..3] of Real; Kmang2 = array[‘a’..’c’ , 1..3] of String[15];

Var X : Kmang1; Y : Kmang2; Ghi chú : Trong m�ng hai chiu TP cho phép khai báo tr�c ti�p bi�n m�ng, cách khai báo nh� sau : VAR Tênm�ng : Array[n1..n2 , m1..m2] of Tênki�ud�li�u; Ví d#, cho khai báo : Var X : array[1..2, 1..3] of Real; Y : array[‘a’..’c’ , 1..3] of String[15]; K�t qu� ta nh�n ���c hai m�ng hai chiu: M�ng X g�m 6 ph�n t� cùng ki�u d� li�u th�c: X[1,1], X[1,2], X[1,3] X[2,1], X[2,2], X[2,3] M�ng Y g�m 9 ph�n t� cùng ki�u chu�i String[15] :

Page 43: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 43

Y[‘a’,1], Y[‘a’,2], Y[‘a’, 3] Y[‘b’,1], Y[‘b’,2], Y[‘b’, 3] Y[‘c’,1], Y[‘c’,2], Y[‘c’, 3] Chú ý: - Có th� xem m�ng hai chiu là m�ng m�t chiu mà m�i ph�n t� c�a nó l�i là m�t m�ng m�t chiu. 3.2 Khai báo và gán giá tr ban ��u Có th� khai báo và gán giá tr� ngay cho m�t m�ng hai chiu, ch4ng h�n: Type Kmang1 = array[1..2, 1..3] of Real; Const X : Kmang1 = ( (1.5, 2.5, 3.5), (5.0, 6.5, 7.0) ); Khi �ó X là m�t m�ng hai chiu có 6 ph�n t� cùng ki�u th�c và có giá tr� là: X[1,1]=1.5, X[1,2]=2.5, X[1,3]=3.5 X[2,1]=5.0, X[2,2]=6.5, X[2,3]=7.0 C�n nhn m�nh r�ng m&c dù t� khóa � �ây là Const song X và các ph�n t� c�a X có th� dùng nh� các bi�n, t)c là các ph�n t� c�a X có th� thay ��i giá tr� ���c. 3.3 Các thao tác trên ma tr�n Ð� xác ��nh m�t ph�n t� trong m�ng hai chiu, ta vi�t: Tênbi�nm�ng[ch� s� 1, ch� s� 2] Ví d#: X[1,1]:=12.5; X[2,1]:=X[1,1]+15; Y[‘a’,1]:=‘Tran Thi Mai’; Ð� nh�p d� li�u cho m�t m�ng hai chiu, ta ph�i dùng hai vòng l&p duy�t theo hai ch� s�, ch4ng h�n mu�n nh�p d� li�u cho m�ng X, ta vi�t: For i:=1 to 2 do For j:=1 to 3 do begin Write(‘nh�p ph�n t� hàng ‘, i, ‘ c�t ‘, j , ‘: ‘); Readln(X[i, j]); end; T��ng t�, l�nh nh�p d� li�u cho m�ng Y ���c vi�t là: For ch:=‘a’ to ‘c’ do For j:=1 to 3 do begin Write(‘nh�p ph�n t� hàng ‘, ch , ‘ c�t ‘, j , ‘: ‘); Readln(X[ch, j]); end; trong �ó ch là bi�n ki�u ký t�, còn i và j là các bi�n nguyên. Ð� in m�ng X lên màn hình, trình bày gi�ng nh� cách vi�t ma tr�n, m�i hàng in trên m�t dòng, ta dùng l�nh : For i:=1 to 2 do begin For j:=1 to 3 do write(X[i, j]:3:1); { in hàng th� i}

Page 44: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 44

Writeln; { xu�ng dòng, chu�n b� in hàng ti�p theo } end; 3.4. Các ví d v� ma tr�n Vì ma tr�n là m�ng m�t chiu c�a các m�ng m�t chiu nên nhiu bài v m�ng ���c m� r�ng t� nhiên cho ma tr�n. Ví d# 1: Tính t%ng c�a hai ma tr�n Nh�p vào hai ma tr�n A, B cp NxM. Tính ma tr�n C là t�ng c�a hai ma tr�n A và B, in ma tr�n C lên màn hình. Công th)c tính các ph�n t� c�a ma tr�n C= A+B : C[i,j ] = A[i, j] + B[i, j] v i i=1,..., N, và j=1,..., M Ch��ng trình nh� sau: PROGRAM Tong_hai_ma_tran; Uses CRT; Var A, B, C : Array[1..10, 1..10] of Real; i, j , N, M : Integer; Begin Clrscr; Repeat Write(‘Nh�p s� hàng N, s� c�t M : ‘); Readln(N, M); Until ( N>0) and ( N<11) and ( M>0) and (M<11); For i:=1 to N do For j:=1 to M do begin Write(‘Nh�p A[‘ , i, ‘,’ , j , ‘]: ‘); Readln(A[i,j]); end; { nh�p B và tính C luôn} For i:=1 to N do For j:=1 to M do begin Write(‘Nh�p B[‘ , i, ‘,’ , j , ‘]: ‘); Readln(B[i,j]); C[i, j]:=A[i, j] + B[i, j]; end; { In ma trân A lên màn hình } Writeln(‘ Ma tran A la :’); For i:=1 to N do begin For j:=1 to M do write(A[i, j]:3:0); Writeln; end; { In ma trân B lên màn hình } Writeln(‘ Ma tran B la :’); For i:=1 to N do begin For j:=1 to M do write(B[i, j]:3:0);

Page 45: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 45

Writeln; end; { In ma tr�n C lên màn hình } Writeln(‘ Ma tran C la :’); For i:=1 to N do begin For j:=1 to M do write(C[i, j]:3:0); Writeln; end; Readln; End. Ví d# 2: Tìm s� l�n nh�t (s� nh" nh�t) trong ma tr�n A: Gi� s� A là ma tr�n N hàng, M c�t, và Max là bi�n ch)a s� l n nht ph�i tìm. Kh�i ��u ta gán A[1,1] cho Max, sau �ó duy�t tt c� các ph�n t� c�a ma tr�n, n�u ph�n t� nào l n h�n Max thì l�u nó vào Max, t)c là: Max:=A[1,1]; For i:=1 to N do For j:=1 to M do if Max< A[i, j] then Max:=A[i, j]; Writeln(‘ S� l n nht là ’, Max); Ví d# 3: Tìm s� l�n nh�t (hay s� nh" nh�t) trong t�ng hàng (hay t�ng ct) c�a ma tr�n A: Hàng i c�a ma tr�n A có d�ng : A[i,1], A[i,2], ..., A[i,M] N�u xem i là c� ��nh thì �ó là m�ng m�t chiu có M ph�n t�, nên s� l n nht c�a hàng i ���c tìm b�ng các l�nh: Max:=A[i, 1]; For j:=1 to M do if Max< A[i, j] then Max:=A[i, j]; Writeln(‘Sln c�a hàng ‘, i, ‘ là: ‘, Max) ; Vì có c� th�y N hàng nên công vi�c trên ph�i làm N l�n )ng v i i=1, 2, ..., N, t)c là: For i:=1 to N do begin { tìm s� l n nht c�a hàng i } Max:=A[i, 1]; For j:=1 to M do if Max< A[i, j] then Max:=A[i, j]; Writeln(‘Sln c�a hàng ‘, i, ‘ là: ‘, Max) ; end; Ví d# 4: Ki m tra ma tr�n vuông A có ��i x�ng không ?. Ma tr�n vuông A g�i là ��i x)ng n�u nó không thay ��i khi ta ��i c�t thành hàng và ��i hàng thành c�t. Hai ma tr�n A,B : A là ��i x)ng, còn B không ��i x)ng vì B[1,2] <> B[2,1]. Ch� c�n có m�t c&p i, j sao cho

Page 46: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 46

A[i,j]<>A[j,i] thì A là ma tr�n không ��i x)ng. V�y các l�nh ki�m tra tính ��i x)ng c�a ma tr�n A là: Kiemtra := TRUE; For i:=1 to N do For j:=1 to N do if A[i, j]<>A[j, i] then Kiemtra:=FALSE ; If Kiemtra=TRUE then writeln(‘ Ð�i x)ng ‘) else writeln(‘ Không ��i x)ng ‘); Ví d# ch��ng trình ma tr�n c# th� th�c hi�n các công vi�c trên: PROGRAM Matran; Uses CRT; Type Matran = Array[1..10, 1..10] of Real; Var A : Matran; i, j , N, Dem : Integer; Max, Min : Real; Kiemtra: Boolean; Begin Clrscr; Repeat Write(‘Nh�p cp N : ‘); Readln(N); Until ( N>0) and ( N<11) ; For i:=1 to N do For j:=1 to N do begin Write(‘Nh�p A[‘, i, ‘,’ , j , ‘]: ‘); Readln(A[i,j]); end; { In ma trân A lên màn hình } Writeln(‘ Ma tran A la : ’); For i:=1 to N do begin For j:=1 to N do write(A[i, j]: 3 :0); Writeln; end; { Ð�m s� s� 0 } Dem:=0; For i:=1 to N do For j:=1 to N do if A[i, j]=0 then Inc(Dem); Writeln(‘ Có ‘, Dem, ‘ s� không’); { Tìm s� l n nht c�a ma tr�n } Max:=A[1,1]; For i:=1 to N do For j:=1 to N do if Max < A[i,j] then Max:=A[i,j];

Page 47: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 47

Writeln(‘ S� l n nht c�a ma tr�n= ‘, Max : 4:1); { Tìm s� nh nht trong t�ng hàng c�a ma tr�n } For i:=1 to N do begin Min:=A[i,1]; For j:=1 to N do if Min > A[i,j] then Min:=A[i,j]; Writeln(‘ S� nh nht c�a hàng ‘, i , ‘ là: ‘, Min : 4:1); end; { Ki�m tra ma tr�n có ��i x)ng không} Kiemtra:=True; For i:=1 to N do For j:=1 to i-1 do if A[i ,j]<>A[j ,i] then Kiemtra:=False; If Kiemtra=True then Writeln(‘ Ð�i x)ng’) else Writeln(‘ Không ��i x)ng’) ; Readln; End. III D� li�u ki�u chu*i ký t� 1. Khái ni�m - Chu�i là m�t dãy ký t� ���c rào trong 2 du nháy ��n. Ví d# : ‘Ngon ngu Pascal’ ‘Tin hoc 1998’ ‘12345678’ - Chu�i không có ký t� nào ‘‘ (ch� g�m hai du nháy ��n liên ti�p) g�i là chu�i r�ng. - S� ký t� có trong chu�i g�i là � dài c�a chu�i. Chu�i ‘ABCD’ có �� dài 4, chu�i ‘Pascal’ có �� dài là 6. Chu�i r�ng có �� dài b�ng không. 2 Cách khai báo 2.1 Khai báo ki�u d� li�u Type

Tên chu�i = String[N]; Tên chu�i =String;

Trong �ó N là m�t h�ng nguyên (0<= N <= 255) n ��nh s� ký t� t�i �a mà bi�n có th� nh�n và g�i là �� dài t�i �a c�a bi�n chu�i. N�u không có ch� th� [N] thì chu�i có �� dài t�i �a là 255 ký t�. Ví d# : Type Chuoi1=String[60]; Chuoiso=String[50; 2.2.Khai báo bi�n chu�i Var Tên bi�n chu�i :=H�ng chu�i;

Ví d# : Var St:Chuoi1;

Page 48: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 48

St2:Chuoiso; Ghi chú : T��ng t� nh� m�ng , TP cho phép khai báo tr�c ti�p bi�n chu�i. Cách khai báo nh� sau: Var

Tênbi�nchu�i : String[N] ; Tênbi�nchu�i : String ;

Var St : String[17]; Diachi : String;

Khi �ó St là bi�n chu�i có �� dài t�i �a là 17 ký t�, còn bi�n Diachi có �� dài t�i �a là 255 ký t�. 3. Truy nh�p vào t'ng ph!n t� c�a chu*i Gi�ng nh� m�ng, m�i ph�n t� c�a chu�i ���c truy nh�p thông qua tên chu�i và ch� s� c�a ph�n t�. G�i N =Length(St), khi �ó ký t� th) i (i=1, 2, ..., N) c�a St ���c ký hi�u là St[i]. Ví d#, cho : St :=‘ABC’;

thì N=3 và St[1]=‘A’, St[2]=‘B’, St[3]=‘C’. Nh� v�y m�i ký t� St[i] ���c dùng nh� m�t bi�n ki�u ký t�, và chu�i có th� xem là m�t m�ng các ký t�. Ch4ng h�n �� in chu�i ta có th� in t�ng ký t� nh� sau: For i:=1 to Length(St) do write(St[i]); Ðiu này cho thy chu�i là m�t ki�u d� li�u có tính cu trúc. Nh�ng m&t khác, m�i chu�i l�i có th� xem là m�t gía tr� duy nht, vì có th� nh�p và in chu�i tr�c ti�p b�ng các l�nh: Readln(St); Write(St); Ð&c �i�m này cho thy chu�i còn là m�t ki�u d� li�u có tính ��n gi�n. 4. Các phép tóan trên chu*i : -Phép cng (n�i) chu�i: Khi c�ng hai chu�i, ta ���c m�t chu�i m i g�m các ký t� c�a hai chu�i ban ��u ghép l�i.Ví d# : ‘tin’ + ‘hoc’ =‘tinhoc’ ‘1234’+ ‘5678’ = ‘12345678’ -Phép so sánh chu�i:

Khi so sánh hai chu�i, ta so sánh t�ng c&p ký t� c�a hai chu�i t� trái qua ph�i. N�u phát hi�n ra m�t c&p ký t� khác nhau thì chu�i nào ch)a ký t� nh h�n s" nh h�n. Ví d#: ‘Hong’ > ‘Han’ vì ‘o’ > ‘a’ ‘thanh’ > ‘thao’ vì ‘n’ > ‘o’ N�u so sánh h�t chiu dài c�a chu�i ng*n h�n mà không có c&p nào khác nhau thì chu�i ng*n h�n s" nh h�n, ví d#: ‘an’ < ‘anh’ ‘chu’ < ‘chung’

Page 49: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 49

Hai chu�i b�ng nhau khi chúng cùng �� dài và các ký t� � các v� trí t��ng )ng thì b�ng nhau. 5. Các hàm liên quan ��n chu*i : +Hàm Length(St) : cho �� dài c�a chu�i St. Ví d#: Length(‘ABCD’)=4 vì chu�i ‘ABCD’ có 4 ký t�. Chu�i r�ng có �� dài b�ng 0. +Hàm Pos(S, St):

Cho v� trí ��u tiên tìm thy chu�i S trong chu�i St, n�u không tìm thy thì hàm cho k�t q�a b�ng 0. Ví d#: Pos(‘Ab’, ‘cdAb3Abm’) = 3, Pos(‘Ab’, ‘1bA3b’) = 0. +Hàm Copy(St, k, m) : cho m ký t� c�a St tính t� v� trí k. Ví d#: Copy (‘ABCDEF’, 4, 2) =‘DE’.

N�u k> Length(St) thì k�t q�a s" là m�t chu�i r�ng N�u m> s� ký t� �)ng sau k� t� v� trí k thì hàm Copy ch� ly các ký t� t� v� trí k ��n h�t chiu dài c�a St, ví d# : Copy (‘ABCD’, 3, 10) = ‘CD’ +Hàm Concat( St1, St2, ..., Stn) : Ghép n�i các chu�i St1, St2, ..., Stn theo th) t� �ó thành m�t chu�i duy nht. V�y : Concat( St1, St2, ..., Stn) = St1+St2+...+Stn. 6. Các th� t c liên quan ��n chu*i : + Th� tc Delete(St, k, m) :

Xóa m ký t� trong bi�n chu�i St b*t ��u t� v� trí th) k. Ví d#, sau khi th�c hi�n các l�nh: St:=‘ TurboPascal’; Delete(St, 1, 5); thì gía tr� c�a St=‘Pascal’ vì 5 ký t� ��u �ã b� xóa. N�u k > Length(St) thì không xóa gì c�. N�u m > s� ký t� �)ng sau k� t� v� trí k thì xóa h�t t� v� trí k ��n cu�i chu�i. Ví d#, sau khi th�c hi�n ba l�nh : St:=‘Turbo Pascal’; Delete(St, 10, 20); Write(St); thì in ra ch� Turbo Pas vì St �ã b� xóa �i 3 ký t� cu�i nên ch� còn St=‘Turbo Pas’. +Th� tc Insert(S, St, k) : Chèn chu�i S vào bi�n chu�i St t�i v� trí k. Ví d#, cho : St:=‘ABCD’; Sau khi th�c hi�n l�nh: Insert(‘**’, St, 3); thì St b� bi�n ��i thành St=‘AB**CD’. N�u k> Length(St) thì S ���c n�i vào cu�i c�a St. Ví d#, sau khi th�c hi�n hai l�nh : St:=‘XYZ’;

Page 50: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 50

Insert(‘ABC’, St, 6); thì St=‘XYZABC’. +Th� tc Str(x, St): Bi�n ��i s� nguyên hay th�c x thành ki�u chu�i và gán cho bi�n chu�i St. Ví d#, sau khi th�c hi�n l�nh : Str(4752, St); thì k�t q�a là St= ‘4752’. S� x có th� ���c ��nh d�ng nh� khi in ra màn hình. L�nh Str(4752 : 6, St); cho k�t q�a St=‘ 4752’ (tr��c s� 4752 có 2 ký t! tr�ng) . N�u x là bi�n th�c và gía tr� c�a x=34.95 thì l�nh : Str(x :7:3, St); cho k�t q�a St=‘ 34.950’ (tr��c s� 34.950 có 1 ký t! tr�ng) . +Th� tc Val(St, x, k ): Bi�n ��i chu�i s� St thành s� nguyên hay th�c và gán cho bi�n nguyên hay th�c x. S� nguyên k dùng �� phát hi�n l�i: n�u ��i ���c thì k=0, ng��c l�i, gía tr� c�a k là v� trí có l�i trong chu�i St. Ví d#, cho ba bi�n n, k, j ki�u nguyên và bi�n x ki�u th�c, sau khi th�c hi�n các l�nh : St:=‘385’; Val(St, n, j); Val(‘12.59’, x, k); thì n=385, j=0, x=12.59 và k=0. N�u gán St := ‘3a7’; và th�c hi�n l�nh: Val(St, n, k); thì gía tr� c�a n không xác ��nh còn k=2 là v� trí c�a ch� a trong chu�i St, t�i �ó không ��i ra s� ���c. 3.8. Các ví d v� chu�i Ví d# 1: Ð%i mt chu�i ra ch hoa hay ch th��ng. Ð� ��i c� chu�i St thành ch� hoa, ta ��i t�ng ký t� c�a chu�i �ó ra ch� hoa, t)c là : For i:=1 to Length(St) do St[i]:=Upcase(St[i]); T��ng t�, �� ��i c� chu�i St thành ch� th�!ng, ta c(ng ��i t�ng ký t� c�a chu�i St ra ch� th�!ng: For i:=1 to Length(St) do if ( St[i]>=‘A’) and (St[i]<=‘Z’) then St[i]:=Chr( Ord(St[i]) + 32) ; Ví d# 2: Chu�n hóa mt chu�i ký t! . Cho chu�i St có nhiu ký t� tr*ng th�a � ��u, � cu�i và gi�a các t�, nh� St=‘ nguyen van tuan ‘. Chu/n hóa chu�i St là xóa h�t các ký t� tr*ng th�a � ��u và � cu�i, và gi�a hai t� ch� gi� l�i �úng m�t ký t� tr*ng, nh� St =‘nguyen van tuan’. a) Xóa các ký t! tr�ng & ��u chu�i : Ð� xóa m�t ký t� tr*ng � ��u c�a chu�i St, ta dùng l�nh: If St[1]=#32 then Delete(St,1,1); Mu�n xóa h�t các ký t� tr*ng � ��u chu�i ta dùng l�nh: While St[1]=#32 do Delete(St,1,1);

Page 51: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 51

Di'n gi�i: ch�ng nào ký t� ��u tiên c�a St v'n còn là ký t� tr*ng thì c) xóa nó �i cho ��n khi ký t� ��u tiên là khác tr*ng. S� d% ph�i dùng vòng l&p While là vì s� ký t� tr*ng � ��u chu�i là không bi�t tr� c. b) Xóa các ký t! tr�ng & cu�i chu�i : T��ng t�, mu�n xóa tt c� các ký t� tr*ng � cu�i c�a chu�i St, ta dùng l�nh: While St[ length(St) ]= #32 do Delete(St, length(St), 1); Di'n gi�i: ch�ng nào ký t� cu�i cùng c�a St còn là kho�ng tr*ng thì c) xóa nó �i cho ��n khi ký t� cu�i cùng là khác tr*ng. c) Xóa các ký t! tr�ng th�a & gia hai t� trong chu�i : Mu�n xóa các ký t� tr*ng th�a �� gi�a hai t� ch� còn �úng m�t ký t� tr*ng ta làm nh� sau: tìm trong St ch� nào có hai ký t� tr*ng thì xóa �i m�t, và l&p l�i thao tác trên cho ��n khi trong St không còn ch� nào có hai ký t� tr*ng liên ti�p. T)c là : k:=Pos(‘ ‘, St); { ‘ ‘ là 2 ký t! tr�ng } While k > 0 do begin Delete(St, k, 1); k:=Pos(‘ ‘, St); end; Ví d# 3 : +�m trong chu�i St có bao nhiêu ch pascal. Vì ch� pascal có 6 ký t�, nên ta so sánh t�ng c#m 6 ký t� c�a St v i chu�i pascal, b*t ��u t� v� trí 1: Dem:=0; For i:=1 to Length(St) do if Copy (St, i, 6) =‘pascal’ then Inc(Dem); Writeln(‘ S� ch� pascal là ‘ , Dem); Ví d# 4: Tìm ki�m và thay th�. Tìm trong chu�i St xem có ch)a ch� ‘basic’ không, n�u có thì thay b�ng ch� ‘pascal’, n�u không có thì in câu ‘không có’. Ví d# St=‘ngon ngu basic’, sau khi thay th� ta ���c St = ‘ngon ngu pascal’. Ta dùng hàm Pos �� tìm xem trong St có ch)a ch� ‘basic’ không. Th� t#c Delete s" xóa chu�i ‘basic’ kh i St, và th� t#c Insert s" chèn chu�i ‘pascal’ vào St t�i v� trí �ang xét: PROGRAM Tim_va_thay_the ; { Tìm ch basic và thay b$ng ch pascal } Var St: String; k: Integer; Begin Write(‘ Nh�p chu�i St :’); Readln(St); k:= Pos(‘basic’ , St); If k> 0 then begin Delete(St, k, 5); { xóa ch basic } Insert(‘pascal’ , St, k); { chèn ch pascal } Writeln(‘ St = ‘, St);

Page 52: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 52

end else Writeln( St, ‘ không có ch� basic ‘) ; Readln; End. Ví d# 5: Tính t�ng các bình ph��ng c�a các ch� s� c�a m�t s� t� nhiên N. Ví d# N= 325 thì T=32+22+52 = 38. PROGRAM TongBinhPhuong ; { Tính t%ng các bình ph��ng các ch s� c�a s� N} Var N, T : Longint; i, j , k : Integer; St : String[40]; Begin Write(‘Nh�p s� N : ‘); Readln(N); Str( N, St ); { Ð%i s� N ra chu�i g&i vào St } T:=0; For i:=1 to Length(St) do begin Val ( St[i], j, k ); {Ð%i St[i] ra s� g&i vào j} T:=T+ j*j; end; Writeln(‘ T�ng= ‘, T); Readln; End. IV.D� li�u ki�u t�p h/p 1. Khai báo ki�u t�p h/p Ki�u t�p h�p là ki�u d� li�u bao g�m các ph�n t� có chung m�t ki�u d� li�u, g�i là ki�u c� b�n. Ki�u c� b�n ph�i là ki�u vô h� ng ��m ���c, t)c ch� có th� là ki�u byte, ký t� , lôgic hay li�t kê. S� ph�n t� c�a t�p h�p t�i �a là 256 ph�n t�. Cách khai báo TYPE Kky_tu = SET OF Char; Kchu_hoa = SET OF ‘A’.. ‘Z’; Kso = SET OF Byte; Var TapA, TapB : Kky_tu; TapH: Kchu_hoa; TapS : Kso; Các t�p h�p TapA, TapB, TapH, TapS nói trên c(ng có th� khai báo tr�c ti�p nh� sau: Var TapA, TapB : SET OF Char; TapH : SET OF ‘A’.. ‘Z’; TapS : SET OF Byte;

Page 53: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 53

2. Xác ��nh m$t t�p h/p M�t t�p h�p ���c xác ��nh b�ng cách li�t kê các ph�n t� c�a nó, các ph�n t� ���c phân cách nhau b�i du ph/y, và �&t gi�a hai du ngo&c vuông. [ ] : t�p r�ng [3..6] : t�p các s� nguyên 4, 3, 5, 6 [3..6, 9, 12] : t�p các s� nguyên 3, 4, 5, 6, 9, 12 [‘A’..’C’, ‘X’, ‘Z’] : t�p các ch� ‘A’, ‘B’, ‘C’, ‘X’, ‘Z’ 3. Các phép trên t�p h/p 3.1 Phép gán: Có th� gán m�t t�p h�p cho m�t bi�n t�p h�p cùng ki�u. Ví d#, v i các bi�n khai báo � trên, có th� gán:

TapA:=[‘1’..’5’, ‘9’, ‘A’]; TapH:=[‘C’..’F’]; TapS:=[15..20, 30, 40]; T�p r�ng [ ] gán cho bi�n t�p h�p ki�u nào c(ng ���c : TapA:=[ ]; TapH:= [ ]; L�nh gán d� i �ây là sai vì hai v� không cùng ki�u d� li�u: TapA:=[1..8]; TapS:=[‘1’..’9’];

3.2 Phép h�p: H�p c�a hai t�p h�p A và B, ký hi�u là A+B, là m�t t�p h�p g�m các ph�n t� ho&c thu�c t�p A ho&c thu�c t�p B. Ví d#: [3..5]+[4..6,10, 15]=[ 3..6, 10, 15] 3.3 Phép giao Giao c�a hai t�p h�p A và B, ký hi�u là A*B, là m�t t�p h�p g�m các ph�n t� ��ng th!i thu�c A và B. Ví d#: [1..10]*[5..15] =[5..10] 3.4 Phép hi�u Hi�u c�a hai t�p h�p A và B, ký hi�u là A-B, là m�t t�p h�p g�m các ph�n t� thu�c t�p A nh�ng không thu�c t�p B. Ví d#: [1..10] - [5..15] =[1..4] Nh�n xét: Các phép trên ch# th!c hi�n ���c khi A và B cùng ki u, và k�t q�a là mt t�p h�p C cùng ki u v�i A và B. 3.5 Phép th� IN (thu�c v�) : Dùng �� ki�m tra xem m�t bi�n hay m�t gía tr� có ph�i là ph�n t� c�a m�t t�p h�p nào �ó không. Bi�u th)c x IN TapA cho k�t q�a là True n�u gía tr� x thu�c TapA, cho gía tr� False trong tr�!ng h�p ng��c l�i. Ví d :

‘N’ IN [‘N’, ‘n’] cho k�t q�a là TRUE ‘y’ IN [‘N’, ‘n’] cho k�t q�a là FALSE

3.6 Các phép so sánh (=, <>, <=, >=) : Cho A và B là hai t�p h�p cùng ki�u, k�t q�a c�a các phép so sánh A v i

B s" là TRUE ho&c FALSE.

Page 54: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 54

-Phép b$ng: A=B khi và ch� khi m�i ph�n t� c�a A �u thu�c B và m�i ph�n t� c�a B �u thu�c A, trong tr�!ng h�p ng��c l�i, ta nói A khác B và vi�t A<>B. Ví d#: [3,2,4,5]= [2, 3..5] [‘A’, ‘B’]<>[‘a’,’B’] -Phép nh" h�n ho�c b$ng : A<=B khi và ch� khi m�i ph�n t� c�a A �u thu�c B, ví d#: [3..5]<=[3..5] [3..5]<=[1..6] -Phép l�n h�n ho�c b$ng : A>=B khi và ch� khi m�i ph�n t� c�a B �u thu�c A, nói cách khác A>=B khi và ch� khi B<=A. [3..5]>=[3..5] [‘A’..’Z’]>=[‘A’..’D’] Chú ý r�ng trong các t�p h�p không có phép so sánh nh h�n (<) và l n h�n (>). Khi c�n so sánh l n h�n hay nh h�n ta có th� vi�t: If (A<=B) and ( A<>B) then writeln(‘A < B’); If (A>=B) and ( A<>B) then writeln(‘A > B’); 4. Các ví d : Ví d� 1: Nh�p vào m�t chu�i St , cho bi�t trong St có nh�ng ch� hoa nào. Ví d# St=‘ABc3BAFdzA’ thì có các ch� hoa là A, B, F. PROGRAM InChuHoa; Var Taphoa : Set of ‘A’..’Z’; N, i: byte; ch : char; St : String; Begin Write(‘ Nh�p chu�i St: ‘);Readln(St); Taphoa:=[]; N:=length(St); For i:=1 to N do if St[i] IN [‘A’..’Z’] then Taphoa := Taphoa+[ St[i] ]; Writeln(‘ Cac chu hoa co trong St la :’); For ch:=‘A’ to ‘Z’ do if ch IN Taphoa then write(ch:3); Readln; End. Ví d 2: Nh�p N s� nguyên trong ph�m vi t� 0 ��n 255. In ra các t�p s� ch1n, l0 và cho bi�t có bao nhiêu s� ch1n, bao nhiêu s� l0 (các s� trùng nhau ch� k� 1 l�n). Ví d#, nh�p 9 s� : 1, 2, 3, 4, 1, 2, 3, 4, 5 thì có hai s� ch1n là 2 và 4 và có 3 s� l0 là 1, 3, 5. PROGRAM InsoChanLe; Const N=10; Var

Page 55: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 55

Tapchan, Taple : Set of byte; N1, N2, i, k: byte; Begin Tapchan:=[]; Taple:=[]; For i:=1 to N do begin Write(‘Nhap so thu ‘, i, ‘: ‘); Readln(k); If odd(k)=False then Tapchan:=Tapchan+[k] else Taple:=Taple+[k]; end; writeln(‘ Các s� ch1n là: ‘); N1:=0; For i:=0 to (255 div 2) do if 2*i IN Tapchan then begin Write(2*i : 3); N1:=N1+1; end; Writeln( ‘ Co ‘, N1, ‘ s� ch1n’); Writeln(‘ Các s� l0 là: ‘); N2:=0; For i:=0 to (255 div 2) do if (2*i +1) IN Taple then begin Write(2*i+1 : 3); N2:=N2+1; end; writeln( ‘ Co ‘, N2, ‘ s� l0’); Readln; End. Ví d# 3: Tìm các s� nguyên t� < = các s� nguyên d��ng N cho tr� c. Có nhiu cách gi�i khác nhau, d� i �ây gi i thi�u ph��ng pháp c�a Eratosthene, s� d#ng d� li�u ki�u t�p h�p và không c�n ��n các phép nhân. Xut phát t� t�p s� nguyên S=[2..N] ta lo�i ra s� nguyên t� ��u tiên và tt c� các b�i s� c�a nó ra kh i S, l&p l�i quá trình trên cho ��n khi S thành t�p r�ng. PROGRAM InsoNguyento; Const N=20; Var Tapsnt, S: Set of 1..N; snt, i: Integer;

Page 56: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 56

Begin S:=[2..N]; Tapsnt:=[]; snt:=2; { so nguyen to nho nhat } Writeln(‘ Cac so nguyen to la :’ ); Repeat { tim snt la so nho nhat trong S} While Not (snt IN S) do snt:=snt+1; Tapsnt:= Tapsnt+[snt]; { dua vao Tapsnt } Write(snt:4); { Lo�i các b�i c�a snt ra kh i S } i:=snt; While i<=N do begin S:=S - [i]; i:=i+snt; end; Until S=[]; Readln; End. V. D� li�u ki�u b�n ghi 1. Khái ni�m Các ph�n trình bày tr� c cho thy ngôn ng� Pascal rt m�nh trong vi�c gi�i quy�t các bài thiên v tính . Trong ph�n này chúng ta s" thy thêm m�t kh� n�ng m�nh m" n�a c�a ngôn ng� Pascal trong l%nh v�c qu�n lý: qu�n lý nhân s�, qu�n lý v�t t�, qu�n lý tài chính,.v.v. Hàng ngày chúng ta rt quen thu�c v i m�t danh sách sinh viên nh� d� i �ây:

M�i dòng li�t kê các d� li�u v m�t ng�!i, m�i c�t là m�t d� li�u thành ph�n cung cp thông tin v m�t thu�c tính c# th� c�a nh�ng ng�!i �ó. Trong ngôn ng� Pascal, m�i dòng ���c g�i là m�t RECORD (d�ch là b�n ghi hay th( ghi), m�i c�t là m�t FIELD ( là tr��ng hay thành ph�n, hay thuc tính cho sát v i th�c t�). Nói t�ng quát, m�i b�n ghi là m�t t�p g�m nhiu tr��ng (field), các tr��ng có th� có ki�u d� li�u khác nhau. 2. Khai báo ki�u d� li�u b�n ghi TYPE Tênki�u = RECORD Têntr�!ng1 : Ki�udli�u1; Têntr�!ng2 : Ki�udli�u2;

Page 57: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 57

... Têntr�!ngn : Ki�udli�un; End; Ví d# 1: Ta ��nh ngh%a m�t ki�u KSVIEN nh� sau: TYPE KSVIEN = RECORD Hoten:String[20]; Maso : String[8]; Toan, Ly, DTB: Real; End; Theo mô t� trên, ta có m�t ki�u d� li�u m i �&t tên là KSVIEN có cu trúc b�n ghi g�m 5 tr�!ng (thu�c tính) là:

Ví d# 2: Ta mô t� th!i gian là ki�u KDATE có ba tr�!ng ngày , tháng, n�m nh� sau: TYPE KDATE = RECORD Ngay : 1..31; Thang : 1..12; Nam : Integer; End; 3. Khai báo bi�n b�n ghi Ki�u b�n ghi sau khi �ã ���c ��nh ngh%a có th� dùng khai báo cho các bi�n theo cách sau VAR Tên bi�n : Ki�u b�n ghi; Ví d# : Var X, Y, Z : KSVIEN; Trong �ó KSVIEN là b�n ghi �ã mô t� � ph�n trên. Theo khai báo này, X ,Y và Z là ba bi�n ki�u b�n ghi KSVIEN, m�i bi�n �u có 5 tr�!ng Hoten, Maso, Toan, Ly và DTB. 4.Các phép thâm nh�p vào bi�n b�n ghi Ð� thâm nh�p vào m�t tr�!ng c�a b�n ghi ta th�c hi�n nh� sau : Tênbi�n .Têntr��ng Ví d# : Các l�nh d� i �ây gán gía tr� cho t�ng tr�!ng c�a bi�n X :

Page 58: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 58

X.Hoten :=‘Nguyen Van An’; X.Maso :=‘1973208’; X.Toan :=8.0; X.Ly :=7.0; X.DTB :=(X.Toan+X.Ly)/2; Ð� nh�p d� li�u cho tr�!ng Hoten c�a bi�n Y, ta vi�t: Write(‘Nhap ho ten sinh vien Y : ‘); Readln(Y.Hoten); 5. Câu l�nh WITH Khi làm vi�c v i nhiu tr�!ng c�a m�t bi�n b�n ghi thì cách thâm nh�p � trên t ra r�!m rà vì ph�i vi�t nhiu l�n tên bi�n tr� c tên tr�!ng. Ð� ��n gi�n cách vi�t, Pascal ��a ra câu l�nh : WITH Tênbi�n DO L�nh; Tên bi�n thu�c ki�u b�n ghi. N�u L�nh có truy xut ��n các tr�!ng c�a Tên bi�n thì không c�n ph�i vi�t Tên bi�n và du chm tr� c các tên tr�!ng. Ví d#, thay vì vi�t: X.Hoten:= ‘Nguyen Van An’; ta có th� vi�t : WITH X DO Hoten:= ‘Nguyen Van An’; Ð� in các tr�!ng c�a bi�n X lên màn hình, ta vi�t: WITH X DO Begin Writeln(‘ H� và tên :’ , Hoten); Writeln(‘ Mã s� sinh viên :’ , Maso); Writeln(‘ Ði�m :’ , Toan: 4:1); Writeln(‘ Ði�m Lý :’ , Ly: 4:1); Writeln(‘ Ði�m trung bình : ‘ , DTB :4:1); End; Tt c� các tên tr�!ng n�m trong kh�i begin và end ���c hi�u là các tr�!ng c�a bi�n X (n�u không ghi rõ tên bi�n nào khác). Các l�nh sau gán các gía tr� cho các tr�!ng c�a bi�n S ki�u KSACH là m�t b�n ghi l�ng nhau: WITH S DO begin Ma_so_sach:=‘TH-435’; Ten_doc_gia:=‘Nguyen van Mai’; Nam_xban :=1999; Gia_tien:= 15000; WITH Ngay_muon DO begin Ngay:=2; Thang:=9; Nam:=1999; end; end;

Page 59: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 59

6. M�ng các b�n ghi Trong th�c t�, ta th�!ng ph�i qu�n lý m�t danh sách sinh viên c�a m�t l p, m�t danh sách các quy�n sách trong th� vi�n. Ví th� m�ng các b�n ghi ���c dùng rt ph� bi�n. Ví d# : Ch��ng trình qu�n lý �i�m c�a m�t l p h�c PROGRAM Quanlyhocsinh;

TYPE KSVIEN = RECORD Hoten:String[20]; Maso : String[8]; Toan, Ly, DTB: Real; End; KMang = Array[1..50] of KSVIEN; VAR DS: KMang; Z: KSVIEN; I,j :Integer; Begin. For i:=1 to 10 do WITH DS[i] DO begin Write(‘Nhap ho ten sinh vien thu ‘,i,’ : ‘); Readln(Hoten); Write(‘Nhap ma so sinh vien thu ‘,i,’ : ‘); Readln(Maso); Write(‘Nhap �i�m Toan, Ly sinh vien thu ‘,i,’ : ‘); Readln(Toan, Ly); DTB:=(Toan + Ly)/2; end; {S�p x�p danh sách theo DTB } For i:=1 to 9 do For j:=i+1 to 10 do If DS[i].DTB < DS[j].DTB then begin { Ð%i ch� DS[i] và DS[j] } Z:=DS[i]; DS[i]:=DS[j]; DS[j]:=Z; end; {In danh sach len man hinh } For i:=1 to 10 do WITH DS[i] DO Writeln( i:2, Hoten:25, Maso:9 , Toan:5:1, Ly:5:1, DTB:5:1); Readln; End. VI. D� li�u ki�u t�p tin 1. Khái ni�m : Nh�p và xut d� li�u là hai công vi�c rt ph� bi�n khi th�c hi�n m�t ch��ng trình. Cho ��n nay, ta m i ch� nh�p d� li�u t� bàn phím và xut d� li�u ra màn

Page 60: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 60

hình. Các d� li�u này ���c t� ch)c trong b� nh c�a máy, chúng t�n t�i khi ch��ng trình �ang ch�y và b� xóa khi ch��ng trình k�t thúc. Mu�n l�u tr� các d� li�u lâu dài �� s� d#ng nhiu l�n thì ph�i ghi chúng lên �%a thành các t�p tin. T�p tin (file) trong Pascal là m�t ki�u d� li�u có cu trúc. M�i t�p tin là m�t t�p h�p các ph�n t� có cùng chung m�t ki�u d� li�u ���c nhóm l�i thành m�t dãy và ���c ghi trên �%a d� i m�t cái tên chung. D� i �ây s" trình bày hai lo�i t�p tin th�!ng g&p là t�p tin có ��nh ki�u và t�p tin v�n b�n. 2. T�p tin có ��nh ki�u T�p tin mà các ph�n t� c�a nó có cùng m�t ki�u d� li�u g�i là t�p tin có ��nh ki�u. Ki�u d� li�u c�a các ph�n t� c�a t�p tin có th� là ki�u ��n gi�n ( nguyên, th�c, ký t� , lô gic, chu�i ký t�...) ho&c ki�u có cu trúc ( m�ng, b�n ghi). 2.1 Cách khai báo ki�u t�p tin nh� sau Type Tênki�uTtin = File of Ki�uph�nt� ; Ví d#: Type Ksvien = Record Ten: String[20]; Namsinh : Integer; DTB : Real; end; KieuT1 = File of Integer; KieuT2 = File of String[20]; KieuT3 = File of Ksvien ; Theo khai báo trên thì KieuT1 là t�p tin có các ph�n t� ki�u nguyên(Integer), KieuT2 là t�p tin có các ph�n t� là các chu�i ký t� ( String[20] ), còn KieuT3 là t�p tin có các ph�n t� là các b�n ghi ki�u Ksvien. 2.2 Khai báo các bi�n t�p tin : Var F1 : KieuT1; F2 : KieuT2; F3 : KieuT3; F1, F2, F3 là các bi�n ki�u t�p tin, m�t lo�i bi�n �&c bi�t, không dùng �� gán gía tr� nh� các bi�n nguyên, th�c hay chu�i. M�i bi�n này ��i di�n cho m�t t�p tin mà thông qua các bi�n �ó ta có th� th�c hi�n các thao tác trên t�p tin nh�: t�o t�p tin, m�, �óng, xóa t�p tin, ghi d� li�u vào t�p tin và ��c d� li�u t� t�p tin, ... 2.3 Cách khai báo tr�c ti�p các bi�n t�p tin nh� sau: Var Tênbi�nTtin : File of Ki�uph�nt� ; Ví d#: có th� khai báo ba bi�n F1, F2, F3 nói trên theo cách sau : Type Ksvien = Record Ten: String[20]; Namsinh : Integer;

Page 61: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 61

DTB : Real; end; Var F1 : File of Integer; F2 : File of String[20]; F3 : File of Ksvien ; 2.4. Các th� tc chu�n: a) Th� t�c ASSIGN( bi�nt�ptin, tênt�ptin)

Gán tên t�p tin cho bi�n t�p tin. . �ây tên t�p tin là m�t bi�u th)c ki�u chu�i là tên th�c s� c�a t�p tin. Ví d# :

Assign(F1, ‘DLIEU.DAT’); Assign(F3, ‘QLSV.DAT’);

b) Th� t�c REWRITE( bi�nt�ptin) Kh�i t�o t�p tin m i, n�u t�p tin �ã có trên �%a thì nó xóa �i và t�o m i.

Ví d# : Rewrite(F1) ; kh�i t�o t�p tin DLIEU.DAT Rewrite(F3) ; kh�i t�o t�p tin QLSV.DAT

c) Th� t�c RESET(bi�nt�ptin) M� t�p tin �ã có �� s� d#ng. Con tr t�p tin tr vào ph�n t� ��u tiên (có s� th) t� là 0) c�a t�p tin . Ví d# : Reset ( F3); m� t�p tin QLSV.DAT d) Th� t�c WRITE( bi�nt�ptin, b1, b2, ..., bN) Tu�n t� ghi vào t�p tin các gía tr� c�a các bi�n b1, b2, ..., bN. Các bi�n b1, ..., bN ph�i cùng ki�u d� li�u v i các ph�n t� c�a t�p tin. Ví d#: - Cho i, j, k là các bi�n ki�u Integer và i=10, j=20, k=100, khi �ó l�nh : Write(F1, i, j, k ) ; s" ghi l�n l��t các gía tr� 10, 20, 100 vào t�p tin DLIEU.DAT -Cho khai báo: Var X : Ksvien; Các l�nh sau gán gía tr� cho X và ghi X vào t�p tin QLSV.DAT: X.Ten:=’Ng Van An’; X.Namsinh :=1980 ; X.DTB :=6.5; Write(F3, X); Sau khi ghi X vào t�p tin QLSV.DAT, con tr t�p tin t� ��ng d!i ��n v� trí c�a ph�n t� ti�p theo. e) Th� t�c READ( bi�nt�ptin, b1, b2, ..., bN) :

Ð�c tu�n t� các ph�n t� c�a t�p tin t� v� trí hi�n th!i c�a con tr t�p tin và gán cho các bi�n b1, b2, ..., bN. Ki�u d� li�u c�a các bi�n b1, b2, ..., bN ph�i cùng ki�u v i các ph�n t� c�a t�p tin. M�i khi ��c xong m�t ph�n t�, con tr t�p tin t� ��ng d!i ��n ph�n t� ti�p theo. Ví d#:

Page 62: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 62

L�nh Read(F1, i, j); ��c hai s� nguyên trong t�p tin DLIEU.DAT ( k� t� v� trí hi�n th!i) và gán cho các bi�n nguyên i, j . L�nh Read(F3, X); ��c b�n ghi hi�n th!i c�a t�p tin QLSV.DAT và gán cho bi�n b�n ghi X. f) Th� t�c CLOSE( bi�nt�ptin) : Ðóng t�p tin g) Th� t�c SEEK( bi�nt�ptin, k ) : Ð&t con tr t�p tin vào ph�n t� th) k trong t�p tin. Th� t#c này cho phép truy xut tr�c ti�p m�t ph�n t� c�a t�p tin mà không ph�i th�c hi�n tu�n t� t� ��u t�p tin. Ví d#: ��c ph�n t� th) 10 c�a t�p tin DLIEU.DAT và gán cho bi�n nguyên i r�i in gía tr� c�a i : Seek(F1, 10); Read(F1, i); Write(i); h) Th� t�c ERASE( bi�nt�ptin) : Xóa t�p tin trên ��a i) Th� t�c RENAME( bi�nt�ptin, tênm�i ) : Ð%i tên t�p tin. Yêu c�u là t�p tin ph�i �ang �óng thì m�i xóa hay ��i tên ���c. 2.5. Các hàm chu�n: a) Hàm EOF(bi�nt�ptin) Cho k�t q�a True khi con tr t�p tin �ang � cu�i t�p, trong các tr�!ng h�p khác hàm cho gía tr� False. b) Hàm FILESIZE(bi�nt�ptin) Cho s� ph�n t� c�a t�p tin. N�u t�p tin r�ng thì s� ph�n t� b�ng 0. c) Hàm FILEPOS(bi�nt�ptin) Cho v� trí hi�n th!i c�a con tr t�p tin. Ph�n t� ��u tiên có s� th) t� là 0. Ph�n t� cu�i cùng có s� th) t� b�ng FileSize -1. Ví d# : Ghi s� 100 vào cu�i t�p tin DLIEU.DAT, dùng các l�nh: i:=100; Seek( F1, FileSize(F1) ) ; {Ð&t tr vào cu�i t�p tin} Write(F1, i); { Ghi gía tr� c�a i vào cu�i t�p} Ví d� 1: Nh�p m�t danh sách sinh viên g�m H� tên, �i�m , Lý, tính �i�m trung bình r�i l�u vào t�p tin HOSO.DAT. Sau �ó ��c d� li�u t�p tin này và in ra màn hình. Trong ch��ng trình , ch� nào có du ~ thì thay b�ng m�t ký t� tr*ng. PROGRAM InDanhSachSinhvien; Uses CRT; Const Tenttin = ‘HOSO.DAT’; Type Ksvien= Record Hoten: String[20]; Toan, Ly, Dtb : Real; end; KieuTtin = File of Ksvien ; Var F : KieuTtin ; X : Ksvien ;

Page 63: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 63

i: Integer; Procedure Hienthi ( Var F : KieuTtin); begin Clrscr; Writeln(#32 :5, ‘H9 VÀ TÊN’, #32:6 , ‘ÐTOÁN~~~ÐLÝ~~~~DTB’); Reset(F); While Not Eof(F) do begin Read(F, X); Writeln(X.Hoten, #32:20-Length(X.Hoten), X.Toan:4:1,#32:3, X.Ly:4:1, #32:3, X.DTb:4:1); end; end; {H�t hi�n th�} BEGIN Clrscr; Assign(F, TenTtin); Rewrite(F); i:=0; Repeat Clrscr; Gotoxy(10,4); Write( ‘NH:P SINH VIÊN TH;?‘, i , ‘: ( Enter �� k�t thúc) ‘ ); With X do begin Gotoxy(10,6); Write(‘Ho va ten:’); Gotoxy(10,8); Write(‘Ðiem Toan:’); Gotoxy(10,10); Write(‘Ðiem Ly :’); Gotoxy(20,6); Readln(Hoten); If Hoten<>’’ then begin Gotoxy(20,8); Readln(Toan); Gotoxy(20,10); Readln(Ly); DTB:=(Toan+Ly)/2; end; end; If X.Hoten<>’’ then Write(F,X); i:=i+1; Until X.Hoten=’’; Close(F); Hienthi(F); Close(F); Readln; END. Chú ý : N�u tham s� trong ch��ng trình con là t�p tin thì nó ph�i là tham s� bi�n, không th là tham s� tr�.

Page 64: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 64

3. T�p tin v0n b�n Trong Pascal có m�t ki�u t�p tin �ã ���c ��nh ngh%a s1n, �ó là ki�u TEXT hay t�p tin v�n b�n. 3.1 Khai báo F là bi�n t�p tin v n b�n ta vi�t Var F: Text; Các ph�n t� c�a t�p tin v�n b�n là các ký t� ���c ghi thành t�ng dòng có �� dài khác nhau. Các dòng ���c phân cách nh! các du k�t thúc dòng ( End of line). Ðó là hai ký t� �iu khi�n CR ( Carriage return : nh�y v ��u dòng) và LF ( Line feed: xu�ng dòng d� i). Ví d# , �o�n v�n b�n sau : Tap tin van ban Text 12345 Het ���c ch)a trong t�p tin v�n b�n thành m�t dãy :

Tap tin van ban Text CR LF 12345 CR

LF Het Eof

Các th� t#c Assign, Rewrite, Reset, Write, Read, Close, Erase, Rename �u dùng ���c cho t�p tin v�n b�n. 3.2 Các th� tc dùng trong File v n b�n a)Append(bi�nt�ptin) Dùng �� m� t�p tin v�n b�n và cho phép ghi thêm d� li�u vào cu�i t�p tin. Ð�i v i t�p tin v�n b�n, không th� ��ng th!i v�a ghi v�a ��c d� li�u nh� t�p tin có ��nh ki�u. Ð� ghi d� li�u, tr� c tiên ph�i kh�i t�o t�p tin b�ng l�nh Rewrite hay m� t�p tin và ��a tr v cu�i t�p b�ng l�nh Append. Sau �ó ghi d� li�u vào t�p tin b�ng th� t#c Write hay Writeln. Ð� ��c d� li�u m�t t�p tin �ã có, tr� c tiên ta ph�i m� t�p tin b�ng l�nh Reset. Sau �ó ��c d� li�u b�ng th� t#c Read hay Readln. N�u m� t�p tin b�ng Rewrite ho&c Append thì không th� ��c ���c b�ng Read và Readln. N�u m� t�p tin b�ng Reset thì không th� ghi ���c b�ng Write hay Writeln. b)Th� t�c WRITE( bi�nt�ptin, bt1, bt2, ..., btN) : cho phép tu�n t� ghi các gía tr� c�a các bi�u th)c bt1, bt2, .. btN vào t�p tin v�n b�n. Các bi�u th)c bt1, bt2, .. btN ph�i thu�c ki�u ��n gi�n chu/n ( nguyên, th�c, ký t�, lôgic) hay ki�u chu�i, và chúng không c�n ph�i có ki�u gi�ng nhau. Ví d# : Write(F, 3, 10:4, ‘a’:2, ‘Text’, 4.5:6:2); s" ghi vào t�p tin thành dãy nh� sau ( Du ~ hi�u là m�t ký t� tr*ng): 3~~10~aText~~4.50 Ch��ng trình d� i �ây s" t�o t�p tin v�n b�n T1.TXT : Program TaoTaptin; Var F: Text; A : Integer; B : Real; Begin

Page 65: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 65

A:=100; B:=1234.5; Assign(F, ’T1.TXT’); Rewrite(F); Write(F, ‘Ket qua=’ :10, A:5, B:7:2); Close(F); End. N�i dung c�a t�p tin T1.TXT là : ~~Ket qua=~~100~123.45 Nh� v�y, cách ghi d� li�u vào t�p tin v�n b�n hoàn toàn gi�ng nh� khi in d� li�u lên màn hình. c)Th� t�c WRITELN c(ng có công d#ng nh� WRITE, nh�ng ghi xong d� li�u thì ��a con tr t�p tin xu�ng dòng d� i. Ð&c bi�t, l�nh Writeln(F); không ghi gì c�, ch� ��a con tr t�p tin xu�ng dòng. N�i dung c�a các t�p tin v�n b�n t�o b�ng Pascal hoàn toàn có th� xem ���c b�ng l�nh Type c�a MSDOS, b�ng Norton hay b�ng chính Turbo Pascal, d)Th� t�c READ( bi�nt�ptin, bi�n1, bi�n2, ..., bi�nN) ��c tu�n t� các gía tr� t� t�p tin và gán cho các bi�n. Các bi�n1, bi�n2, ..., bi�nN ph�i có ki�u d� li�u phù h�p v�í d� li�u c�n ��c t�i v� trí t��ng )ng trong t�p tin. Ví d#: N�u t�p tin T1.TXT có n�i dung nh� sau: ~~Ket qua=~~100~123.45 thì �� ��c l�i các d� li�u này, ta ph�i khai báo: Var St :String[10]; i: Integer ; Z : Real; Và dùng các l�nh: Reset(F); Read(F, St, i, Z); Gía tr� c�a St, i, Z s" là: St=’~~Ket qua=’, i=100, Z=123.45. N�u khai báo St có ki�u String[9] thì s" b� l�i vì sau khi ��c xong 9 ký t� ��u, máy s" ��c ti�p gía tr� =~~100 cho bi�n nguyên i, nh�ng vì gía tr� này b*t ��u là du = nên không ��i ra s� nguyên ���c. e)Th� t�c READLN(bi�nt�ptin, bi�n1, bi�n2, ..., bi�nN ) ��c d� li�u cho các bi�? xong s" ��a tr t�p tin xu�ng ��u dòng d� i. Ð&c bi�t, l�nh READLN( bi�nt�ptin); không ��c gì c�, ch� ��a con tr t�p tin xu�ng dòng. Chú ý f)Hàm Eof(F) c(ng dùng ���c cho t�p tin v�n b�n, ngoài ra còn có hàm EOLN(F) cho k�t q�a là True ho&c False tùy theo con tr t�p tin có �ang � cu�i dòng hay không. Khi Eof(F)=True thì Eoln(F) c(ng có gía tr� là True. g)Th� t#c Seek và các hàm FileSize, FilePos không dùng cho t�p tin v�n b�n. 4.So sánh t�p tin v0n b�n v�i t�p tin ��nh ki�u Các t�p tin có ��nh ki�u cho phép v�a ��c v�a ghi và truy nh�p tr�c ti�p vào t�ng ph�n t� g�n gi�ng nh� thao tác v i m�ng.

Page 66: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 66

Các t�p tin v�n b�n không cho phép ��ng th!i ��c, ghi và ch� có th� ��c ho&c ghi tu�n t�, nh�ng cho phép ta có th� xem, s�a tr�c ti�p m�t cách d$ dàng b�ng các h� so�n th�o v�n b�n ��n gi�n, nh� NC hay chính Turbo Pascal. Ví d# 15.5: Cho t�p tin v�n b�n tên là T2.TXT và có n�i dung là: dong=6 cot =7 0 8 8 -2 6 11 1 8 0 2 0 7 0 2 8 2 0 11 12 9 3 -2 0 11 0 -7 9 4 6 7 12 -7 0 6 5 11 0 9 9 6 0 6 Hãy ��c t�p tin này ��a vào m�t ma tr�n A và in ma tr�n A lên màn hình. S� dòng và s� c�t c�a ma tr�n A ���c ghi � hai dòng ��u tiên trong t�p tin T2.TXT. Program TaptinVanBan; uses crt; Type MANG = array[1..20,1..20] of integer ; Var A : MANG; N, M : integer; F : Text; Procedure Nhap; Var i,j : Byte; st: string[5]; Begin Assign(F, 'T2.TXT'); Reset(F); Readln(F, St, N); Readln(F, St, M); For i:=1 to N do begin For j:=1 to M do Read(F, A[i,j]);Readln(F); end; Close(F); End; Procedure InMatran; Var i, j : Integer; Begin For i:=1 to N do begin for j:=1 to M do write( A[i,j]:4);

Page 67: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 67

writeln; end; End; BEGIN Clrscr; Nhap; InMatran; Readln; END.

Bài t�p ch��ng 5 Câu 1) Nh�p s� t� nhiên n t� bàn phím và m�t dãy s� th�c x1, x2, ..., xn. -Tìm s� l n nht và s� nh nht c�a dãy

- Ð�m trong dãy có bao nhiêu s� d��ng, bao nhiêu s� âm, bao nhiêu s� 0 ? Lo�i nào nhiu nht ? Câu 2) Nh�p m�t dãy s� nguyên x1, x2, ..., xn. In riêng các s� ch1n và các s� l0, m�i lo�i trên m�t dòng. Câu 3) Nh�p m�t dãy s� bt k, x1, x2,..., xn , cho bi�t dãy có ��i x)ng không?, dãy có l�p thành m�t cp s� c�ng không?. Ví d# dãy 1 3 5 4 5 3 1 là ��i x)ng, dãy 1 3 5 7 là m�t cp s� c�ng. Câu 4) Nh�p m�t dãy s� bt k, x1, x2,..., xn , cho bi�t dãy thu�c lo�i nào: t�ng, gi�m hay không t�ng, không gi�m ? Câu 5) Nh�p m�t dãy s� nguyên d��ng x1, x2,..., xn . -Tách dãy x thành hai dãy: dãy A g�m các s� ch1n, dãy B g�m các s� l0, s*p x�p dãy A t�ng d�n, dãy B gi�m d�n, in hai dãy A và B trên hai dòng khác nhau. -N�i hai dãy A và B theo th) t� �ó thành m�t dãy duy nht và gán tr� l�i vào dãy x, in dãy x. Ví d# nh�p dãy x={ 5, 7, 0, 2, 1, 6, 4, 9 } thì dãy A={ 0, 2, 4, 6}, dãy B={ 9, 7, 5, 1}, và x={ 0, 2, 4, 6, 9, 7, 5, 1}. Câu 6) Nh�p và in ma tr�n Am,n , v i n nh�p t� bàn phím

-Tìm và in s� l n nht trong t�ng hàng c�a ma tr�n. -Tìm và in s� l n nht trong t�ng c�t c�a ma tr�n. -Tìm và in s� nh nht trên ��!ng chéo chính c�a ma tr�n.

Câu 7) Nh�p và in ma tr�n vuông An,n .

- A có ph�i là ma tr�n ��i x)ng không - A có ph�i là ma tr�n ��n v� không?

(A là ��i x)ng n�u Aij=Aji v i m�i i,j =1,..., n. A là ma tr�n ��n v� n�u tt c� các ph�n t� trên ��!ng chéo chính �u b�ng 1 và các ph�n t� còn l�i �u b�ng 0).

Page 68: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 68

Câu 8) Nh�p và in ma tr�n Am,n .Cho bi�t hàng 1 và hàng 2 có gi�ng nhau không, n�u không thì hãy hoán ��i hàng 1 và hàng 2. Ví d#: ma tr�n bên trái d� i �ây có hàng 1 và hàng 2 không trùng nhau, sau khi hoán ��i hai hàng ta ���c ma tr�n bên ph�i:

Câu 9) Nh�p chu�i St, in St theo th) t� ��o ng��c. Ví d# : St = ‘ABCD’, in ra ‘DCBA’ Câu 10) Nh�p chu�i St, ki�m tra chu�i có ��i x)ng không. Ví d#: các chu�i ‘BCD1DCB’ và ‘ABCCBA’ là ��i x)ng, còn ‘ABCDBA’ là không ��i x)ng. Câu 11) Nh�p hai chu�i St và St1. Cho bi�t chu�i St1 xut hi�n my l�n trong St, và t�i các v� trí nào?. Ví d# St=‘pas12pas34’, chu�i St1 =‘pas’ xut hi�n 2 l�n t�i các v� trí 1, 6. Câu 12) Nh�p ba chu�i St, St1, St2. tìm xem trong chu�i St có ch)a chu�i St1 không ?, n�u có thì thay th� St1 b�ng St2. Ví du: cho St=‘ABC1234E’, St1=‘1234’ và St2 =‘*’. Sau khi thay th� ta ���c St=‘ABC*E’. Câu 13) Nh�p m�t chu�i St, xây d�ng ba t�p h�p:

-S1 là t�p các ch� hoa có trong St -S2 là t�p các ch� th�!ng có trong St -S3 là t�p các ch� s� có trong St

In các gía tr� c�a m�i t�p S1, S2, S3 trên m�t dòng. Câu 14) Nh�p vào m�t m�ng A1, A2, ..., A10 các s� nguyên d��ng < 10. Hãy in các gía tr� c�a m�ng này theo th) t� t�ng d�n sao cho các ph�n t� trùng nhau ch� ���c in m�t l�n. Ví d# : cho m�ng 1, 6, 4,1, 9, 6, 6, 0, 3, 9 , in ra: 0,1, 3, 4, 6, 9 ( H� ng d'n : xây d�ng t�p h�p g�m các ph�n t� c�a m�ng A ) Câu 15) Ð� bi�t m�t thí sinh ��u hay r t trong k, thi tuy�n sinh, c�n bi�t các thông tin sau: - H� tên : h� và tên c�a thí sinh - KV : thí sinh thu�c khu v�c nào? ( 1, 2 hay 3 ). - NH : thí sinh thu�c nhóm nào ? ( 1, 2, hay 3). - TÐ : T�ng �i�m ba môn thi . a) Hãy nh�p vào m�t danh sách 10 thí sinh g�m H� tên, KV, NH, TÐ. Xét xem K�t q�a thí sinh này ��u hay r t d�a vào b�ng �i�m chu/n sau :

Page 69: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 69

Ví d# : Thí sinh � Khu v�c 1 , Nhóm 2, có T�ng �i�m = 17.5 thì ��u, ng��c l�i thì r t. b) In danh sách �ã s*p x�p theo tr�t t� gi�m c�a TÐ lên màn hình, g�m các m#c H� tên, KV, NH, TÐ và K�t q�a ��u, r t. c) Ch� in danh sách nh�ng ng�!i ��u lên màn hình theo m'u:

Câu 16) Vi�t m�t ch��ng trình pascal �� th�c hi�n các yêu c�u sau : Nh�p s� nguyên N ( 0<N<100) và m�t danh sách N h�c sinh v i các thông tin v: h� và tên, chuyên ban (A , B, C) và các �i�m , V�n, Sinh ki�u th�c. V i m�i h�c sinh hãy tính �i�m trung bình nh� sau : DTB =(2*+ Sinh+V�n)/4 n�u em thu�c chuyên ban A =(+2*Sinh+V�n)/4 n�u em thu�c chuyên ban B =(+Sinh+2*V�n)/4 n�u em thu�c chuyên ban C Chuyên ban nào có nhiu em có �i�m trung bình >= 5 nht ? Câu 17) Nh�p s� nguyên N ( 0<N<50 ) và N hóa ��n tính tin �i�n, m�i hóa ��n có h� tên ch� h�, ch� s� �i�n k� tháng tr� c (Socu), ch� s� �i�n k� tháng này (Somoi), và ��nh m)c (Dmuc) �i�n hàng tháng c�a h�. Hãy tính tin �i�n cho m�i hóa ��n, bi�t r�ng: M�i kw trong ��nh m)c có ��n gía là 500�, 100 kw ��u tiên trên ��nh m)c có ��n giá 800�, T� kw th) 101 trên ��nh m)c tr� lên có ��n gía 1000�. Tính t�ng s� tin thu ���c t� tt c� các hóa ��n. Tìm trong các hóa ��n xem có h� nào tên là Tuan không ? N�u có thì in lên màn hình các hóa ��n có ch� h� tên là Tuan g�m các thông tin v Socu, Somoi, Dmuc và Tien �i�n ph�i tr�. Câu 18) Nh�p s� nguyên d��ng N (0<N< 20 ) và m�t dãy N s� nguyên : A1, A2, ..., AN . Ghi dãy s� �ó vào t�p tin DL.DAT. Ð�m trong t�p tin DL.DAT có bao nhiêu s� ch1n. Ð�c các s� l0 t� t�p DL.DAT và in lên màn hình. Câu 19) +� qu�n lý H� tên , các �i�m , Lý và Ði�m trung bình c�a sinh viên, ta mô t� ki�u Ksvien nh� sau : Type

Ksvien= Record Hoten: String[20];

Page 70: CH NG TRÌNH VÀ THU T GI I - blogtiengviet.netblogtiengviet.net/media/users/vubien/Bai_giang_TP.pdfph # thu c vào b vi x ˆ lý nên ch ng trình ch ˚ ch y c trên nh ng máy tính

Tr��ng Cao ��ng KTKT Bình D��ng Biên so�n : V� Bi�n

Ch��ng 5: D� li�u có c�u trúc Trang 70

Toan, Ly, Dtb : Real; end;

Hãy nh�p m�t danh sách sinh viên g�m H� tên, �i�m và �i�m Lý, r�i tính

Ði�m trung bình: Dtb:=(+Lý)/2, l�u vào t�p tin QLY.DAT. Quá trình nh�p k�t thúc khi nh�p H� tên là r�ng ( t)c không nh�p gì c�, c) Enter). Ð�c danh sách sinh viên t� t�p tin QLY.DAT và in danh sách lên màn hình. Chép danh sách sinh viên vào t�p QLY.IDX sao cho các ph�n t� c�a QLY.IDX ���c s*p x�p theo tr�t t� gi�m c�a �i�m trung bình. Ð�c d� li�u c�a t�p tin QLY.IDX và ghi vào t�p tin v�n b�n tên là QLY.TXT theo d�ng :

STT H� và tên Ði�m trung bình

1 Nguyen Van Tuan 8.5

2 Pham Thi Mai 8.0

L L L

Câu 20)Dùng h� so�n th�o c�a Turbo Pascal �� t�o m�t t�p tin v�n b�n có tên là MT.DAT ch)a hai ma tr�n vuông cp 3 là A và B có các ph�n t� là các s� nguyên. Ly d� li�u t� t�p tin MT.DAT �� tính ma tr�n C=A+B. Ghi ma tr�n C vào cu�i t�p tin MT.DAT. Ð�c các ma tr�n A, B, C t� t�p tin MT.DAT và in lên màn hình.

H�t