Ráp toàn bộ thủ tục INBIEU vào phần khai báo của chương trình trong ví
dụ 14.2, và thêm lệnh gọi INBIEU; vào cuối của thân của chương trình đó,
ta được một chương trình đầy đủ mà khi chạy sẽin biểu theo đúng yêu cầu.
Ngoài ra, để chương trình chính bớt rườm rà, ta đưa phần nhập dữ liệu
vào một thủ tục riêng gọi là NHAP, phần tính tổng gía thành các cuốn sách
vào một thủ tục riêng gọi là TINH, và phần tìm cuốn TIN HOC DAI
CUONG vào một thủ tục gọi là TIM. Trong chương trình chính ta chỉ phải
gọi tên các thủ tục đó ra mà thôi.
24 trang |
Chia sẻ: maiphuongdc | Lượt xem: 2716 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Pascal - Các ví dụ về bản ghi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CÁC VÍ DỤ VỀ BẢN GHI
Ví dụ 14.1:
Nhập một danh sách N ( 1 N 50) sinh viên gồm các trường: Họ tên, Mã
số, các điểm Toán, Lý.
Ðối với mỗi sinh viên, hãy tính điểm trung bình :
DTB=(Toan + Ly)/2 , và phân loại như sau:
Loại= Giỏi nếu DTB 9,
Khá nếu 7 DTB < 9,
Bình nếu 5 DTB < 7,
Kém nếu DTB < 5.
Sắp xếp danh sách theo trật tự giảm của DTB, in danh sách lên màn hình,
mỗi người trên một dòng gồm các mục: Số thứ tự, Họ tên, Mã số, điểm
Toán, Lý, DTB và phân loại.
Cho biết điểm Tóan cao nhất là mấy ?. Có bao nhiêu người được điểm cao
nhất đó ?.
Ðiểm trung bình môn Toán cho cả danh sách là bao nhiêu ?.
Bài giải :
Trong chương trình dưới đây, chỗ nào có ký hiệu ' ' thì hãy thay bằng một
ký tự trắng .
PROGRAM VIDU14_1;
Uses CRT;
Type
KSVIEN = RECORD
Hoten:String[18];
Maso, Loai : String[8];
Toan, Ly, DTB : Real;
End;
Var
DS : Array[1..50] of KSVIEN;
Z : KSVIEN;
N, i, j, Dem : Integer;
Max, TBToan: Real;
BEGIN
CLRSCR;
Repeat
Write(‘ Nhập số sinh viên N= ‘) ;
Readln(N);
Until ( N>0) and ( N < 51);
{ Nhập danh sach, tính DTB va phân loại }
For i:=1 to N do WITH DS[i] DO
begin
Write(‘Nhap ho ten sinh vien thu ‘,i,’ : ‘);
Readln(Hoten);
Write(‘Nhap ma so sinh vien thu ‘,i,’ : ‘);
Readln(Maso);
Write(‘Nhap điểm Toan, Ly sinh vien thu ‘,i,’ : ‘);
Readln(Toan, Ly);
DTB:=( Toan + Ly)/2;
If DTB >=9 then Loai:=‘Gioi’
else
if DTB >=7 then Loai:=‘Kha’
else
if DTB >=5 then Loai:=‘Binh’
else
Loai:=‘Kem’;
end;
{ Sắp xếp giảm theo DTB }
For i:=1 to N-1 do
For j:=i+1 to N do
if DS[i].DTB < DS[j].DTB then
begin
Z:=DS[i]; DS[i]:=DS[j]; DS[j]:=Z;
end;
Writeln(‘ In danh sach len man hinh ‘ );
Writeln(‘STT HO VA TEN MA SO ',
' TOAN LY DTB LOAI’);
For i:=1 to N do WITH DS[i] DO
Writeln(i:2, #32 , Hoten, #32 :19-Length(Hoten), Maso:8,
Toan:4:1,Ly:4:1, DTB:4:1, Loai:5);
{ Tìm điểm Toán cao nhất }
Max:=DS[1].Toan;
For i:=1 to N do
if Max< DS[i].Toan then Max:=DS[i].Toan;
Writeln(‘Diem Toan cao nhat = ‘, Max:4:1);
{ Ðếm số em có điểm Toán =Max}
Dem:=0;
For i:=1 to N do if DS[i].Toan =Max then Dem:=Dem+1;
Writeln(‘ Có ‘, Dem, ‘ em có điểm Toán= ‘, Max:4:1);
{ Tính điểm trung bình môn Toán cho cả danh sach }
TBToan:=0; { Lấy tổng điểm môn Toán}
For i:=1 to N do TBToan := TBToan + DS[i].Toan;
TBToan:=TBToan/N ;
Writeln(‘Diem trung binh mon Toan= ‘ , TBToan:6:2);
Readln;
END.
Chạy
Chép tập tin nguồn
Ví dụ 14.2:
Nhập một danh sách N (1 N 50) đầu sách gồ? các thông tin về Tên sách,
Số lượng (SL) và Ðơn gía (DG).
Với mỗi đầu sách, tính Gía tiền như sau:
GT = SL * DG nếu SL<10
= SL*DG - 5%*SL*DG nếu 10 SL<30
= SL*DG - 8%* SL*DG nếu 30 SL <50
= SL*DG - 10%* SL*DG nếu SL 50
(Tức là nếu mua từ 10 đến 29 cuốn thì được giảm 5% đơn gía, mua từ 30
đến 49 cuốn thì được giảm 8% đơn gía, mua từ 50 cuốn trở lên thì được
giảm 10% đơn gía).
Tính Tổng số tiền phải chi cho việc mua sách, kể cả 10% thuế gía trị gia
tăng đánh vào tổng gía tiền.
Tìm xem trong danh sách đó có cuốn "TIN HOC DAI CUONG" không.
Nếu có thì cho biết có bao nhiêu cuốn và đơn gía của nó.
Bài giải:
PROGRAM VIDU14_2;
Uses CRT;
Type
KSACH = RECORD
Tensach : String[20];
SL : Integer;
DG, GT: Real;
End;
Mang = Array[1..50] of KSACH;
Var
S : Mang;
Z : KSACH;
N, i : Integer;
Tongtien : Real;
BEGIN
Repeat
Write(‘ Nhập N: ‘);
Readln( N );
Until (N>0) and ( N<51);
{ Nhập N sách và tính tiền}
For i:=1 to N do With S[i] do
begin
Write(‘Nhập tên sách thứ ‘, i ,’: ‘);
Readln(Tensach);
Repeat
Write(‘Nhập Số lượng : ‘);
Readln(SL);
Until SL>0;
Write(‘Nhập đơn giá : ‘);
Readln(DG);
Case SL of
1..9 : GT:=SL*DG;
10..29 : GT:=SL*DG*(1-0.05);
30..49 : GT:=SL*DG*(1-0.08);
else GT:=SL*DG*(1-0.1);
end; { Hết Case}
end; { Hết For}
{ Tính tổng gía thành các đầu sách}
Tongtien:=0;
For i:=1 to N do Tongtien:=Tongtien+S[i].GT;
{ Cộng thêm thuế 10% gía tri gia tăng}
Tongtien:=Tongtien + 0.1*Tongtien ;
Writeln(‘Tổng tiền phải chi là: ‘, Tongtien :6:2);
{ Tìm cuốn ‘TIN HOC DAI CUONG’}
i:=1;
While (i ‘ TIN HOC DAI CUONG’) do
i:=i+1;
If i> N then writeln (‘ Không có cuốn THDC?‘)
else
WITH S[i] DO
writeln(‘ Sách THDC có ‘, SL:4, ‘ cuốn, đơn gía= ‘, DG:6:2);
Readln;
END.
Chạy
Chép tập tin nguồn
Ví dụ 14.3:
Sử dụng dữ liệu của ví dụ 2 viết thủ tục in danh sách các đầu sách lên mà
hình, trình bày thành biểu sau :
TỔNG KẾT TIỀN MUA SÁCH NĂM 1999
Giải:
Thủ tục INBIEU sau đây chứa một thủ tục con INCHITIET có nhiệm vụ
in chi tiết từng dòng cho từng cuốn sách .
Thân của thủ tục INBIEU là các lệnh in tiêu đề, sau đó là lời gọi thủ tục
INCHITIET.
Các dữ liệu phục vụ cho thủ tục này là các biến toàn cục được khai báo ở
chương trình chính trong ví dụ 14.2, đó là N và S.
Chỗ nào có ký hiệu thì hãy thay bằng một ký tự trắng. Nhắc lại rằng
#32 cũng là một ký tự trắng. Thủ tục in biểu được viết như sau:
PROCEDURE INBIEU;
Var
i: Integer ;
Procedure INCHITIET;
{ Thủ tục in chi tiết từng cuốn sách}
Var
i : Integer;
Begin
For i:=1 to N do WITH S[i] DO
begin
Write(‘| ‘ , i:3, #32);
Write(‘| ‘ , Tensach);
Write(#32: 21-Length(Tensach) );
Write(‘| ‘, SL:8, #32);
Write(‘| ‘, DG:8:2, #32);
Write(‘| ‘, GT:8:2, ‘ |’);
Writeln;
end;
For i:=1 to 63 do write(‘-’);
Writeln;
End; { hết in chi tiết}
Begin { Vào thủ tục Inbiểu }
{ In tiêu đe?}
Writeln(' TONG KET TIEN MUA SACH NAM 1999’);
Writeln( #32 :6 , ‘------------------------------------------------------------’);
For i:=1 to 63 do write(‘-’);
Writeln;
Write(‘| STT ‘);
Write(‘|’ , #32:7 , ‘TEN SACH’, #32:7 );
Write(‘| SO LUONG ‘);
Write(‘| DON GIA ‘);
Write(‘| GIA TIEN |’);
Writeln;
For i:=1 to 63 do write(‘-’);
Writeln;
INCHITIET;
End ;
Ráp toàn bộ thủ tục INBIEU vào phần khai báo của chương trình trong ví
dụ 14.2, và thêm lệnh gọi INBIEU; vào cuối của thân của chương trình đó,
ta được một chương trình đầy đủ mà khi chạy sẽ in biểu theo đúng yêu cầu.
Ngoài ra, để chương trình chính bớt rườm rà, ta đưa phần nhập dữ liệu
vào một thủ tục riêng gọi là NHAP, phần tính tổng gía thành các cuốn sách
vào một thủ tục riêng gọi là TINH, và phần tìm cuốn TIN HOC DAI
CUONG vào một thủ tục gọi là TIM. Trong chương trình chính ta chỉ phải
gọi tên các thủ tục đó ra mà thôi.
PROGRAM VIDU14_3;
Uses CRT;
Type
KSACH = RECORD
Tensach : String[20];
SL : Integer;
DG, GT: Real;
End;
Mang = Array[1..50] of KSACH;
Var
S : Mang;
Z : KSACH;
N, i : Integer;
Tongtien : Real;
{--- Thủ tục Nhập -----}
PROCEDURE NHAP ( Var N : Integer);
{ Nhập N đầu sách và tính gía thành }
Var i : Integer;
Begin
Repeat
Write(‘ Nhập số lượng sách N: ‘);
Readln( N );
Until (N>0) and ( N<51);
For i:=1 to N do With S[i] do
begin
Write(‘Nhập tên sách thứ ‘, i ,’: ‘);
Readln(Tensach);
Repeat
Write(‘Nhập Số lượng : ‘);
Readln(SL);
Until SL>0;
Write(‘Nhập đơn giá : ‘);
Readln(DG);
Case SL of
1..9 : GT:=SL*DG;
10..29 : GT:=SL*DG*(1-0.05);
30..49 : GT:=SL*DG*(1-0.08);
else GT:=SL*DG*(1-0.1);
End; { Hết Case}
end; { Hết For}
End;
{--- Thủ tục Tinh -----}
PROCEDURE TINH ;
{ Tính tổng gía thành các đầu sách}
Var
i: Integer;
Begin
Tongtien:=0;
For i:=1 to N do Tongtien:=Tongtien+S[i].GT;
{ Cộng thêm thuế 10% gía tri gia tăng}
Tongtien:=Tongtien + 0.1*Tongtien ;
Writeln(‘Tổng tiền phải chi là: ‘, Tongtien :6:2);
End;
{--- Thủ tục Tìm -----}
PROCEDURE TIM ;
{ Tìm cuốn ‘TIN HOC DAI CUONG’}
Var
i : Integer;
Begin
i:=1;
While (i ‘ TIN HOC DAI CUONG’) do
i:=i+1;
If i> N then writeln (‘ Không có cuốn THDC ‘)
else
WITH S[i] DO
writeln(‘ Sách THDC có ‘, SL:4, ‘ cuốn với đơn gía= ‘, DG:6:2);
End;
{---------- Thủ tục In biểu ----------------}
PROCEDURE INBIEU;
Var
i: Integer ;
Procedure INCHITIET;
{ Thủ tục in chi tiết từng cuốn sách}
Var
i : Integer;
Begin
For i:=1 to N do WITH S[i] DO
begin
Write(‘| ‘ , i:3, #32);
Write(‘| ‘ , Tensach);
Write(#32: 21-Length(Tensach) );
Write(‘| ‘, SL:8, #32);
Write(‘| ‘, DG:8:2, #32);
Write(‘| ‘, GT:8:2, ‘ |’);
Writeln;
end;
For i:=1 to 63 do write(‘-’);
Writeln;
End; { hết in chi tiết}
Begin { Vào thủ tục Inbiểu }
{ In tiêu đề}
Writeln(‘~~~~~~ ONG KET TIEN MUA SACH NAM 1999’);
Writeln( #32 :6, ‘-------------------------------------------------------------’);
For i:=1 to 63 do write(‘-’);
Writeln;
Write(‘| STT ‘);
Write(‘|’ , #32:7 , ‘TEN SACH’, #32:7 );
Write(‘| SO LUONG ‘);
Write(‘| DON GIA ‘);
Write(‘| GIA TIEN |’);
Writeln;
For i:=1 to 63 do write(‘-’);
Writeln;
INCHITIET;
End ;
{---------- Hết thủ tục In biểu --------------}
BEGIN
NHAP ( N);
TINH;
TIM;
INBIEU;
Readln;
END.
Chạy
Chép tập tin nguồn
Các file đính kèm theo tài liệu này:
- cac_vi_du_ve_ban_ghi_4318.pdf