Pascal - Các ví dụ về bản ghi

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.

pdf24 trang | Chia sẻ: maiphuongdc | Lượt xem: 2709 | Lượt tải: 3download
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:

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