![](images/graphics/blank.gif)
Giáo trình lập trình nâng cao - Chương 1
lượt xem 57
download
![](https://tailieu.vn/static/b2013az/templates/version1/default/images/down16x21.png)
Tài liệu tham khảo Giáo trình lập trình nâng cao trên ngôn ngữ Pascal soạn theo chương trình đã được Bộ giáo dục và đào tạo phê chuẩn - Chương 1 Chương trình con thủ tục và hàm
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Giáo trình lập trình nâng cao - Chương 1
- TRƯ NG ð I H C NÔNG NGHI P I - HÀ N I B MÔN CÔNG NGH PH N M M TS. DƯƠNG XUÂN THÀNH Giáo trình L P TRÌNH NÂNG CAO ( Trên ngôn ng Pascal ) (So n theo chương trình ñã ñư c B GD&ðT phê chu n) Hà n i, 2005
- L im ñ u Cu n giáo trình này ñư c biên so n theo ñúng ñ cương chi ti t môn h c ñã ñư c B Giáo d c và ðào t o phê chu n. Th i gian h c môn h c này là 60 ti t trong ñó có 10 ti t th c hành trên máy. Tác gi là ngư i ñã tr c ti p gi ng d y l p trình Pascal trong nhi u năm cho sinh viên chuyên tin và sinh viên các ngành khác. ð i tư ng s d ng giáo trình là sinh viên chuyên ngành Tin h c h ñ i h c chính quy, tuy nhiên giáo trình cũng có th s d ng như là m t tài li u tham kh o cho sinh viên chuyên Tin h cao ñ ng và nh ng ngư i mu n nghiên c u nâng cao v l p trình. M c ñích biên so n cu n giáo trình là cung c p cho ngư i ñ c m t tài li u ñơn gi n, cô ñ ng nh ng ki n th c v l p trình nâng cao. Ngư i ñ c có th t h c mà không nh t thi t ph i có thày hư ng d n. Giáo trình bao g m 6 chương và 4 ph l c. Chương 1: Chương trình con - Th t c và hàm, sinh viên ñã ñư c h c qua trong chương trình Tin h c ñ i cương, do v y ñây ch y u ñi sâu vào khái ni m tham s , cách th c mà h th ng dành b nh cho vi c lưu tr các tham s và vi c g i chương trình con t chương trình con khác. Chương 2: Các ki u d li u có c u trúc, t p trung vào các ki u d li u mà sinh viên chưa ñư c h c như b n ghi có c u trúc thay ñ i, t p h p.. Chương 3: ðơn v chương trình và thư vi n chu n, là chương chưa ñư c h c Tin h c ñ i cương , ñây hư ng d n cách thi t k các ðơn v chương trình (Unit), cách th c s d ng các Unit và t o l p thư vi n chương trình . Chương 4: Con tr và c u trúc ñ ng, là m t chương khó, vì nó v a liên quan ñ n qu n lý b nh , v a liên quan ñ n ki n th c c a môn h c C u trúc d li u và Gi i thu t do v y trong chương này ñã trình bày nhi u ví d ñ ngư i ñ c tham kh o. Chương 5: Gi i thu t ñ quy, ñư c trình bày “hơi dài dòng” do ñ c thù c a tính ñ quy. Bài toán Tháp Hanoi ñư c mô t khác hoàn toàn so v i t t c các sách v Pascal ñã có. Chương 6: ð ho , ngoài vi c gi i thi u các th t c v thông thư ng, còn dành m t ph n tr ng tâm cho vi c x lý nh Bitmap. Trong chương này có s d ng m t vài ví d c a các tác gi khác (xem ph n tài li u tham kh o) nhưng ñã ñư c c i ti n ñi r t nhi u. Ph l c 1: B ng mã ASCII Ph l c 2: Tóm t t các th t c và hàm c a Turbo Pascal 7.0 Ph l c 3: ð nh hư ng biên d ch Ph l c 4: Thông báo l i Các ph l c ñưa ra nh m giúp ngư i l p trình ti n tra c u các th t c, hàm và x lý các l i khi Pascal thông báo l i trên màn hình Do ph i bám sát ñ cương và s h n ch v s trang tác gi nên trong giáo trình chưa ñưa vào ñư c ph n x lý âm thanh, l p trình hư ng ñ i tư ng.... Vi c biên so n l n ñ u không th tránh ñư c thi u sót, tác gi mong nh n ñư c s góp ý c a b n ñ c và ñ ng nghi p ñ l n xu t b n sau s t t hơn. M i góp ý xin g i v ñ a ch : B môn Công ngh Ph n m m, Khoa Công ngh Thông tin, ð i h c Nông nghi p I , Trâu quỳ, Gia lâm, Hà n i. Xin trân tr ng c m ơn. Hà n i, tháng 5 năm 2005 Ts. Dương Xuân Thành Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 2
- Chương I Chương trình con - Th t c và hàm Khái ni m chương trình con ñã ñư c trình bày trong môn h c Tin h c ñ i cương, do v y trong chương này chúng ta nh c l i sơ qua m t s khái ni m cũ và dành th i gian cho vi c tìm hi u sâu v tham s (tham bi n và tham tr ), l i g i chương trình con, cách th c b trí chương trình con trong thân chương trình m . Sau khi h c chương này b n ñ c c n n m ñư c các n i dung ch y u sau: Th nào là bi n toàn c c, bi n ñ a phương Các bi n toàn c c và bi n ñ a phương ñư c b trí ñâu T m tác d ng c a t ng lo i bi n Th t xây d ng các chương trình con có nh hư ng th nào ñ n toàn b chương trình Th nào là tính ñ quy c a chương trình con L i g i chương trình con th nào là ñư c phép Cách khai báo trư c ñ g i chương trình con không theo th t thi t k Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 3
- 1. Khái ni m v chương trình con Chương trình con trong Pascal ñư c hi u là m t chương trình n m trong lòng m t chương trình khác. Chương trình con g m hai lo i: Th t c (Procedure) và hàm (Function). Các chương trình con ñư c dùng r ng rãi khi xây d ng các chương trình l n nh m làm cho chương trình d theo dõi, d s a ch a. M t ñ c ñi m n i b t c a chương trình con là nó có tính ñ quy nh th mà nhi u bài toán s ñư c gi i quy t d dàng. Khi m t chương trình con ñư c g i thì các bi n ñư c khai báo trong chương trình con (ta g i là bi n c c b ) s ñư c c p phát b nh . K t thúc chương trình con, các bi n c c b ñư c gi i phóng, ñi u này s ñư c l p l i m i khi chương trình con ñư c g i và nó ñ ng nghĩa v i vi c th i gian x lý bài toán s tăng lên. B n thân tên g i c a hai lo i chương trình con ñã nói lên ph n nào s khác nhau gi a chúng. Function (Hàm) là m t lo i chương trình con cho k t qu là m t giá tr vô hư ng. Khi g i tên Function v i các tham s h p l ta s nh n ñư c các giá tr , b i v y tên hàm có th ñưa vào các bi u th c tính toán như là các toán h ng. Procedure là lo i chương trình con khi th c hi n không cho ra k t qu là m t giá tr , m i Procedure nh m th c hi n m t nhóm công vi c nào ñó c a chương trình m , vì v y tên c a Procedure không th ñưa vào các bi u th c tính toán. B ng cách xây d ng các chương trình con ngư i l p trình có th phân m nh chương trình cho nhi u ngư i cùng làm dư i s ch ñ o th ng nh t c a ngư i ch trì. Trong Turbo Pascal ñã có s n m t s chương trình con, ví d : sin(x), sqrt(x).... là các Function, còn read(), write(), gotoxy (x1,x2)..... là các Procedure. Trong m t chương trình các chương trình con ñư c b trí ngay sau ph n khai báo bi n. C u trúc t ng quát m t chương trình Pascal như sau: PROGRAM tên_chương_trình; USES tên các UNIT; (*khai báo các ñơn v chương trình c n thi t*) LABEL (*khai báo nhãn*). CONST (*Khai báo h ng*) TYPE (*ñ nh nghĩa ki u d li u m i*) VAR (*khai báo bi n*) PROCEDURE Tên_CTC1 (danh sách tham s hình th c); Begin ............ (*thân th t c th nh t*). End; PROCEDURE Tên_CTC2 (danh sách tham s hình th c); Begin ................... (*thân th t c th hai*) End; Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 4
- FUNCTION Tên_HAM1(danh sách tham s hình th c):ki u hàm; Begin ............... (*thân hàm th nh t*) End; ........... BEGIN (*b t ñ u chương trình m *) .......... END. Ghi chú: 1. Các chương trình con v nguyên t c cũng bao g m các ph n khai báo báo như ñ i v i m t chương trình m , ph n nào không c n thi t thì không khai. ði u khác nhau cơ b n là thân chương trình con n m gi a hai t khoá Begin và End; (sau End là d u ";" ch không ph i là d u "." như trong chương trình m ) ngoài ra chương trình con còn có th thêm ph n khai báo các tham s hình th c, các tham s hình th c ñư c ñ t trong d u () và vi t ngay sau tên chương trình con. 2. N u chương trình con là Function thì cu i chương trình c n có l nh gán giá tr vào tên chương trình con. 2. Tham s trong chương trình con Các chương trình con có th không c n tham s mà ch có các bi n riêng (bi n c c b ). Trong trư ng h p c n nh n các giá tr mà chương trình m truy n cho thì chương trình con c n ph i có các tham s (Parameter). Tham s ñư c khai báo ngay sau tên chương trình con và ñư c g i là tham s hình th c. Nh ng giá tr lưu tr trong các bi n toàn c c c a chương trình m , n u ñư c truy n cho các th t c ho c hàm thông qua l i g i tên chúng thì ñư c g i là Tham s th c. Tham s hình th c bao g m hai lo i: 2.1 Tham bi n (Variabic parameter) Tham bi n là nh ng giá tr mà chương trình con nh n t chương trình m , các giá tr này có th bi n ñ i trong chương trình con và khi chương trình con k t thúc các giá tr này s ñư c tr v cho tham s th c. Cách khai báo tham bi n: Tên chương trình con (Var tên tham bi n : ki u d li u); 2.2 Tham tr (Value parameter) Nh ng tham s truy n vào cho chương trình con x lý nhưng khi quay v chương trình m v n ph i gi nguyên giá tr ban ñ u thì ñư c g i là tham tr . Cách khai báo tham tr : Tên chương trình con (tên tham tr : ki u d li u); Dư i ñây là m t ví d khai báo tham s : Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 5
- PROCEDURE VIDU(x,y,z: integer; lam:boolean; var qq: char); Câu l nh khai báo chương trình con trên ñây ñ ng th i khai báo các tham s hình th c trong ñó x, y,z, lam là các tham tr , v i x, y,z có ki u integer, lam có ki u boolean, qq là tham bi n vì nó ñư c vi t sau t khoá VAR. Ví d 1.1: L p chương trình tìm s l n nh t trong n s nguyên ñư c nh p t bàn phím. Program Tim_cuc_dai; Uses Crt; TYPE dayso = array[1..100] of integer; (* ð nh nghĩa ki u d li u dayso là ki u m ng g m nhi u nh t là 100 ph n t *). VAR a: dayso (*khai báo bi n c a chương trình m *) n: integer; PROCEDURE nhapso(m:integer; var x:dayso); (* Nh p dãy s c n tìm c c ñ i vào m ng m t chi u x[i]*) Var i : integer; (*khai báo bi n c c b c a chương trình con*) Begin writeln('Nhap day so kieu integer); For i:=1 to m Do (* m ñư c truy n t chương trình m qua tham s th c n*) Begin write('a[', i , '] = '); realln (x[i]); End; End; FUNCTION Max(m: integer; b:dayso); integer; (* Hàm MAX dùng ñ tìm s l n nh t trong dãy s ñã nh p, ki u giá tr c a hàm là ki u integer *) VAR i,t: integer; (* Bi n riêng c a hàm Max *) Begin t:=b[1]; (* Gán ph n th nh t c a m ng b[i] cho bi n t *) For i:=2 to m Do if t
- Ví d 1.1 là m t chương trình bao g m hai chương trình con, chương trình con th nh t là m t th t c (Procedure), chương trình con th hai là m t hàm (Function). Chương trình m có l nh ñ c s ph n t n c a m ng dayso (t c là s lư ng con s s nh p vào). Vì m ng Dayso ñư c khai báo có 100 ph n t nên không th ñ c vào nhi u quá 100 con s . Sau ñó là l nh g i chương trình con NHAPSO v i 2 tham s th c là n, a, ñây a là tham bi n nghĩa là giá tr c a m ng a s ñư c thay ñ i trong chương trình con b i tham s hình th c x[i]. Chương trình con nh p vào tham bi n x[i] ki u m ng n con s thông qua tham tr m (m=n). L nh vi t giá tr l n nh t c a dãy s có kèm l i g i hàm MAX vì hàm MAX th c ch t trong trư ng h p này ch là m t con s . Hàm MAX dùng ñ tìm s l n nh t trong các s ñã nh p, l i g i hàm trong chương trình m kèm theo vi c truy n hai tham s th c là n và a thay th cho hai tham s hình th c là m và b. Tên hàm ñư c dùng như là m t bi n trong b n thân hàm khi ta dùng phép gán giá tr MAX:=t; Chú ý: 1. Ki u d li u trong khai báo tham s hình th c ch có th là: s nguyên, s th c, ký t , ho c Boolean. N u mu n ñưa các ki u d li u có c u trúc vào trong khai báo tham s thì ph i ñ nh nghĩa trư c ki u d li u này ph n khai báo ki u sau t khoá Type (xem ví d 1.1). 2. V i ki u d li u chu i, n u chúng ta khai báo tham s th c trong chương trình m và tham bi n trong chương trình con ñ u là STRING (không quy ñ nh ñ dài t i ña c a chu i) thì không c n ph i ñ nh nghĩa trư c ki u d li u ph n TYPE. ð th y rõ v n ñ chúng ta xét ví d sau ñây: Ví d : 1.2 Program Chuong_trinh_me; Var s:string; m:byte Procedure Chuong_trinh_con( Var a:string; n:byte); Cách khai báo trên là ñư c phép trong Pascal . N u chúng ta quy ñ nh ñ dài chu i như m t trong ba d ng sau thì s b báo l i: D ng th nh t Program Chuong_trinh_me; Var s:string[30]; m:byte Procedure Chuong_trinh_con( Var a:string[30]; n:byte); D ng th hai Program Chuong_trinh_me; Var s:string[30]; m:byte Procedure Chuong_trinh_con( Var a:string; n:byte); Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 7
- D ng th ba Program Chuong_trinh_me; Var s:string; m:byte Procedure Chuong_trinh_con( Var a:string[30]; n:byte); Tuy nhiên có m t ngo i l khi tham s hình th c trong các chương trình con không ph i là tham bi n mà là tham tr thì có th khai báo theo d ng th hai. Mu n quy ñ nh ñ dài chu i trong các khai báo tham bi n thì ph i khai báo ki u d li u theo m u sau: Program Chuong_trinh_me; Type S1 = string[30]; Var s:s1; m:byte Procedure Chuong_trinh_con( Var a:s1; n:byte); 3. Truy n tham s cho chương trình con Tr l i ví d 1.1 ta th y trong m i chương trình con có nh ng tham s riêng c a mình. Chương trình con nh p s ñã s d ng hai tham s hình th c là m và x. Hai tham s này ñư c chu n b ñ nh n các giá tr mà chương trình m truy n cho thông qua l i g i chương trình con v i các tham s th c là n và b. Vì m ñư c khai báo ki u không có t khoá Var nên nó là tham tr , nghĩa là khi chương trình con k t thúc thì giá tr c a tham s th c n v n không thay ñ i, tham s x là tham bi n vì nó ñư c khai báo sau t khoá Var. Khi tham s hình th c trong chương trình con là tham bi n thì tham s th c trong chương trình m ph i là bi n ch không th là h ng. Trong m i trư ng h p c hai tham s th c và tham s hình th c ñ u ph i cùng ki u d li u. Các tham s th c truy n cho tham bi n thì giá tr c a nó có th thay ñ i trong chương trình con, khi ra kh i chương trình con nó v n gi nguyên các giá tr ñã thay ñ i ñó. Trong ví d 1.1 tham s th c a là m t m ng c a n ph n t và t t c các ph n t ñ u còn r ng, khi truy n a vào tham bi n x thì th i ñi m ban ñ u các ph n t c a x cũng r ng. Phép gán trong chương trình con NHAPSO s làm thay ñ i giá tr các ph n t c a x, sau kh i ra chương trình con nó gi nguyên các giá tr ñã gán t c là các giá tr ta nh p t bàn phím vào các ph n t c a m ng. Khi tham s hình th c là tham tr thì tham s th c ph i là m t giá tr . Chương trình con nh n giá tr này như là giá tr ban ñ u và có th th c hi n các phép tính làm bi n ñ i giá tr ñó, quá trình này ch tác ñ ng trong n i b chương trình con, khi ra kh i chương trình con giá tr c a tham s th c không bi n ñ i. C th trong ví d trên bi n n nh n giá tr ñ c t bàn phím trong chương trình m và ñư c truy n cho tham s m trong c hai chương trình con. Sau l i g i chương trình con NHAPSO giá tr này có th b thay ñ i nhưng khi r i NHAPSO ñ n l i g i hàm MAX thì n l i v n gi giá tr ban ñ u. Như v y n u mu n b o v giá tr m t tham s nào ñó khi truy n chúng cho chương trình con thì ph i qui ñ nh chúng là tham tr . Còn n u mu n nh n l i giá tr mà chương trình con ñã sinh ra thay th cho nh ng giá tr ban ñ u có trong chương trình m (ho c là dùng nh ng giá tr c a chương trình con thay th cho bi n chưa ñư c gán giá tr trong chương trình m như vi d 1.1) thì tham s ph i là tham bi n. Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 8
- ð th y rõ hơn ý nghĩa c a các tham s chúng ta xét ví d sau ñây: Ngư i m trao cho con trai m t chi c nh n và m t túi ti n. Trư c khi con ñi làm ăn phương xa m d n: "Chi c nh n là tín v t dùng ñ nh n l i gia ñình và h hàng khi con tr v , còn túi ti n là v n ban ñ u cho con kinh doanh". Trong qúa trình làm ăn, ngư i con có th c m c chi c nh n nhưng khi tr v nhà nh t thi t ph i mang chi c nh n ñó v , còn túi ti n khi quay v có th nhi u lên cũng có th ít ñi, th m chí không còn ñ ng nào. Trong ví d này chi c nh n ñóng vai trò tham tr , còn túi ti n ñóng vai trò tham bi n. V n ñ ñ t ra là Pascal làm th nào ñ ñ m b o các tính ch t c a tham tr và tham bi n. ði u này s ñư c làm rõ khi nghiên c u vi c b trí b nh (m c 5). Khi l a ch n tham s c n lưu ý m t s ñi m sau: a. Ki u c a tham s trong chương trình con ph i là các ki u vô hư ng ñơn gi n ñã ñư c ñ nh nghĩa s n trong Pasacl ho c ñã ñư c ñ nh nghĩa trong ph n ñ u c a chương trình m . Trong chương trình con không th ñ nh nghĩa ki u d li u m i. b. Chương trình con có th c s c n tham s hay không? N u chương trình con ch s d ng các bi n toàn c c và bi n ñ a phương cũng ñáp ng ñư c yêu c u c a bài toán thì không nên dùng tham s . N u chương trình con th c hi n nhi u công vi c trên cùng m t lo i ñ i tư ng (ñ i tư ng ñây có th là h ng, bi n, hàm, th t c, ki u), nghĩa là l i g i chương trình con ñư c l p l i nhi u l n trên cùng m t ho c m t nhóm ñ i tư ng thì c n dùng ñ n tham s . c. N u không mu n thay ñ i giá tr c a các tham s th c trong chương trình m khi truy n nó cho chương trình con thì ph i dùng tham s hình th c dư i d ng tham tr (trong ph n khai báo ki u không có t khoá Var). N u c n thay ñ i giá tr c a tham s th c trong chương trình m và nh n l i giá tr mà chương trình con ñã x lý thì tham s trong chương trình con ph i là tham bi n (tên tham s ph i ñ t sau t khoá Var). 4. Bi n toàn c c và bi n ñ a phương 4.1 Bi n toàn c c Bi n khai báo ñ u chương trình m ñư c g i là bi n toàn c c. Nó có tác d ng trong toàn b chương trình, k c các chương trình con. Khi th c hi n chương trình máy dành các ô nh vùng d li u (Data) ñ lưu gi giá tr c a bi n. M r ng ra t t c các ñ i tư ng trong Pascal (Ki u d li u, H ng, Bi n, Hàm, Th t c) khai báo trong chương trình m ñư c g i là ñ i tư ng toàn c c. Như v y m t ki u d li u ñã ñư c ñ nh nghĩa trong chương trình m thì ñương nhiên ñư c phép s d ng trong các chương trình con c a nó. Trong ví d 1.1 bi n a và n là bi n toàn c c, hai bi n này có th s d ng tr c ti p trong th t c NHAPSO và trong hàm MAX mà không c n khai báo l i. Pascal dành các ô nh vùng Data (vùng d li u) cho các ñ i tư ng toàn c c. 4.2 Bi n ñ a phương Nh ng ñ i tư ng khai báo trong chương trình con ch có tác d ng trong n i b chương trình con ñó, chúng ñư c g i là ñ i tư ng ñ a phương. ð i tư ng hay ñư c s d ng nh t là Bi n. Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 9
- Bi n ñ a phương có th trùng tên v i bi n toàn c c song h th ng dành các ô nh trong vùng nh ngăn x p (Stack) ñ lưu gi các giá tr c a bi n. K t thúc chương trình con h th ng s gi i phóng ô nh c a bi n ñ a phương dùng vào vi c khác, giá tr c a các bi n lưu tr trong các ô nh này s không còn. Trư ng h p trong chương trình con l i có các chương trình con khác thì bi n ñ a phương c a chương trình con c p trên l i ñư c xem là bi n toàn c c ñ i v i chương trình con c p dư i. M t bi n sau khi ñư c khai báo trong m t chương trình s ch có t m tác d ng trong b n thân chương trình ñó và các chương trình con c a nó. Bi n này không có tác d ng trong các chương trình cùng c p khác ho c trong các chương trình con c a chương trình khác. ði u này có nghĩa là các chương trình con và chương trình m có th có nhi u bi n trùng tên, nhưng t m tác d ng thì khác nhau do ñó tính toàn v n c a d li u luôn ñư c b o ñ m. Ví d 1.3 Program Chuong_trinh_con; Uses crt; Var i,n:byte; c1:string[30]; Procedure Bien_dia_phuong; Var i,n:byte; c1:string[30]; Begin n:=3; C1:='Thu do Ha noi'; Writeln('Gia tri n trong chuong trinh con: ',n); Writeln('Chuoi C1 trong chuong trinh con: ',C1); end; Begin (* thân chương trình m *) Clrscr; Bien_dia_phuong; Writeln; n:=0; for i:= 1 to 10 do n:= n+i; c1:='Happy Birth Day'; Writeln('Gia tri n trong chuong trinh me: ',n); Writeln('Chuoi C1 trong chuong trinh me: ',C1); Readln; End. Ví d 1.3 thi t k m t chương trình m và m t chương trình con dư i d ng th t c. Ph n khai báo bi n trong c hai là như nhau. Phép gán d li u vào bi n n và chu i C1 là khác nhau. Sau l i g i chương trình con Bien_dia_phuong màn hình xu t hi n: Gia tri n trong chuong trinh con: 3 Chuoi C1 trong chuong trinh con: Thu do Ha noi Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 10
- Ti p ñó là k t qu các l nh vi t trong chương trình m : Gia tri n trong chuong trinh me: 55 Chuoi C1 trong chuong trinh me: Happy Birth Day L i g i chương trình con ñư c th c hi n trư c, k t qu là bi n n mang giá tr 3, còn chu i C1 là ' Thu do Ha noi '. Khi tr v chương trình m bi n n =55 còn chu i C1 = ' Happy Birth Day' . ði u này có nghĩa là bi n n và C1 trong chương trình con không nh hư ng ñ n bi n n và C1 trong chương trình m . 5. Cách th c b trí b nh Khi m t chương trình Pascal d ng EXE ñư c ch y máy s c p phát m t vùng nh cơ s 640 Kb. Vùng nh này s bao g m các ô nh n m li n nhau nghĩa là ñ a ch các ô nh tăng liên t c. Phân lo i vùng nh Tên vùng Dung lư ng Cao Heap 0 - 655360 Bytes Stack Segment 16 - 64 Kb Data Segment 64 Kb Code Segment M i ño n có 64 Kb Th p Program Segment Prefix 256 Bytes Hình 1.1 Chương trình ñư c b trí trong b nh như sau: * Program Segment Prefix: ghi ñ a ch các hàm, bi n, th t c * Code Segment: lưu mã chương trình chính và mã các Unit liên quan ñ n chương trình, vùng này có th g m nhi u ño n, m i ño n 64 Kb. * Data Segment: lưu tr các bi n, h ng, ki u c a chương trình chính, vùng này ch có 64 Kb nên n u chương trình chính có quá nhi u h ng, bi n thì có th g p l i: Too many variables * Stack Segment: Lưu mã chương trình con và bi n ñ a phương * Heap: vùng nh t do dùng cho vi c c p phát ñ ng Các tham tr và bi n c c b khai báo trong chương trình con ñư c b trí vào các ô nh c a Stack. Khi chương trình m g i và truy n tham s cho chương trình con thì giá tr c a các tham s này s ñư c sao chép vào các ô nh ñã b trí stack. M i bi n ñ i di n ra trong stack không nh hư ng ñ n các giá tr c a tham s th c trong chương trình m . V i các tham bi n, Pascal không b trí ô nh riêng mà s d ng con tr tr vào ñ a ch c a ô nh ch a bi n toàn c c. Khi chương trình con làm thay ñ i giá tr c a các tham bi n thì Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 11
- cũng có nghĩa là nó làm thay ñ i giá tr c a các bi n toàn c c trong chương trình m . K t thúc chương trình con ch các bi n ñ a phương là b gi i phóng còn bi n toàn c c không b gi i phóng cho nên chúng ta nói chương trình con ñã mang các giá tr m i v cho chương trình m. C n chú ý r ng Pascal 7.0 ch dành 16 Kb cho vùng Stack, dung lư ng này ñáp ng ñ y ñ các ng d ng thông thư ng. V i nh ng ng d ng s d ng tính ñ quy mà s l n g i ñ quy là quá l n thì s có th b l i: Stack Overflow (b nh ngăn x p b tràn). G p trư ng h p này c n ph i m r ng vùng nh Stack b ng cách sau: Trên thanh th c ñơn ch n Options/Memory Size s xu t hi n c a s (hình 1.2) Memory Sizes Stack size 16384 Low heap limit 0 High heap limit 655360 OK Cancel Help F1 Help - Size of your program's stack segment (between 1024 and 65520) Hình 1.2 Stack size 16384: dung lư ng hi n th i c a Stack Size of your program's stack segment (between 1024 and 65520) Có th thay ñ i dung lư ng Stack trong kho ng 1024 - 65520 Bytes Mu n thay ñ i dung lư ng c a Stack chúng ta ch vi c gõ dung lư ng m i thay vào v trí 16384 hi n th i. Các tham s : Low heap limit 0 655360 Là vùng nh t do dành cho c p phát ñ ng, không nên High heap limit nh m chúng v i giá tr t i thi u và t i ña c a Stack. 6. Tính ñ qui c a chương trình con Thông thư ng l i g i m t chương trình con ch ñư c th c hi n khi chương trình con ñó ñã ñư c thi t k hoàn ch nh. Tuy nhiên Pascal cho phép m t chương trình con ngay trong quá trình xây d ng l i có th g i t i chính nó, không nh ng th t m t chương trình con còn có th g i t i các chương trình con khác cùng c p ho c chương trình con c p cao hơn nó. Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 12
- M t chương trình con có th có l i g i t i chính tên chương trình con ñó, tính ch t này ñư c g i là tính "ð qui c a chương trình con". ð quy có th s d ng trong c Procedure và Function. Gi ng như m ng trong Pascal tương ñương v i ma tr n trong toán, ñ quy trong Pascal tương ñương v i tính Quy n p trong toán h c. V ñi u này chúng ta s ñ c p ñ n trong chương V “Gi i thu t ð quy”. 7. L i g i chương trình con M t chương trình m có th có nhi u chương trình con tr c thu c, bên trong m i chương trình con l i có th có các chương trình con riêng. Nói cách khác trong Pascal t n t i m t l p chương trình con ngang c p nhau, m i chương trình con này l i có th ñóng vai trò chương trình m c a m t l p chương trình con khác. Khi thi t k , m i chương trình con ph i là m t kh i riêng bi t không th l ng nhau ho c có các l nh nh y Goto t chương trình con này t i chương trình con khác. 7.1 G i chương trình con t trong chương trình m L i g i chương trình con có th ñ t b t kỳ ch nào trong chương trình m . N u chương trình con là m t th t c thì l i g i chương trình con (t c là tên chương trình con) có th t o nên m t câu l nh, ví d : Readln; Gotoxy(5,8); N u chương trình con là hàm thì tên hàm không th t o nên m t câu l nh, nói khác ñi tên hàm ph i n m trong m t bi u th c hay trong m t th t c nào ñó, ví d v i hàm khai căn b c hai SQRT() chúng ta không th vi t sqrt(9); ði u này là d hi u vì hàm cho ta giá tr vô hư ng, giá tr này không ph i là m t l nh do ñó Pascal không bi t ph i làm gì v i giá tr ñó. Cách g i hàm như sau là h p l : a:= sqrt(9) + 5; Witeln('Can bac hai cua 9 bang ',sqrt(9)); 7.2 G i chương trình con t chương trình con khác Các chương trình con cùng c p có th g i t i nhau và truy n tham s cho nhau. Nguyên t c g i là: nh ng chương trình con xây d ng sau có th g i t i các chương trình con ñã xây d ng trư c nó, ñ ng th i các chương trình con c p dư i cũng có th g i t i các chương trình con c p trên n u chúng cùng m t g c. ði u này có nghĩa là các chương trình con xây d ng trư c không th g i t i các chương trình con xây d ng sau n u không có ch báo FORWARD (xem m c 8). Xét m t s ví d sau: Ví d 1.6 Program Goi_ctc; Uses crt; Type dayso=array[1..60] of byte; s1=string[30]; Var Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 13
- a:s1; b:dayso; i,j,n:byte; Procedure nhapso(m:byte; var c:dayso); Begin For i:=1 to m do Begin Write('c[',i,'] = '); readln(c[i]); End; End; Function tinhtong(m:byte; d:dayso):real; var tong:real; Begin tong:=0; for i:= 1 to m do Tong:=tong+d[i]; tinhtong:=tong; End; Procedure viet(k:byte; e:dayso); Begin Write('Tong cac phan tu mang = ',tinhtong(k,e):8:0); readln; End; BEGIN clrscr; write('Nhap so phan tu n '); readln(n); nhapso(n,b); viet(n,b); END. Ví d 1.6 thi t k ba chương trình con là Nhapso, Tinhtong và Viet. Th t c Nhapso dùng ñ nh p các ph n t vào m ng m t chi u. Hàm Tinhtong dùng ñ tính t ng các ph n t m ng và th t c Viet dùng ñ hi n k t qu tính t ng lên màn hình. Chương trình m g i chương trình con Viet và truy n các tham s là s ph n t m ng n và giá tr c a các ph n t c a m ng ( m ng b ). Chương trình con Viet l i g i hàm Tinhtong và truy n các tham s cho hàm này. ðây là trư ng h p m t chương trình con g i m t chương trình con cùng c p. Vi c các chương trình con g i t i nhau ph i tuân theo quy ñ nh sau ñây: M t chương trình con ch có th g i t i m t chương trình con cùng c p ñã thi t k trư c chương trình con hi n th i. Trong ví d 1.6 n u chúng ta ñưa hàm Tinhtong xu ng dư i th t c Viet thì khi ch y chương trình s b báo l i: Unknown Indentifier. Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 14
- Ví d 1.7 dư i ñây trình bày cách th c mà m t chương trình con c p dư i g i t i m t chương trình con c p trên cùng g c. Ví d 1.7 Program goi_ctc; Uses crt; Type dayso=array[1..60] of byte; Var b:dayso; i,n:byte; {Hai chương trình con Nhapso và Tinhtong cùng c p v i th t c Xuly} Procedure nhapso(m:byte; var c:dayso); Begin For i:=1 to m do Begin Write('c[',i,'] = '); readln(c[i]); End; End; Function tinhtong(m:byte; d:dayso):real; Var tong:real; Begin tong:=0; for i:= 1 to m do Tong:=tong+d[i]; tinhtong:=tong; End; Procedure xuly(j:byte; ds:dayso); Procedure viet(k:byte; e:dayso); Var i:byte; Begin Writeln('Tong cac phan tu mang = ',tinhtong(k,e):8:0); Writeln('Day so sap xep giam dan '); for i:=1 to k do write(e[i],' '); readln; End; { K t thúc th t c Viet} Procedure sapxep(m:byte; d:dayso); Var p,q:byte; Tg:byte; Begin For p:= 1 to m-1 do Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 15
- For q:=p+1 to m do If d[p]
- Dòng khai báo trên ñây ph i ñư c ñ t trong chương trình trư c khi xây d ng t t c các chương trình con. Khi tên m t chương trình con ñã ñư c khai báo v i cú pháp nêu trên thì vi c nó n m trư c hay sau m t chương trình con s g i t i nó là không quan tr ng. S lư ng chương trình con khái báo trư c v i t khoá Forward là không h n ch . C n lưu ý r ng n u có nhi u chương trình con c n khai báo trư c thì m i tên chương trình con ph i ñi v i m t t khoá Forward, không th ghép nhi u tên chương trình con v i cùng m t t Forward. Ví d 1.8 Program Tu_khoa_Forward; uses crt; Type dayso=array[1..60] of byte; var a:string; b:dayso; i,j,n:byte; Function c2(m:byte; d:dayso):real; forward; Procedure c4(p:byte; var q:dayso); forward; Procedure c1(m:byte; var c:dayso); Begin For i:=1 to m do Begin Write('c[',i,'] = '); readln(c[i]); End; End; Procedure c3(k:byte; e:dayso); Var i:byte; Begin c4(k,e); writeln('Mang sau khi sap xep'); for i:= 1 to k do write(e[i],' '); writeln; Write('Tong cac phan tu mang = ',c2(k,e):8:0); readln; End; Function c2(m:byte; d:dayso):real; var tong:real; Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 17
- Begin tong:=0; for i:= 1 to m do Tong:=tong+d[i]; c2:=tong; End; Procedure c4(p:byte; var q:dayso); Var i,j:byte; tg:integer; Begin for i:= 1 to (p-1) do for j:= i+1 to p do if q[i]>q[j] then Begin tg:=q[i]; q[i]:=q[j]; q[j]:=tg; End; End; BEGIN clrscr; write('Nhap so phan tu n '); readln(n); c1(n,b); c3(n,b); END. Ví d 1.8 có 4 chương trình con trong ñó c1 và c3 thi t k trư c còn c2 và c4 thi t k sau. Trong c3 có l i g i ñ n c2 và c4 do v y ph i khai báo trư c c2 và c4 . N u không mu n khai báo trư c thì c n ñưa c2 và c4 lên trên c3. Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 18
- Bài t p ng d ng chương 1 1. L p chương trình tính di n tích toàn ph n và th tích các hình : Tr tròn, nón. Yêu c u: Thi t k menu theo m u sau, Menu có th dùng con tr d ch chuy n ñ ch n các ch c năng: Hinh Tru Hinh Non Ket thuc Vi c tính toán di n tích, th tích m i hình ng v i m t chương trình con T t c các hình ñ u chung m t chương trình con hi n k t qu . Ch c năng Ket thuc dùng ñ quay v c a s Pascal. 2. L p m t chương trình t o th c ñơn v i các ch c năng: Tính giai th a Tính t h p Tr v Dùng các chương trình con ñã l p ñ gi i bài toán sau: Cho n ñi m trên màn hình, qua hai ñi m b t kỳ bao gi cũng n i ñư c b i m t ño n th ng. Tính xem có bao nhiêu ño n th ng ñư c t o ra. Tìm ño n ng n nh t và dài nh t , chúng n i các ñi m nào? 3. Thi t k th c ñơn v i các ch c năng: 1.giai he pt bac nhat 2. giai pt bac hai 3.Ket thuc Yêu c u: B m s ñ ch n ch c năng trên th c ñơn. Ch c năng Ket thuc dùng ñ quay v c a s Pascal. Chương trình có 2 chương trình con ñ gi i h phương trình b c nh t 2 n và gi i phương trình b c 2 4. A,B là m ng hai chi u c a các s th c, s dòng và c t c a t ng m ng nh p t bàn phím, l p chương trình bao g m các chương trình con: nh p d li u vào m ng, ki m tra xem có th nhân hai m ng hay không, n u có thì ch y chương trình con nhân hai m ng, n u không thì thông báo không th nhân hai m ng. Hi n k t qu nhân dư i d ng ma tr n. 5. Cho hai chu i s1, s2, vi t chương trình bao g m các chương trình con: NHAP dùng ñ nh p vào s1, s2 các ký t c a b ng mã g m c ch cái và ch s , TACH dùng ñ tách riêng các ch s và ch cái, nh ng ch s tách ra lưu vào m ng m t chi u theo th t c a s1 trư c, s2 sau. CONG dùng ñ c ng các ch s tách ra t hai chu i Thông báo k t qu theo m u: Chu i s1 sau khi tách:.................. Chu i s2 sau khi tách:.................. T ng các ch s :......................... 6. L p chương trình v i 4 chương trình con dùng ñ chuy n ñ i các s gi a 4 h ñ m: H 10 sang h 2, 8, 16 H 2 sang h 8, 10, 16 H 8 sang h 2, 10, 16 H 16 sang h 2, 8, 10 Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 19
![](images/graphics/blank.gif)
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình lập trình SQL - Chương 1: Tổng quan về sql
7 p |
195 |
43
-
Bài giảng Giáo trình Lập trình căn bản - ThS. Nguyễn Cao Trí
74 p |
152 |
36
-
Giáo trình lập trình nâng cao - Chương 5
10 p |
131 |
33
-
Bài giảng cơ sở lập trình nâng cao - Chương 8
37 p |
139 |
31
-
Cơ bản về hướng đối tượng và C++
120 p |
132 |
16
-
Bài giảng cơ sở lập trình nâng cao - Chương 4
36 p |
98 |
10
-
GIÁO TRÌNH LẬP TRÌNH - CHƯƠNG MỞ ĐẦU
11 p |
118 |
8
-
Bài giảng Ngôn ngữ lập trình nâng cao: Bài 5.1 - Nguyễn Xuân Hùng
33 p |
46 |
7
-
Bài giảng cơ sở lập trình nâng cao - Chương 5
27 p |
96 |
7
-
Bài giảng cơ sở lập trình nâng cao - Chương 3
39 p |
65 |
7
-
Bài giảng cơ sở lập trình nâng cao - Chương 6
28 p |
63 |
6
-
Bài giảng cơ sở lập trình nâng cao - Chương 9
39 p |
59 |
6
-
Bài giảng cơ sở lập trình nâng cao - Chương 1
36 p |
71 |
6
-
Bài giảng cơ sở lập trình nâng cao - Chương 7
28 p |
61 |
5
-
Bài giảng cơ sở lập trình nâng cao - Chương 2
14 p |
63 |
5
-
Bài giảng Lập trình nâng cao: Bài 4 - Lý Anh Tuấn
48 p |
40 |
4
-
Bài giảng Lập trình nâng cao: Chương 5 - Lý Anh Tuấn
54 p |
29 |
2
![](images/icons/closefanbox.gif)
![](images/icons/closefanbox.gif)
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn
![](https://tailieu.vn/static/b2013az/templates/version1/default/js/fancybox2/source/ajax_loader.gif)