intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình môm Lập trình nâng cao

Chia sẻ: Fgf Fgfg | Ngày: | Loại File: PDF | Số trang:207

263
lượt xem
116
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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 này là 60 tiết trong đó có 10 tiết thực hành trên máy

Chủ đề:
Lưu

Nội dung Text: Giáo trình môm Lập trình nâng cao

  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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. ð 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. For q:=p+1 to m do If d[p]
  17. 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
  18. 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
  19. 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
  20. Chương 2 Các ki u d li u có c u trúc Trong chương này không trình bày chi ti t các ki u d li u có c u trúc ñơn gi n như ki u m ng, chu i. N i dung tr ng tâm c a chương là ki u b n ghi (Record) có c u trúc thay ñ i, ki u t p và ki u t p h p. Chương này b n ñ c c n n m ñư c các v n ñ sau: Cách th c ñ nh nghĩa m t ki u d li u m i Khai báo bi n v i các ki u d li u do ngư i l p trình t ñ nh nghĩa Cách s d ng toán t CASE khi khai báo b n ghi có c u trúc thay ñ i Cách th c ghi và ñ c d li u cho ba lo i t p: t p văn b n, t p có ki u và t p không ki u, chú tr ng cách ghi d li u ki u s vào t p văn b n và l y s li u ra ñ x lý X d ng d li u ki u t p h p trong l p trình Trư ng ð i h c Nông nghi p 1 - Giáo trình L p trình nâng cao ..............................................................- 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2