CÁC BÀI TẬP VỀ TỆP
BÀI TẬP 1
Nhập một mảng
2 chiều m dòng, n cột từ
file BANGSO.TXT. Cấu trúc file như
sau: dòng đầu là 2 số m
và n, cách nhau bằng dấu
cách, m dòng sau, mỗi dòng n số
nguyên.
a)
Hãy in ra những số
là số nguyên tố của mảng.
b)
Tìm vị trí phần tử lớn nhất trong mảng.
c)
Sắp xếp mỗi
dòng của mảng tăng
dần và in ra mảng dạng
ma trận.
HƯỚNG DẪN
Ta khai báo một mảng 2 chiều
và nhập dữ liệu
từ file vào mảng. Quá trình nhập từ file văn
bản giống như
nhập từ bàn phím, không cần thực hiện
kiểm tra dữ liệu.
Để sắp xếp mảng
theo yêu cầu, ta thực
hiện sắp xếp
từng dòng của mảng
bằng cách viết một
thủ tục sắp
xếp (kiểu đổi
chỗ cho đơn giản)
coi mỗi dòng của mảng
như 1 mảng 1 chiều.
Chương trình:
var m,n : integer;
a :
array[1..100,1..100] of integer;
(* Nhập dữ liệu
*)
procedure nhap;
var f : text;
i,j : integer;
begin
assign(f,'BANGSO.TXT'); reset(f);
readln(f,m,n);
for i := 1 to m do
for j := 1 to n do read(f,a[i,j]);
close(f);
end;
function ngto(k :
integer): boolean;
var i : integer;
begin
ngto := false;
if k < 2 then exit;
for i := 2 to round(sqrt(k)) do
if k mod i = 0 then exit;
ngto := true;
end;
procedure inngto;
var i,j : integer;
begin
writeln('Cac phan tu nguyen to cua mang:');
for i := 1 to m do
for j := 1 to n do
if ngto(a[i,j]) then write(a[i,j],' ');
writeln;
end;
procedure timmax;
var max,i,j,im,jm :
integer;
begin
max := a[1,1]; im := 1; jm := 1; {im, jm lưu
toạ độ phần
tử đạt max}
for i := 1 to m do
for j := 1 to n do
if max < a[i,j] then begin
max := a[i,j]; {mỗi lần
gán max thì gán toạ độ
luôn}
im := i; jm := j;
end;
writeln('Phan tu lon nhat bang la A[',im,',',jm,']=',max);
end;
{Thủ tục thực
hiện sắp xếp
tăng dần dòng thứ
k. Các phần từ
dòng k có dạng a[k,i]}
procedure xepdong(k:
integer);
var i,j, tg : integer;
begin
for i := 1 to n do
for j := i+1 to n do
if a[k,i] > a[k,j] then begin
tg := a[k,i]; a[k,i] := a[k,j]; a[k,j] := tg;
end;
end;
procedure sapxep;
var i,j : integer;
begin
for i := 1 to m do xepdong(i); {sắp xếp từng dòng}
writeln('Mang sau khi sap xep:');
for i := 1 to m do begin
{in dạng ma trận}
for j := 1 to n do write(a[i,j] : 5); {in các phần
tử trên 1 dòng}
writeln;
{in hết 1 dòng thì xuống dòng}
end;
end;
BEGIN
nhap;
inngto;
timmax;
sapxep;
END.
BÀI TẬP 2
Nhập 2 số m, n từ
bàn phím, sau đó
sinh ngẫu nhiên m´n số nguyên ngẫu
nhiên có giá trị từ
15 đến 300 để ghi vào file BANG.TXT. Sau đó thực
hiện các yêu cầu sau:
a)
In m´n số đã sinh dạng ma trận
m dòng, n cột.
b)
In ra các số chính phương.
Yêu cầu: không được dùng mảng
2 chiều để lưu
trữ dữ liệu.
HƯỚNG DẪN
Do yêu cầu không được dùng mảng
2 chiều để lưu
trữ dữ liệu
nên ta sẽ đọc
file đến đâu,
xử lí đến đấy.
-
Để sinh các số ngẫu
nhiên từ a đến b, ta dùng biểu
thức a + random(b-a+1).
-
Để kiểm tra số k
có phải là số chính phương
không, ta lấy căn
bậc 2 của k, làm tròn rồi
bình phương. Nếu kết
quả bằng k thì k là số
chính phương. Tức là
kiểm tra sqr(round(sqrt(k))) = k.
Chương trình:
var m,n : integer;
f
: text;
procedure sinh;
var
i,j : integer;
begin
write('Nhap vao 2 so m,n: '); readln(m,n);
assign(f,'BANG.TXT'); rewrite(f);
writeln(f,m,' ',n);
for i := 1 to m do begin
for j := 1 to n do
write(f,15 + random(300-15+1) : 6); {sinh số ngẫu nhiên từ
15 đến 300}
writeln(f);
end;
close(f);
end;
{Hàm chính phương}
function cp(k : integer)
: boolean;
begin
if sqr(round(sqrt(k))) = k then cp := true
else cp := false;
end;
procedure chinhphuong;
var
i,j,k : integer;
begin
assign(f,'BANG.TXT'); reset(f);
readln(f,m,n);
writeln('CAC SO CHINH PHUONG CUA BANG:');
for i := 1 to m do begin
for j := 1 to n do begin
read(f,k);
if cp(k) then
write(k,' '); {vừa đọc
vừa xử lí}
end;
end;
close(f);
end;
procedure inbang;
var
i,j,k : integer;
begin
assign(f,'BANG.TXT'); reset(f); {mở lại để in dạng
ma trận}
readln(f,m,n);
writeln(#10,'IN BANG DANG MA TRAN:');
for i := 1 to m do begin
for j := 1 to n do begin
read(f,k);
write(k : 6); {đọc đến đâu
in đến đó}
end;
writeln;
end;
close(f);
end;
BEGIN
sinh;
chinhphuong;
inbang;
END.
Không có nhận xét nào:
Đăng nhận xét