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

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

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

Модифицировать программу из предыдущего задания так, чтобы сначала читались из файла число строк массива, затем число столбцов и, наконец, все элементы массива построчно. Размеры, прочитанные из файла не должны превышать размеры массива, указанные при его создании, в противном случае выдается сообщение об ошибке. Предыдущее: Написать программу, которая создает двумерный статический массив и заполняет его из типизированного файла, читая последовательно элементы первой строки, потом второй и т.д. Если элементов в файле не хватает, то выдается сообщение об ошибке. Файл создать с помощью программы из предыдущего задания. Собсна, само задание. Вот код, который я написал, но который довольно таки не верно работает Помогите пожалуйста кто чем сможет.
Листинг программы
  1. program typfile;
  2. uses crt;
  3. const y=2; c=10;
  4. type Telem=single;
  5. tfile=file of Telem;
  6. Tmas=array[1..y,1..c] of Telem;
  7. var i,N,G,k,J,mm,nn:longint; f:tfile; W:Telem; Table:Tmas;
  8. begin
  9. clrscr;
  10. writeln('N-?');
  11. readln(N);
  12. k:=0;
  13. Randomize;
  14. assign(f,'fignya123.txt');
  15. rewrite(f);
  16. writeln('nn,mm-?');
  17. readln(nn,mm);
  18. for i:=1 to N+2 do
  19. begin
  20. if(i=0)then write(f,y);
  21. if(i=0)then write(f,c);
  22. W:=Random(10);
  23. write(f,W);
  24. end;
  25. Close(f);
  26. reset(f);
  27. {$I-}
  28. while (i<>2) do
  29. begin
  30. if(i=0) then
  31. begin
  32. read(f,w);
  33. mm:=round(w);
  34. end;
  35. if(i=1) then
  36. begin
  37. read(f,w);
  38. nn:=round(w);
  39. end;
  40. inc(i);
  41. for i:= 1 to y do
  42. for j:= 1 to c do
  43. begin
  44. read(f,w);
  45. Table[i,j]:= w;
  46. end;
  47. if (ioresult <> 0) and (k=0) then
  48. begin writeln('Ошибка! Не хватает элементов в исходном файле.');k:=1;end;
  49. end;
  50. {$I+}
  51. Close(F);
  52. for j:= 1 to y do
  53. begin
  54. for G:=1 to c do
  55. write (Table[j,G]:6:2);
  56. writeln;
  57. end;
  58. readln;
  59. end.

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

textual
Листинг программы
  1. label Done;
  2. const
  3.   maxm=100; maxn=100; LLIM=-50; RLIM=101; W=3;
  4. var
  5.   a: array [1..maxm,1..maxn] of Integer;
  6.   m, n, i, j, t: Integer;
  7.   f: file of Integer;
  8. begin
  9.   Randomize;
  10.   Assign(f,'input.dat');
  11.   {$IFDEF FCreate}
  12.   Rewrite(f);
  13.   m:=10; n:=10; Write(f,m,n);
  14.   for i:=1 to m do for j:=1 to n do begin
  15.     t:=LLIM+Random(RLIM); Write(f,t);
  16.   end;
  17.   {$ENDIF}
  18.   {$I-}
  19.   Reset(f);
  20.   if IOResult<>0 then begin
  21.     WriteLn('*** Ошибка открытия файла.');
  22.     Halt;
  23.   end;
  24.   Read(f,m,n);
  25.   if IOResult<>0 then begin
  26.     WriteLn('*** Ошибка чтения размера массива.');
  27.     goto Done;
  28.   end;
  29.   if (m>0) and (m<=maxm) and (n>0) and (n<=maxn) then begin
  30.     for i:=1 to m do for j:=1 to n do Read(f,a[i,j]);
  31.     if IOResult<>0 then begin
  32.       WriteLn('*** Ошибка чтения массива: недостаточно данных.');
  33.       goto Done;
  34.     end;
  35.     if not EOF(f) then begin
  36.       WriteLn('*** Ошибка чтения массива: избыток данных.');
  37.       goto Done;
  38.     end;
  39.   end else begin
  40.     WriteLn('*** Ошибка: размер массива [',m,',',n,'] вне допустимого диапазона ',
  41.       '[1..',maxm,',1..',maxn,']');
  42.     goto Done;
  43.   end;
  44.   WriteLn('А[1..',m,',1..',n,']=');
  45.   for i:=1 to m do begin for j:=1 to n do Write(' ',a[i,j]:W); WriteLn; end;
  46. Done:
  47.   Close(f);
  48. end.

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

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

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


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

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

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы