Считать матрицу из файла - 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.
Объяснение кода листинга программы
- Создается файл с именем
input.dat
, если он не существует, то создается новый файл. - Записывается размер матрицы 10x10 в файл.
- Заполняется матрица случайными числами от -50 до 100.
- Записывается размер матрицы и сама матрица считываются из файла.
- Проверяется корректность считанного размера матрицы.
- Проверяется корректность считанных данных матрицы.
- Выводится размер матрицы и сама матрица.
- Закрывается файл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д