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