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