Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 28 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
28
Dung lượng
322,43 KB
Nội dung
Lập trình bằng Turbo Pascal Ví dụ: Assign (F, 'Nguyen .Dat'); Sz:= FileSize (F) ; sẽ nhận đợc Sz = 100. Lu ý: Có thể dùng hm ny kết hợp với thủ tục Seek để viết nối thêm vo cuối một tệp. (Tác dụng giống nh lệnh Append vo cuối tệp kiểu văn bản) Seek( biến tệp , FileSize( biến tệp )) ; Write( biến tệp, biểu thức 1, , biểu thức n ); - FilePos ( biến tệp ): LongInt; Hm cho biết vị trí hiện tại của cửa sổ tệp. Phần tử đầu tiên ở vị trí 0. Ví dụ: Assign(F, 'Nguyen.Dat') Reset(F); I:= FilePos(F); {sẽ cho I = 0 } - Erase ( biến tệp ) ; Thủ tục xoá tệp. Ví dụ: Assign(F, 'Nguyen .Dat'); Erase(F) - Rename ( biến tệp , tên mới ) ; Thủ tục đổi tên tệp thnh tên mới. Tên mới ny phải không đợc trùng với tên các tệp đã có trong cùng th mục. Ví dụ: Assign(F, 'Nguyen .Dat') Rename( F, ' So1_100. Int' ) ; 3.2 Bẫy lỗi khi mở tệp. 3.2.1 Đặt vấn đề Khi thực hiện thao tác mở tệp để đọc / ghi có thể bị lỗi nếu: - mở tệp cha tồn tại trên đĩa, tên sai - hết chỗ trên đĩa để ghi thêm vo tệp. TurboPascal cung cấp chỉ thị để trình biên dịch thêm các mã lệnh thực hiện kiểm tra lỗi trong quá trình thực hiện đọc / ghi tệp m dới đây sẽ gọi ngắn gọn l chỉ thị kiểm tra I/O. { $ I + }: bật (mở) việc kiểm tra I/O. Nếu gặp lỗi I/O chơng trình sẽ báo lỗi v dừng lại. Đây l chế độ mặc định. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 105 Lập trình bằng Turbo Pascal { $ I - }: tắt việc kiểm tra I/O. Chơng trình không dừng dù có lỗi I/O. Tuy nhiên nó sẽ bỏ qua (treo, tạm dừng) tất cả các thủ tục vo/ra sau đó cho đến khi gặp lời gọi hm IOResult. IOResult l hm trả về mã lỗi khi thực hiện các thao tác đọc ghi ra đĩa. Nếu công việc thnh công thì mã lỗi l 0. Trái lại, mã lỗi l một số khác không. Sử dụng cơ chế kiểm tra I/O có thể thực hiện việc bẫy lỗi khi mở tệp, nhất l tiến hnh mở tệp mới an ton, tránh việc vô tình xoá mất tệp cùng tên khi mở tệp mới để viết vo bằng thủ tục Rewrite. 3.2.2 3.2.3 Các bớc để mở tệp an ton. Tắt chế độ kiểm tra v thử mở tệp ra để đọc. Gọi hm IOResult. Nếu IOResult bằng 0, nghĩa l mở tệp thnh công tức l đã có tệp cùng tên. Cần thông báo cho ngời dùng biết để xử lí, nhập lại tên khác chẳng hạn. Nếu IOResult khác không nghĩa l cha có tệp no có tên nh thế. Có thể yên tâm tạo tệp bằng lệnh Rewrite. Ví dụ minh hoạ. Assign( biến tệp , tên tệp); {$I-} Reset( biến tệp ); {$I+} If IOResult <> 0 then {không có tệp no trùng tên} Begin Writeln(' Ban muon tao tep moi ? Enter=Yes '); if ReadKey = #13 then Rewrite( biến tệp ) else exit; end; Else Begin Writeln(' Da co tep trung ten '); End; Việc tắt chế độ kiểm tra I/O bằng chỉ thị {$I-} trớc câu lệnh Reset l để tránh báo lỗi v dừng chơng trình theo mặc định khi mở tệp cha có trên đĩa. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 106 Lập trình bằng Turbo Pascal 4. Tệp văn bản. 4.1 Định nghĩa và cấu trúc. Tệp văn bản l một kiểu tệp phổ biến, đã đợc định nghĩa sẵn, để lu trữ xử lí các "văn bản". Khái niệm văn bản ở đây khác với khái niệm văn bản thông thờng trong các phần mềm xử lí văn bản. Văn bản ở đây chỉ gồm các kí tự ASCII v đợc phân thnh các dòng. Ngoi ra, không có bất cứ định dạng no khác về trình by nh cỡ chữ, kiểu chữ, mu sắc, v.v. 4.1.1 4.1.2 Cú pháp. Kiểu tệp văn bản đã đợc định nghĩa sẵn với tên chuẩn l Text. Ta không cần phải khai báo kiểu. Cú pháp khai báo biến tệp văn bản: Var biến tệp: Text ; Ví dụ. VAR F1, F2 : Text ; Cấu trúc. Thnh phần chính của tệp văn bản l các kí tự ASCII. Tuy nhiên, tệp văn bản đợc chia thnh các dòng. Đánh dấu hết dòng bằng dấu Eoln (end of line). Đó l cặp kí tự CR (cariage return) - nhảy về đầu dòng, mã ascii l 13 - v LF (line feed) - nhảy xuống dòng dới, mã ascii l 10. Dấu hết tệp Eof đối với tệp văn bản l Ctrl-Z có mã ascii l 26. Trong môi trờng DOS có thể dùng lệnh Type để hiển thị nội dung của tệp văn bản lên mn hình. Tệp văn bản không phải l tệp các kí tự File of Char. File of Char khác với tệp kiểu Text ở chỗ nó không nhận biết cặp kí tự CR, LF nh dấu hết dòng m coi nh hai kí tự ascii bình thờng. Ví dụ. Tệp TieuDe.txt chứa ba dòng CH XHCN VIETNAM Doc lap - Tu do - Hanh phuc ***** Nội dung của tệp l dãy kí tự liên tiếp nh sau CH XHCN VIETNAM CR LF Doc lap - Tu do - Hanh phuc CR LF ***** EOF Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 107 Lập trình bằng Turbo Pascal 4.2 Viết ra tệp văn bản Có thể ghi các giá trị kiểu nguyên, thực, logic, xâu kí tự ra tệp văn bản bằng các lệnh Write. Các thủ tục Write viết ra tệp văn bản sẽ tự động tính các biểu thức v chuyển đổi các giá trị sang dạng biểu diễn xâu kí tự thông thờng để có thể ghi vo tệp văn bản. Write ( biến tệp , biểu thức 1, biểu thức 2 , , biểu thức n ) ; Writeln ( biến tệp , biểu thức 1, biểu thức 2 , , biểu thức n ); Writeln ( biến tệp ); Sau các biểu thức có thể kèm phần định dạng (quy cách) in ra. Tác dụng của các câu lệnh trên hon ton tơng tự nh trong trờng hợp xuất ra mn hình đã trình by ở Chơng 3. Chỉ khác l ở đây không phải in ra mn hình m l viết ra tệp văn bản ứng với biến tệp. Về bản chất, mn hình cũng giống nh một tệp văn bản. Ví dụ. F: TEXT; i,j: Integer; X: Real; B: Boolean; St: String [8]; Write(F, (i+ j):5, 3*X:0:2, St:10, ' The End '); 4.3 Đọc vào từ một tệp văn bản. 4.3.1 Cú pháp. Các thủ tục Read quen biết có thể đọc từ tệp văn bản rồi gán cho các biến không những các kí tự m cả các kiểu dữ liệu khác nữa: số nguyên, thực, logic Thủ tục Read sẽ tự động chuyển đổi các xâu kí tự biểu diễn dữ liệu thnh giá trị có kiểu tơng ứng của biến sẽ đợc gán Read ( biến tệp , biến 1 , biến 2 , , biến n ); Readln ( biến tệp , biến 1 , biến 2 , , biến n ) ; Readln ( biến tệp ); Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 108 Lập trình bằng Turbo Pascal Tác dụng: hon ton giống nh các lệnh đọc dữ liệu từ bn phím đã quen biết, chỉ khác l ở đây không phải nhập dữ liệu từ bn phím m các mục dữ liệu đã viết sẵn trong tệp văn bản ứng với biến tệp. Tuỳ theo kiểu của biến i m lệnh Read thực hiện đọc một dãy kí tự từ tệp văn bản, chuyển đổi nó thnh một giá trị trực tiếp thuộc kiểu dữ liệu của biến i v gán cho biến ny. Quy định về phân cách các mục dữ liệu kiểu số, kiểu kí tự, kiểu xâu kí tự đã đợc trình by chi tiết trong Chơng 3. 4.3.2 Ví dụ. Dới đây l đoạn chơng trình minh hoạ quy cách đọc vo từ tệp văn bản. Kết quả thực hiện các thủ tục Read đợc viết trong phần chú thích sau mỗi câu lệnh. Đầu vo của chơng trình l tệp vanban.txt có nội dung nh hình sau abcdefg hiklm -3.2 1.5 2 var f: text; x: real; i: integer; s1,s2,s3: string[5]; S : string; begin assign(f,'vanban.txt'); reset(f); read(f,x); { x:= 1.5 } read(f,i); { i:= 2 } readln(f,x); { x:= -3.2 v xuống dòng} read(f,s1); { s1:= 'abcde' } read(f,S); { S:= 'fg hiklm' , không xuống dòng} read(f,s2); { s2:= '' xâu rỗng } readln(f); read(f,s3); { s3:= 'nnnnn' } end. 4.4 Các hàm, thủ tục chuẩn khác cho tệp văn bản Các thủ tục Seek, FileSize, FilePos không áp dụng đợc cho tệp văn bản vì tệp văn bản có cấu trúc l dãy các dòng kích thớc (độ di) khác nhau. Dới đây l các hm thủ tục áp dụng cho tệp Text. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 109 Lập trình bằng Turbo Pascal - Eof( biến tệp ): boolean ; Kiểm tra đã ở cuối tệp cha. - Eoln ( biến tệp ): boolean ; Kiểm tra đã ở cuối dòng cha. - Append ( biến tệp ); Mở tệp văn bản để viết vo, của sổ tệp đặt tại cuối tệp. - SeekEoln( biến tệp ): boolean ; Tơng tự nh Eoln nhng trớc khi kiểm tra nó nhảy qua các dấu cách v dấu Tab. SeekEoln cho kết quả True nếu trên phần còn lại của dòng, kể từ vị trí hiện tại, không còn mục dữ liệu no nữa. - SeekEof( biến tệp ): boolean ; Tơng tự nh Eof nhng trớc khi kiểm tra nó nhảy qua các dấu cách, dấu Tab v dấu xuống dòng. SeekEof cho kết quả True nếu từ vị trí hiện tại đến cuối tệp không còn mục dữ liệu no nữa. - Flush( biến tệp ); Xả hết nội dung bộ đệm của một tệp kiểu văn bản đang đợc mở để viết vo. F l một biến kiểu tệp văn bản Text, đợc mở bằng Rewrite hoặc Append để viết ra. Khi đó lời gọi Flush sẽ xả hết phần nội dung còn đọng trong bộ đệm, viết nốt ra tệp F. Thủ tục ny đợc dùng để đảm bảo rằng mọi lệnh viết ra tệp F đều đợc thực hiện trọn vẹn, không bỏ sót dữ liệu. Flush không có tác dụng nếu tệp F đựơc mở để đọc. - SetTextBuf( biến tệp, vùng đệm, kích thớc ); Gán một vùng đệm I/O cho tệp văn bản. Tham biến Vùng đệm l một vùng trong bộ nhớ dùng lm trung gian, tạm chứa dữ liệu trong các thao tác truy cập đọc ra hoặc viết vo tệp trên ổ đĩa. Tham trị kích thớc l tuỳ chọn, có thể không có mặt. Thủ tục ny thờng dùng để tăng kích thớc vùng đệm nhằm đẩy nhanh tốc độ trao đổi dữ liệu với ổ đĩa. Ta đã biết tốc độ truy cập đĩa chậm hơn nhiều so với truy cập bộ nhớ trong. Nếu có một vùng đệm thì các thao tác xử lí đọc / viết tạm ra đây. Khi đầy vùng đệm mới tiến hnh thao tác đọc / viết thực sự ra đĩa, không lm lắt nhắt nhiều lần. SetTextBuf không nên gọi cho tệp đang mở v đã có thao tác trao đổi dữ liệu. Nó có thể đợc gọi ngay sau Reset, Rewrite, hay Append. Nếu gọi SetTextBuf cho tệp đang mở thì khi có thao tác I/O , có thể bị mất dữ liệu do kích thớc của vùng đệm thay đổi. Ví dụ. Minh hoạ cách dùng SetTextBuf Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 110 Lập trình bằng Turbo Pascal var F: Text; Ch: Char; Buf: array[1 4095] of Char; { 4K buffer } begin {Lấy tên tệp từ tham số dòng lệnh} Assign(F, ParamStr(1)); {Tăng bộ đệm lớn để đọc nhanh} SetTextBuf(F, Buf); Reset(F); {Đa ton bộ nội dung tệp văn bản ra mn hình} while not Eof(f) do begin Read(F, Ch); Write(Ch); end; end. 4.5 Các thiết bị vào ra chuẩn Bn phím v mn hình l các thiết bị vo / ra chuẩn nh đợc coi nh tệp văn bản, có thể sử dụng m không cần khai báo. OUTPUT L tệp xuất chuẩn, đợc tự động gắn cho mn hình. Nếu trong các câu lệnh Write không chỉ rõ biến tệp thì có nghĩa l sử dụng tệp xuất chuẩn Output. Đó l lí do tại sao khi in ra mn hình có thể bỏ qua thnh phần biến tệp. Câu lệnh có dạng Write ( biểu thức 1, biểu thức 2 , , biẻu thức n ) ; INPUT L tệp vo chuẩn, đợc tự động gắn cho bn phím. Tơng tự nh với lệnh xuất ra, nếu trong các câu lệnh Read không chỉ rõ biến tệp thì có nghĩa l sử dụng tệp vo chuẩn. LST l tệp xuất gắn với máy in. Để in ra máy in từ trong một chơng trình Pascal cần chỉ rõ biến tệp bây giờ l máy in. Write (LST, biểu thức 1, biểu thức 2 , , biẻu thức n ) ; Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 111 Lập trình bằng Turbo Pascal 5. Tệp không định kiểu. 5.1 Định nghĩa và cấu trúc. Tệp không định kiểu - Untyped File - l tệp không định rõ kiểu của phần tử khi khai báo, coi dữ liệu chính l các mã nhị phân 0,1 không cần biết nó biểu thị cái gì. Đơn vị xử lí l từng khối bít, có kích thớc do ta quy định, gọi l các Record. Lu ý rằng record ở đây không phải l kiểu bản ghi nh đã biết. Tệp không định kiểu chủ yếu dùng để tăng tốc độ thao tác vo ra dữ liệu. Cú pháp. Khai báo: dùng từ khoá FILE Var biến tệp : File ; Truy cập: Các thủ tục Reset, Rewrite đối với tệp không định kiểu cần có thêm tham trị kich thớc Rec. Tham trị kích thớc Rec l một số nguyên (kiểu Word) để ấn định kích thớc của khối dữ liệu đơn vị (record) trong các thao tác tệp. Kích thớc ny tính theo byte. Reset ( biến tệp , kích thớc Rec ); Rewrite ( biến tệp , kích thớc Rec ); Ví dụ. Reset(F,4); đọc ra từng khối 4 byte một. Rewrite(F,2); viết vo từng khối 2 byte một. Nếu tham số ny không có mặt thì record có kích thớc mặc định l 128 byte. 5.2 Các hàm, thủ tục khác. Ngoi ra, để tăng nhanh tốc độ xuất nhập dữ liệu, còn có hai thủ tục dnh riêng cho tệp không định kiểu l BlockRead v BlockWrite. BlockRead( biến tệp , vùng đệm , số Rec , kết quả ); Vùng đệm: vùng đệm trong bộ nhớ, l một tham biến, nơi chứa dữ liệu đọc vo Sô Rec : tham trị kiểu Word, l số khối dự định đọc. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 112 Lập trình bằng Turbo Pascal Kết quả : tham biến kiểu Word, l số khối thực đọc đợc. Tác dụng. BlockRead đọc một lợng số Rec khối bit từ tệp ứng với biến tệp rồi ghi vo bộ nhớ, bắt đầu từ byte thứ nhất của Vùng đệm. Số khối bit thực sự đọc đợc đợc trả về trong biến kết qủa. Lu ý rằng số khối bít thực sự đọc đợc có thể bé hơn sô Rec dự định đọc nếu đã đến cuối tệp. Nếu không có tham biến kết qủa thì khi số khối thực sự đọc đợc không bằng số Rec sẽ có lỗi I/O xảy ra. Số byte đọc đợc nhiều nhất l số Rec * kích thớc Rec, ở đây kích thớc Rec l kích thớc của khối. Kích thớc khối l số lợng byte trong một khối, đợc ấn định khi mở tệp nh đã trình by ở trên. Nếu số Rec * kích thớc Rec > 65,535 (64K) thì sẽ có lỗi. BlockWrite( biến tệp , vùng đệm , số Rec , kết quả ); Vùng đệm: vùng đệm trong bộ nhớ, l một tham biến, nơi chứa dữ liệu để xuất ra. Sô Rec : tham trị kiểu Word, l số khối dự định xuất ra. Kết quả : tham biến kiểu Word, l số khối thực sự xuất ra đợc. Y nghĩa của các tham số v công dụng của BlockWrite cũng tơng tự nh BlockRead ở trên. Chỉ có thao tác truy cập ở đây l viết từ bộ nhớ ra tệp. Ví dụ Chơng trình dới đây minh hoạ cách dùng BlockRead, BlockWrite. Nó thực hiện sao chép tệp nhanh, đơn giản không kiểm tra lỗi. program CopyFile; var FromF, ToF: file; NumRead, NumWritten: Word; Buf: array[1 2048] of Char; begin Assign(FromF, ParamStr(1)); { Mo tep du lieu vao} Reset(FromF, 1); { Record size = 1 } Assign(ToF, ParamStr(2)); { Mo tep du lieu ra} Rewrite(ToF, 1); { Record size = 1 } Writeln('Copying ', FileSize(FromF), ' bytes '); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); Close(FromF); Close(ToF); end. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 113 Lập trình bằng Turbo Pascal Câu hỏi v bi tập 1. Tệp văn bản có thể dùng để đọc/viết các kiểu dữ liệu no. Tệp đinh kiểu có thể dùng để đọc/viết các kiểu dữ liệu no. Khi chỉ có môt kiểu dữ liệu thì tệp kiểu no sẽ đợc thao tác nhanh hơn. 2. Những hm, thủ tục no chỉ áp dụng cho tệp định kiểu m không áp dụng đợc cho tệp văn bản v ngợc lại. 3. Khi no thì trong phần khai báo bién không có biến tệp. Khi no thì trong phần khai báo kiểu không có kiểu tệp. 4. Khi no tệp có thể l một tham trị trong danh sách tham số của chơng trình con. 5. Số lớn nhất các bản ghi có thể viết vo một tệp l bao nhiêu. 6. Tệp không định kiểu đặt ra nhằm mục đích gì. Thực hnh. 1. Viết chơng trình tạo tệp Ran100.int chứa 100 số nguyên dơng i đợc sinh ngẫu nhiên (0 < i <= 50). In nội dung tệp nay ra mn hình thnh 10 dòng. b) Lấy tệp ny lm đầu vo để nhập ma trận. Hai số đầu tiên lấy lm số hng, số cột của ma trận, tiép theo l các phần tử ma trận, nếu thiếu thì gán giá trị bằng không. 2. Viết chơng trình nhân hai ma trận với dữ liệu đọc từ tệp v kết quả in ra tệp. a) Dùng tệp số nguyên v ma trận nguyên. b) Dùng tệp số thực với ma trận thực. c) Dùng tệp văn bản. 3. Thực hiện sắp xếp ho nhập hai đờng: đầu vo l 2 tệp số thực có thứ tự tăng dần. Tẹp kết quả l trộn của hai tệp, cũng có th tự tăng dần. 4. Viết chơng trình thống kê số lần xuất hiện của 26 chữ cái trong một tệp văn bản. 5. Viết chơng trình thống kê số lần xuất hiện của một từ cho trớc trong tệp văn bản. 6. viết chơng trình đếm số từ trong tệp văn bản. chuẩn hoá lại tệp để các từ cách nhau không quá một khoảng trắng (từ l một cụm kí tự không chứa các dấu cách nh khoảng trắng, tab, xuống dòng) nằm giữa hai dấu cách. 7. Giả thiết đã có tệp các bản ghi kết quả học tập của học sinh. Xây dựng chơng trình xử lí có các chức năng: in danh sách học sinh đợc lên lớp, theo thứ tự điểm giảm dần, in danh sach học sinh phải thi lại, sắp theo tên, lm thông kê tần xuất các mức điểm. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 114 [...].. .Lập trình bằng Turbo Pascal Chơng 10 Chơng trình con 1 Chơng trình con - Hàm và thủ tục 1.1 Tại sao cần sử dụng chơng trình con - Trong một chơng trình có thể có những phần công việc phải lặp đi lặp lại nhiều lần, với các dữ liệu đầu vo l khác nhau Để tránh viết lại các đoạn chơng trình dùng nhiều lần, ta cần tổ chức thnh các chơng trình con - Có một số chơng trình hay dùng, đã dợc... cấu trúc một chơng trình Pascal, phần dnh cho khai báo v xây dựng các chơng trình con l ở sau phần khai báo nhãn, hằng, kiểu, biến v ở ngay trớc phần thân chơng trình chính Program Tên chơng trình; Uses ; Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 1 15 Lập trình bằng Turbo Pascal Label ; Const ; Type ; Var ; Phần dnh cho các chơng trình con; BEGIN Các câu lệnh ; END Chơng trình con gồm có hai loại,... con - Chỉ tồn tại trong thời gian hoạt động của chơng trình con - Chỉ truy cập đợc từ trong chơng trình con ny v các chơng trình con nằm trong nó Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 1 25 Lập trình bằng Turbo Pascal 3.1.2 Giải thích bản chất Nếu tìm hiểu kỹ việc tổ chức thực hiện một chơng trình trong máy tính thì ta sẽ thấy nh sau Khi một chơng trình đợc nạp vo bộ nhớ để thực hiện thì phần mã của... luyện cách xây dựng chơng trình theo đúng phơng pháp l một việc cần lm Trong khuôn khổ của giáo trình ny ta chỉ tập trung vo bớc thiết kế v triển khai chơng trình 1.3 Ví dụ minh hoạ Để hiểu rõ hơn nội dung các bớc phát triển một chơng trình, ta thử minh hoạ bằng một ví dụ đơn giản dới đây Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 130 Lập trình bằng Turbo Pascal 1.1.1 Ví dụ Viết chơng trình thực hiện nhân... nội 117 Lập trình bằng Turbo Pascal Trong lời gọi hm, thủ tục thì danh sách các tham số thực sự phải tơng ứng một - một với danh sách tham số hình thức: đúng số lợng, thứ tự v kiểu dữ liệu Tại một điểm trong chơng trình chính, khi gặp lời gọi chơng trình con thì chơng trình chính tạm dừng Các tham số hình thức sẽ đợc gán các giá trị hiện tại của tham số thực sự v các lệnh xử lí trong thân chơng trình. .. hiện với các tham số thực sự khác nhau tuỳ từng trờng hợp Nếu chơng trình con chỉ sử dụng trong một chơng trình chính, trong một hon cảnh cụ thể thì các dữ liệu đầu vo, đầu ra chung cho cả chơng trình chính, l biến ton cục của chơng trình chính không cần phải đa vo danh Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 122 Lập trình bằng Turbo Pascal sách tham số Chỉ những tham số sẽ nhận những giá trị khác nhau... không mong muốn do ta vô tình thay đổi giá trị của biến Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 123 Lập trình bằng Turbo Pascal 2.3 .5 Tệp lm tham số của chơng trình con Khi cần truyền hoặc nhận nhiều dữ liệu, có thể dùng biến tệp để truyền tham số cho chơng trình con Nó bắt buộc phải l tham biến Chơng trình con thực sự truy cập tệp chứ không phải tạo bản sao khác Ví dụ Thủ tục TaoTep dới đây sẽ tạo... End; Procedure Proc2( ); Begin Proc1( ); Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 124 Lập trình bằng Turbo Pascal End; Trong tình huống ny sẽ có lỗi cú pháp khi gặp lời gọi Proc2 vì trình biên dịch cha biết đợc Proc2 l cái gì Dù đặt thủ tục no lên trớc thì cũng vẫn mắc lỗi Turbo Pascal cung cấp khả năng khai báo trớc bằng chỉ thị Forward Cần thêm một dòng khai báo nguyên mẫu của thủ tục Proc2 kèm chỉ... độc lập Một chơng trình lớn l cấu trúc phối hợp nhiều chơng trình con - Ngay cả khi chơng trình không phải l quá di thì việc tổ chức thnh các chơng trình con còn có tác dụng hỗ trợ, lm cho việc quản lý, gỡ rối, bảo trì tiện lợi v dễ dng hơn 1.2 Khai báo chơng trình con Trong Pascal các chơng trình con cần phải đợc khai báo v triển khai đầy đủ trớc khi có thể sử dụng Trong khung cấu trúc một chơng trình. .. chơng trình con Proc1 Program Prog000; Var a,b,c: V: Proc1; Var a1,b1,c1 V: Proc11; Var a11, b11,c11 V: Proc111; Var a111, b111,c111 Proc12; Var a12,b12,c12 Proc2; Var a2,b2,c2 V: Proc21; Var a21,b21,c21 Hình 10.1: Các chơng trình con lồng nhau Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 127 Lập trình bằng Turbo Pascal Câu hỏi v bi tập 1 Trình by các bớc công việc khi gặp một lời gọi thực hiện chơng trình . ĐHQG H nội 114 Lập trình bằng Turbo Pascal Chơng 10 Chơng trình con 1. Chơng trình con - Hàm và thủ tục 1.1 Tại sao cần sử dụng chơng trình con. - Trong một chơng trình có thể có. trình Pascal cần chỉ rõ biến tệp bây giờ l máy in. Write (LST, biểu thức 1, biểu thức 2 , , biẻu thức n ) ; Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 111 Lập trình bằng Turbo Pascal 5. . lỗi I/O chơng trình sẽ báo lỗi v dừng lại. Đây l chế độ mặc định. Nguyễn Đình Hoá, Viện CNTT - ĐHQG H nội 1 05 Lập trình bằng Turbo Pascal { $ I - }: tắt việc kiểm tra I/O. Chơng trình không