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

pdf20 trang | Chuyên mục: Pascal | Chia sẻ: dkS00TYs | Lượt xem: 2067 | Lượt tải: 4download
Tóm tắt nội dung Giáo trình Nhập môn tin học - Phần 3: Ngôn ngữ lập trình Pascal -2, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
ỉ 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:

  • pdfGiáo trình Nhập môn tin học - Phần 3_Ngôn ngữ lập trình Pascal -2.pdf