Считать и вывести матрицу из файла - Pascal ABC

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

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

Помогите! Проблема в том что программа считывает мтрицу. В файле находится матрица ввида 2 3 4 6 6 7 8 2 5 2 9 4 6 9 0 2 но программа выводит ее 2 3 4 6 6 7 8 2 5 2 9 4 6 9 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 . . . . . . . . . . . . . 0 0 0 0 0 0 0 0 0 0
Листинг программы
  1. uses crt;
  2. const t=0.000001;{îãðГ*Г*ГЁГ·ГЁГўГ*ГҐГ¬ Г·ГЁГ±Г«Г*, áëèçêèå ГЄ Г*îëþ, Г*Г* Г*ГЁГµ äåëèòü}
  3. n=10;
  4. type Tmatr=array[1..10,1..10]of real;
  5.  
  6. //Procedure Chtenie(a:Tmatr;n:integer);
  7. // var
  8. // f:text; c:char;
  9. {ÏðîöåäóðГ* Г§Г*ïîëГ*ГҐГ*ГЁГї (ГЁГ*ГЁГ¶ГЁГ*ëèçГ*Г¶ГЁГЁ) Г¬Г*Г±Г±ГЁГўГ* ГЁГ§ ГґГ*éëГ*}
  10. //Var i ,j: Integer; {i,j - ГЅГІГ® ïåðåìåГ*Г*Г*Гї äëÿ Г°Г*áîòû Г± ýëåìåГ*ГІГ*ìè Г¬Г*Г±Г±ГЁГўГ*}
  11. //Begin
  12. //End;
  13. procedure Per(n,k:integer;a:Tmatr;var p:integer);{ïåðåñòГ*Г*îâêГ* ñòðîê Г± Г¬Г*ГЄГ±. ГЈГ«Г*ГўГ*ûì ýëåìåГ*òîì}
  14. var z:real;
  15. j,i:integer;
  16. begin
  17. z:=abs(a[k,k]);
  18. i:=k;
  19. p:=0;
  20. for j:=k+1 to n do
  21. begin
  22. if abs(a[j,k])>z then
  23. begin
  24. z:=abs(a[j,k]);
  25. i:=j;
  26. p:=p+1;
  27. end;
  28. end;
  29. if i>k then
  30. for j:=k to n do
  31. begin
  32. z:=a[i,j];
  33. a[i,j]:=a[k,j];
  34. a[k,j]:=z;
  35. end;
  36. end;
  37. function znak(p:integer):integer;{èçìåГ*ГҐГ*ГЁГҐ Г§Г*Г*ГЄГ* ïðè ïåðåñòГ*Г*îâêå ñòðîê Г¬Г*òðèöû}
  38. begin
  39. if p mod 2=0 then
  40. znak:=1 else znak:=-1;
  41. end;
  42. function znak1(i,m:integer):integer;{èçìåГ*ГҐГ*ГЁГҐ Г§Г*Г*ГЄГ* ïðè ïåðåñòГ*Г*îâêå ñòðîê ïðè Г*Г*õîæäåГ*ГЁГЁ äîïîëГ*ГҐГ*ГЁГ©}
  43. begin
  44. if (i+m) mod 2=0 then
  45. znak1:=1 else znak1:=-1;
  46. end;
  47. procedure opr(n,p:integer;a:Tmatr;var det:real;var f:byte);{Г*Г*õîæäåГ*ГЁГҐ îïðåäåëèòåëÿ Г¬Г*òðèöû}
  48. var k,i,j:integer;
  49. r:real;
  50. begin
  51. det:=1.0;f:=0;
  52. for k:=1 to n do
  53. begin
  54. if a[k,k]=0 then per(k,n,a,p);
  55. det:=znak(p)*det*a[k,k];
  56. if abs(det)<t then
  57. begin
  58. f:=1;
  59. writeln('ГЋГЎГ°Г*ГІГ*îé Г¬Г*òðèöû Г*ГҐГІ!');
  60. readln;
  61. exit;
  62. end;
  63. for j:=k+1 to n do
  64. begin
  65. r:=a[j,k]/a[k,k];
  66. for i:=k to n do
  67. a[j,i]:=a[j,i]-r*a[k,i];
  68. end;
  69. end;
  70. end;
  71. procedure opr1(n,p:integer;d:Tmatr;var det1:real);{Г*Г*õîæäåГ*ГЁГҐ îïðåäåëåГ*ГЁГ© äëÿ äîïîëГ*ГҐГ*ГЁГ©}
  72. var k,i,j:integer;
  73. r:real;
  74. begin
  75. det1:=1.0;
  76. for k:=2 to n do
  77. begin
  78. if d[k,k]=0 then per(n,k,d,p);
  79. det1:=znak(p)*det1*d[k,k];
  80. for j:=k+1 to n do
  81. begin
  82. r:=d[j,k]/d[k,k];
  83. for i:=k to n do
  84. d[j,i]:=d[j,i]-r*d[k,i];
  85. end;
  86. end;
  87. end;
  88. Procedure Peresch(n,p:integer;var b:Tmatr;det1:real;var e:Tmatr);{âû÷èñëåГ*ГЁГҐ äîïîëГ*ГҐГ*ГЁГ©}
  89. var i,m,k,j:integer;
  90. z:real;
  91. d,c:Tmatr;
  92. begin
  93. for i:=1 to n do
  94. for m:=1 to n do
  95. begin
  96. for j:= 1 to n do {ïåðåñòГ*Г*îâêГ* ñòðîê}
  97. begin
  98. z:=b[i,j];
  99. for k:=i downto 2 do
  100. d[k,j]:=b[k-1,j];
  101. for k:=i+1 to n do
  102. d[k,j]:=b[k,j];
  103. d[1,j]:=z;
  104. end;
  105. for k:=1 to n do {ïåðåñòГ*Г*îâêГ* ñòîëáöîâ}
  106. begin
  107. z:=d[k,m];
  108. for j:=m downto 2 do
  109. c[k,j]:=d[k,j-1];
  110. for j:=m+1 to n do
  111. c[k,j]:=d[k,j];
  112. c[k,1]:=z;
  113. end;
  114. Opr1(n,p,c,det1);{âû÷èñëåГ*ГЁГҐ îïðåäåëèòåëåé}
  115. e[i,m]:=det1*znak1(i,m);{âû÷èñëåГ*ГЁГҐ äîïîëГ*ГҐГ*ГЁГ©}
  116. end;
  117. end;
  118. procedure Transp(a:Tmatr; n:integer;var at:Tmatr);{ГІГ°Г*Г*Г±ГЇГ®Г*èðîâГ*Г*ГЁГҐ Г¬Г*òðèöû}
  119. var k,j:integer;
  120. begin
  121. for k:= 1 to n do
  122. for j:=1 to n do
  123. at[k,j]:=a[j,k];
  124. end;
  125. Procedure Proverka(a,b:Tmatr; n:integer;var c:Tmatr);{ïðîâåðêГ* - ГіГ¬Г*îæåГ*ГЁГҐ ïðÿìîé Г¬Г*òðèöû Г*Г* îáðГ*ГІГ*ГіГѕ}
  126. var k,j,i:integer;
  127. z:real;
  128. begin
  129. for k:=1 to n do
  130. for j:=1 to n do
  131. begin
  132. c[k,j]:=0;
  133. for i:=1 to n do
  134. begin
  135. z:=a[i,j]*b[k,i];
  136. c[k,j]:=c[k,j]+z;
  137. end;
  138. end;
  139. end;
  140. procedure Vyvod(var a:Tmatr; n:integer);{âûâîä Г¬Г*òðèö Г*Г* ГЅГЄГ°Г*Г*}
  141. var k,j:integer;
  142. begin
  143. for k:=1 to n do
  144. begin
  145. for j:=1 to n do
  146. write(a[k,j],' ' );
  147. writeln;
  148. end;
  149. end;
  150. var k,j,i,p:integer;{n-Г°Г*çìåð Г¬Г*òðèöû,k-Г±Г·ГҐГІГ·ГЁГЄ ГЇГ® ñòðîêГ*Г¬,j-Г±Г·ГҐГІГ·ГЁГЄ ГЇГ® ñòîëáöГ*Г¬,p-Г±Г·ГҐГІГ·ГЁГЄ ïåðåñòГ*Г*îâîê}
  151. a,at,b,c,e:Tmatr;{a-èñõîäГ*Г*Гї, at-ГІГ°Г*Г*Г±ГЇГ®Г*èðîâГ*Г*Г*Г*Гї, b-Г¬Г*òðèöГ* äîïîëГ*ГҐГ*ГЁГ©, e-îáðГ*ГІГ*Г*Гї, Г±-ïðîâåðêГ*}
  152. det,det1:real;{det-îïðåäåëèòåëü èñõîäГ*îé Г¬Г*òðèöû,det1-îïðåäåëèòåëè-äîïîëГ*ГҐГ*ГЁГї}
  153. f1:text;{ïðèçГ*Г*ГЄ Г*åñóùåñòâîâГ*Г*ГЁГї îáðГ*ГІГ*îé Г¬Г*òðèöû}
  154. f:byte ;
  155. begin
  156. clrscr;
  157. //Chtenie(a,n); {Г·ГЁГІГ*ГҐГ¬ Г¬Г*òðèöó Г± äèñêГ*}
  158. assign(f1,'input.txt');
  159. reset(f1);
  160. For i:=1 To 10 do {ââîä Г¬Г*Г±Г±ГЁГўГ* ГЁГ§ ГґГ*éëГ*}
  161. for j:=1 to 10 do
  162. Read(f1, a[i,j]); {Г·ГІГҐГ*ГЁГҐ i-ГЈГ® ýëåìåГ*ГІГ*}
  163. close(f1);
  164. writeln('ÈñõîäГ*Г*Гї Г¬Г*òðèöГ*:');
  165. Vyvod(a,n);
  166. Opr(n,p,a,det,f); {Г±Г·ГЁГІГ*ГҐГ¬ îïðåäåëèòåëü}
  167. if f=1 then exit;
  168. Transp(a,n,b); {ГІГ°Г*Г*Г±ГЇГ®Г*èðóåì Г¬Г*òðèöó}
  169. Peresch(n,p,b,det1,e); {Г±Г·ГЁГІГ*ГҐГ¬ äîïîëГ*ГҐГ*ГЁГї}
  170. writeln('Obratnaja matrica:');
  171. for k:=1 to n do
  172. for j:=1 to n do
  173. e[k,j]:=e[k,j]/det; {ñîçäГ*ГҐГ¬ îáðГ*ГІГ*ГіГѕ Г¬Г*òðèöó}
  174. Vyvod(e,n);
  175. writeln('Proverka:');
  176. Proverka(a,e,n,c); {äåëГ*ГҐГ¬ ïðîâåðêó}
  177. Vyvod(c,n);

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

textual
Листинг программы
  1. procedure readfile(var f1:textfile;var a:TMatr;var n:integer);
  2. var i,j:integer;
  3. begin
  4. assign(f1,'input.txt');
  5. reset(f1);
  6. read(f1,n);
  7. for i:=1 to n do
  8. for j:=1 to n do
  9. read(f1, a[i,j]);
  10. closefile(f1);
  11. end;

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

  1. В процедуре readfile объявлены три переменные: f1, a и n. Переменная f1 типа textfile, переменная a типа TMatr (предполагается, что это матрица), а переменная n типа integer (предполагается, что это число).
  2. Переменная f1 присваивается значение 'input.txt'. Это означает, что файл будет считываться из указанного места.
  3. Функция reset(f1) используется для сброса файла перед чтением.
  4. Функция read(f1,n) используется для чтения n строк из файла в переменную a.
  5. В цикле for i:=1 to n do происходит чтение каждой строки из файла и присваивание ее соответствующему элементу матрицы a.
  6. После завершения чтения файла вызывается функция closefile(f1).
  7. Код не содержит вложенных списков.

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


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

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

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

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

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

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