Считать матрицу из файла - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Модифицировать программу из предыдущего задания так, чтобы сначала читались из файла число строк массива, затем число столбцов и, наконец, все элементы массива построчно. Размеры, прочитанные из файла не должны превышать размеры массива, указанные при его создании, в противном случае выдается сообщение об ошибке. Предыдущее: Написать программу, которая создает двумерный статический массив и заполняет его из типизированного файла, читая последовательно элементы первой строки, потом второй и т.д. Если элементов в файле не хватает, то выдается сообщение об ошибке. Файл создать с помощью программы из предыдущего задания. Собсна, само задание. Вот код, который я написал, но который довольно таки не верно работает Помогите пожалуйста кто чем сможет.
program typfile;
uses crt;
const y=2; c=10;
 
type Telem=single;
     tfile=file of Telem;
     Tmas=array[1..y,1..c] of Telem;
var i,N,G,k,J,mm,nn:longint; f:tfile; W:Telem; Table:Tmas;
 
begin
clrscr;
writeln('N-?');
readln(N);
k:=0;
Randomize;
assign(f,'fignya123.txt');
rewrite(f);
 
writeln('nn,mm-?');
readln(nn,mm);
for i:=1 to N+2 do
begin
if(i=0)then write(f,y);
if(i=0)then write(f,c);
W:=Random(10);
write(f,W);
end;
Close(f);
reset(f);
{$I-}
while (i<>2) do
begin
     if(i=0) then
     begin
     read(f,w);
     mm:=round(w);
     end;
     if(i=1) then
     begin
     read(f,w);
     nn:=round(w);
     end;
     inc(i);
for i:= 1 to y do
         for j:= 1 to c do
         begin
          read(f,w);
         Table[i,j]:= w;
         end;
if (ioresult <> 0) and (k=0) then
begin writeln('Ошибка! Не хватает элементов в исходном файле.');k:=1;end;
end;
{$I+}
Close(F);
   for j:= 1 to y do
   begin
  for G:=1 to c do
  write (Table[j,G]:6:2);
  writeln;
   end;
   readln;
end.

Решение задачи: «Считать матрицу из файла»

textual
Листинг программы
label Done;
const
  maxm=100; maxn=100; LLIM=-50; RLIM=101; W=3;
var
  a: array [1..maxm,1..maxn] of Integer;
  m, n, i, j, t: Integer; 
  f: file of Integer;
begin
  Randomize;
  Assign(f,'input.dat');
  {$IFDEF FCreate}
  Rewrite(f);
  m:=10; n:=10; Write(f,m,n);
  for i:=1 to m do for j:=1 to n do begin
    t:=LLIM+Random(RLIM); Write(f,t);
  end;
  {$ENDIF}
  {$I-}
  Reset(f);
  if IOResult<>0 then begin
    WriteLn('*** Ошибка открытия файла.');
    Halt;
  end;
  Read(f,m,n);
  if IOResult<>0 then begin
    WriteLn('*** Ошибка чтения размера массива.');
    goto Done;
  end;
  if (m>0) and (m<=maxm) and (n>0) and (n<=maxn) then begin
    for i:=1 to m do for j:=1 to n do Read(f,a[i,j]);
    if IOResult<>0 then begin
      WriteLn('*** Ошибка чтения массива: недостаточно данных.');
      goto Done;
    end;
    if not EOF(f) then begin
      WriteLn('*** Ошибка чтения массива: избыток данных.');
      goto Done;
    end;
  end else begin
    WriteLn('*** Ошибка: размер массива [',m,',',n,'] вне допустимого диапазона ',
      '[1..',maxm,',1..',maxn,']');
    goto Done;
  end;
  WriteLn('А[1..',m,',1..',n,']=');
  for i:=1 to m do begin for j:=1 to n do Write(' ',a[i,j]:W); WriteLn; end;
Done:
  Close(f);
end.

Объяснение кода листинга программы

  1. Создается файл с именем input.dat, если он не существует, то создается новый файл.
  2. Записывается размер матрицы 10x10 в файл.
  3. Заполняется матрица случайными числами от -50 до 100.
  4. Записывается размер матрицы и сама матрица считываются из файла.
  5. Проверяется корректность считанного размера матрицы.
  6. Проверяется корректность считанных данных матрицы.
  7. Выводится размер матрицы и сама матрица.
  8. Закрывается файл.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы