Матрица вещественных чисел А размерности m * n (m > n) записана на диске в виде файла с именем MATROLD.XXX. Не считывая матрицу в память, реорганизовать файл, сделав матрицу квадратной (n * n) путем удаления «лишних» строк, начиная с первой. Полученному файлу дать новое имя. Напечатать построчно полученную матрицу с указанием имени файла и ее максимальный элемент — Pascal(Паскаль)

uses crt;
const nmax=20;
      fname='MATROLD.XXX';
type mas=array[1..nmax] of real;
var f,g:file of mas;
    m,n,i,j,imx,k:byte;
    mx:real;
    a:mas;
    s:string;
begin
clrscr;
randomize;
assign(f,fname);
rewrite(f);
repeat
write('Количество строк от 2 до ',nmax,' m=');
readln(m);
until m in [2..nmax];
repeat
write('Количество столбцов от 1 до ',m-1,' n=');
readln(n);
until n in [1..m-1];
for i:=1 to m do
 begin
  for j:=1 to n do
  a[j]:=10*random;
  write(f,a);
 end;
close(f);
writeln('Содержание исходного файла:');
reset(f);
while not eof(f) do
 begin
  read(f,a);
  for j:=1 to n do
  write(a[j]:5:2);
  writeln;
 end;
close(f);
reset(f);
write('Новое имя файла :');
readln(s);
k:=m-n;
for i:=k to filesize(f)-1 do
 begin
  seek(f,i);
  read(f,a);
  seek(f,i-k);
  write(f,a);
 end;
rename(f,s);
close(f);
reset(f);
seek(f,n);
truncate(f);
close(f);
writeln('Содержание измененного файла ',s,':');
reset(f);
read(f,a);
mx:=a[1];
for i:=1 to n do
if a[i]>mx then mx:=a[i];
while not eof(f) do
 begin
  read(f,a);
  for i:=1 to n do
  if a[i]>mx then mx:=a[i];
 end;
close(f);
reset(f);
while not eof(f) do
 begin
  read(f,a);
  for j:=1 to n do
  write(a[j]:5:2);
  writeln;
 end;
close(f);
write('Максимальный элемент=',mx:0:2);
readln
end.

Leave a Comment

− 1 = 1