Giáo trình Nhập môn tin học - Phần 3: Ngôn ngữ lập trình Pascal -2
Ở 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
ỉ 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.
File đính kèm:
Giáo trình Nhập môn tin học - Phần 3_Ngôn ngữ lập trình Pascal -2.pdf

