Bài 19: Kết quả thi học kỳ của một lớp sinh viên được cho trong 2 tệp văn bản: một tệp hoten.txt chứa họ và tên của các sinh viên của một lớp trong đó họ tên mỗi sinh viên chiếm một dò[r]
(1)BÀI TẬP MÔN TIN HỌC ĐẠI CƯƠNG CÓ LỜI GIẢI Bài : Cho dãy x1,x2…xn Tính giá trị trung bình dãy
Giải
var i,n : integer;
x:array[1 100] of real; tong : real;
begin
write('n = ');readln(n); for i:=1 to n
begin
write('x[',i,']= '); readln(x[i]); end;
for i:=1 to n tong:=tong+x[i];
writeln('TB = ',tong/n); readln;
end
Bài : Cho dãy x1,x2…xn Tác dãy thành dãy : dãy gồm phần tử >=0, dãy gồm phần tử <0
Giải
var i,n,k,l : integer;
x,y,z : array[1 100] of real; begin
write('Nhap n : ');readln(n); for i:=1 to n
begin
write('x[',i,'] = '); readln(x[i]); end;
for i:=1 to n if x[i]>=0 then begin
k:=k+1; y[k]:=x[i]; end
else begin l:=l+1; z[l]:=x[i]; end;
(2)for i:=1 to k
writeln('y[',i,'] = ',y[i]:4:1); Writeln('Day ca phan tu <0 la :'); for i:=1 to l
writeln('z[',i,'] = ',z[i]:4:1); readln;
end
Bài : Cho dãy x1,x2…xn Sắp xếp dãy số cho phần tử >=0 đầu, phần tử <0 cuối, trật tự phần tử không thay đổi
Giải
var i,n,k : integer;
x,y : array[1 100] of real; begin
write('Nhap n : ');readln(n); for i:=1 to n
begin
write('x[',i,'] = '); readln(x[i]); end;
for i:=1 to n if x[i]>=0 then begin
k:=k+1; y[k]:=x[i]; end;
for i:=1 to n if x[i]<0 then begin
k:=k+1; y[k]:=x[i]; end;
for i:=1 to k
writeln('y[',i,'] = ',y[i]:4:1); readln;
end
Bài : Cho dãy x1,x2…xn Xóa phần tử xk Giải
var i,n,k : integer;
x,y : array[1 100] of real; begin
write('Nhap n : ');readln(n); for i:=1 to n
begin
(3)readln(x[i]); end;
write('Nhap vi tri k :');readln(k); for i:=k to n-1
x[i]:=x[i+1]; for i:=1 to n-1
writeln('x[',i,']= ',x[i]:4:1); readln;
end
Bài : Cho dãy x1,x2…xn Chèn M vào vị trí k Cách :
var i,n,k,m : integer;
x,y : array[1 100] of real; begin
write('Nhap n : ');readln(n); for i:=1 to n
begin
write('x[',i,'] = '); readln(x[i]); end;
write('Nhap vi tri k :');readln(k);
write('Nhap so can chen M :');readln(m); for i:=1 to n+1
if i<k then y[i]:=x[i] else if i=k then y[i]:=m
else
y[i]:=x[i-1]; for i:=1 to n+1
writeln('y[',i,']= ',y[i]:4:1); readln;
end
Cách : Dino uses crt;
var i,k,m,n:integer;
a:array[1 100] of integer; Begin
clrscr;
write('Nhap so phan tu day: '); readln(n);
For i:=1 to n begin
(4)readln(a[i]); end;
write('Nhap vi tri k: '); readln(k);
write('Nhap so m: '); readln(m);
for i:=n downto k a[i+1]:=a[i]; a[k]:=m;
writeln('Day sau chen la: '); for i:=1 to n+1 write(a[i]:4); readln;
End
Bài : Kiểu mảng - Cho bảng sau :
STT Họ tên Điểm
1 … m
1 n
1 Tính điểm trung bình sinh viên
2 Tìm sinh viên có điểm trung bình cao
3 Sắp xếp lại bảng theo trật tự tăng dần điểm trung bình Giải :
var n,m,i,j,k :integer;
ht:array[1 20] of string[20]; diem:array[1 20,1 10] of real; tong,tb:array[1 20] of real; tg,tg2,s,max:real;
tg1:string[20]; begin
write('Nhap n : ');readln(n); write('Nhap m : ');readln(m); for i:=1 to n
begin
write('HTSV ',i,' la '); readln(ht[i]);
for j:=1 to m begin
write('DT mon ',j,' la '); readln(diem[i,j]); end;
end;
for i:=1 to n begin
(5)for j:=1 to m
tong[i]:=tong[i]+diem[i,j]; tb[i]:=tong[i]/m;
end; max:=tb[1]; for i:=1 to n if tb[i]>max then max:=tb[i];
write('Danh sach cac hoc sinh co TB max bang ',max:6:1,' la :'); for i:=1 to n
if tb[i]=max then write(ht[i],', '); for i:=1 to n-1 for k:=i+1 to n if tb[i]>tb[k] then begin
tg:=tb[i]; tb[i]:=tb[k]; tb[k]:=tg; tg1:=ht[i]; ht[i]:=ht[k]; ht[k]:=tg1; for j:=1 to m begin
tg2:=diem[i,j]; diem[i,j]:=diem[k,j]; diem[k,j]:=tg2; end;
end;
writeln('Danh sach sau sap xep la :'); for i:=1 to n
begin writeln; write(ht[i]); for j:=1 to m
write(' ',diem[i,j]:4:1,' '); end;
readln; end
Bài : Cho ma trận Anxm, tính tổng hàng, cột ma trận Giải
var i,m,n,j : integer;
(6)write('Nhap so hang : ');readln(n); write('Nhap so cot : ');readln(m); for i:=1 to n
for j:=1 to m begin
write('a[',i,',',j,']= '); readln(a[i,j]); end;
for i:=1 to n b1[i]:=0; for i:=1 to m b2[i]:=0; for i:=1 to n for j:=1 to m begin
b1[i]:=b1[i]+a[i,j]; b2[j]:=b2[j]+a[i,j]; end;
for i:=1 to n begin
writeln;
for j:=1 to m write(a[i,j]:4:1,' '); end;
writeln;
writeln('Tong tung hang la : '); for i:=1 to n
writeln('Hang ',i,'= ',b1[i]:4:1); writeln('Tong tung cot la : '); for j:=1 to m
writeln('Cot ',j,'= ',b2[j]:4:1); readln;
end
Bài : Cho ma trận Anxm, xóa hàng thứ k ma trận Giải
var i,m,n,k,j:integer;
a:array[1 100,1 100] of real; begin
write('Nhap so hang :');readln(n); write('Nhap so cot :');readln(m); for i:=1 to n
for j:=1 to m begin
(7)end;
write('Nhap hang can xoa :');readln(k); for j:=1 to m
for i:=k to n-1 a[i,j]:=a[i+1,j]; for i:=1 to n-1 for j:=1 to m
writeln('a[',i,',',j,']= ',a[i,j]:4:1); readln;
end
Bài : Cho ma trận Anxm tìm giá trị lớn ma trận, xóa hàng chứa giá trị lớn
Giải
var n,m,i,j,max,k : integer;
x:array[1 10,1 10] of integer; begin
write('Nhap n : ');readln(n); write('Nhap m : ');readln(m); for i:=1 to n
for j:=1 to m begin
write('x[',i,',',j,']= '); readln(x[i,j]); end;
k:=1; max:=x[1,1]; for i:=1 to n for j:=1 to m if x[i,j]>max then begin
max:=x[i,j]; k:=i;
end;
for j:=1 to m for i:=k to n-1 x[i,j]:=x[i+1,j]; for i:=1 to n-1 begin
writeln;
for j:=1 to m write(x[i,j],' ') ; end;
readln; end
(8)nhất Giải
var i,j,m,n,k,max:integer;
a:array[1 10,1 10] of integer; begin
write('Nhap n : ');readln(n); write('Nhap m : ');readln(m); for i:=1 to n
for j:=1 to m begin
write('a[',i,',',j,']= '); readln(a[i,j]); end;
k:=1; max:=a[1,1]; for j:=1 to m for i:=1 to n if a[i,j]>max then begin
max:=a[i,j]; k:=j;
end;
for i:=1 to n for j:=k to m-1 a[i,j]:=a[i,j+1]; for i:=1 to n begin
writeln;
for j:=1 to m-1 write(a[i,j],' '); end;
readln; end
Bài 11: Cho ma trận Anxm vecto B[b1,b2,…,bn] (có n phần tử) tìm giá trị nhỏ ma trận, chèn vecto B vào cột cuối chứa giá trị nhỏ
Giải
var i,j,k,n,m:integer;
a : array[1 50,1 50] of real; y : array[1 50,1 50] of real; b:array[1 100] of real; min:real;
begin
write('Nhap so hang: ');readln(n); write('Nhap so cot : ');readln(m); for i:=1 to n
(9)begin
write('a[',i,',',j,']= '); readln(a[i,j]); end;
min:=a[1,1]; for i:=1 to n for j:=1 to m if min>a[i,j] then min:=a[i,j];
writeln('Gia tri nho nhat la : ',min:4:1); for j:=1 to m
for i:=1 to n if min=a[i,j] then k:=j;
writeln('vi tri cuoi cung o cot :',k); writeln('Nhap ma tran vecto B'); for i:=1 to n
begin
write('b[',i,']= '); readln(b[i]); end;
for i:=1 to n for j:=1 to m+1 if j<k+1 then y[i,j]:=a[i,j] else if j=k+1 then y[i,j]:=b[i] else
y[i,j]:=a[i,j-1]; for i:=1 to n begin
writeln;
for j:=1 to m+1 write(y[i,j]:4:1,' '); end;
readln; end
Bài 12: Cho ma trận Anxm vecto B[b1,b2,…,bm] (có m phần tử) Chèn vecto B vào hàng thứ k
Giải
var i,j,k,n,m:integer;
(10)y : array[1 50,1 50] of real; b:array[1 100] of real; begin
write('Nhap so hang: ');readln(n); write('Nhap so cot : ');readln(m); for i:=1 to n
for j:=1 to m begin
write('a[',i,',',j,']= '); readln(a[i,j]); end;
write('Nhap vi tri hang can chen : '); readln(k);
If (1<=k) and (k<=n+1) then begin
writeln('Nhap ma tran vecto B'); for i:=1 to m
begin
write('b[',i,']= '); readln(b[i]); end;
for j:=1 to m for i:=1 to n+1 if i<k then
y[i,j]:=a[i,j] else if i=k then y[i,j]:=b[j] else
y[i,j]:=a[i-1,j]; for i:=1 to n+1 begin
writeln;
for j:=1 to m write(y[i,j]:4:1,' '); end;
end else
writeln('K ko co thuoc hang can chen '); readln;
end
Bài 13: Cho ma trận Anxm tìm tổng phần tử dương tam giác tích phần tử âm tam giác So sánh tổng tích
Giải
(11)a:array[1 50,1 50] of real; tong,tich:real;
begin
write('Nhap so hang ma tran NxN : '); readln(n);
for i:=1 to n for j:=1 to n begin
write('a[',i,',',j,']= '); readln(a[i,j]); end;
tong:=0;
for i:=1 to n-1 for j:=i+1 to n if a[i,j]>=0 then tong:=tong+a[i,j]; tich:=1;
for i:=2 to n for j:=1 to i-1 if a[i,j]<0 then k:=k+1; if k=0 then tich:=0 else
for i:=2 to n for j:=1 to i-1 if a[i,j]<0 then tich:=tich*a[i,j]; for i:=1 to n begin
writeln;
for j:=1 to n write(a[i,j]:4:1,' '); end;
writeln;
writeln('tich cac pt am tam giac duoi la : ',tich:4:1); writeln('tong cac pt tam giac tren la : ',tong:4:1); if tong>tich then
writeln(' Tong lon hon tich') else if tong=tich then
writeln(' Tong bang tich ') else
writeln('Tong be hon tich'); readln;
end
(12)STT Họ tên Điểm danh
1 … m
1…n
1 Đếm số buổi học, nghỉ học có phép, nghỉ học khơng phép
2 Đưa sinh viên không thi biết điều kiện không thi số buổi nghỉ học không phép >= 20%m
Giải: (Dino) uses crt;
type sinhvien=record ten:string[20];
dd:array[1 20] of char; dh,cp,kp:integer;
tt:string[15]; end;
var m,n,i,j:integer;
sv:array[1 100] of sinhvien; Begin
clrscr;
write('Nhap so hoc sinh: '); readln(n);
write('Nhap so buoi hoc: '); readln(m);
writeln('Nhap thong tin di hoc cua tung sinh vien:'); for i:=1 to n
with sv[i] begin
writeln('Hoc sinh thu ',i); write('Ho ten: ');
readln(ten); dh:=0; kp:=0; cp:=0;
for j:=1 to m begin
write('Buoi ',j,': '); readln(dd[j]);
if dd[j]='k' then kp:=kp+1 else if dd[j]='p' then cp:=cp+1 else dh:=dh+1;
end; end;
writeln('Danh sach thong tin di hoc cua sinh vien la: ');
(13)with sv[i] begin
write(i:4,ten:20,dh:8,kp:12,cp:9);
if kp/m>0.2 then write('Khong duoc thi':18) else write('Duoc thi':18);
writeln; end;
readln; End
Bài 15 : Cho trước tệp văn TEN.TXT ghi họ tên sinh viên lớp, họ tên người chiếm dòng tệp văn DIEMDANH.TXT ghi kết điểm danh người theo quy tắc :
+ Có mặt đánh dấu “c”; vắng có lý “v”; vắng không lý “k”
+ Đánh dấu điểm danh sinh viên ghi liên tiếp dịng Vẽ sơ đồ thuật tốn viết chương trình pascal để
1 Thống kê số buổi học, số buổi vắng (có khơng lý do) sinh viên Lập danh sách sinh viên học chăm (có số buổi có mặt cao nhất)
hãy cho biết co sinh viên Kết ghi vào tệp ketqua.txt theo quy cách sau
- Mỗi sinh viên chiếm dịng gồm thơng tin
STT(2 dấu cách)họ tên sv(2 dấu cách)số buổi có mặt(2 dấu cách)số buổi vắng mặt có lý do(2 dấu cách)số buổi vắng mặt không lý
- Các dòng : Họ tên sinh viên chăm (họ tên sinh viên viết dòng)
- Dòng cuối : số sinh viên học chăm Giải :
type sinhvien=record ht:string[30];
diemdanh:array[1 10] of char; dh:integer;
nh:integer; cp:integer; end;
var sv:array[1 20] of sinhvien; sv1:array[1 20] of sinhvien; i,j,m,n,k,t,max:integer;
f1,f2,f3:Text; begin
(14)i:=0;
while not eof(f1) begin
i:=i+1;
readln(f1,sv[i].ht); end;
n:=i; close(f1);
assign(f2,'diemdanh.txt'); reset(f2);
i:=0;
while not eof(f2) begin
i:=i+1; j:=0;
while not eoln(f2) begin
j:=j+1;
read(f2,sv[i].diemdanh[j]); end;
readln(f2); end;
m:=j; close(f2); for i:=1 to n begin
sv[i].dh:=0; sv[i].cp:=0; sv[i].nh:=0; for j:=1 to m
if sv[i].diemdanh[j]='c' then sv[i].dh:=sv[i].dh+1
else if sv[i].diemdanh[j]='v' then sv[i].cp:=sv[i].cp+1
else
sv[i].nh:=sv[i].nh+1; end;
max:=sv[1].dh; for i:=1 to n
if sv[i].dh>max then max:=sv[i].dh; for i:=1 to n
if sv[i].dh=max then begin
(15)sv1[t]:=sv[i]; end;
write('Thong ke so buoi di hoc cua sinh vien'); for i:=1 to n
begin writeln;
write(i,' ',sv[i].ht:10,' '); for j:=1 to m
write(sv[i].diemdanh[j],' ');
write(sv[i].dh,' ',sv[i].nh,' ',sv[i].cp); end;
writeln;
write('Co ',t,' sinh vien di hoc cham chi nhat : '); for i:=1 to t
begin writeln;
write(i,' ',sv1[i].ht:10); end;
assign(f3,'ketqua.txt'); rewrite(f3);
for i:=1 to n begin
write(f3,i,' ',sv[i].ht:10,' ');
write(f3,sv[i].dh:1,' ',sv[i].cp:1,' ',sv[i].nh:1); writeln(f3);
end;
for k:=1 to t
writeln(f3,sv1[k].ht);
write(f3,'so sv di hoc cham chi nhat la : ',t); close(f3);
readln; end
Bài 16 : Cho trước tệp văn TEN.TXT ghi họ tên chủ hộ phường, dịng ghi họ tên chủ hộ tệp văn SODIEN.TXT ghi số lượng điện hộ tiêu thụ tháng, số lượng điện tiêu thụ hộ ghi dòng, số lượng điện tháng ghi cách dấu cách
Vẽ sơ đồ thuật toán viết chương trình pascal để :
1 Tính số lượng điện trung bình hàng tháng hộ
(16)Kết ghi vào tệp văn KETQUA.TXT theo quy cách sau : - Mỗi hộ gia đình chiếm dịng gồm thơng tin sau:
STT(2 dấu cách)Họ tên chủ hộ(2 dấu cách)Số lượng điện trung bình hàng tháng hộ
- Dịng : Số điện tiêu thụ trung bình phường
- Các dòng : Họ tên chủ hộ có số lượng điện tiêu thụ trung bình hàng tháng nhất, họ tên chủ hộ viết dòng
Giải :
type chuho=record ht:string[30];
sodien:array[1 12] of real; tb:real;
end;
var ch:array[1 50] of chuho; ch1:array[1 50] of chuho; i,j,m,n,t,k:integer;
min,tong:real; f1,f2,f3:text; begin
assign(f1,'ten.txt'); reset(f1);
i:=0;
while not eof(f1) begin
i:=i+1;
readln(f1,ch[i].ht); end;
n:=i; close(f1);
assign(f2,'sodien.txt'); reset(f2);
i:=0;
while not eof(f2) begin
i:=i+1; j:=0;
while not eoln(f2) begin
j:=j+1;
read(f2,ch[i].sodien[j]); end;
readln(f2); end;
(17)close(f2); for i:=1 to n begin
tong:=0;
for j:=1 to m
tong:=tong+ch[i].sodien[j]; ch[i].tb:=tong/m;
end;
min:=ch[1].tb; for i:=1 to n if ch[i].tb<min then min:=ch[i].tb; t:=0;
for i:=1 to n if ch[i].tb=min then begin
t:=t+1;
ch1[t]:=ch[i]; end;
assign(f3,'ketquatiendien.txt'); rewrite(f3);
for i:=1 to n begin
write(f3,i,' ',ch[i].ht:10,' '); write(f3,ch[i].tb:3:1); writeln(f3);
end;
writeln(f3,'so dien tieu thu it nhat phuong la : ',min:3:1); writeln(f3,'Ten cac chu ho co luong dien tieu thu it nhat la :'); for k:=1 to t
writeln(f3,k,' ',ch1[k].ht:10); close(f3);
readln; end
Bài 17 : Vẽ sơ đồ thuật tốn viết chương trình Pascal thực cơng việc cho tốn sau :
Cho danh sách lớp :
TT Họ tên Kết học tập Phân loại
(18)Phân loại A kết học tập >=8 Phân loại B kết học tập >=6 Phân loại C kết học tập >=5 Phân loại D kết học tập >=4 Phân loại E kết học tập < Ghi danh sách tệp
3 Mở tệp, đọc liệu vào nhớ
4 Một chương trình xếp lại danh sách tăng dần theo cột phân loại Hiện lại danh sách sau xếp
Giải :
program bailam; uses crt;
type sinhVien=record hoTen: string[50]; ketQua: real; loai: char; end;
var sv: array[1 100] of sinhVien; n: integer;
procedure nhap; var i,m: integer; f: file of sinhVien;
ds: array[1 100] of sinhVien; begin
{= Nhap danh sach sinh vien =} write('Nhap so sinh vien: '); readln(m);
writeln('Nhap thong tin sinh vien:'); for i:=1 to m
with ds[i] begin
writeln('* Sinh vien thu ',i); write('Ho ten: ');
readln(hoTen);
write('Ket qua hoc tap: '); readln(ketQua);
if ketQua>=8 then loai:='A' else if ketQua>=6 then loai:='B' else if ketQua>=5 then loai:='C' else if ketQua>=4 then loai:='D' else loai:='E';
end;
{= Ghi danh sach tep DANHSACH.INP =} assign(f,'DANHSACH.inp');
(19)for i:=1 to m write(f,ds[i]); close(f); end;
procedure doc; var i: integer; f: file of sinhVien; begin
{= Doc du lieu tu tep DANHSACH.INP =} assign(f,'DANHSACH.inp');
reset(f); i:=0;
while not eof(f) begin
i:=i+1;
read(f,sv[i]); end;
n:=i; end;
procedure sapXep; var i,j: integer; tg: sinhVien; begin
{= Sap xep danh sach =} for i:=1 to n-1
for j:=i+1 to n
if sv[i].loai > sv[j].loai then begin
tg:=sv[i]; sv[i]:=sv[j]; sv[j]:=tg; end; end;
procedure hienThi; var i: integer; begin
for i:=1 to n with sv[i]
writeln(i,' ',hoTen:30,' ',ketQua:6:2,' ',loai:3); end;
(20)sapXep; hienThi; readln end
Bài 18: Cho ma trận Anxm, vẽ sơ đồ thuật tốn viết chương trình có sử dụng chương trình để thực :
- Một chương trình nhập mảng A, ghi tệp - Mở lại tệp, đọc liệu vào nhớ
- Một chương trình xếp hàng ma trận A theo thứ tự tăng dần - Một chương trình ma trận xếp hình ghi tệp Giải :
var a,b:array[1 10,1 10] of real; i,j,m,n,k,t,l:integer;
f1,f2,f3:text; tg:real;
procedure nhap; begin
write('Nhap n : ');readln(n); write('Nhap m : ');readln(m); for i:=1 to n
for j:=1 to m begin
write('a[',i,',',j,']= '); readln(a[i,j]); end;
assign(f1,'abc.txt'); rewrite(f1);
for i:=1 to n begin
for j:=1 to m if j<m then
write(f1,a[i,j]:4:1,' ') else
write(f1,a[i,j]:4:1); writeln(f1);
end; close(f1);
writeln('Ma tran ghi la '); for i:=1 to n
begin
for j:=1 to m write(a[i,j]:4:1,' '); writeln;
(21)procedure doc; begin
assign(f2,'abc.txt'); reset(f2);
i:=0;
while not eof(f2) begin
i:=i+1; j:=0;
while not eoln(f2) begin
j:=j+1;
read(f2,b[i,j]) end;
readln(f2) end;
t:=i;k:=j; close(f2); writeln;
write('Ma tran doc vao la '); for i:=1 to t
begin writeln;
for j:=1 to k write(b[i,j]:4:1,' '); end;
end;
procedure sapxep; begin
for i:=1 to t for j:=1 to k-1 for l:=j+1 to k if b[i,j]>b[i,l] then begin
tg:=b[i,j]; b[i,j]:=b[i,l]; b[i,l]:=tg; end;
end;
procedure hienra; begin
writeln;
(22)begin
for j:=1 to k write(b[i,j]:4:1); writeln;
end;
assign(f3,'Kq.txt'); rewrite(f3);
for i:=1 to t begin
for j:=1 to k write(f3,b[i,j]:4:1); writeln(f3);
end; close(f3); end;
begin nhap; doc; sapxep; hienra; readln; end
Bài 19: Kết thi học kỳ lớp sinh viên cho tệp văn bản: tệp hoten.txt chứa họ tên sinh viên lớp họ tên sinh viên chiếm dòng tệp văn diem.txt ghi điểm trung bình (DTB) sinh viên, điểm sinh viên ghi dịng
Viết chương trình để:
- Tìm xếp loại sinh viên biết
Nếu DTB>=9, sinh viên xếp loại “xuat sac” Nếu 8<=DTB<9, sinh viên xếp loại “Gioi” Nếu 7<=DTB<8, sinh viên xếp loại “Kha” Nếu DTB<7, sinh viên xếp loại “Trung binh” - Tìm học bổng sinh viên biết
Nếu DTB>=9, sinh viên học bổng 240000 Nếu 8<=DTB<9, sinh viên học bổng 180000 Nếu 7<=DTB<8, sinh viên học bổng 120000 Nếu DTB<7, sinh viên không học bổng
- Sắp xếp lại bảng theo trật tự giảm dần điểm trung bình Đưa kết hình file ketqua.txt dạng sau
+ dòng : KẾT QUẢ THI HỌC KỲ CỦA LỚP
+ dòng trở dòng ghi: STT, dấu cách, Họ tên, dấu cách, điểm trung bình, dấu cách, Xếp loại, dấu cách, Học bổng sinh viên
Giải:
(23)type sinhvien=record ht: string[50];
dtb: real;
xepLoai: string[20]; hocBong: longint; end;
var sv: array[0 100] of sinhvien; tg: sinhvien;
d, i, j, m, n: integer; f: text;
begin clrscr;
{===Lay du lieu tu tep====} assign(f,'hoten.txt');
reset(f); n:=0;
while (not eof(f)) begin
inc(n);
readln(f,sv[n].ht); end;
close(f);
assign(f,'diem.txt'); reset(f);
for i:=1 to n readln(f,sv[i].dtb); close(f);
{=== Xep Loai va Tinh Hoc Bong ===} for i:=1 to n
with sv[i] if dtb>=9 then begin
xepLoai:='Xuat Sac'; hocBong:=240000; end
else if dtb>=8 then begin
xepLoai:='Gioi'; hocBong:=180000; end
else if dtb>=7 then begin
xepLoai:='Kha'; hocBong:=120000; end
(24)begin
xepLoai:='Trung Binh'; hocBong:=0;
end;
{=== Sap Xep ===} for i:=1 to n-1 for j:=i+1 to n
if sv[i].dtb<sv[j].dtb then begin
tg:=sv[i]; sv[i]:=sv[j]; sv[j]:=tg; end;
{=== In Ket Qua Ra File ===} assign(f,'ketqua.txt');
rewrite(f);
writeln(f,'KET QUA THI HOC KY CUA LOP:'); for i:=1 to n
with sv[i]
writeln(f,i:3,' ',ht:20,' ',dtb:6:1,xepLoai:15,' ',hocBong); close(f);
{===Dua ket qua man hinh===}
writeln('KET QUA THI HOC KY CUA LOP:'); for i:=1 to n
with sv[i]
writeln(i:3,' ',ht:20,' ',dtb:6:1,xepLoai:15,' ',hocBong); readln
end
Bài 20: Viết chương trình tính chu vi, diện tích đường trịn, hình chữ nhật, tam giác var r,s,cv,dai,rong,s1,cv1,s2,cv2,t1,t2,t3:real;
procedure tamgiac(x1,x2,x3:real;var CVtg,Stg:real); begin
CVtg:=x1+x2+x3;
Stg:=sqrt(CVtg/2*(CVtg/2-x1)*(CVtg/2-x2)*(CVtg/2-x3)); writeln('Chu vi tam giac la : ',CVtg:6:1);
writeln('Dien tich tam giac la : ',Stg:6:1); end;
procedure hcn(a:real;b:real;var Scn,CVcn:real); begin
Scn:=a*b; CVcn:=a+b;
(25)end;
procedure DT(bk:real;var DT,Chv:real); begin
Chv:=3.14*bk*2; dt:=3.14*bk*bk;
writeln('Chu vi duong tron la : ',Chv:6:1); writeln('Dien tich duong tron la : ',DT:6:1); end;
begin
write('Nhap ban kinh duong tron : ');readln(r); DT(r,s,cv);
write('Nhap chieu rong hcn : ');readln(rong); write('Nhap chieu dai hcn : ');readln(dai); hcn(dai,rong,s1,cv1);
write('Nhap canh thu : ');readln(t1); write('Nhap canh thu : ');readln(t2); write('Nhap canh thu : ');readln(t3); tamgiac(t1,t2,t3,cv2,s2);
readln; end
Bài 21: Ngân hàng muốn cung cấp phần mềm mô hoạt động máy ATM, thông tin cần quản lý sau : Số PIN, số tài khoản, họ tên, CMTND, ngày làm thẻ, số dư Hãy khai báo kiểu ghi (Record) chứa thành phần nêu Lập sơ đồ thuật tốn viết chương trình ngơn ngữ lập trình pascal thực yêu cầu sau :
- Chương trình điều khiển (Chương trình chính)
- Một chương trình để nhập liệu thơng tin khách hàng từ bàn phím vào máy - Một chương trình lấy thơng tin số dư tài khoản hiển thị kết lên hình
với số PIN nhập từ bàn phím
- Một chương trình để rút tiền từ tài khoản theo quy trình : Yêu cầu nhập số PIN
2 Nếu số PIN, yêu cầu nhập số tiền cần rút Nếu số tiền cần rút nhỏ số dư trừ tiền số dư số tiền cần rút Thông báo giao dịch thành công
Giải :
type atm=record sopin:integer; sotk:integer; hoten:string[20]; cmtnd:string[10]; ngaylamthe:string[20]; sodu:real;
end;
var kh:array[1 50] of atm;
(26)procedure nhap; begin
write('Nhap so khach hang : ');readln(n); for i:=1 to n
begin
write('Nhap so pin cua KH thu ',i,' : ');readln(kh[i].sopin); write('Nhap so tai khoan cua KH thu ',i,' : ');readln(kh[i].sotk); write('Nhap ho ten cua khach hang thu ',i,' : ');readln(kh[i].hoten); write('Nhap so cmtnd cua KH thu ',i,' : ');readln(kh[i].cmtnd);
write('Nhap lam the cua KH thu ',i,' : ');readln(kh[i].ngaylamthe); write('Nhap so du tai khoan cua KH thu ',i,' : ');readln(kh[i].sodu); end;
end;
procedure laythongtin; begin
writeln;
writeln('Chuong trinh lay tong tin khach hang tu so PIN'); write('Nhap so pin tai khoan : ');readln(PIN);
dem:=0;
for i:=1 to n
if PIN=kh[i].sopin then begin
k:=i;
dem:=dem+1; end;
if dem<>0 then
writeln('So du cua tai khoan la : ',kh[k].sodu:8:1) else
writeln('Khong co tai khoan nao co so PIN nhu vay'); end;
procedure ruttien; begin
writeln('Chuong trinh rut tien');
write('Nhap so pin tai khoan : ');readln(PIN1); dem1:=0;
for i:=1 to n
if PIN1=kh[i].sopin then begin
t:=i;
dem1:=dem1+1; end;
if dem1<>0 then begin
write('Nhap so tien can rut : ');readln(sotien); if sotien<=kh[t].sodu then
(27)kh[t].sodu:=kh[t].sodu-sotien;
writeln('So tien lai cua quy khach la : ',kh[t].sodu:8:1); writeln('Giao dich cong');
end else
writeln('So tien lon hon so du tai khoan'); writeln('Giao dich ko cong');
end else
writeln('Khong co so PIN nay'); end;
begin nhap;
laythongtin; ruttien; readln; end
Bài 22: Lập sơ đồ thuật tốn viết chương trình ngơn ngữ lập trình Pascal để tính tổng mảng hai chiều số thực cách viết chương trình sau :
- Nhập số liệu cho mảng hai chiều từ bàn phím
- Xuất kết mảng hai chiều hình theo dạng ma trận - Tính tổng mảng hai chiều
Nội dung chương trình gồm :
1 Nhập số liệu cho mảng thứ nhập số liệu cho mảng thứ hai
2 Xuất kết mảng thứ xuất kết mảng thứ hai (ra hình) Tính tổng mảng xuất kết hình
Giải : (Dino) uses crt;
type mang=array[1 100,1 100] of integer; var a,b,t:mang;
i,j,m,n,m1,n1:integer;
Procedure nhap(var c:mang); Begin
for i:=1 to m for j:=1 to n begin
write('PT[',i,',',j,']= '); readln(c[i,j]);
end; end;
Procedure xuat(var c:mang); Begin
for i:=1 to m begin
(28)end; end;
Procedure tong; Begin
for i:=1 to m for j:=1 to n t[i,j]:=a[i,j]+b[i,j]; End;
Begin clrscr;
write('Nhap so hang ma tran: '); readln(m);
write('Nhap so cot ma tran: '); readln(n);
writeln('Nhap ma tran thu nhat: '); nhap(a);
writeln('Nhap ma tran thu hai: '); nhap(b);
writeln('Ma tran thu nhat la: '); xuat(a);
writeln('Ma tran thu hai la: '); xuat(b);
tong;
writeln('Tong cua hai ma tran la: '); xuat(t);
readln; End
Bài 23: Cho danh sách chủ hộ sử dụng điện, chủ hộ biết thông tin : Mã số, họ tên, địa chỉ, điện thoại, loại hợp đồng (SH:sinh hoạt, SX:sản xuất, KD: kinh doanh), ngày ký hợp đồng Hãy lập thuật tốn viết chương trình ngơn ngữ lập trình pascal (dùng cấu trúc ghi) để thực yêu cầu sau :
- Nhập liệu cho vào máy từ bàn phím
- Tìm số hộ loại hợp đồng tách danh sách thành ba danh sách tương ứng với loại hợp đồng : SH, SX KD
- Đưa kết tìm hình Giải : (Dino)
uses crt;
type hodan=record maso:string[15]; ten,diachi:string[20]; dt,hd,ngay:string[15]; end;
var ho:array[1 100] of hodan; m,i,demsh,demsx,demkd:integer; Begin
Clrscr;
(29)readln(m);
writeln('Nhap thong tin cac ho dan: '); demsh:=0; demsx:=0; demkd:=0; for i:=1 to m
with ho[i] begin
writeln('Ho thu ',i); write('Ma so: '); readln(maso); write('Ho ten: '); readln(ten); write('Dia chi'); readln(diachi); write('Dien thoai: '); readln(dt);
write('Loai hop dong: '); readln(hd);
write('Ngay dang ky: '); readln(ngay);
if hd='kd' then demkd:=demkd+1 else
if hd='sx' then demsx:=demsx+1 else
if hd='sh' then demsh:=demsh+1; end;
writeln('So ho hop dong kinh doanh la: ',demkd); writeln('So ho hop dong san xuat la: ',demsx); writeln('So ho hop dong sinh hoat la: ',demsh);
writeln('Hop dong':10,'Ten chu ho':20,'Dia chi':20,'SDT':12); write('Sinh hoat':10);
for i:=1 to m with ho[i] if hd='sh' then begin
write(ten:20,diachi:20,dt:12); writeln;
end;
writeln(' '); write('Kinh doanh':10);
for i:=1 to m with ho[i] if hd='kd' then begin
write(ten:20,diachi:20,dt:12); writeln;
end;
(30)write('San xuat':10); for i:=1 to m with ho[i] if hd='sx' then begin
write(ten:20,diachi:20,dt:12); writeln;
end; readln; End
Bài 24: Cho bảng N môn học
TT Tên môn học Lý thuyết Bài tập Tổng số
Vẽ sơ đồ thuật tốn viết chương trình pascal có sử dụng kiểu mảng ghi để thực :
- Nhập mảng (TT, tên môn học, lý thuyết, tập) từ bàn phím, tính tổng số số tiết lý thuyết cộng số tiết tập, ghi nội dung bảng tệp
- Mở lại tệp, đọc liệu vào nhớ
- Tính tổng cột lý thuyết, tổng cột tập, tổng cột tổng số
- Tính phần trăm tổng số tập, tổng số lý thuyết so với tổng toàn số
- Hiện kết hình đưa tệp Giải : (Dino)
uses crt;
type monhoc = record stt:integer;
ten:string[30]; lt:integer; th:integer; ts:integer; end;
var mon:array[1 100] of monhoc; m,i, tonglt,tongth,tong:integer; f1:file of monhoc;
f2:text;
ptlt,ptth:real; Begin
Clrscr;
write('Nhap so mon hoc: '); readln(m);
writeln('Nhap thong tin tung mon hoc: '); assign(f1,'dulieu1.txt');
(31)begin
with mon[i] begin
writeln('Mon thu: ',i); write('Ten mon hoc: '); readln(ten);
write('So gio ly thuyet: '); readln(lt);
write('So gio thuc hanh: '); readln(th);
ts:=lt+th; end;
write(f1,mon[i]); end;
Reset(f1);
for i:=1 to m read(f1,mon[i]); tonglt:=0 ;
tongth:=0; For i:=1 to m begin
tonglt:=tonglt+mon[i].lt; tongth:=tongth+mon[i].th; end;
tong:=tonglt+tongth; ptlt:=(tonglt/tong)*100 ; ptth:=(tongth/tong)*100; assign(f2,'dulieu2.txt'); rewrite(f2);
writeln('Tong cot so gio ly thuyet la: ',tonglt:3); writeln('Tong cot so gio thuc hanh la: ',tongth:3); writeln('Tong cot gio tong so la: ',tong:3);
writeln('So phan tram ly thuyet:',ptlt:3:1,'%'); writeln('So phan tram thuc hanh:',ptth:3:1,'%'); writeln(f2,'Tong cot so gio ly thuyet la: ',tonglt:3); writeln(f2,'Tong cot so gio thuc hanh la: ',tongth:3); writeln(f2,'Tong cot gio tong so la: ',tong:3);
writeln(f2,'So phan tram ly thuyet:',ptlt:3:1,'%'); writeln(f2,'So phan tram thuc hanh:',ptth:3:1,'%'); close(f1); close(f2);
readln; End
Bài 25: Một cửa hàng sách quản lý sách với thông tin sau :
Mã sách, tên sách, tên tác giả, thể loại, năm xuất bản, số lượng Hãy khai báo kiểu ghi thành phần nêu Lập sơ đồ thuật toán viết chương trình ngơn ngữ lập trình pascal thực công việc sau :
(32)- Ghi lên file SACH.TXT danh sách toàn số sách cửa hàng theo thứ tự giảm dần số lượng
Giải : (Dino) uses crt;
type quyensach = record masach:string[20]; ten:string[30]; tacgia:string[25]; theloai:string[20]; namxb,sl:integer; end;
var sach:array[1 100] of quyensach; m,n,i,j,dem:integer;
temp:quyensach; f:text;
Begin clrscr;
Write('Nhap so quyen sach: '); readln(n);
writeln('Nhap thong tin tung quyen sach: '); For i:=1 to n
with sach[i] begin
writeln('Sach thu ',i); write('Ma sach: '); readln(masach); write('Ten sach: '); readln(ten);
write('Tac gia: '); readln(tacgia);
write('Nam xuat ban: '); readln(namxb);
write('So luong: '); readln(sl);
end;
write('Nhap so m: '); readln(m);
writeln('Danh sach nhung quyen sach co so luong be hon ',m); writeln('STT':4,'Ten sach':20);
for i:=1 to n
if sach[i].sl<m then writeln(i:4,sach[i].ten:20); assign(f,'sach.txt');
rewrite(f);
for i:=1 to n-1 for j:=i+1 to n
(33)temp:=sach[i]; sach[i]:=sach[j]; sach[j]:=temp; end;
writeln(f,'STT':4,'Ten sach':20,'So luong':10); For i:=1 to n
with sach[i]
writeln(f,i:4,ten:20,sl:10); readln;
close(f); End
Bài 26: Hồ sơ thông tin sinh viên gồm thành phần sau :
Mã sinh viên, họ tên, năm sinh, quê quán, giới tính Hãy khai báo kiểu ghi chứa thành phần nêu Lập sơ đồ thuật tốn viết chương trình ngơn ngữ lập trình pascal thực yêu cầu sau :
- Một chương trình điều khiển (chương trình chính)
- Một chương trình để nhập liệu thơng tin sinh viên từ bàn phím vào máy - Một chương trình để tìm kiếm đưa thơng tin sinh viên có mã sinh viên
được nhập từ bàn phím
- Một chương trình tạo file lưu thông tin hồ sơ sinh viên theo thứ tự giảm dần năm sinh
Giải : uses crt;
type sinhvien=record msv:string[10]; ten,que:string[25]; ns:integer;
gt:string[5]; end;
var sv:array[1 100] of sinhvien; m,i,j:integer;
f:text;
temp:sinhvien; procedure nhap; begin
Clrscr;
write('Nhap so sinh vien: '); readln(m);
writeln('Nhap thong tin sinh vien'); for i:=1 to m
with sv[i] begin
writeln('Sinh vien thu ',i); write('Ma SV: ');
(34)write('Ho ten: '); readln(ten);
write('Nam sinh: '); readln(ns);
write('Que quan: '); readln(que);
write('Gioi tinh: '); readln(gt);
end; end;
Procedure tracuu; var kt:boolean; temp1:string[10]; x:integer;
begin
write('Nhap Ma sv can tra cuu: '); readln(temp1);
kt:=false;
for i:=1 to m
if sv[i].msv=temp1 then begin
kt:=true; x:=i; end;
if kt=true then with sv[x] begin
writeln('Thong tin hoc sinh co ma sv la ',temp1); writeln('Ho ten: ',ten);
writeln('Nam sinh: ',ns); writeln('Gioi tinh: ',gt); writeln('Que quan: ',que); end
else writeln('Ma sv ban vua nhap khong co'); end;
procedure ghitep; begin
assign(f,'abc.txt'); rewrite(f);
for i:=1 to m-1 for j:=i+1 to m
if sv[i].ns>sv[j].ns then begin
(35)writeln(f,'STT':4,'Ho ten':25,'Nam sinh':10);
{Minh chi hien thi tung nay,ai thich hien thi them thi them vao nhe} for i:=1 to m
with sv[i]
writeln(f,i:4,ten:25,ns:10); close(f);
end; Begin Nhap; tracuu; ghitep; readln; End
Bài 27: Cho trước danh sách tên đội bóng tham gia mùa giải kết thi đấu đội Kết thi đấu đội ghi ma trận vuông gồm kết thắng (3 điểm), hòa (1 điểm), thua (0 điểm) tổ chức sau : Các phần tử thuộc đường chéo gán 0, phần tử aij khác có ý nghĩa :
aij= đội i thắng đội j aij= đội i hòa đội j aij= đội i thua đội j
Hãy viết chương trình để thực yêu cầu sau : - Một chương trình nhập liệu từ bàn phím - Một chương trình tính điểm đội
- Một chương trình xếp theo thứ tự đội sau mùa giải theo thứ tự giảm dần
- Một chương trình ghi kết vào tệp chương trình hình theo định dạng sau :
Dòng : KET QUA BONG DA
Dòng : Số đội bóng tham gia mùa giải
Các dòng dòng ghi : STT, hai dấu cách, số điểm - Một chương trình gọi chương trình
Giải : Uses crt;
Var i,j,m,Temp1:integer; f1:text;
Temp:string[25];
Doi:array[1 20] of string[25]; S:array[1 20] of integer; A:array[1 20,1 20] of integer; Procedure Nhap;
Begin
Write('Nhap so doi: '); Readln(m);
For i:=1 to m Begin
(36)End;
Writeln('Nhap ket qua tung tran dau theo ma tran vuong: '); For i:=1 to m
For j:=1 to m Begin
Write('A[',i,j,']= '); Readln(A[i,j]); End;
End;
Procedure Tinhdiem; Begin
Fillchar(S,Sizeof(s),0); {Gan tat ca phan tu S = 0} For i:=1 to m
For j:=1 to m
If i<>j then {Khong tinh duong cheo chinh} Begin
If A[i,j]=3 then S[i]:=S[i]+3 Else
If A[i,j]=1 then Begin
S[i]:=S[i]+1; {Vi doi hoa nen so diem ca cung se tang len 1} S[j]:=S[j]+1;
End
Else S[j]:=S[j]+3; {A[i,j]=0 > Doi J duoc diem, I dc diem} End;
End;
Procedure Sapxep; Begin
For i:=1 to m-1 For j:=i+1 to m If S[i]<S[j] then Begin
Temp:=Doi[i]; Doi[i]:=Doi[j]; Doi[j]:=Temp; Temp1:=S[i]; S[i]:=S[j]; S[j]:=Temp1; End;
End;
Procedure Ghitep; Begin
Assign(f1,'Ketquathidau.txt'); Rewrite(f1);
Writeln(f1,'KET QUA THI DAU');
Writeln(f1,'STT':4,'TEN DOI BONG':25,'SO DIEM':10); For i:=1 to m
(37)Write(f1,i:4,Doi[i]:25,S[i]:10); Writeln(f1);
End; Close(f1); End;
Procedure Inra; Begin
Writeln('KET QUA THI DAU'); Writeln('So doi bong tham gia: ',m);
Writeln('STT':4,'TEN DOI BONG':25,'SO DIEM':10); For i:=1 to m
Begin
Write(i:4,Doi[i]:25,S[i]:10); Writeln;
(38)Website HOC247 cung cấp môi trường học trực tuyến sinh động, nhiều tiện ích thơng minh, nội dung giảng biên soạn công phu giảng dạy giáo viên nhiều năm kinh nghiệm, giỏi kiến thức chuyên môn lẫn kỹ sư phạm đến từ trường Đại học trường chuyên danh tiếng
I. Luyện Thi Online
- Luyên thi ĐH, THPT QG: Đội ngũ GV Giỏi, Kinh nghiệm từ Trường ĐH THPT danh tiếng xây dựng khóa luyện thi THPTQG các mơn: Tốn, Ngữ Văn, Tiếng Anh, Vật Lý, Hóa Học Sinh Học - Luyện thi vào lớp 10 chun Tốn: Ơn thi HSG lớp 9 luyện thi vào lớp 10 chuyên Toán
trường PTNK, Chuyên HCM (LHP-TĐN-NTH-GĐ), Chuyên Phan Bội Châu Nghệ An trường Chuyên khác TS.Trần Nam Dũng, TS Pham Sỹ Nam, TS Trịnh Thanh Đèo Thầy Nguyễn Đức Tấn
II. Khoá Học Nâng Cao HSG
- Toán Nâng Cao THCS: Cung cấp chương trình Tốn Nâng Cao, Tốn Chun dành cho em HS THCS
lớp 6, 7, 8, u thích mơn Tốn phát triển tư duy, nâng cao thành tích học tập trường đạt điểm tốt kỳ thi HSG
- Bồi dưỡng HSG Tốn: Bồi dưỡng phân mơn Đại Số, Số Học, Giải Tích, Hình Học và Tổ Hợp dành cho học sinh khối lớp 10, 11, 12 Đội ngũ Giảng Viên giàu kinh nghiệm: TS Lê Bá Khánh Trình, TS Trần Nam Dũng, TS Pham Sỹ Nam, TS Lưu Bá Thắng, Thầy Lê Phúc Lữ, Thầy Võ Quốc Bá Cẩn đơi HLV đạt thành tích cao HSG Quốc Gia
III. Kênh học tập miễn phí
- HOC247 NET: Website hoc miễn phí học theo chương trình SGK từ lớp đến lớp 12 tất môn học với nội dung giảng chi tiết, sửa tập SGK, luyện tập trắc nghiệm mễn phí, kho tư liệu tham khảo phong phú cộng đồng hỏi đáp sôi động
- HOC247 TV: Kênh Youtube cung cấp Video giảng, chuyên đề, ôn tập, sửa tập, sửa đề thi miễn phí từ lớp đến lớp 12 tất mơn Tốn- Lý - Hố, Sinh- Sử - Địa, Ngữ Văn, Tin Học Tiếng Anh
Vững vàng tảng, Khai sáng tương lai
Học lúc, nơi, thiết bi – Tiết kiệm 90%
Học Toán Online Chuyên Gia
Kê