Giáo trình Pascal Phần I

40 1.1K 11
Giáo trình Pascal Phần I

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Giáo trình Pascal Phần I

Tổ Tin Học - Trường CĐSP Bến Tre Giáo trình Chủ biên: Võ Thanh Ân Hiệu đính bổ sung: Vương Đức Bình Bến Tre, 5-2008 Trang Tổ Tin Học - Trường CĐSP Bến Tre Lời ngỏ cho lần hiệu đính Tài liệu viết lần đầu giảng viên Võ Thanh Ân, theo yêu cầu Tổ môn CNTT, vào tháng năm 2004 Tài liệu viết trình bày mạch lạc, gọn nhẹ, dễ hiểu dùng để dạy cho lớp K2 CNTT Cho đến nhận thấy cần có số điều chỉnh bổ sung nhằm thích hợp với công tác giảng dạy như: Turbo Pascal, trình bày giảng viên Võ Thanh Ân, khơng cịn chạy tốt Windows XP Thay vào Borland Pascal chạy ổn định Dù Pascal gần ngôn ngữ bị phê phán nhiều giới lập trình viên yếu Chủ yếu khơng cho phép q tải cấu trúc liệu hàm Dù có so với Borland C++ vấn đề lập trình hướng đối tượng, song tính khúc chiết - mạch lạc sáng cú pháp ngơn ngữ, ngôn ngữ tốt để dạy cho người bắt đầu học lập trình Về mặt sư phạm có lẽ khó có ngơn ngữ tốt Cần nói tới Free Pascal, phiên miễn phí hồn tồn, giữ lại hầu hết cú pháp, từ khóa, thao tác Borland Pascal lại chạy ổn định Windows XP Kinh nghiệm cho thấy sinh viên Khoa năm qua, công tác tuyển sinh, có hạ thấp yêu cầu đầu vào Do buộc phải xem xét lại giáo trình viết để giúp cho người học - xuất phát điểm thấp – đạt chất lượng đầu theo yêu cầu Với lí đó, xem xét lại giáo trình giảng viên Võ Thanh Ân khơng cịn làm việc Tổ môn CNTT, định hiệu đính lại tài liệu Trên tinh thần tơn trọng tác giả ban đầu tài liệu này, chỗ có thêm vào hiệu đính tơi dùng màu chữ xanh dương đậm với font size nhỏ để phân biệt Tổ môn CNTT cảm ơn giảng viên Võ Thanh Ân cho phép tiếp tục dùng giáo trình mong giáo trình hiệu đính, phụ lục giúp cho sinh viên học tập hiệu Vương Đức Bình (Tháng 01/2008) Mục lục ( Phần 1) Trang Tổ Tin Học - Trường CĐSP Bến Tre Chương I: GIỚI THIỆU NGÔN NGỮ PASCAL VÀ BORLAND PASCAL 7.0 GIỚI THIỆU NGÔN NGỮ PASCAL .5 Ngôn Ngữ PASCAL .5 TURBO PASCAL SỬ DỤNG PASCAL 7.0 Khởi Động Turbo Pascal Các Thao Tác Thường Sử Dụng Trên Turbo Pascal .7 II.CÁC THÀNH PHẦN CƠ BẢN CỦA NGÔN NGỮ PASCAL .8 Bộ Chữ Viết – Từ Khoá – Tên Hằng – Kiểu – Biến Biểu Thức – Dấu Chấm Phẩy – Lời Giải Thích 10 Cấu Trúc Của Một Chương Trình Pascal 11 Chương II: CÁC KIỂU VÔ HƯỚNG CHUẨN VÀ CÁC CÂU LỆNH ĐƠN .12 CÁC KIỂU VÔ HƯỚNG CHUẨN 12 Các Kiểu Vô Hướng Chuẩn (Standard scalar types) 12 Một Số Phép Toán Trên Các Kiểu 12 CÂU LỆNH 14 Khái Niệm Về Một Câu Lệnh .14 Một Số Lệnh Đơn .15 Chương III: CÁC LỆNH CÓ CẤU TRÚC 18 LỆNH CẤU TRÚC RẼ NHÁNH 18 Dạng Không Đầy Đủ 18 Dạng Đầy Đủ .18 LỆNH CẤU TRÚC LỰA CHỌN 19 Dạng Không Đầy Đủ 19 Dạng Đầy Đủ 19 CÁC LỆNH VÒNG LẶP .20 Lệnh Lặp Với Số Lần Xác Định 20 Lệnh Lặp Với Số Lần Lặp Không Xác Định .23 Chương IV: CHƯƠNG TRÌNH CON 25 KHÁI NIỆM VỀ CHƯƠNG TRÌNH CON .25 HÀM (FUNCTION) .26 THỦ TỤC (PROCEDURE) 27 LỜI GỌI CHƯƠNG TRÌNH CON VÀ VẤN ĐỀ TRUYỀN THAM SỐ 28 HOẠT ĐỘNG CỦA CHƯƠNG TRÌNH CON KHI ĐƯỢC GỌI VÀ SỰ BỐ TRÍ BIẾN 30 VẤN ĐỀ TRUYỀN THAM SỐ KHI GỌI CHƯƠNG TRÌNH CON 30 TÍNH ĐỆ QUI CỦA CHƯƠNG TRÌNH CON .33 Chương 5: UNIT 38 KHÁI NIỆM VỀ UNIT 38 Khái Niệm Về Unit .38 Các Unit Chuẩn 38 THIẾT LẬP UNIT 39 Các Bước Tạo Một Unit .39 Ví dụ ứng dụng 40 Trang Tổ Tin Học - Trường CĐSP Bến Tre TẬP TIN TURBO.TPL 41 Trang Tổ Tin Học - Trường CĐSP Bến Tre Chương I: GIỚI THIỆU NGÔN NGỮ PASCAL VÀ BORLAND PASCAL 7.0 GIỚI THIỆU NGƠN NGỮ PASCAL Ngơn Ngữ PASCAL Vào đầu năm 1970 nhu cầu học tập sinh viên, giáo sư Niklaus Writh - Trường Đại Học Kỹ Thuật Zurich - Thụy Sĩ sáng tác ngơn ngữ lập trình cấp cao cho cơng tác giảng dạy sinh viên Ngôn ngữ đặt tên PASCAL để tưởng nhớ đến nhà toán học người Pháp Blaise Pascal Pascal ngơn ngữ lập trình có cấu trúc thể phương diện - Về mặt liệu: Ngồi kiểu liệu đơn giản cịn có kiểu liệu có cấu trúc Ta xây dựng kiểu liệu phức tạp từ kiểu liệu có - Về mặt câu lệnh: Từ câu lệnh đơn giản lệnh có cấu trúc ta xây dựng câu lệnh hợp thành - Về mặt chương trình: Một chương trình chia làm nhiều chương trình TURBO PASCAL Khi đời, Standart Pascal ngôn ngữ đơn giản, dùng để giảng dạy học tập, ưu điểm phát huy trở thành ngôn ngữ mạnh Từ Pascal chuẩn ban đầu, nhiều công ty phần mềm cải tiến với nhiều thêm bớt khác TURBO PASCAL sản phẩm hãng Borland dùng phổ biến giới ưu điểm như: tốc độ nhanh, cải tiến so với Pascal chuẩn phù hợp với yêu cầu người dùng TURBO PASCAL 4.0 trở có cải tiến quan trọng đưa khái niệm Unit để dịch sẵn Module đĩa, làm cho việc lập trình trở nên ngắn gọn, dễ dàng, chương trình viết dễ hiểu Từ phiên 5.5 (ra đời năm 1989) trở đi, Turbo Pascal có kiểu liệu hồn tồn kiểu Object cho phép đưa mã lệnh xen kẽ với liệu Ngồi cịn thư viện đồ hoạ phong phú với nhiều tính mạnh, ngơn ngữ lập trình cấp cao Delphi sử dụng cú pháp tương tự Turbo Pascal Turbo Pascal 7.0 phiên cuối Borland Sau phiên hãng Borland chuyển sang Pascal For Windows thời gian ngắn sản xuất DELPHI Turbo Pascal 7.0 hỗ trợ mạnh mẽ lập trình hướng đối tượng có nhược điểm bị lỗi “Devide by zero” tất máy có xung nhịp lớn 300 MHz Giải vấn đề có hai phương án: a Cập nhật file TURBO.TPL thư mục \BP\BIN b Sử dụng Free Pascal.1 Ngoài nên lưu ý Turbo Pascal chạy chế độ thực (real mode) nên chạy Windows XP hay khởi động lại máy Nên chạy Borland Pascal Khi Windows tạo môi trường DOS giả lập chạy chế độ đa nhiệm tiện lợi Gói phần mềm download miễn phí từ Internet (từ khóa: Free Pascal) hỏi chép từ Tổ môn CNTT Trang Tổ Tin Học - Trường CĐSP Bến Tre SỬ DỤNG PASCAL 7.0 Khởi Động Turbo Pascal Nếu máy tính cài đặt Turbo Pascal đĩa, ta khởi động chúng sau (Nếu máy tính chưa có, phải cài đặt Turbo Pascal sau thực thi được) - Từ MS-DOS: Đảm bảo thư mục hành vị trí cài đặt (hoặc dùng lệnh PATH) Turbo Pascal Ta đánh vào TURBO Enter - Từ Windows: Ta nên giả lập MS-DOS Mode cho tập tin TURBO.EXE Shortcut nó, không ta thực thi TURBO PASCAL chương trình khỏi Windows, trở MS-DOS Sau thoát Turbo Pascal ta phải đánh lệnh EXIT để khởi động lại Windows Cách giả lập sau: · Nhắp chuột phải lên tập tin TURBO.EXE Shortcut nó, chọn Properties · Chọn thẻ Program đánh check hình sau Click vào chọn hình Chọn OK hộp thoại, sau khởi động Turbo Pascal, hình soạn thảo sau khởi động TURBO PASCAL xuất Trang Tổ Tin Học - Trường CĐSP Bến Tre Cài đặt sử dụng Borland Pascal 7.0: Gói cài đặt Borland Pascal thường đặt thư mục BP70 Mở thư mục chạy file cài đặt INSTALL.EXE Làm theo hướng dẫn q trình cài đặt Thơng thường sau cài đặt xong, chương trình đặt C:\BP Hãy vào C:\BP\BIN để cập nhật lại file Turbo.tpl (Chép đè file tên thư mục \BP70\Huongdan\ lên file này) Thay chạy TURBO PASCAL (File thực thi: BP\BIN\Turbo.exe) tạo Shorcut chạy BORLAND PASCAL (File thực thi: BP\BIN\BP.exe) Các thao tác sử dụng Borland Pascal hoàn toàn giống với thao tác Turbo Pascal nói Các Thao Tác Thường Sử Dụng Trên Turbo Pascal Khi ta muốn tạo mở tập tin có đĩa ta dùng phím F3 Sau đưa vào tên vị trí tập tin Nếu tập tin tồn Turbo Pascal mở nội dung lên cho ta xem, tên tập tin chưa có Turbo Pascal tạo tập tin (với tên mà ta định) Khi muốn lưu lại tập tin ta dùng phím F2 Trước khỏi chương trình, ta nên lưu tập tin lại, chưa lưu chương trình hỏi ta có lưu tập tin lại hay không Nếu ta chọn Yes (ấn phím Y) chương trình lưu lại, chọn No (ấn phím N)chương trình khơng lưu Một số phím thông dụng TURBO PASCAL 7.0 Biểu tượng      Home End Pg Up Pg Down Del Back Insert F1 F2 F3 F4 F5 F6 F7 F8 F9 Tổ hợp Tên phím Enter Up Down Left Right Home End Page Up Page Down Delete BackSpace Insert F1 F2 F3 F4 F5 F6 F7 F8 F9 Alt + F9 Diễn giải Đưa trỏ xuống dòng Đưa trỏ lên dòng Đưa trỏ xuống dòng Đưa trỏ qua trái ký tư Đưa trỏ qua phải ký tự Đưa trỏ đầu dòng Đưa trỏ cuối dòng Lên trang hình Xuống trang hình Xố ký tự vị trí trỏ Xố ký tự trước trỏ Thay đổi chế độ viết xen hay viết chồng Gọi chương trình giúp đở Lưu tập tin lại Tạo mở tập tin Thực thi chương trình đến dịng chứa trỏ Phóng lớn cửa sổ Chuyển đổi cửa sổ Chạy dòng lệnh (hàm xem lệnh) Chạy dòng lệnh đơn Kiểm tra lỗi chương trình Biên dịch chương trình Trang Tổ Tin Học - Trường CĐSP Bến Tre Tổ hợp Tổ hợp Tổ hợp Tổ hợp Tổ hợp Tổ hợp Tổ hợp Tổ hợp Ctrl + F9 Ctrl + N Ctrl + Y Ctrl + K + B Ctrl + K + K Ctrl + K + C Ctrl + K + V Ctrl + K + Y Chạy chương trình Thêm dịng trước trỏ Xố dịng trỏ Đánh dấu đầu khối Đánh dấu cuối khối Sao chép khối Di chuyển khối Xoá khối Trong Borland Pascal thao tác khối đơn giản dễ sau: + Đánh dấu khối: SHIFT + (phím mũi tên) + Copy khối vào clipboard: CTRL+ Ins (phím Insert) + Dán khối (đã copy vào clipboard) vào vị trí mới: SHIFT+ Ins Tổ hợp Tổ hợp Ctrl + K + R Tổ hợp Tổ hợp Tổ hợp II Ctrl + K + W Ctrl + K + H Ctrl + F4 Alt + X Ghi khối lên đĩa thành tập tin (nội dung tập tin khối chọn) Xen nội dung tập tin (từ đĩa) vào sau vị trí trỏ Tắt/Mở đánh dấu khối Kiểm tra giá trị biến chạy chương trình Thốt khỏi chương trình CÁC THÀNH PHẦN CƠ BẢN CỦA NGƠN NGỮ PASCAL Bộ Chữ Viết – Từ Khoá – Tên Bộ chữ viết Bộ chữ ngôn ngữ Pascal gồm: · 26 chữ la tinh lớn: A, B, C… Z · 26 chữ la tinh nhỏ: a, b, c, … z · Dấu gạch _ (đánh vào cách kết hợp phím Shift với dấu trừ) · Bộ chữ số thập phân: 0, 1, 2, 3, 4, 5, 6, 7, 8, · Các ký hiệu toán học: +, -, *, /, =, , (, ) · Các ký hiệu đặc biệt: , : ; [ ] ? % @ \ | ! # $ { } · Dấu khoảng cách (khoảng trắng – Space) Từ khoá Các từ khoá từ dành riêng (reserved words) Pascal mà người lập trình sử dụng chúng chương trình để thiết kế chương trình Khơng dùng từ khố để đặt cho tên riêng tên biến, tên kiểu, tên hàm… Một số từ khoá Pascal gồm: Absolute And Array Begin Case Const External File For Forward Function Goto Mod Nil Not Object Of Or Trang Shr String Then To Type Unit Tổ Tin Học - Trường CĐSP Bến Tre Constructor Desstructot Div Do Downto Else End If Implementation In Inline Interface Interrupt Label Packed Procedure Program Record Repeat Set Shl Until Uses Var Virtual While With Xor a Tên Tên hay gọi danh biểu (identifier) dùng để đặt cho tên chương trình, hằng, kiểu, biến, chương trình con…tên chia thành loại - Tên chuẩn PASCAL đặt trước, chẳng hạn hàm số SIN, COS, LN,… số PI, kiểu INTEGER, BYTE, REAL… Tên người dùng tự đặt Dùng chữ cái, chữ số dấu gạch để đặt tên, phải tuân theo qui tắc: · Bắt đầu chữ “_” sau chữ chữ số · Lưu ý:  Khơng có khoảng trống tên  Khơng trùng với từ khố  Độ dài tối đa tên 127 ký tự, nhiên cần đặt cho tên gọn có ý nghĩa  Pascal không bắt lỗi việc đặt tên trùng với tên chuẩn, ý nghĩa tên chuẩn khơng cịn giá trị  Pascal khơng phân biệt chữ hoa chữ thường (case insensitive) từ khóa, tên chuẩn hay tên Ví dụ “BEGIN” hay “Begin” hay “BeGin” Tuy nhiên sinh viên nên tập thói quen viết cách thống tên tồn chương trình Điều giúp bạn tránh nhầm lẫn gây tốn chuyển sang lập trình ngơn ngữ có phân biệt chữ hoa chữ thường (case sensitive) ngôn ngữ C Hằng – Kiểu – Biến Hằng (Constant) Hằng đại lượng khơng đổi q trình thực chương trình Có hai loại chuẩn người dùng định nghĩa - Hằng chuẩn Pascal định sẵn, ví dụ số PI, số màu RED=4,… Người sử dụng không cần định nghĩa lại thấy không cần thiết Các Pascal định nghĩa sẵn Unit Cần tham khảo hướng dẫn (help) Unit để biết Unit có định nghĩa - Hằng người dùng định nghĩa thông qua việc khai báo Cú pháp: CONST = ; [ = ;] Ví dụ: Const A = 50; Ch = ‘K’; Trang Tổ Tin Học - Trường CĐSP Bến Tre D = true; Kiểu Một kiểu liệu tập hợp giá trị mà biến thuộc kiểu nhận tập hợp phép tốn áp dụng giá trị Có hai loại kiểu kiểu chuẩn kiểu người dùng định nghĩa - Kiểu chuẩn kiểu Pascal định nghĩa sẵn: REAL, INTEGER, CHAR… Kiểu người lập trình định nghĩa thơng qua việc khai báo kiểu Cú pháp: TYPE Ví dụ: TYPE = ; [ = ;] NguyenDuong = MaxInt; MaTran = [1 10,1 10] of Integer; Biến Biến ô nhớ nhớ máy tính, giá trị biến thay đổi trình thực chương trình, biến giải phóng (thu hồi nhớ) chương trình kết thúc Chương trình quản lý biến thơng qua tên biến biến tương ứng với kiểu liệu định Biến trước sử dụng phải khai báo Cú pháp: VAR Ví dụ: VAR []: ; [[]: ;] a, b, c: Integer; X, Y: Real; I, J: NguyenDuong; {Đã định nghĩa trước} Biểu Thức – Dấu Chấm Phẩy – Lời Giải Thích Biểu thức Là phần câu lệnh bao gồm hằng, biến, hàm liên kết với phép toán dấu ngoặc đơn ( ) Ví dụ: (-b + sqrt(delta))/(2*a) Thứ tự thực phép toán biểu thức sau: o Các thành phần cặp ngoặc thực trước tới thành phần cặp ngoặc phía ngồi o Các phép tốn nhân (*) chia (/) (có mức ưu tiên) thực trước so với phép toán cộng (+) trừ (-) (có mức ưu tiên) Ví dụ (x*y –z) phép nhân thực trước phép trừ o Nếu hai phép tốn liên tiếp có mức ưu tiên thứ tự thực từ trái qua phải Ví dụ (x*y/z) phép nhân thực trước.2 Lưu ý: Trong lập trình hai biểu thức (x*y/z) (x/z*y) khơng phải cho kết Trang 10 Tổ Tin Học - Trường CĐSP Bến Tre HÀM (FUNCTION) Hàm chương trình tính tốn trả cho ta giá trị kiểu vô hướng Cấu trúc hàm sau: FUNCTION [(:[;: ])]: ; (Header) [VAR :[;: ]] Khai báo biến cục có BEGIN Thân hàm END; · · · Tên hàm danh biểu, phải tuân thủ theo qui tắc đặt danh biểu đề cập chương I Một hàm khơng có có nhiều tham số Trong trường hợp có nhiều tham số có kiểu liệu ta viết chúng cách dấu , (phẩy) Ngược lại, tham số hình thức khác kiểu phải cách dấu ; (chấm phẩy) KiểuKQ kiểu vơ hướng, phản ảnh kiểu giá trị mà hàm trả lại sau chạy xong Ví dụ, ta khai báo hàm sau: FUNCTION TEST(x,y:Integer; z:Real): Real; Đây hàm có tên TEST, với tham số, x y thuộc kiểu Integer, z thuộc kiểu real, hàm trả kết kiểu real · · Trong hàm, ta sử dụng hằng, kiểu, biến dùng riêng nội hàm Thông thường mục đích sử dụng hàm để lấy trị trả cần lưu ý gán kết cho tên hàm thân hàm Ví dụ 1: Ta xây dựng hàm DT truyền tham số vào bán kính hình trịn, hàm trả diện tích hình trịn Program TinhDienTich; Uses Crt; VAR BanKinh: real; Ch: Char; { } Function DT(Radius:Real):Real; Begin DT := PI * Radius* Radius; End; { } Begin Trang 26 Phép gán để trả giá trị cho tên hàm Tổ Tin Học - Trường CĐSP Bến Tre Clrscr; Repeat Write(‘Nhập bán kính: ’); Readln(BanKinh); Writeln(‘Diện tích hinh tron tuong ung: ‘ ,DT(Bankinh):0:2); Writeln; Write(‘Tiếp tục (C/K)? ’); Repeat ch:=readkey; Until Upcase(ch) in [‘C’,’K’]; Until UpCase(Ch) = ‘K’; {Lưu ý: ‘K’ in hoa} End Ví dụ 2: Program TinhGiaithua; USES CRT; Var Num:longint; Ch:char; X,Y:byte; { -} Function GiaiThua(m: longint): longint; Var Tam, Dem:Longint; BEGIN IF (M=0); Writeln(M,’! = ’,GiaiThua(Num)); REPEAT Write(‘Tinh nua khong ? (C/K) :’); CH:=READKEY; UNTIL Upcase(Ch) in [‘C’,’K’]; Writeln(Ch); UNTIL Upcase(Ch)=’K’; Readln END THỦ TỤC (PROCEDURE) Cấu trúc thủ tục sau: PROCEDURE (:[;: ]): ; Trang 27 (Header) Tổ Tin Học - Trường CĐSP Bến Tre [VAR :[;: ] Khai báo biến cục có BEGIN Thân tục thủ END; Như cấu trúc thủ tục tương tự cấu trúc hàm Chỉ có hai điều khác: - Header khóa Procedure thay Function - Khơng có câu lệnh gán thân Procedure Ví dụ: Thủ tục INSO sau in số từ đến giá trị biến truyền vào Với n tham số thực tế, So tham số hình thức Program TEST; Var n: Integer; { -} Procedure INSO(So: Integer); Var i: Integer; Begin For i := to So Write( i:10 ); End; { Chương trình } Begin Write(‘Nhập số lớn không: ’); Readln(n); INSO( n ); Readln; End LỜI GỌI CHƯƠNG TRÌNH CON VÀ VẤN ĐỀ TRUYỀN THAM SỐ Một chương trình gồm chương trình nhiều chương trình Kèm theo biến, tham số khai báo vị trí khác chương trình Khả từ vị trí chương trình “nhìn thấy” chương trình con, biến khai báo quan trọng Mặt khác làm việc theo nhóm, chương trình con, modune khác chương trình nhiều người, nhiều nhóm lập trình khác thực Khi khả xảy nhóm khác dùng tên biến, tên hàm, tên thủ tục cho mục đích Trang 28 Tổ Tin Học - Trường CĐSP Bến Tre khác lớn Vì ngồi khả “nhìn thấy”, chương trình cần có chế cấu trúc cho “che khuất” biến cần thiết Phần sau đây, nhằm mục đích đó, nghiên cứu khái niệm liên quan đến “tầm vực “ biến chương trình (con) hiệu ứng lề (side effect) xảy KHỐI (block): Một khối Header (PROGRAM | FUNCTION | PROCEDURE) khối từ khóa END (END END;) thân chương trình/chương trình tương ứng Minh họa: PROGRAM ProgName; VAR a,b: type1; x:type2 PROCEDURE Proc1(t,h:type1; Var k:type2); VAR x,y Begin …… …… End; PROCEDURE Proc2 Var q FUNCTION func1(r:type): type; Var x Begin …… …… End; BEGIN …… …… END; BEGIN …… …… END Trong minh họa ta có khối ứng với chương trình chính, khối ứng với Procedure Proc1, Procedure Proc2, Function func1, Proc1 Proc2 hai khối cấp, func1 khối khối Proc2 TẦM VỰC: Tầm vực biến hay chương trình phạm vi mà biến chương trình nhìn thấy chương trình (ie: gọi biến Trang 29 Tổ Tin Học - Trường CĐSP Bến Tre chương trình đó) Tầm vực biến hay chương trình chỗ khai báo khối hết khối mà khai báo đó, kể khối trừ khối có khai báo lại biến chương trình đó.8 Theo qui định trên, Và áp dụng cho hình minh họa trước ta thấy: - Các biến a,b biến tồn cục gọi nới đâu chương trình - Biến x chương trình gọi đâu chương trình trừ PROCEDURE Proc1 FUNCTION func1vì procedure/function có khai báo lại biến x Trong thân procedure/function gọi x ta gọi đến biến x cục khơng phải biến x tồn cục - Các biến t,h,k y gọi Proc1 mà - Biến x gọi Proc1 biến cục riêng mà thơi - Biến q gọi Proc2 func1 mà thơi Biến r gọi Func1 mà Biến x gọi func1 biến cục riêng func1, khơng liên quan đến biến x khai báo chương trình Proc1 - Procedure Proc1 gọi Proc2, Func1 chương trình Trong Procedure Proc1 dĩ nhiên, theo qui định này, gọi (Đây trường hợp gọi đệ qui mà ta nghiên cứu sau) - Proc2 gọi chương trình chính, Func1 Proc1 khơng thể gọi Proc2 - Func1 gọi bới Proc2 - Proc1 chương trình khơng thể gọi Func1 - Có ngoại lệ: Chương trình khơng thể gọi HOẠT ĐỘNG CỦA CHƯƠNG TRÌNH CON KHI ĐƯỢC GỌI VÀ SỰ BỐ TRÍ BIẾN - Khi chương trình chương trình gọi biến, “tên” chương trình bố trí vùng nhớ gọi STACK Khi chương trình gọi biến tồn cục bố trí vào stack tồn lúc chấm dứt chương trình Khi chương trình gọi biến khai báo tham số sau từ khóa VAR (của nó) bố trí vào stack giải phóng chương trình chấm dứt Điều có lợi cho phép ta sử dụng vùng nhớ hợp lí Người ta dùng biến toàn cục tốt để tránh lỗi (trong thời gian chạy) làm tràn stack (Stack overflow error) VẤN ĐỀ TRUYỀN THAM SỐ KHI GỌI CHƯƠNG TRÌNH CON Khi gọi chương trình (thủ tục hay hàm) ta phải theo qui định sau đây: · - Nếu chương trình có qui định tham số phải truyền giá trị biến cho tham số · - Phải truyền đủ số tham số.9 · - Phải truyền kiểu liệu theo thứ tự tham số khai báo Để hiểu rõ cách Pascal xử lí việc truyền tham số cần xem qua ví dụ sau đây: - Program ParameterPassing; Qui định tầm vực qui định riêng ngôn ngữ Mỗi học ngôn ngữ sinh viên cần tham khảo qui định vê tầm vực riêng ngơn ngữ Có điều khó chịu Pascal cho phép “quá tải” tham số thủ tục “bản thân” thủ tục Write, Writeln Chúng ta gọi Writeln(‘Mot tham so’) hay Writeln(‘Tham so thu nhat’,’Tham so thu hai’) điều lại khơng cho phép chương trình viết bới người dùng! Trang 30 Tổ Tin Học - Trường CĐSP Bến Tre Var a,b:byte; c:integer; { } Procedure TestVar (x,y,z: byte; Var t: integer); Var d: byte; Begin D:=4; {1} X:=X+D; B:=B+X; T:=T+D; {2} Writeln(‘Ben thu tuc:’); Writeln(‘A=’,a, ‘B=’,b,’C=’,c,’D=’,d,’X=’,x,’Y=’,y,’Z=’,z,’T=’,t); End; { } BEGIN A:=3; B:=5; C:=8; Writeln(‘Truoc goi thu tuc:’); Writeln(‘A=’,a, ‘ B=’,b,’ C=’,c); TestVar(a,5,c,c); Writeln(‘Sau goi thu tuc:’); Writeln(‘A=’,a, ‘ B=’,b,’ C=’,c); Readln; END - Quá trình chạy chương trình diễn biến nhớ sau: - * Trước gọi thủ tục: Cấp vùng nhớ cho biến toàn cục a,b,c - A=3 B=5 C=8 STACK Kết xuất chương trình: Truoc goi thu tuc: A=3 B=5 C=8 - * Trong thực thủ tục: · Cấp vùng nhớ cho biến cục x,y,z,t,d · Chuyển giao tham số: TestVar(a,5,c,c); Các tham số x,y,z gọi tham trị Việc chuyển giao giá trị cho tham số thực trị biến, giá trị chuyển giao COPY vào ô nhớ tương ứng biến Các nhớ ứng với x,y,z có giá trị 3,5,8 Tham số T khai báo sau từ khóa VAR gọi tham biến Việc chuyển giao tham số thực biến Ở ta chuyển giao biến C cho vị trí tham số T Pascal không copy giá trị biến C vào ô nhớ ứng với T mà tạo “con trỏ” để trỏ C, thao tác T thực ô nhớ C Biến D khởi tạo (lần đầu) Trang 31 Tổ Tin Học - Trường CĐSP Bến Tre STACK A=3 y=5 B=5 z=8 C=8 T= (Trỏ C) x=3 d=0 Sau dòng lệnh {1} {2} thủ tục nhớ là: STACK A=3 Y=5 B=5+(3+4) z=8 C=8+4 T= (Trỏ C) x=3+4 d=4 Kết xuất chương trình chạy đến câu lệnh cuối thủ tục là: Truoc goi thu tuc: A=3 B=5 C=8 Ben thu tuc: A=3 B=12 C=12 D=4 X=7 Y=5 Z=8 T=12 - * Sau thực thủ tục: Thu hồi vùng nhớ cấp cho thủ tục: A=3 B=5+(3+4) C=8+4 STACK Kết xuất chương trình chạy đến câu lệnh cuối là: Truoc goi thu tuc: A=3 B=5 C=8 Ben thu tuc: A=3 B=12 C=12 D=4 X=7 Y=5 Z=8 T=12 Sau goi thu tuc: A=3 B=12 C=12 ♥ Mấy vấn đề cần nhớ: Đối với tham trị chuyển giao trị biến Giá trị chuyển giao COPY vào nội dung ô nhớ biến tham trị Đối với tham biến chuyển giao biến Một trỏ trỏ biến chuyển giao, thao tác thực biến chuyển giao ♥ Và kết luận quan trọng: Sự thay đổi tham biến bên thủ tục làm thay đổi giá trị biến chuyển giao (Trường hợp biến C) Điều không xảy tham trị (Trường hợp biến A, thay đổi biến X không ảnh hưởng đến nội dung ô nhớ A) Sự thay đổi biến chuyển giao trường hợp tham biến gọi hiệu ứng lề (Side effect) Người lập trình phải lưu ý để phịng ngừa hiệu ứng lề ngồi mong muốn Trang 32 Tổ Tin Học - Trường CĐSP Bến Tre TÍNH ĐỆ QUI CỦA CHƯƠNG TRÌNH CON Như nói chương trình Pascal gọi Một lời gọi gọi lời gọi đệ qui (recursion) Gọi đệ qui kỹ thuật lập trình quan trọng thường ngắn gọn thường … phù hợp với suy nghĩ tự nhiên nhiều cách giải toán Thậm chí nhiều tốn dùng đệ qui Tuy nhiên xét tốc độ giải thuật tối ưu khơng gian nhớ đệ qui thường giải pháp tốt Người ta thường cố gắng khắc phục đệ qui cách dùng vịng lặp sử dụng stack cơng việc khơng dễ dàng Ví dụ 1: Định nghĩa giai thừa số nguyên không âm m sau:  if (m=0) or (m=1) m! =   m*(m-1)! if (m ≥ 2) Lập trình để tính giai thừa số ngun khơng âm nhập từ bàn phím Cách 1: Dùng đệ qui Function GT(m: Integer): Longint; Begin If ( m = ) or ( m = ) then GT := Else GT := m * GT( m-1 ); End; Rõ ràng cách viết đệ qui “phù hợp cách tự nhiên” với định nghĩa giai thừa Việc thực thi lời gọi đệ qui diễn tương tự sau: Ví dụ ta truyền vào giá trị m = 4, tức gọi GT(4) GT(4) m =  Tính * GT(4-1)  gọi GT(3) GT(3) m =  Tính * GT(3-1)  gọi GT(2) GT(2) m =  Tính * GT(2-1)  gọi GT(1) GT(1) m =  Gán GT(1):=1 Cuối q trình “tính ngược” cho phép trả giá trị GT(4): GT(4)  * (3 * (2 * GT(1))) Cách 2: Dùng vòng lặp Function GiaiThua(m: longint): longint; Var Tam, Dem:Longint; BEGIN IF (M ‘,Y); END; { } Procedure Doi(N:byte; A,B,C:Cot); {Dời N đĩa từ cọc A sang cọc C lấy cọc B làm trung gian} BEGIN IF (N>0) THEN Begin Doi(N-1,A,C,B); {Dời N-1 đĩa từ cọc A sang cọc B lấy cọc C làm trung gian} Chuyen(A,C); Doi(N-1,B,A,C); {Dời N-1 đĩa từ cọc B sang cọc C lấy cọc A làm trung gian} End; END; { } BEGIN Clrscr; Write(‘Cho biet so dia :’); Readln(Sodia); Writeln(‘Cac buoc thuc hien:’); Doi(Sodia,’A’,’B’,’C’); Writeln; Writeln(‘Thuc hien xong!’); READLN; END Nếu áp dụng chương trình cho trường hợp N=3 ta có q trình gọi đệ qui sau: Doi(1,A,B,C) Doi(2,A,C,B) Doi(0,A,C,B) Chuyen(A,C) Doi(0,B,A,C) Chuyen(A,B) Doi(1,C,A,B) Doi(1,B,C,A) Doi(3,A,B,C) Doi(0,C,B,A) Chuyen(C,B) Doi(0,A,C,B) Doi(0,B,A,C) Chuyen(B,A) Doi(0,C,B,A) Chuyen(A,C) Doi(2,B,A,C) Chuyen(B,C) Doi(1,A,B,C) Doi(0,A,C,B) Chuyen(A,C) Doi(0,B,A,C) Ví dụ cho thấy việc kết xuất câu lệnh Chuyen(X,Y) xảy toàn lời gọi đệ qui thực cho thấy thứ tự lời gọi đệ qui lần cuối Nhận xét quan trọng bạn viết thủ tục đệ qui lẽ bạn cần phải hình dung trước thứ tự kết xuất lời gọi đệ qui có nhiều nhánh Trang 37 Tổ Tin Học - Trường CĐSP Bến Tre Chương 5: UNIT KHÁI NIỆM VỀ UNIT Khái Niệm Về Unit Việc tạo chương trình chương trình làm cho việc lập trình đỡ vất vã nhiều Tuy nhiên, chương trình có tác dụng chương trình chứa chúng mà thơi, chương trình khác muốn sử dụng chương trình bắt buộc phải viết lại chúng, thời gian Để khắc phục, người ta gom chương trình thường sử dụng thành module độc lập biên dịch sẵn đĩa Sau đó, chương trình sử dụng lại chương trình mà khơng cần phải viết lại chúng Các module gọi UNIT Khái niệm Unit tạo từ version 4.0 Turbo Pascal Có hai loại UNIT Unit chuẩn Pascal tạo Unit người lập trình tự tạo để phục vụ riêng cho Các Unit Chuẩn Giới thiệu số Unit chuẩn - Unit CRT: Gồm hằng, kiểu, biến, hàm, thủ tục liên quan đến chế độ hình văn (TEXT mode) - Unit PRINTER: Gồm hằng, kiểu, biến, hàm, thủ tục liên quan đến chế độ in ấn qua cổng LPT1 (Connector DB25) - Unit GRAPH: Gồm hằng, kiểu, biến, hàm, thủ tục liên quan đến chế độ đồ họa - Unit DOS: Gồm hằng, kiểu, biến, hàm, thủ tục liên quan đến việc xử lí trực tiếp ghi, ngắt lời gọi đến hàm chức hệ điều hành MS-DOS Unit OVERLAY: Gồm hằng, kiểu, biến, hàm, thủ tục liên quan đến việc bố trí đoạn mã thực thi truy xuất đĩa (nạp/ nhã) thay đặt hết lúc vào nhớ chạy chương trình - Các Unit khác: SYSTEM, TURBO3, GRAPH 3… Unit phiên 3.0 sử dụng Khi muốn sử dụng Unit ta phải khai báo tên Unit đầu chương trình (trừ unit mặc định Pascal unit SYSTEM) với cú pháp - Cú pháp: USES [, ]; Một số hàm thủ tục hay dùng Unit CRT - ClrScr: Thủ tục xố hình - GotoXY(x, y: Byte): Dời trỏ tới vị trí cột x, dịng y hình Thơng thường, hình TextMode(Co80) có 25 dịng (từ dòng đến dòng 25) Trang 38 Tổ Tin Học - Trường CĐSP Bến Tre 80 cột (cột đến cột 80) Vậy toạ độ góc trái hình (1, 1), toạ độ góc phải (80, 25)10 - Delay(ms: Word): Thủ tục trì hỗn chương trình ms mili-giây - Sound(hz: Word): Thủ tục phát âm qua loa bên (internal speaker) với tần số hz - Nosound: Thủ tục ngừng phát âm - Keypressed: Hàm cho kết TRUE có phím ấn - Readkey: Hàm cho kết mã ASCII ký tự phím ấn - TextBackGround(color: Byte): Thủ tục chọn màu Ta đặt màu cho tồn hình cách đặt lệnh vừa trước lệnh ClrScr - TextColor(color: Byte): Thủ tục chọn màu cho chữ Dưới danh sách màu mà Pascal định sẵn · Black = Đen · Blue = Xanh dương · Green = Xanh lục · Cyan = Xanh trứng sáo · Red = Đỏ · Magenta = Tím cánh sen · Brown = Nâu · LightGray = Xám sáng · DarkGray = Xám tối · LightBlue = Xanh dương sáng · LightGreen = 10 Xanh lục sáng · LightCyan = 11 Xanh trứng sáo sáng · LightRed = 12 Đỏ sáng · LightMagenta = 13 Tím cánh sen sáng · Yellow = 14 Vàng · White = 15 Trắng (8 trị từ Black đến LightGray áp dụng cho màu chữ lẫn màu Các trị lại áp dụng cho màu chữ) Unit CRT thiết lập biến hệ thống TextAttr để xác định chế độ màu hình văn Ví dụ để thiết lập hình có màu chữ xanh lục sáng xanh da trời ta thiết lập câu lệnh gán: TextAttr:=LightGreen+16*Blue; THIẾT LẬP UNIT Các Bước Tạo Một Unit Bước Tạo tập tin Pascal có PAS có cấu trúc trình bày đây, lưu ý tên unit phải trùng với tên tập tin 10 Hiện hình TextMode giả lập Windows chạy Borland Pascal thiết lập mặc định tới 80 cột 50 dòng Sinh viên phải thử cụ thể hình Một số hình LCD wide screen cho số cột lớn hơn! Hầu projector hỗ trợ chế độ văn Cần cẩn thận lập trình để hiển thị (cuối cùng) projector Trang 39 Tổ Tin Học - Trường CĐSP Bến Tre UNIT ; INTERFACE {Tên unit bắt buộc phải trùng với tên tập tin} {Khơng có dấu ; đây} {Đây phần giao diện Unit Trong phần khai báo unit có mà unit sử dụng, khai báo hằng, kiểu, biến mà chương trình khác sử dụng Khai báo hàm, thủ tục mà chương trình khác gọi tới, khai báo tên chương trình con, tham số, kiểu kết Những hàm, thủ tục thiết lập phần sau mà khơng khai báo phần chương trình khác khơng gọi tới được.} IMPLEMENTATION {Khơng có dấu ; đây} {Đây phần thực hàm, thủ tục khai báo phần Interface Trong phần có chương trình dùng riêng bên Unit mà không khai báo phần Interface, chương trình khơng thể truy cập người dùng Unit.} BEGIN {Phần chứa câu lệnh thực thi trước câu lệnh chương trình gọi Unit thực Phần khơng bắt buộc phải có, nhiên trường hợp phải giữ lại từ khóa “END.” đây.} END Bước Unit khơng thiết kế để chạy mà để biên dịch đặt lên đĩa nên ta nhấn CTRL+F9 mà làm theo trình tự sau:  Chọn menu Compile (Alt + C)  Tiếp tục chọn Destination để chuyển thành Disk Lưu ý: Destination Disk tạo unit lên đĩa, Memory tạo unit lên nhớ RAM  Chọn lại menu Complie chọn tiếp chức Complie (Alt + F9) Lúc đĩa xuất tập tin tên unit ta tạo với phần mở rộng TPU Kể từ đây, ta sử dụng unit cách gọi câu lệnh USES nói Ví dụ ứng dụng Dưới chương trình tạo unit đơn giản có hàm HamMu để tính a mũ n (an), GiaiThua để tính n giai thừa (n!) USCLN để tính ước số chung lớn hai số nguyên không âm Unit MyUnit; {Trùng tên với tập tin MyUnit.pas} INTERFACE Function HamMu(a: Real; n: Integer): Real; Function GiaiThua(n: Integer): Longint; Trang 40 ... ph? ?i viết l? ?i chúng Các module g? ?i UNIT Kh? ?i niệm Unit tạo từ version 4.0 Turbo Pascal Có hai lo? ?i UNIT Unit chuẩn Pascal tạo Unit ngư? ?i lập trình tự tạo để phục vụ riêng cho Các Unit Chuẩn Gi? ?i. .. Trong lập trình nhiều lúc cần ph? ?i đưa vào l? ?i gi? ?i thích, nhằm diễn gi? ?i cơng việc mà đoạn chương trình thực hiện, làm cho ngư? ?i đọc chương trình dễ hiểu Dĩ nhiên, việc thêm l? ?i gi? ?i thích khơng... vào tập tin thư viện : Để lo? ?i Unit UnitName kh? ?i tập tin thư viện : Để trích Unit UnitName kh? ?i tập tin thư viện Bạn cần cẩn thận lo? ?i Unit kh? ?i tập tin thư viện Để an

Ngày đăng: 18/08/2012, 08:59

Hình ảnh liên quan

· Chọn thẻ Program và đánh check như hình sau. - Giáo trình Pascal Phần I

h.

ọn thẻ Program và đánh check như hình sau Xem tại trang 6 của tài liệu.
Chọn OK trên các hộp thoại, sau đó khởi động Turbo Pascal, màn hình soạn thảo sau khi khởi động TURBO PASCAL như dưới đây xuất hiện. - Giáo trình Pascal Phần I

h.

ọn OK trên các hộp thoại, sau đó khởi động Turbo Pascal, màn hình soạn thảo sau khi khởi động TURBO PASCAL như dưới đây xuất hiện Xem tại trang 6 của tài liệu.
Chương II: CÁC KIỂU VÔ HƯỚNG CHUẨN VÀ CÁC CÂU LỆNH ĐƠN - Giáo trình Pascal Phần I

h.

ương II: CÁC KIỂU VÔ HƯỚNG CHUẨN VÀ CÁC CÂU LỆNH ĐƠN Xem tại trang 12 của tài liệu.
2. Char 1 byte 256 ký tự của bảng mã ASCII. - Giáo trình Pascal Phần I

2..

Char 1 byte 256 ký tự của bảng mã ASCII Xem tại trang 12 của tài liệu.
CLRSCR; {Xóa màn hình} - Giáo trình Pascal Phần I

a.

màn hình} Xem tại trang 14 của tài liệu.
Lệnh viết dữ liệu ra màn hình - Giáo trình Pascal Phần I

nh.

viết dữ liệu ra màn hình Xem tại trang 16 của tài liệu.
Lưu đồ cú pháp (hình bên) Ví dụ: - Giáo trình Pascal Phần I

u.

đồ cú pháp (hình bên) Ví dụ: Xem tại trang 18 của tài liệu.
Ví dụ: Viết chương trình nhập vào một tháng, sau đó in lên màn hình tháng đó có bao nhiêu ngày. - Giáo trình Pascal Phần I

d.

ụ: Viết chương trình nhập vào một tháng, sau đó in lên màn hình tháng đó có bao nhiêu ngày Xem tại trang 19 của tài liệu.
Ví dụ: Viết chương trình nhập vào một tháng, sau đó in lên màn hình tháng đó có bao nhiêu ngày. - Giáo trình Pascal Phần I

d.

ụ: Viết chương trình nhập vào một tháng, sau đó in lên màn hình tháng đó có bao nhiêu ngày Xem tại trang 19 của tài liệu.
Ví dụ 1: Ta xây dựng hàm DT truyền tham số vào là bán kính của hình tròn, hàm này sẽ trả về diện tích của hình tròn đó. - Giáo trình Pascal Phần I

d.

ụ 1: Ta xây dựng hàm DT truyền tham số vào là bán kính của hình tròn, hàm này sẽ trả về diện tích của hình tròn đó Xem tại trang 26 của tài liệu.
80 cột (cột 1 đến cột 80). Vậy toạ độ góc trên trái của màn hình là (1, 1), toạ độ góc dưới phải là (80, 25)10. - Giáo trình Pascal Phần I

80.

cột (cột 1 đến cột 80). Vậy toạ độ góc trên trái của màn hình là (1, 1), toạ độ góc dưới phải là (80, 25)10 Xem tại trang 39 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan