CH NG TRÌNH VÀ THU T GI I -...

70
Trng Cao ng KTKT Bình Dng Biên son : V Bin Chng 1: Chng trình và thut gii Trang 1 Chng I CHNG TRÌNH VÀ THUT GII I. Chng trình (Program) 1.Khái nim Chng trình là mt dãy liên tip các lnh. Thc hin các lnh ó gi là thi hành chng trình. Các chng trình u có các tính cht chung sau ây: - Các lnh c thi hành mt cách tun t, thi hành xong mt lnh mi thi hành lnh k tip. - Khi thi hành chng trình cn thêm d liu t bên ngòai, iu này làm cho chng trình tr nên phong phú và tng quát. Chng trình có th c vit bng các ngôn ng lp trình khác nhau. 2.Ngôn ng lp trình. Có hàng trm loi ngôn ng lp trình khác nhau, mi loi ngôn ng u có cú pháp riêng ca nó. Ngôn ng lp trình có th c phân chia thành 3 loi chính : ngôn ng máy, hp 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 tng ca b vi x lý. Bao gm các câu lnh là nhng dãy s nh phân 0 và 1 rt khó c, khó vit . Ch có các chuyên gia v máy tính mi vit c. u im ca vic vit chng trình bng ngôn ng máy là lp trình viên có th iu khin máy tính trc tip và t c chính xác iu mình mun làm, tc thi hành chng trình nhanh và kích thc chng trinh nh. Nhc im ca chng trình ngôn ng máy là thông th!ng s" mt rt nhiu th!i gian vit, rt khó c, khó tìm li và chng trình ph# thuc vào b vi x lý nên chng trình ch chy c trên nhng máy tính có cùng b vi x lý mà thôi. Ngôn ng máy còn c gi là ngôn ng cp thp (low-level language) 2.2 Hp ng Hp ng c phát trin nhm giúp các lp trình viên d$ nh các ch th ca chng trình hn. Các chng trình hp ng còn bao gm các ch th v% (macro instruction) có th to ra nhiu lnh mã máy. Các chng trình hp ng c chuyn sang mã máy thông qua mt chng trình &c bit gi là trình hp dch (assembler). M&c dù hp ng tng i d$ dùng hn mã máy nhng hp ng vn c xem là ngôn ng cp thp bi vì nó vn còn rt gn vi tng thit k ca máy tính. 2.3 Ngôn ng cp cao Ngôn ng cp cao gn g(i hn vi ý nim ngôn ng mà hu ht mi ng!i u bit, nó bao gm các danh t, ng t, ký hiu hc, liên h và các thao tác lun lý. Các yu t này có th c phi hp, liên kt vi nhau to thành mt hình th)c ca câu. Các "câu" này c gi là các mnh ca chng trình (program statement). Chính vì nhng &c im này, các lp trình viên d$ dàng c và d$ hc ngôn ng cp cao hn so vi ngôn ng máy ho&c hp ng. Mt li im quan trng là ngôn ng cp cao thông th!ng không ph# thuc vào máy tính, ngh%a là các chng trình vit bng ngôn ng cp cao có th chy trên các loi 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 lp trình thông dng Hin nay có rt nhiu ngôn ng lp 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 lp trình hng i tng rt tin li cho các lp trình viên nh : C++, Visual Basic , Visual C, Denphi, Javal .v.v..

Transcript of CH NG TRÌNH VÀ THU T GI I -...

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