Tải bản đầy đủ (.pdf) (38 trang)

Bài tập môn Tin học đại cương có lời giải

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.09 MB, 38 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>BÀI TẬP MÔN TIN HỌC ĐẠI CƯƠNG CĨ LỜI GIẢI </b>


<b>Bài 1 : Cho dãy x1,x2…xn. Tính giá trị trung bình của dãy </b>


Giải


var i,n : integer;


x:array[1..100] of real;
tong : real;


begin


write('n = ');readln(n);
for i:=1 to n do


begin


write('x[',i,']= ');
readln(x[i]);
end;


for i:=1 to n do
tong:=tong+x[i];


writeln('TB = ',tong/n);
readln;


end.


<b>Bài 2 : Cho dãy x1,x2…xn. Tác dãy trên thành 2 dãy : 1 dãy gồm các phần tử >=0, 1 dãy gồm </b>
các 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 do


begin


write('x[',i,'] = ');
readln(x[i]);
end;


for i:=1 to n do
if x[i]>=0 then
begin


k:=k+1;
y[k]:=x[i];
end


else
begin
l:=l+1;
z[l]:=x[i];
end;



</div>
<span class='text_page_counter'>(2)</span><div class='page_container' data-page=2>

for i:=1 to k do


writeln('y[',i,'] = ',y[i]:4:1);
Writeln('Day ca phan tu <0 la :');
for i:=1 to l do


writeln('z[',i,'] = ',z[i]:4:1);
readln;


end.


<b>Bài 3 : Cho dãy x1,x2…xn. Sắp xếp dãy số sao cho phần tử >=0 về đầu, phần tử <0 về cuối, </b>
trật tự các 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 do


begin


write('x[',i,'] = ');
readln(x[i]);
end;



for i:=1 to n do
if x[i]>=0 then
begin


k:=k+1;
y[k]:=x[i];
end;


for i:=1 to n do
if x[i]<0 then
begin


k:=k+1;
y[k]:=x[i];
end;


for i:=1 to k do


writeln('y[',i,'] = ',y[i]:4:1);
readln;


end.


<b>Bài 4 : Cho dãy x1,x2…xn. Xóa phần tử xk </b>
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 do


begin


</div>
<span class='text_page_counter'>(3)</span><div class='page_container' data-page=3>

readln(x[i]);
end;


write('Nhap vi tri k :');readln(k);
for i:=k to n-1 do


x[i]:=x[i+1];
for i:=1 to n-1 do


writeln('x[',i,']= ',x[i]:4:1);
readln;


end.


<b>Bài 5 : Cho dãy x1,x2…xn. Chèn M vào vị trí k </b>
<b>Cách 1 : </b>


var i,n,k,m : integer;


x,y : array[1..100] of real;
begin


write('Nhap n : ');readln(n);


for i:=1 to n do


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 do


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 do


writeln('y[',i,']= ',y[i]:4:1);
readln;


end.


<b>Cách 2 : Dino </b>
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 do
begin


</div>
<span class='text_page_counter'>(4)</span><div class='page_container' data-page=4>

readln(a[i]);
end;


write('Nhap vi tri k: ');
readln(k);


write('Nhap so m: ');
readln(m);


for i:=n downto k do a[i+1]:=a[i];
a[k]:=m;


writeln('Day sau khi chen la: ');
for i:=1 to n+1 do write(a[i]:4);
readln;



End.


<b>Bài 6 : Kiểu mảng - Cho bảng sau : </b>


STT Họ tên Điểm


1 ….. m


1..n


1. Tính điểm trung bình của từng sinh viên


2. Tìm ra những sinh viên có điểm trung bình cao nhất


3. Sắp xếp lại bảng trên theo trật tự tăng dần của điểm trung bình
<b>Giải : </b>


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 do



begin


write('HTSV ',i,' la ');
readln(ht[i]);


for j:=1 to m do
begin


write('DT mon ',j,' la ');
readln(diem[i,j]);
end;


end;


for i:=1 to n do
begin


</div>
<span class='text_page_counter'>(5)</span><div class='page_container' data-page=5>

for j:=1 to m do


tong[i]:=tong[i]+diem[i,j];
tb[i]:=tong[i]/m;


end;
max:=tb[1];
for i:=1 to n do
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 do


if tb[i]=max then
write(ht[i],', ');
for i:=1 to n-1 do
for k:=i+1 to n do
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 do
begin


tg2:=diem[i,j];
diem[i,j]:=diem[k,j];
diem[k,j]:=tg2;
end;


end;


writeln('Danh sach sau khi sap xep la :');
for i:=1 to n do


begin
writeln;


write(ht[i]);
for j:=1 to m do


write(' ',diem[i,j]:4:1,' ');
end;


readln;
end.


<b>Bài 7 : Cho ma trận Anxm, tính tổng từng hàng, từng cột của ma trận </b>
Giải


var i,m,n,j : integer;


</div>
<span class='text_page_counter'>(6)</span><div class='page_container' data-page=6>

write('Nhap so hang : ');readln(n);
write('Nhap so cot : ');readln(m);
for i:=1 to n do


for j:=1 to m do
begin


write('a[',i,',',j,']= ');
readln(a[i,j]);
end;


for i:=1 to n do
b1[i]:=0;
for i:=1 to m do
b2[i]:=0;
for i:=1 to n do


for j:=1 to m do
begin


b1[i]:=b1[i]+a[i,j];
b2[j]:=b2[j]+a[i,j];
end;


for i:=1 to n do
begin


writeln;


for j:=1 to m do
write(a[i,j]:4:1,' ');
end;


writeln;


writeln('Tong tung hang la : ');
for i:=1 to n do


writeln('Hang ',i,'= ',b1[i]:4:1);
writeln('Tong tung cot la : ');
for j:=1 to m do


writeln('Cot ',j,'= ',b2[j]:4:1);
readln;


end.



<b>Bài 8 : Cho ma trận Anxm, xóa hàng thứ k của ma trận. </b>
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 do


for j:=1 to m do
begin


</div>
<span class='text_page_counter'>(7)</span><div class='page_container' data-page=7>

end;


write('Nhap hang can xoa :');readln(k);
for j:=1 to m do


for i:=k to n-1 do
a[i,j]:=a[i+1,j];
for i:=1 to n-1 do
for j:=1 to m do


writeln('a[',i,',',j,']= ',a[i,j]:4:1);
readln;


end.



<b>Bài 9 : Cho ma trận Anxm tìm giá trị lớn nhất của ma trận, xóa hàng đầu tiên chứa giá trị lớn </b>
nhất đó.


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 do


for j:=1 to m do
begin


write('x[',i,',',j,']= ');
readln(x[i,j]);
end;


k:=1; max:=x[1,1];
for i:=1 to n do
for j:=1 to m do
if x[i,j]>max then
begin


max:=x[i,j];
k:=i;



end;


for j:=1 to m do
for i:=k to n-1 do
x[i,j]:=x[i+1,j];
for i:=1 to n-1 do
begin


writeln;


for j:=1 to m do
write(x[i,j],' ') ;
end;


readln;
end.


</div>
<span class='text_page_counter'>(8)</span><div class='page_container' data-page=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 do


for j:=1 to m do


begin


write('a[',i,',',j,']= ');
readln(a[i,j]);
end;


k:=1; max:=a[1,1];
for j:=1 to m do
for i:=1 to n do
if a[i,j]>max then
begin


max:=a[i,j];
k:=j;


end;


for i:=1 to n do
for j:=k to m-1 do
a[i,j]:=a[i,j+1];
for i:=1 to n do
begin


writeln;


for j:=1 to m-1 do
write(a[i,j],' ');
end;


readln;


end.


<b>Bài 11: Cho ma trận Anxm và vecto B[b1,b2,…,bn] (có n phần tử) tìm giá trị nhỏ nhất của ma </b>
trận, chèn vecto B vào cột cuối cùng chứa giá trị nhỏ nhất đó


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 do


</div>
<span class='text_page_counter'>(9)</span><div class='page_container' data-page=9>

begin


write('a[',i,',',j,']= ');
readln(a[i,j]);
end;


min:=a[1,1];
for i:=1 to n do
for j:=1 to m do
if min>a[i,j] then


min:=a[i,j];


writeln('Gia tri nho nhat la : ',min:4:1);
for j:=1 to m do


for i:=1 to n do
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 do


begin


write('b[',i,']= ');
readln(b[i]);
end;


for i:=1 to n do
for j:=1 to m+1 do
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 do
begin



writeln;


for j:=1 to m+1 do
write(y[i,j]:4:1,' ');
end;


readln;
end.


<b>Bài 12: Cho ma trận Anxm và vecto B[b1,b2,…,bm] (có m phần tử). Chèn vecto B vào hàng </b>
thứ k


Giải


var i,j,k,n,m:integer;


</div>
<span class='text_page_counter'>(10)</span><div class='page_container' data-page=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 do


for j:=1 to m do
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 do


begin


write('b[',i,']= ');
readln(b[i]);
end;


for j:=1 to m do
for i:=1 to n+1 do
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 do
begin



writeln;


for j:=1 to m do
write(y[i,j]:4:1,' ');
end;


end
else


writeln('K ko co thuoc hang can chen ');
readln;


end.


<b>Bài 13: Cho ma trận Anxm tìm tổng phần tử dương trong tam giác trên và tích các phần tử </b>
âm trong tam giác dưới. So sánh tổng và tích


Giải


</div>
<span class='text_page_counter'>(11)</span><div class='page_container' data-page=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 do
for j:=1 to n do
begin



write('a[',i,',',j,']= ');
readln(a[i,j]);
end;


tong:=0;


for i:=1 to n-1 do
for j:=i+1 to n do
if a[i,j]>=0 then
tong:=tong+a[i,j];
tich:=1;


for i:=2 to n do
for j:=1 to i-1 do
if a[i,j]<0 then
k:=k+1;
if k=0 then
tich:=0
else


for i:=2 to n do
for j:=1 to i-1 do
if a[i,j]<0 then
tich:=tich*a[i,j];
for i:=1 to n do
begin


writeln;



for j:=1 to n do
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.


</div>
<span class='text_page_counter'>(12)</span><div class='page_container' data-page=12>

STT Họ tên Điểm danh


1 ….. m


1…n


1. Đếm số buổi đi học, nghỉ học có phép, nghỉ học khơng phép


2. Đưa ra những sinh viên không được thi biết điều kiện không được thi là 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 do



with sv[i] do
begin


writeln('Hoc sinh thu ',i);
write('Ho ten: ');


readln(ten);
dh:=0;
kp:=0;
cp:=0;


for j:=1 to m do
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: ');


</div>
<span class='text_page_counter'>(13)</span><div class='page_container' data-page=13>

with sv[i] do
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>Bài 15 : Cho trước tệp văn bản TEN.TXT ghi họ tên sinh viên của một lớp, trong đó họ tên </b>
mỗi người chiếm 1 dòng và tệp văn bản DIEMDANH.TXT ghi kết quả điểm danh của mỗi
người theo quy tắc :


+ Có mặt đánh dấu “c”; vắng có lý do “v”; vắng khơng lý do “k”


+ Đánh dấu điểm danh của mỗi sinh viên được ghi liên tiếp trên 1 dịng
Vẽ sơ đồ thuật tốn và viết chương trình pascal để


1. Thống kê số buổi đi học, số buổi vắng (có và khơng lý do) đối với từng sinh viên.
2. Lập danh sách những sinh viên đi học chăm chỉ nhất (có số buổi có mặt cao nhất) và


hãy cho biết co bao nhiêu sinh viên như thế.
3. Kết quả ghi vào tệp ketqua.txt theo quy cách sau


- Mỗi sinh viên chiếm 1 dịng gồm các 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ý do



- Các dịng tiếp theo : Họ tên sinh viên chăm chỉ nhất (họ tên mỗi sinh viên viết trên
1 dòng)


- Dòng cuối cùng : số sinh viên đi học chăm chỉ nhất
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


</div>
<span class='text_page_counter'>(14)</span><div class='page_container' data-page=14>

i:=0;


while not eof(f1) do
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) do
begin


i:=i+1;
j:=0;


while not eoln(f2) do
begin


j:=j+1;


read(f2,sv[i].diemdanh[j]);
end;


readln(f2);
end;


m:=j;
close(f2);


for i:=1 to n do
begin


sv[i].dh:=0;
sv[i].cp:=0;
sv[i].nh:=0;
for j:=1 to m do


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 do


if sv[i].dh>max then
max:=sv[i].dh;
for i:=1 to n do


if sv[i].dh=max then
begin


</div>
<span class='text_page_counter'>(15)</span><div class='page_container' data-page=15>

sv1[t]:=sv[i];


end;


write('Thong ke so buoi di hoc cua sinh vien');
for i:=1 to n do


begin
writeln;


write(i,' ',sv[i].ht:10,' ');
for j:=1 to m do


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 do


begin
writeln;


write(i,' ',sv1[i].ht:10);
end;


assign(f3,'ketqua.txt');
rewrite(f3);



for i:=1 to n do
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 do


writeln(f3,sv1[k].ht);


write(f3,'so sv di hoc cham chi nhat la : ',t);
close(f3);


readln;
end.


<b>Bài 16 : Cho trước tệp văn bản TEN.TXT ghi họ tên các chủ hộ của một phường, trong đó </b>
mỗi dịng ghi họ tên của một chủ hộ và tệp văn bản SODIEN.TXT ghi số lượng điện các hộ
tiêu thụ trong tháng, trong đó số lượng điện tiêu thụ của mỗi hộ ghi trên 1 dòng, số lượng
điện các tháng ghi cách nhau 1 dấu cách


Vẽ sơ đồ thuật tốn và viết chương trình pascal để :


1. Tính số lượng điện trung bình hàng tháng của mỗi hộ


</div>
<span class='text_page_counter'>(16)</span><div class='page_container' data-page=16>

Kết quả ghi vào tệp văn bản KETQUA.TXT theo quy cách sau :


- Mỗi hộ gia đình chiếm 1 dịng gồm các 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
của hộ


- Dòng tiếp theo : Số điện tiêu thụ trung bình ít nhất trong phường


- Các dịng tiếp theo : Họ tên các chủ hộ có số lượng điện tiêu thụ trung bình hàng
tháng ít nhất, họ tên mỗi chủ hộ viết trên 1 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) do
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) do
begin


i:=i+1;
j:=0;


while not eoln(f2) do
begin


j:=j+1;



read(f2,ch[i].sodien[j]);
end;


readln(f2);
end;


</div>
<span class='text_page_counter'>(17)</span><div class='page_container' data-page=17>

close(f2);
for i:=1 to n do
begin


tong:=0;


for j:=1 to m do


tong:=tong+ch[i].sodien[j];
ch[i].tb:=tong/m;


end;


min:=ch[1].tb;
for i:=1 to n do
if ch[i].tb<min then
min:=ch[i].tb;
t:=0;


for i:=1 to n do
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 do
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 trong phuong la : ',min:3:1);
writeln(f3,'Ten cac chu ho co luong dien tieu thu it nhat la :');
for k:=1 to t do


writeln(f3,k,' ',ch1[k].ht:10);
close(f3);


readln;
end.


<b>Bài 17 : Vẽ sơ đồ thuật toán và viết chương trình Pascal thực hiện các cơng việc cho bài toán </b>
sau :


Cho một danh sách lớp :



TT Họ tên Kết quả học tập Phân loại


</div>
<span class='text_page_counter'>(18)</span><div class='page_container' data-page=18>

Phân loại bằng A nếu kết quả học tập >=8
Phân loại bằng B nếu kết quả học tập >=6
Phân loại bằng C nếu kết quả học tập >=5
Phân loại bằng D nếu kết quả học tập >=4
Phân loại bằng E nếu kết quả học tập < 4
2. Ghi danh sách ra tệp


3. Mở tệp, đọc dữ liệu vào bộ nhớ trong


4. Một chương trình con sắp xếp lại danh sách tăng dần theo cột phân loại
5. Hiện lại danh sách sau khi sắp 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 do


with ds[i] do
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 ra tep DANHSACH.INP =}
assign(f,'DANHSACH.inp');


</div>
<span class='text_page_counter'>(19)</span><div class='page_container' data-page=19>

for i:=1 to m do
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) do
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 do


for j:=i+1 to n do


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 do
with sv[i] do


writeln(i,' ',hoTen:30,' ',ketQua:6:2,' ',loai:3);
end;



</div>
<span class='text_page_counter'>(20)</span><div class='page_container' data-page=20>

sapXep;
hienThi;
readln
end.


<b>Bài 18: Cho ma trận Anxm, vẽ sơ đồ thuật tốn và viết chương trình có sử dụng chương trình </b>
con để thực hiện :


- Một chương trình con nhập mảng A, ghi ra tệp
- Mở lại tệp, đọc dữ liệu vào bộ nhớ trong


- Một chương trình con sắp xếp từng hàng của ma trận A theo thứ tự tăng dần
- Một chương trình con hiện ma trận đã sắp xếp ra màn hình và ghi ra 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 do


for j:=1 to m do


begin


write('a[',i,',',j,']= ');
readln(a[i,j]);
end;


assign(f1,'abc.txt');
rewrite(f1);


for i:=1 to n do
begin


for j:=1 to m do
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 ra la ');
for i:=1 to n do


begin


for j:=1 to m do


write(a[i,j]:4:1,' ');
writeln;


</div>
<span class='text_page_counter'>(21)</span><div class='page_container' data-page=21>

procedure doc;
begin


assign(f2,'abc.txt');
reset(f2);


i:=0;


while not eof(f2) do
begin


i:=i+1;
j:=0;


while not eoln(f2) do
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 do


begin
writeln;


for j:=1 to k do
write(b[i,j]:4:1,' ');
end;


end;


procedure sapxep;
begin


for i:=1 to t do
for j:=1 to k-1 do
for l:=j+1 to k do
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;


</div>
<span class='text_page_counter'>(22)</span><div class='page_container' data-page=22>

begin


for j:=1 to k do
write(b[i,j]:4:1);
writeln;


end;


assign(f3,'Kq.txt');
rewrite(f3);


for i:=1 to t do
begin


for j:=1 to k do
write(f3,b[i,j]:4:1);
writeln(f3);


end;
close(f3);
end;


begin
nhap;
doc;


sapxep;
hienra;
readln;
end.


<b>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 </b>
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ịng và tệp văn bản diem.txt ghi điểm trung bình (DTB) của mỗi sinh viên, trong đó
điểm của mỗi sinh viên ghi trên một dịng.


Viết chương trình để:


- Tìm xếp loại của từng sinh viên biết


Nếu DTB>=9, sinh viên sẽ xếp loại “xuat sac”
Nếu 8<=DTB<9, sinh viên sẽ xếp loại “Gioi”
Nếu 7<=DTB<8, sinh viên sẽ xếp loại “Kha”
Nếu DTB<7, sinh viên sẽ xếp loại “Trung binh”
- Tìm học bổng của từng sinh viên biết


Nếu DTB>=9, sinh viên sẽ được học bổng 240000
Nếu 8<=DTB<9, sinh viên sẽ được học bổng 180000
Nếu 7<=DTB<8, sinh viên sẽ được học bổng 120000
Nếu DTB<7, sinh viên sẽ không được học bổng


- Sắp xếp lại bảng trên theo trật tự giảm dần của điểm trung bình. Đưa kết quả ra
màn hình và ra file ketqua.txt dưới dạng sau


+ dịng 1 : KẾT QUẢ THI HỌC KỲ CỦA LỚP



+ dòng 2 trở đi mỗi dòng ghi: STT, 2 dấu cách, Họ tên, 2 dấu cách, điểm trung bình,
2 dấu cách, Xếp loại, 2 dấu cách, Học bổng của từng sinh viên


Giải:


</div>
<span class='text_page_counter'>(23)</span><div class='page_container' data-page=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)) do


begin


inc(n);


readln(f,sv[n].ht);
end;


close(f);


assign(f,'diem.txt');
reset(f);


for i:=1 to n do
readln(f,sv[i].dtb);
close(f);


{=== Xep Loai va Tinh Hoc Bong ===}
for i:=1 to n do


with sv[i] do
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


</div>
<span class='text_page_counter'>(24)</span><div class='page_container' data-page=24>

begin


xepLoai:='Trung Binh';
hocBong:=0;


end;


{=== Sap Xep ===}
for i:=1 to n-1 do
for j:=i+1 to n do


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 do


with sv[i] do


writeln(f,i:3,' ',ht:20,' ',dtb:6:1,xepLoai:15,' ',hocBong);
close(f);


{===Dua ket qua ra man hinh===}


writeln('KET QUA THI HOC KY CUA LOP:');
for i:=1 to n do


with sv[i] do


writeln(i:3,' ',ht:20,' ',dtb:6:1,xepLoai:15,' ',hocBong);
readln


end.


<b>Bài 20: Viết chương trình con tính chu vi, diện tích của đường trịn, hình chữ nhật, tam giác </b>
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;


</div>
<span class='text_page_counter'>(25)</span><div class='page_container' data-page=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 1 : ');readln(t1);
write('Nhap canh thu 2 : ');readln(t2);
write('Nhap canh thu 3 : ');readln(t3);
tamgiac(t1,t2,t3,cv2,s2);


readln;
end.


<b>Bài 21: Ngân hàng muốn được cung cấp một phần mềm mô phỏng hoạt động của máy ATM, </b>
các thông tin cần quản lý như sau : Số PIN, số tài khoản, họ và tên, CMTND, ngày làm thẻ, số
dư. Hãy khai báo kiểu bản ghi (Record) chứa các thành phần nêu trên. Lập sơ đồ thuật tốn
và viết chương trình bằng ngơn ngữ lập trình pascal thực hiện cá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 con để nhập dữ liệu thơng tin khách hàng từ bàn phím vào máy
- Một chương trình con lấy thơng tin số dư tài khoản hiển thị kết quả lên màn hình


với số PIN được nhập từ bàn phím


- Một chương trình con để rút tiền ra từ tài khoản theo quy trình :
1. Yêu cầu nhập số PIN


2. Nếu đúng số PIN, thì yêu cầu nhập số tiền cần rút. Nếu số tiền cần rút nhỏ


hơn hoặc bằng số dư thì trừ tiền trong số dư đúng bằng số tiền cần rút.
3. 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;


</div>
<span class='text_page_counter'>(26)</span><div class='page_container' data-page=26>

procedure nhap;
begin


write('Nhap so khach hang : ');readln(n);
for i:=1 to n do


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 ngay 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 con lay tong tin khach hang tu so PIN');
write('Nhap so pin tai khoan : ');readln(PIN);


dem:=0;


for i:=1 to n do


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 con rut tien');


write('Nhap so pin tai khoan : ');readln(PIN1);
dem1:=0;


for i:=1 to n do


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


</div>
<span class='text_page_counter'>(27)</span><div class='page_container' data-page=27>

kh[t].sodu:=kh[t].sodu-sotien;



writeln('So tien con lai cua quy khach la : ',kh[t].sodu:8:1);
writeln('Giao dich thanh cong');


end
else


writeln('So tien lon hon so du trong tai khoan');
writeln('Giao dich ko thanh cong');


end
else


writeln('Khong co so PIN nay');
end;


begin
nhap;


laythongtin;
ruttien;
readln;
end.


<b>Bài 22: Lập sơ đồ thuật toán và viết chương trình bằng ngơn ngữ lập trình Pascal để tính </b>
tổng mảng hai chiều số thực bằng cách viết các chương trình con sau :


- Nhập số liệu cho mảng hai chiều từ bàn phím


- Xuất kết quả mảng hai chiều ra màn hình theo dạng ma trận
- Tính tổng mảng hai chiều



Nội dung chương trình chính gồm :


1. Nhập số liệu cho mảng thứ nhất rồi nhập số liệu cho mảng thứ hai


2. Xuất kết quả mảng thứ nhất rồi xuất kết quả mảng thứ hai (ra màn hình)
3. Tính tổng 2 mảng trên rồi xuất kết quả ra màn 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 do
for j:=1 to n do
begin


write('PT[',i,',',j,']= ');
readln(c[i,j]);


end;
end;


Procedure xuat(var c:mang);


Begin


for i:=1 to m do
begin


</div>
<span class='text_page_counter'>(28)</span><div class='page_container' data-page=28>

end;
end;


Procedure tong;
Begin


for i:=1 to m do
for j:=1 to n do
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>Bài 23: Cho danh sách các chủ hộ sử dụng điện, mỗi chủ hộ biết các thông tin : Mã số, họ </b>
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 toán và viết chương trình bằng ngơn ngữ lập trình pascal (dùng cấu
trúc bản ghi) để thực hiện các yêu cầu sau đây :


- Nhập dữ liệu đã cho vào máy từ bàn phím


- Tìm số hộ của mỗi loại hợp đồng và tách danh sách trên thành ba danh sách tương
ứng với mỗi loại hợp đồng : SH, SX và KD.


- Đưa kết quả tìm được ra màn 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;


</div>
<span class='text_page_counter'>(29)</span><div class='page_container' data-page=29>

readln(m);


writeln('Nhap thong tin cac ho dan: ');
demsh:=0; demsx:=0; demkd:=0;
for i:=1 to m do


with ho[i] do
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 do
with ho[i] do
if hd='sh' then
begin


write(ten:20,diachi:20,dt:12);
writeln;



end;


writeln('______________________________________________________________');
write('Kinh doanh':10);


for i:=1 to m do
with ho[i] do
if hd='kd' then
begin


write(ten:20,diachi:20,dt:12);
writeln;


end;


</div>
<span class='text_page_counter'>(30)</span><div class='page_container' data-page=30>

write('San xuat':10);
for i:=1 to m do
with ho[i] do
if hd='sx' then
begin


write(ten:20,diachi:20,dt:12);
writeln;


end;
readln;
End.


<b>Bài 24: Cho bảng N môn học </b>



TT Tên môn học Lý thuyết Bài tập Tổng số


Vẽ sơ đồ thuật tốn và viết chương trình pascal có sử dụng kiểu mảng các bản ghi để thực
hiện :


- Nhập mảng (TT, tên môn học, giờ lý thuyết, giờ bài tập) từ bàn phím, tính tổng số
giờ bằng số tiết lý thuyết cộng số tiết bài tập, ghi nội dung bảng ra tệp


- Mở lại tệp, đọc dữ liệu vào bộ nhớ trong


- Tính tổng cột giờ lý thuyết, tổng cột giờ bài tập, tổng cột giờ tổng số


- Tính phần trăm của tổng số giờ bài tập, tổng số giờ lý thuyết so với tổng toàn bộ
số giờ


- Hiện các kết quả ra màn hình và đưa ra 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');


</div>
<span class='text_page_counter'>(31)</span><div class='page_container' data-page=31>

begin


with mon[i] do
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 do read(f1,mon[i]);
tonglt:=0 ;


tongth:=0;
For i:=1 to m do
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>Bài 25: Một cửa hàng sách quản lý sách với các thông tin sau : </b>


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 bản ghi các
thành phần nêu trên. Lập sơ đồ thuật tốn và viết chương trình bằng ngơn ngữ lập trình
pascal thực hiện các công việc sau :


</div>
<span class='text_page_counter'>(32)</span><div class='page_container' data-page=32>

- Ghi lên file SACH.TXT danh sách toàn bộ số sách của cửa hàng theo thứ tự giảm
dần về 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 do


with sach[i] do
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 do


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 do
for j:=i+1 to n do


</div>
<span class='text_page_counter'>(33)</span><div class='page_container' data-page=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 do


with sach[i] do


writeln(f,i:4,ten:20,sl:10);
readln;


close(f);
End.


<b>Bài 26: Hồ sơ thông tin sinh viên gồm nhưng thành phần sau : </b>


Mã sinh viên, họ và tên, năm sinh, quê quán, giới tính. Hãy khai báo kiểu bản ghi chứa các
thành phần nêu trên. Lập sơ đồ thuật tốn và viết chương trình bằng ngơn ngữ lập trình
pascal thực hiện cá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 con để nhập dữ liệu thơng tin sinh viên từ bàn phím vào máy
- Một chương trình con để tìm kiếm đưa ra thơng tin của sinh viên có mã sinh viên


được nhập từ bàn phím


- Một chương trình con tạo một file lưu thông tin hồ sơ sinh viên theo thứ tự giảm
dần của 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 do


with sv[i] do
begin


writeln('Sinh vien thu ',i);
write('Ma SV: ');



</div>
<span class='text_page_counter'>(34)</span><div class='page_container' data-page=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 do



if sv[i].msv=temp1 then
begin


kt:=true;
x:=i;
end;


if kt=true then
with sv[x] do
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 do
for j:=i+1 to m do



if sv[i].ns>sv[j].ns then
begin


</div>
<span class='text_page_counter'>(35)</span><div class='page_container' data-page=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 do


with sv[i] do


writeln(f,i:4,ten:25,ns:10);
close(f);


end;
Begin
Nhap;
tracuu;
ghitep;
readln;
End.


<b>Bài 27: Cho trước danh sách tên các đội bóng tham gia mùa giải và kết quả thi đấu giữa các </b>
đội. Kết quả thi đấu giữa các đội được ghi trong ma trận vuông gồm kết quả thắng (3 điểm),
hòa (1 điểm), thua (0 điểm) được tổ chức như sau : Các phần tử thuộc đường chéo chính
gán bằng 0, các phần tử aij khác có ý nghĩa :


aij= 3 đội i thắng đội j
aij= 1 đội i hòa đội j
aij= 0 đội i thua đội j



Hãy viết chương trình để thực hiện các yêu cầu sau :
- Một chương trình con nhập dữ liệu từ bàn phím
- Một chương trình con tính điểm của mỗi đội


- Một chương trình con sắp xếp theo thứ tự của các đội sau mùa giải theo thứ tự
giảm dần.


- Một chương trình con ghi kết quả vào tệp và một chương trình con hiện ra màn
hình theo định dạng sau :


Dịng 1 : KET QUA BONG DA


Dịng 2 : Số đội bóng tham gia mùa giải


Các dòng tiếp theo mỗi dòng ghi : STT, hai dấu cách, số điểm.
- Một chương trình chính gọi các chương trình con


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 do
Begin


</div>
<span class='text_page_counter'>(36)</span><div class='page_container' data-page=36>

End;


Writeln('Nhap ket qua tung tran dau theo ma tran vuong: ');
For i:=1 to m do


For j:=1 to m do
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 do


For j:=1 to m do



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 2 doi hoa nhau nen so diem ca 2 cung se tang len 1}
S[j]:=S[j]+1;


End


Else S[j]:=S[j]+3; {A[i,j]=0 --> Doi J duoc 3 diem, I dc 0 diem}
End;


End;


Procedure Sapxep;
Begin


For i:=1 to m-1 do
For j:=i+1 to m do
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 do


</div>
<span class='text_page_counter'>(37)</span><div class='page_container' data-page=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 do


Begin


Write(i:4,Doi[i]:25,S[i]:10);
Writeln;


</div>
<span class='text_page_counter'>(38)</span><div class='page_container' data-page=38>

Website HOC247 cung cấp một môi trường học trực tuyến sinh động, nhiều tiện ích thơng minh,
nội dung bài giảng được biên soạn công phu và giảng dạy bởi những <b>giáo viên nhiều năm kinh </b>
<b>nghiệm, giỏi về kiến thức chuyên môn lẫn kỹ năng sư phạm đến từ các trường Đại học và các </b>
trường chuyên danh tiếng.


<b>I.</b> <b>Luyện Thi Online</b>


- <b>Luyên thi ĐH, THPT QG:</b> Đội ngũ <b>GV Giỏi, Kinh nghiệm</b> từ các Trường ĐH và THPT danh tiếng xây
dựng các khóa <b>luyện thi THPTQG </b>các mơn: Tốn, Ngữ Văn, Tiếng Anh, Vật Lý, Hóa Học và Sinh Học.
- <b>Luyện thi vào lớp 10 chun Tốn: </b>Ơn thi <b>HSG lớp 9</b> và <b>luyện thi vào lớp 10 chuyên Toán</b> các


trường <i>PTNK, Chuyên HCM (LHP-TĐN-NTH-GĐ), Chuyên Phan Bội Châu Nghệ An và các trường Chuyên </i>
khác cùng TS.Trần Nam Dũng, TS. Pham Sỹ Nam, TS. Trịnh Thanh Đèo và Thầy Nguyễn Đức Tấn.


<b>II.</b> <b>Khoá Học Nâng Cao và HSG </b>


- <b>Toán Nâng Cao THCS:</b> Cung cấp chương trình Tốn Nâng Cao, Toán Chuyên dành cho các em HS THCS


lớp 6, 7, 8, 9 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 và đạt điểm tốt
ở các kỳ thi HSG.



- <b>Bồi dưỡng HSG Tốn:</b> Bồi dưỡng 5 phân mơn <b>Đại Số, Số Học, Giải Tích, Hình Học </b>và <b>Tổ Hợp</b> dành cho
học sinh các 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
<i>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 cùng đơi HLV đạt </i>
thành tích cao HSG Quốc Gia.


<b>III.</b> <b>Kênh học tập miễn phí</b>


- <b>HOC247 NET:</b> Website hoc miễn phí các bài học theo <b>chương trình SGK</b> từ lớp 1 đến lớp 12 tất cả các
môn học với nội dung bài giảng chi tiết, sửa bài tập SGK, luyện tập trắc nghiệm mễn phí, kho tư liệu tham
khảo phong phú và cộng đồng hỏi đáp sôi động nhất.


- <b>HOC247 TV:</b> Kênh <b>Youtube</b> cung cấp các Video bài giảng, chuyên đề, ôn tập, sửa bài tập, sửa đề thi miễn
phí từ lớp 1 đến lớp 12 tất cả các mơn Tốn- Lý - Hố, Sinh- Sử - Địa, Ngữ Văn, Tin Học và Tiếng Anh.


<i><b>Vững vàng nền tảng, Khai sáng tương lai </b></i>



<i><b> Học mọi lúc, mọi nơi, mọi thiết bi – Tiết kiệm 90% </b></i>


<i><b>Học Toán Online cùng Chuyên Gia </b></i>


</div>

<!--links-->

×