Chươ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
20 trang |
Chia sẻ: phuongt97 | Lượt xem: 433 | Lượt tải: 0
Nội dung tài liệu Giáo trình môn học Nhập môn tin học - Phần IV: Ngôn ngữ lập trình Pascal 2 - Đào Tăng Kiệm, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
For i:= 1 to n Do
Begin
Write ( ‘ A[ ’ , i , ’ ] ’ ); Readln ( A[i] ) {Nhap du lieu vao bo nho trong}
Write (f, a[i] :6:1 ); {Nhap du lieu vao tệp}
End; Close (f)
VI. Lấy dữ liệu ra từ tệp
Để lấy các dữ liệu ra từ tệp, chúng ta sử dụng lệnh Read và có thể kết hợp với các lệnh khác
của Pascal.
Cấu trúc lệnh:
READ[LN] ( Biến_tệp, Danh sách biến) ;
READ[LN] ( Biến_tệp) ;
- Cách sử dụng lệnh cũng như lệnh Read thông thường, chỉ khác là có thêm biến tệp để
chương trình nhận biết dữ liệu sẽ được lấy ra từ tệp nào (địa chỉ).
- Lệnh Readln (f) dùng để bỏ qua 1 dòng dữ liệu hoặc chuyển con trỏ xuống dòng
dưới.
- Cách lấy dữ liệu ra từ tệp phải hoàn toàn giống cách tạo ra chúng.
- Gặp lệnh Read, chương trình sẽ tuần tự đọc các dữ liệu trong tệp và gán cho các biến
tương ứng trong danh sách của lệnh. Các dữ liệu khác nhau trong 1 dòng lệnh của tệp
được nhận biết qua ít nhất một ô trống. Các dữ liệu viết liền nhau, chương trình coi
như một dữ liệu.
- Các giá trị lấy ra từ tệp có thể gán cho các biến bất kỳ, với tên bất kỳ (không nhất
thiết cùng tên với các biến đã cất nó vào tệp). Tuy nhiên kiểu và cấu trúc của dữ liệu
trong tệp phải khớp với các biến nhận giá trị.
Ví dụ: Đọc các dữ liệu của véc tơ A có n phần tử từ tệp có tên là Bai1.txt đặt tại ổ
đĩa D.
Assign ( f, ’D:Bai1,txt’);
Reset ( f ); Writeln ( ’ Lay du lieu tu tep gan cho cac phan tu cua A ’);
For i:= 1 to n Do
Read (f, a[i] );
Close (f);
Ví dụ: Tạo tệp để cất dữ liệu cho ma trận A(mxn) và sau đó mở tệp lấy dữ liệu ra và
cất vào ma trận B(m1xn1):
Program Tao_Tep_LayDL_tu_tep;
Var n,m,i,j:integer;
n1, m1:integer;
a, b: array[1..10,1..15] of real;
f: text; Ttep, ten2: string[20];
BEGIN
Write( ' Nhap ten tep cat du lieu ');
Readln ( Ttep);
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal -2 GVC: Đào Tăng Kiệm
Bộ môn Tin học Xây dựng 14
Assign (f, Ttep);
Rewrite (f);
Write ('Nhap kich thuoc ma tran A n,m=? ');
Readln (n,m);
Writeln (f, n:5,m:5);
for i:=1 to n do
for j:=1 to m do
begin
write ( 'a[',i,',',j,']=?' );
readln ( a[i,j] )
end;
{ In ma tran A len man hinh va cat vao tep }
Writeln;
Writeln ( ' Ma tran A truoc khi cat vao tep ' );
for i:=1 to n do
begin
for j:=1 to m do write ( a[i,j]:10:2 );
writeln;
for j:=1 to m do write ( f, a[i,j]:10:2 );
writeln ( f );
end;
close ( f );
write (' Nhap ten tep cab lay du lieu' ); Readln ( ten2 );
Assign ( f, ten2);
Reset ( f );
Writeln;
Writeln ( ' Cac du lieu lay ra tu tep ' );
Readln ( f, n1, m1); writeln;
Writeln ( 'n= ',n1:3,' m= ',m1:3);
Writeln ( ' Ma tran A sau khi lay tu tep ' ); writeln;
for i:=1 to n1 do
begin
for j:=1 to m1 do read (f, b[i,j] );
readln ( f );
end;
close (f) ; { sau khi doc du lieu tu tep In na tran B len man hinh }
for i:=1 to n1 do
begin
for j:=1 to m1 do write ( b[i, j]:10:1 );
writeln;
end;
readln
END.
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal -2 GVC: Đào Tăng Kiệm
Bộ môn Tin học Xây dựng 15
Chương 6. MỘT SỐ VÍ DỤ TỔNG HỢP
Bài 1 : Cho một lớp học sinh, biết mã số SV, tên và điểm thi 3 môn của mỗi sinh viên. Viết
chương trình (cấu trúc dữ liệu kiểu bản ghi) tính điểm trung bình của từng người và sắp xếp
lại danh sách theo điểm trung bình tăng dần
Program Vi_du_Ban_ghi_Sapxep;
type sinhvien = record
masv:string[10];
tensv: string[30];
dt,dl,dh,dtb:real;
end;
var
temp:sinhvien;
sv:array[1..100] of sinhvien;
n, i, j: integer;
BEGIN
{Nhap du lieu n sinh vien}
write('Nhap so sinh vien:');
readln(n);
for i:=1 to n do
begin
writeln('Nhap thong tin cua sv thu ' , i);
write('Ma sv:'); readln(sv[i].masv);
write('Ten sv:'); readln(sv[i].tensv);
write('Diem toan:'); readln(sv[i].dt);
write('Diem ly:'); readln(sv[i].dl);
write('Diem hoa:'); readln(sv[i].dh);
sv[i].dtb := (sv[i].dt+sv[i].dl+sv[i].dh)/3;
end;
{in ra danh sach sinh vien vua nhap}
writeln;
writeln(' Danh sach sinh vien vua nhap');
writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB');
for i:=1 to n do
writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1,
sv[i].dtb:6:1);
{sap xep danh sach sinh vien theo diem trung binh tang dan}
for i:= 1 to n do
for j:=i+1 to n do
if (sv[i].dtb >sv[j].dtb) then
begin
temp:=sv[i];
sv[i]:=sv[j];
sv[j]:=temp;
end;
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal -2 GVC: Đào Tăng Kiệm
Bộ môn Tin học Xây dựng 16
{in ket qua sau danh sach sinh vien sau khi sap xep}
writeln;
writeln(' Danh sach sinh vien sap theo thu tu dtb tang dan');
writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB');
for i:=1 to n do
writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1,
sv[i].dtb:6:1);
readln;
END.
Bài 2 : Cho một véc tơ A có n phần tử,tính tổng các phần tử của mảng, tạo tệp để cất các
dữ liệu .
Program Mang_1_chieu;
var
i,n : Byte;
A : Array[1..50] of Real;
s : Real; tentep: string[10];
f : Text;
BEGIN
{Nhap mang}
Write('n = ');
ReadLn(n);
For i:=1 To n Do
Begin
Write('A[',i,']= ');
ReadLn(A[i]);
End;
{Tinh Tong Mang}
s:=0;
For i:=1 To n Do s:=s+A[i];
WriteLn('s = ',s:7:3);
WriteLn;
{Ra Mang}
WriteLn( ' Mang vua nhap ');
For i:=1 To n Do Write(A[i]:7:3);
WriteLn( ' Mang vua nhap ');
Write('Nhap ten tep cat du lieu'); ReadLn(tentep);
Assign(f,tentep);
ReWrite(f);
WriteLn(f,'s = ',s:7:3);
WriteLn(f);
{Ra Mang}
For i:=1 To n Do Write(f,A[i]:7:3);
WriteLn(f);
Close(f);
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal -2 GVC: Đào Tăng Kiệm
Bộ môn Tin học Xây dựng 17
WriteLn('Da xuat xong du lieu ra File ');
ReadLn;
END.
Bài 3 : Cho một lớp học sinh có n người, biết mã số SV, tên và điểm thi m môn của mỗi
sinh viên. Viết chương trình (cấu trúc dữ liệu kiểu bản ghi) tính điểm trung bình của từng
người và tách danh sách lớp thành 3 danh sách: những SV có DTB nhỏ hơn 5 từ 5-7,và
DTB >8.
Program Ban_ghi_Tao_danh_sach;
type sv=record
ms:integer;
ht:string[25];
d:array[1..20] of real;
dtb:real
end;
var n,m,n1,n2,n3,i,j,k:integer;
ds,ds1,ds2,ds3:array[1..30] of sv;
ttsv:sv;
t:real;
BEGIN
write('Nhap so nguoi n, somon m= '); readln(n,m);
for i:=1 to n do
begin
write('ms[',i,']=? '); readln(ds[i].ms);
write('ht[',i,']=? '); readln(ds[i].ht);
for j:=1 to m do
begin
write('d[',j,']=? '); readln(ds[i].d[j]);
end
end;
for i:=1 to n do
begin
t:=0;
for j:=1 to m do t:=t+(ds[i].d[j]);
ds[i].dtb:=t/m
end;
n1:=0; n2:=0; n3:=0;
for i:=1 to n do if ds[i].dtb<5 then
begin
n1:=n1+1;
ds1[n1]:=ds[i]
end else if ds[i].dtb<8 then
begin
n2:=n2+1;
ds2[n2]:=ds[i]
end else
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal -2 GVC: Đào Tăng Kiệm
Bộ môn Tin học Xây dựng 18
begin
n3:=n3+1;
ds3[n3]:=ds[i]
end;
writeln;
If n1 0 then
begin
writeln('1. DS SINH VIEN CO DTB<5:');
for i:=1 to n1 do writeln(ds1[i].ms:5,ds1[i].ht:15,ds1[i].dtb:10:1);
end;
writeln;
if n20 then
begin
writeln('2. DS SINH VIEN CO DTB: 5-7:');
for i:=1 to n2 do writeln(ds2[i].ms:5,ds2[i].ht:15,ds2[i].dtb:10:1);
end;
writeln;
if n30 then
begin
writeln('3. DS SINH VIEN CO DTB: 8-10:');
for i:=1 to n3 do writeln(ds3[i].ms:5,ds3[i].ht:15,ds3[i].dtb:10:1);
end;
writeln;
readln
END.
Bài 4 : Cho một ma trận A (nxm). Sắp xếp lại ma trận sao cho các phần tử trong từng hàng
tăng dần. Viết 3 chương trình con:một chương trình con nhập dữ liệu, 1 chương trình con
sắp xếp và 1 chương trình con in kết quả.
Program Chuong_trinh_con_sap_xep_ma_tran;
type k1=array[1..15,1..15] of real;
var n,m,i,j,k:integer;
a:k1;
c:real;
Procedure nhap;
begin
write('n,m=?');
readln(n,m);
for i:=1 to n do
for j:=1 to m do
begin
write('A[',i,',',j,']=?');
readln(a[i,j]);
end
end;
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal -2 GVC: Đào Tăng Kiệm
Bộ môn Tin học Xây dựng 19
Procedure 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}
Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal -2 GVC: Đào Tăng Kiệm
Bộ môn Tin học Xây dựng 20
BEGIN
{ 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.
Các file đính kèm theo tài liệu này:
- giao_trinh_mon_hoc_nhap_mon_tin_hoc_phan_iv_ngon_ngu_lap_tri.pdf