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

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

pdf20 trang | Chia sẻ: phuongt97 | Lượt xem: 361 | Lượt tải: 0download
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:

  • pdfgiao_trinh_mon_hoc_nhap_mon_tin_hoc_phan_iv_ngon_ngu_lap_tri.pdf
Tài liệu liên quan