T ừ đó h ình thành ý tưởng xây dựng chương tr ình con là m ột mô đun độc lập, kết nối với chương tr ình chính và các ch ương tr ình con khác qua “ đầu vào ” và “ đầu ra ”, chia nh ỏ ch[r]
Trang 1TRƯỜNG ĐẠI HỌC XÂY DỰNG KHOA CÔNG NGHỆ THÔNG TIN
- -
GIÁO TRÌNH
PHẦN III – NGÔN NGỮ LẬP TRÌNH PASCAL -2
Giảng viên: ĐÀO TĂNG KIỆM
Bộ môn : TIN HỌC XÂY DỰNG
Hà nội 2012 -
Trang 2Chương 4 CHƯƠNG TRÌNH CON
I Khái niệm chung – đặc điểm
1 Khái niệm chung:
Ở những chương trước chúng ta mới làm quen với cấu trúc của chương trình chính, trong đó
để giải quyết một hoặc nhiều vấn đề, tất cả các lệnh đều nằm trong một chương trình và thực hiện các lệnh từ trên xuống dưới Với những bài toán lớn, theo cấu trúc này chương trình chính rất dài, cồng kềnh, khó kiểm soát và không thể phân chia cho nhiều nhóm thực hiện đồng thời một lúc
Từ đó hình thành ý tưởng xây dựng chương trình con là một mô đun độc lập, kết nối với
chương trình chính và các chương trình con khác qua “đầu vào” và “đầu ra”, chia nhỏ chức
năng và cấu trúc chương trình chính thành nhiều mô đun nhỏ, trong đó chương trình chính
là chương trình điều khiển quá trình tính toán của chương trình con
Trong những năm đầu khi bắt đầu xuất hiện ngôn ngữ lập trình, người ta chưa thiết lập được
cấu trúc Chương trình con Trong quá trình phát triển các ngôn ngữ đã có, cùng với nhu cầu
của người sử dụng, những tiện lợi mà chương trình con mang lại, sự phát triển các ngôn ngữ
đã có và khi xây dựng ngôn ngữ lạp trình mới đều hướng đến việc tổ chức chương trình con
Ưu điểm khi sử dụng cấu trúc chương trình con:
- Cấu trúc chương trình chính trở nên gọn, mạch lạc, dễ hiểu
- Không lặp lại các phần tương tự
- Vì là một mô đun độc lập, chương trình con có thể sử dụng nhiều lần trong một chương trình hoặc ở các chương trình khác nhau
- Dễ kiểm tra, theo dõi trong quá trình thử nghiệm
2 Đặc điểm của Chương trình con:
- Là một đơn vị chương trình độc lập, hoàn chỉnh, cũng bao gồm 3 phần: tên chương trình, phần khai báo và phần thân Chương trình con có thể giải quyết một vấn đề trọn vẹn và được sử dụng nhiều lần qua lời gọi nó trong chương trình chính
- Toàn bộ các Chương trình con đặt ở cuối phần khai báo trong chương trình chính
- Các biến trong chương trình con chỉ có tính chất cục bộ (chỉ có tác dụng trong bản thân chương trình đó) Trong chương trình con có thể sử dụng tất cả các lệnh như chương trình chính
- Thứ tự khai báo các chương trình con không quan trọng nếu các chương trình độc lập với nhau Khi các chương trình con gọi đến nhau thì phải xếp theo một trật tự nào đó nếu Ví dụ chương trình con A gọi đến chương trình con B thì B phải khai báo trước A
- Trong Pascal có 2 loại chương trình con: chương trình con dạng hàm (Function) và chương trình con dạng thủ tục (Procedurre)
- Chương trình con chỉ được tham chiếu đến nếu nó được gọi từ chương trình chính
Trang 3- Mỗi lần gặp lời gọi chương trình con, chương trình chính chuyển đến chương trình con và thực hiện chúng, sau khi thực hiện, nó quay trở về chương trình chính thực hiện câu lệnh ngay sau lời gọi chương trình con
Minh họa cấu trúc của chương trình chính và chương trình con:
Program Tên_chương_trình_chính;
Lebel – Const- Type
Var (Khai báo Các biến chung )
Các khai báo chung của CT chính
Function Tên_hàm ( Danh_sách_tham_số_hình thức) :
kiểu_hàm ;
{ Phần khai báo các biến cục bộ của hàm}
Begin
Các câu lệnh của chương trình con ạng hàm End;
Procedure Tên_Thủ_tục (Dsach_Tham_số_hình_thức);
{ Phần khai báo các biến cục bộ của thủ tục}
Begin
Các câu lệnh của chương trình con thủ tục;
End;
Khai báo các Chương trình con
-
Nội dung các chương trình con
Phần khai báo của chương trình chính
BEGIN
Các lệnh ;
Lời gọi chương trình con;
……
END
Phần thân của chương trình chính
II Thủ tục và hàm – cách khai báo
1 Hàm – Function: Chương trình con dạng hàm dùng để tính cho các hàm hoặc xử lý cho những bài toán chỉ tính và xuất một kết quả
Đặc điểm của chương trình con dạng hàm:
- Tên chương trình con là tên biến chứa kết quả
- Dùng cho các bài toán chỉ tính 1 kết quả
- Trong phần thân của chương trình con phải có một phép gán có chứa tên của CTC
- Lời gọi chương trình con hàm phải nằm trong thành phần của biểu thức hoặc phép gán
và kết quả của chương trình con được lấy ra từ đó
Cấu trúc chương trình con dạng hàm:
Function Tên_hàm ( Danh_sách_tham_số_hình thức) : kiểu_hàm ;
{ Phần khai báo các biến cục bộ của hàm}
Begin
Trang 4Các câu lệnh;
Tên_hàm:= Biểu_Thức
End;
Ví dụ: Để tính các hàm:
F1 = a.x + 5b x2 – (a+b) xy
F2 = (7.a-c).x + b2 2 + (a-b) xy
F3 = c.x + (a+c) x2 – (a2+b2) xy
F4 = (a/2).x + 5b x2 – 120.b xy
- Chúng ta nhận thấy các hàm có 1 cấu trúc giống nhau có thể tổng quát hóa qua công thức :
F= a1.x + a2 x2 +a3 xy
Trong đó a1, a2, a3 có các giá trị khác nhau trong các hàm F1, F4 Chúng ta thiết lập một chương trình con dạng Function để tính cho một hàm “đại diện”, và sau đó gọi chúng ra tính cho các hàm F1 F4 như sau:
- Chương tình con tính cho một hàm F bất kỳ:
thức
trùng với tên trong CT chính
Begin
F := a1* + a2* x2 +a3* x*y ;
Writeln ( ‘ Gia tri cua ham ’);
End;
Thân của chương trình con, tính cho hàm F bất kỳ và sau
đó in kết quả
- Để tính toán cho các hàm F1, F4 ta viết đoạn chương trình
chính sau:
BEGIN
Writeln (‘ Nhap du lieu ’);
Write ( ‘ Nhap cac gia tri a,b,c ’); Readln ( a,b,c);
Write ( ‘ Nhap cac gia tri x,y ’); Readln ( x,y);
Nhập dữ liệu cho chương trình chính
Writeln (‘ KET QUA ’);
F1:= F ( a, 5*b, - (a+b) ) ; Writeln (’F1= ’ , F1:8:2 );
F2:= F ( 7*a-c , sqr(b), (a-b) ) ; Writeln (’F2= ’, F2:8:2 );
F3:= F ( c, (a+c), - (a*a+b*b)) ; Writeln (’F3= ’ , F3:8:2 );
F4:= F ( a/2, 5*b, - 120*b ) ; Writeln (’F4= ’ , F4:8:2 );
Gọi 4 lần CTcon tính hàm, mỗi lời gọi tính cho một hàm,
ví dụ để tính F1 thay các tham
số hình thức bằng các tham số thực sự như sau: a1= a;
a2=5*b ;a3=a+b;
Readln ;
END
Trang 52 Thủ tục - Procedure:
Đặc điểm của thủ tục: có thể dùng để tính cho bài toán bất kỳ
- Tên của chương trình con là một tên bất kỳ, theo cách đặt tên của Pascal
- Thủ tục có thể tính và xuất cho nhiều kết quả
Cấu trúc chương trình con dạng thủ tục:
Procedure Tên_thủ_tục ( Danh_sách_tham_số_hình thức) ;
{ Phần khai báo các biến cục bộ của thủ tục}
Begin
Các câu lệnh;
End;
Ví dụ: Viết chương trình con nhập dữ liệu cho ma trận X bất kỳ có kích thước m hàng, n cột
Procedure Nhap_ma_tran ( Var m,n: integer; Var X :MT) ;
Var i,j :integer;
Begin
Write (' m, n = '); Readln (n,m);
for i:=1 to m do
for j:=1 to n do
begin
write (' X[', i, ',' , j ,']= ' ); readln (X [i,j]);
end
End;
Chú ý: trong tham số hình thức đối với mảng, không được khai báo trực tiếp, do vậy, để
khai báo cho X, trong chương trình chính phải mô tả trước kiểu, dùng lệnh Type ví dụ: Type MT=array[1 15,1 15] of real;
(Tham khảo thêm ví dụ của chương trình con trong các ví dụ tổng hợp ở phần sau)
3 Biến toàn cục và biến cục bộ:
Biến toàn cục (tổng thể) là các biến của chương trình chính, các biến thực sự của chương
trình và chỉ được đặt trong phần khai báo của chương trình chính
Biến cục bộ (đại phương) là các biến của chương trình con, nó chỉ có tác dụng trong chương
trình con Biến cục bộ cũng có thể dùng chung với biến toàn cục Khai báo biến cục bộ, có thể qua một trong số các vị trí trong chương trình:
- Đặt trong phần khai báo của chương trình con
- Khai báo qua các tham số hình thức
- Dùng chung với các biến toàn cục (tên phải giống nhau ở CT chính và CT con)
III Tham số
1 Tham số hình thức: Chương trình con có thể có tham số hoặc không có tham số
Việc truyền tham số là cách kiểm soát các dữ liệu vào/ ra chương trình con, dễ dàng
điều khiển các biến nằm ngoài và các trị liên quan đến chứng trong chương trình con
Trang 6Procedure XL;
begin
for i:=1 to n do
for j:=1 to m-1 do
for k:=j+1 to m do if a[i,j]>a[i,k] then
begin
c:=a[i,j];
a[i,j]:=a[i,k];
a[i,k]:=c
end
end;
Procedure IKQ;
begin
for i:=1 to n do
begin
for j:=1 to m do write(a[i,j]:12:2);
writeln
end
end;
{ Chuong trinh chinh}
BEGIN
nhap;
xl;
ikq;
readln
END
Bài 5 :
Bài 6 : Cho trước 2 tệp dữ liệu chứa các thông tin của sinh viên: tệp thứ nhất chứa các dữ liệu về
số thứ tự và tên của từng sinh viên; tệp thứ hai gồm các thông tin về số thứ tự, mã số sinh viên, năm sinh và điểm tốt nghiệp của từng sinh viên Viết chương trình Pascal để lấy các dữ liệu từ tệp sau
đó lập danh sách sinh viên giỏi ( có điểm tốt nghiệp >8) in trên màn hình
Program Lay_du_lieu_ra_tu_tep_da_co_va_Xu_ly;
Type
sv=record
tt:integer;
ht:string[15];
ms,ns,dtn:real;
end;
Var
i,n:integer;
tentep1,tentep2:string[10];
f1,f2:text;
ds:array[1 10] of sv;{ Mang chua cac du lieu cua hoc sinh}
Trang 7BEGIN
{ Doc du lieu tu tep thu nhat va cat vao mang danh sach co cau truc ban ghi}
write(' Dua vao ten tep chua du lieu - hoten ');
readln(Tentep1);
Assign (f1,tentep1);
Reset(f1);
i:=1;
readln(f1);
While not EOF(f1) Do
with ds[i] do
Begin
readln(f1,tt,ht);
i:=i+1;
end;
n:=i-1;
Close(f1);
{ Doc du lieu tu mang thu hai cat tiep vao mang truoc }
write(' Dua vao ten tep chua thong tin hoc sinh-thongtin ');
readln(tentep2);
Assign (f2,tentep2);
Reset(f2);
i:=1;
readln(f2);
While not EOF(f2) do
with ds[i] do
begin
readln(f2,tt,ms,ns,dtn);
i:=i+1;
End;
close(f2);
Writeln;
Writeln(' Danh sach day du ');
For i:=1 to n do with ds[i] do
writeln(tt:3,ht:15,' ',ms:6:0,' ',ns:6:0,' ',dtn:5:1);
Writeln;
Writeln ( ' DANH SACH SINH VIEN GIOI ');
For i:= 1 to n do
with ds[i] do
If dtn>=8 then
Writeln (tt:3,' ',ht:15,' ',ms:5:0,' ',ns:5:0,' ',dtn:5:1);
Readln
END