Bài 1: Nhập vào 1 mảng 2 chiều gồm 3 dòng, 4 cột. In ra màn hình các số theo từng dòng và cột đã nhập.
Bài giải:
uses crt;
type matranthuc=array[1..3,1..4] of integer;
var a:matranthuc;
i,j,n,m:integer;
(*****)
procedure xuatmatran(var x:matranthuc);
var i,j:integer;
begin
for i:=1 to 3 do
begin
for j:=1 to 4 do write(a[i,j]:5);
writeln;
end;
end;
begin
clrscr;
write('Nhap so dong:');readln(n);
write('Nhap so cot:');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('Nhap a[',i,',',j,']:');
readln(a[i,j]);
end;
xuatmatran(a);
readln;
end.
Bài 2: Cho ma trận vuông A cấp 4, với phần tử nguyên thuộc đoạn từ 1..100. Tìm phần tử lớn nhất, phần tử nhỏ nhất.
Bài giải:
uses crt;
type matranthuc=array[1..4,1..4] of integer;
var a:matranthuc;
i,j,m,n,max,min:integer;
(*****)
procedure xuatmatran(var x:matranthuc);
var i,j:integer;
begin
for i:=1 to 4 do
begin
for j:=1 to 4 do write(a[i,j]:5);
writeln;
end;
end;
(*****)
begin
clrscr;
for i:=1 to 4 do
for j:=1 to 4 do
begin
write('Nhap a[',i,',',j,']:');
readln(a[i,j]);
end;
xuatmatran(a);
max:=a[1,1];
for i:=1 to 4 do
for j:=1 to 4 do
if a[i,j]>max then max:=a[i,j];
min:=a[1,1];
for i:=1 to 4 do
for j:=1 to 4 do
if a[i,j]<min then min:=a[i,j];
writeln('PTLN la:',max);
write('PTNN la:',min);
readln;
end.
Bài 3: Cho ma trận vuông A cấp n với phần tử nguyên thuộc đoạn từ 1..100.
a) Sắp xếp tăng dần với từng dòng
b) Sắp xếp giảm theo từng cột
Bài giải:
uses crt;
type matranthuc=array[1..100,1..100] of integer;
var a:matranthuc;
i,j,m,n,k,x:integer;
(*****)
procedure xuatmatran(var t:matranthuc; n:integer);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:5);
writeln;
writeln;
end;
end;
(*****)
procedure sx(var s,t:integer);
var tam:integer;
begin
tam:=s;
s:=t;
t:=tam;
end;
(*****)
begin
clrscr;
write('Ban muon nhap ma tran vuong cap may:');readln(n);
for i:=1 to n do
for j:=1 to n do
begin
write('Nhap a[',i,',',j,']:');
readln(a[i,j]);
end;
writeln('Ma tran ban dau:');
xuatmatran(a,n);
writeln('Sx tang o tung dong la:');
for i:=1 to n do
for j:=1 to n do
for k:=j+1 to n do
if a[i,j]>a[i,k] then sx(a[i,j],a[i,k]);
xuatmatran(a,n);
writeln('Sx giam o tung cot la:');
for j:=1 to n do
for i:=1 to n do
for k:=i+1 to n do
if a[i,j]<a[k,j] then sx(a[i,j],a[k,j]);
xuatmatran(a,n);
readln;
end.
Bài 4: Nhập ma trận vuông cấp n. Xuất ra màn hình ma trận chuyển vị (đổi dòng thành cột).
Bài giải:
uses crt; {Matran chuyen vi}
type matranthuc=array[1..100,1..100] of integer;
var a:matranthuc;
i,j,m,n,k,x:integer;
(*****)
procedure xuatmatran(var t:matranthuc; n:integer);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:5);
writeln;
writeln;
end;
end;
(*****)
begin
clrscr;
write('Ban muon nhap ma tran vuong cap may:');readln(n);
for i:=1 to n do
for j:=1 to n do
begin
write('Nhap a[',i,',',j,']:');
readln(a[i,j]);
end;
writeln('Ma tran ban dau:');
xuatmatran(a,n);
writeln;
writeln('Ma tran chuyen vi la:');
for j:=1 to n do
begin
for i:=1 to n do
write(a[i,j]:5);
writeln;
writeln;
end;
readln;
end.
Bài 5: Cho ma trận vuông A cấp n với phần tử nguyên thuộc đoạn 1..100.
a) Tìm phần tử lớn nhất, phần tử nhỏ nhất.
b) In ra ma trận tam giác trên đường chéo chính.
c) In ra ma trận tam giác dưới đường chéo chính.
d) Sắp xếp tăng dần các phần tử đường chéo chính.
e) Tìm ma trận chuyển vị.
Bài giải:
uses crt;
type matranthuc=array[1..100,1..100] of integer;
var a:matranthuc;
i,j,max,min,n,x:integer;
(*****)
procedure xuatmatran(var t:matranthuc);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:5);
writeln;
writeln;
end;
end;
(*****)
procedure sx(var x,y:integer);
var tam:integer;
begin
tam:=x;
x:=y;
y:=tam;
end;
(*****)
begin
clrscr;
write('Ban muon nhap ma tran vuong cap may:');readln(n);
for i:=1 to n do
for j:=1 to n do
begin
write('Nhap a[',i,',',j,']:');
readln(a[i,j]);
end;
writeln('Ma tran ban dau:');
xuatmatran(a);
max:=a[1,1];
for i:=1 to n do
for j:=1 to n do
if a[i,j]>max then max:=a[i,j];
min:=a[1,1];
for i:=1 to n do
for j:=1 to n do
if a[i,j]<min then min:=a[i,j];
writeln('PTLN:',max);
writeln('PTNN:',min);
writeln('Ma tran tam giac tren duong cheo chinh:');
writeln;
for i:=1 to n do
begin
for j:=1 to n do
if j>i then
write(a[i,j]:5)
else write('':5);
writeln;
writeln;
end;
writeln('Matran tam giac duoi duong cheo chinh:');
writeln;
for i:=1 to n do
begin
for j:=1 to n do
if j<i then write(a[i,j]:5)
else write('':5);
writeln;
writeln;
end;
writeln('SX duong cheo chinh tang.');
for i:=1 to n-1 do
for k:=i+1 to n do
if a[i,i]>a[j,j]) then sx(a[i,i],a[j,j]);
xuatmatran(a);
writeln('Matran chuyen vi:');
for j:=1 to n do
begin
for i:=1 to n do
write(a[i,j]:5);
writeln;
writeln;
end;
readln;
end.
Bài 6: Sinh ngẫu nhiên dãy n số nguyên (n<2000).
a) Tìm phần tử nhỏ nhất và chỉ ra vị trí.
b) Tìm phần tử lớn thứ hai và chỉ ra vị trí
c) Tìm vị trí các dãy đoạn con dài nhất mà các phần tử là 0 (nếu có).
Bài giải:
uses crt;
var a:array[1..100] of integer;
min,max,vt,max2,vt2,vt1,n,i,j,vitri,tong,dem,max3:integer;
begin
clrscr;
write('Ban muon sinh ngau nhien bao nhiu so :');readln(n);
randomize;
for i:=1 to n do a[i]:=random(2000);
for i:=1 to n do write(a[i]:5);
writeln;
min:=a[1];vt1:=1;
max:=a[1];vt:=1;
for i:=1 to n do
begin
if a[i]<min then
begin
min:=a[i];
vt1:=i;
end;
if a[i]>max then
begin
max:=a[i];
vt:=i;
end;
end;
max2:=0;
for i:=1 to n do
if (i<>vt) and (a[i]>max2) then
begin
max2:=a[i];
vt2:=i;
end;
max3:=1;
dem:=0;
tong:=0;
for j:=1 to n do
begin
for i:=j to n do
begin
dem:=dem+1;
tong:=tong+a[i];
if (dem>max3) and (tong=0) then
begin
max3:=dem;
vitri:=j;
end;
end;
dem:=0;
tong:=0;
end;
writeln('a/ Phan tu nho nhat:',min,' vi tri ',vt1);
writeln('b/ Phan tu lon thu hai:',max2,' vi tri ',vt2);
if max3>1 then
writeln('c/ Do dai doan con:',max3,' vi tri bat dau:',vitri)
else writeln('c/ khong co');
readln;
end.
Bài 7: Cho một dãy gồm N số tự nhiên được sinh ngẫu nhiên có giá trị trong khoảng [1..100], các phần tử của dãy khác nhau từng đôi một và một số tự nhiên k được nhập từ bàn phím. Hãy tìm một dãy con dài nhất liên tiếp nhau sao cho tổng chia hết cho k. Cho biết độ dài và vị trí bắt đầu của dãy con tìm được.
Ví dụ: Với dãy số 1 3 4 2 7 ( N=5) và k =3
Kết quả: Độ dài của dãy con tìm được theo yêu cầu là 3, vị trí bắt đầu của dãy con tìm được là 2.
Bài giải:
uses crt;
var a:array[1..100] of integer;
i,vt,k,n,dem,j,tong,max:integer;
begin
clrscr;
write('Nhap n:');readln(n);
write('Nhap so k:');readln(k);
randomize;
a[1]:=random(10);
for i:=2 to n do
repeat
a[i]:=random(101);
until a[i]<>a[i-1];
for i:=1 to n do write(a[i]:3);
writeln;
tong:=0;
dem:=0;
max:=0;
for j:=1 to n do
begin
for i:=j to n do
begin
tong:=tong+a[i];
dem:=dem+1;
if tong mod k=0 then
if dem>max then
begin
max:=dem;
vt:=j;
end;
end;
tong:=0;
dem:=0;
end;
if max<>0 then
begin
writeln('Do dai cua day can tim:',max);
writeln('Vi tri bat dau:',vt);
end
else write('Ko co.');
readln;
end.