CÁC BÀI TẬP VỀ BẢN GHI
BÀI TẬP 1
Viết chương trình quản
lí sách. Mỗi cuốn
sách gồm tên sách, tên nhà xuất bản, năm xuất
bản, giá tiền, số lượng:
a)
Đưa ra danh sách các cuốn sách của nhà xuất bản
Giáo dục.
b)
Tính tổng số tiền
sách.
c)
Sắp xếp danh sách theo năm xuất bản
giảm dần và ghi kết
quả ra màn hình.
d)
In ra màn hình các cuốn sách có giá tiền<=10.000đ và xuất bản
sau năm 2000.
HƯỚNG DẪN
Mô tả mỗi cuốn
sách là một bản
ghi, các thông tin về nó (tên sách, tên tác giả,…) là các trường. Danh sách cuốn sách sẽ là một
mảng các bản ghi.
Khai báo kiểu dữ liệu
mô tả sách như sau:
type
sach = record
ten :
string[30];
{tên sách}
nxb :
string[20];
{tên Nhà xuất bản}
namxb : integer; {năm
xuất bản}
soluong : integer; {số lượng}
gia : real;
{giá tiền}
end;
Thông tin của tất cả
các cuốn sách ta lưu trong một
mảng các bản ghi kiểu
sach:
var
ds : array[1..100]
of sach;
n : integer;
Nhập dữ liệu:
ta nhập tên sách trước. Nếu
tên sách là xâu rỗng thì đừng
nhập, ngược lại
lần lượt nhập
các thông tin khác:
procedure
nhap;
var t :
string;
begin
ClrScr;
writeln('NHAP THONG TIN VE CAC CUON SACH');
writeln('(nhap ten sach la xau rong neu muon dung)');
repeat
write('Ten
sach: ');
readln(t);
if t='' then break;
n := n + 1;
with ds[n] do begin
ten := t;
write('NXB: ');readln(nxb);
write('Nam xuat ban: ');readln(namxb);
write('So luong: ');readln(soluong);
write('Gia tien: ');readln(gia);
end;
until false;
end;
Câu a: ta sẽ duyệt qua toàn bộ
danh sách các cuốn sách, kiểm
tra nếu tên nhà xuất bản
là Giáo dục thì in ra tất
cả các thông tin của cuốn
sách tương ứng:
procedure
insach;
var
i : integer;
begin
Clrscr;
writeln('CAC CUON SACH CUA NXB GIAO DUC:');
for i:=1 to n do
with ds[i] do
if nxb='Giao duc' then begin
writeln('Ten:',ten);
writeln('Nam xuat ban:',namxb);
writeln('So luong:',soluong);
writeln('Gia tien:',gia);
end;
readln;
end;
Câu b: ta cũng duyệt qua toàn bộ
các cuốn sách, nhân số lượng
và giá tiền rồi
cộng dồn vào một
biến tổng. Sau đó in ra biến tổng
đó:
procedure tinh;
var i : integer;
tong : real;
begin
tong := 0;
for i := 1 to n do
with ds[i] do tong := tong + gia * soluong;
writeln('TONG GIA TRI CUA TAT CA CAC CUON SACH:', tong:0:3);
end;
Câu c: Sắp xếp danh sách giảm
dần theo năm xuất
bản bằng phương
pháp nổi bọt (2 vòng for). Chú ý biến trung gian trong đổi chỗ phải có kiểu
sach thì mới gán được.
procedure sxep;
var i,j : integer;
tg
: sach;
begin
for i := 1 to n do
for j := i + 1 to n do
if ds[i].namxb < ds[j].namxb then begin
tg := ds[i]; ds[i] := ds[j]; ds[j] := tg;
end;
for i:=1 to n do
with ds[i] do begin
writeln('Ten:',ten);
writeln('Nam xuat ban:',namxb);
writeln('So luong:',soluong);
writeln('Gia tien:',gia);
end;
readln;
end;
Câu d: ta làm tương tự việc
in danh sách các sách của NXB Giáo dục:
procedure inds;
var i : integer;
begin
writeln('CAC CUON SACH GIA RE HON 10000 VA XUAT BAN TU NAM 2000:');
for i := 1 to n do
with ds[i] do
if (gia <= 10000) and (namxb >= 2000) then writeln(ten);
end;
Chương trình chính: Lần lượt
gọi các chương trình con theo thứ tự:
BEGIN
nhap;
insach;
tinh;
sxep;
inds;
readln;
END.
BÀI TẬP 2
Viết chương trình quản
lí cán bộ. Thông tin về
cán bộ gồm tên, tuổi,
hệ số lương,
phụ cấp, thu nhập.
a)
Nhập thông tin cán bộ từ
file văn bản CANBO.TXT. Các thông tin gồm tên, tuổi, hệ số lương, phụ cấp, mỗi thông tin trên một dòng.
Tính thu nhập = hệ số lương ´ 350000đ + phụ cấp
b)
Đưa ra danh sách các bộ trẻ (tuổi <= 30), in đầy đủ các thông tin
c)
Sắp xếp tên cán bộ
theo abc và ghi lên file truy cập trực
tiếp SAPXEP.DAT.
d)
Đọc danh sách từ file SAPXEP.DAT, in ra màn hình các
cán bộ có thu nhập từ 3
triệu trở lên.
HƯỚNG DẪN
Làm tương tự bài 1, chú ý là nhập dữ liệu
từ file chứ không phải
từ bàn phím. Do đó
không cần
ghi các thông tin yêu cầu nhập
ra màn hình. Hơn nữa,
phải tạo trước
một file văn bản
là CANBO.TXT để chương
trình có thể chạy
mà không báo lỗi.
Toàn văn chương trình:
uses crt;
type
canbo = record
ten : string[20];
tuoi : byte;
hsl, phucap, thunhap: real;
end;
var
ds : array[1..100]
of canbo;
n : integer;
(*********************************************)
procedure nhap;
var f : text;
begin
assign(f,'CANBO.TXT'); reset(f);
n := 0;
while not eof(f) do begin
n := n + 1;
with ds[n] do begin
readln(f,ten);
readln(f,tuoi);
readln(f,hsl);
readln(f,phucap);
thunhap := hsl * 350000 + phucap;
end;
end;
close(f);
end;
(*********************************************)
procedure in30;
var i : integer;
begin
writeln('DANH SACH CAC CAN BO TRE:');
for i := 1 to n do
with ds[i] do
if tuoi <= 30 then begin
writeln('Ten:',ten);
writeln('Tuoi:',tuoi);
writeln('He so luong:',hsl :0 :3);
writeln('Phu cap:',phucap :0 :3);
writeln('Thu nhap:',thunhap :0 :3);
end;
end;
(*********************************************)
procedure sxep;
var i,j : integer;
tg
: canbo;
begin
for i := 1 to n do
for j := i + 1 to n do
if ds[i].ten > ds[j].ten then begin
tg := ds[i]; ds[i] := ds[j]; ds[j] := tg;
end;
end;
(*********************************************)
procedure ghitep;
var f : file of canbo;
i
: integer;
begin
assign(f,'SAPXEP.DAT'); rewrite(f);
for i := 1 to n do write(f,ds[i]);
close(f);
end;
procedure doctep;
var f : file of canbo;
i
: integer;
begin
assign(f,'SAPXEP.DAT'); reset(f);
i := 0;
while not eof(f) do begin
i := i + 1;
read(f,ds[i]);
end;
n := i;
close(f);
end;
(*********************************************)
procedure in3M;
var i : integer;
begin
writeln('DANH SACH CAC CAN BO CO THU NHAP CAO:');
for i := 1 to n do
with ds[i] do
if thunhap >= 3000000 then begin
writeln('Ten:',ten);
writeln('Tuoi:',tuoi);
writeln('Thu nhap:',thunhap :0 :3);
end;
end;
(*********************************************)
BEGIN
nhap;
in30;
sxep;
in3M;
readln;
END.
Không có nhận xét nào:
Đăng nhận xét