Найти ошибку в программе - Turbo Pascal (247773)
Формулировка задачи:
Программа должна выводить в текстовый файл вот это:
Исходные данные:
1.66-543.70 -85.00 57.20 4.85 -84.10 9.38
432.40 32.70 74.00 751.47 41.30 924.20 57.12
-62.40 -43.40 5.57 -45.45 7.68 8.10-357.27
Сформированный массив:
-43.40 -45.45 -84.10
3.00 3.00 1.00
2.00 4.00 6.00
Среднее значение 2 столбцa: -184.8000
Среднее значение 4 столбцa: 254.4070
Среднее значение 6 столбцa: 282.7333
Сортировка методом Шелла:
924.20 751.47 432.40 74.00 57.20 57.12 41.30
32.70 9.38 8.10 7.68 5.57 4.85 1.66
-43.40 -45.45 -62.40 -84.10 -85.00-357.27-543.70
Сортировка методом подсчета:
57.20 9.38 4.85 1.66 -84.10 -85.00 -543.70
924.20 751.47 432.40 74.00 57.12 41.30 32.70
8.10 7.68 5.57 -43.40 -45.45 -62.40 -357.27
А у меня она выводила правильно только исходные данные, после чего я пытался исправить и теперь она ничего не выводит, а просто вылетает. Пожалуйста помогите исправить мои ошибки.
Решение задачи: «Найти ошибку в программе»
textual
Листинг программы
const a = 3;b = 7; type Tm = array [1..30] of real; Tq = array [1..5] of real; mT=^Tm; qT=^TQ; var m: mT; q: qT; tex1, tex2: text; z, k, n, d, i, j: byte; sred, x: real; procedure Wod(var m: mT; a, b: byte); var i, j: byte; begin New (m); for i := 1 to a do for j := 1 to b do Read(tex1, m^[(i-1)*b+j]); Close(tex1); end; procedure Pech(const m: mT; a, b: byte); var i, j: byte; begin for i := 1 to a do begin for j := 1 to b do Write(tex2, m^[(i-1)*b+j]:9:3); Writeln(tex2); end; end; procedure OSN(const m: mT; a, b: byte; var q: qT; k: byte); var i, j: byte; begin k := 0; for i := 1 to a do begin n := 0; d := 0; x := -10000; for j := 1 to (b div 2) do if (m^[i] < 0) and (m^[i+2*(j-1)] >= x) then begin x := m^[i+2*(j-1)]; n := i; d := 2 * j; end; k := k + 1; q^[k] := x; q^[a+k] := n; q^[2*a+k] := d; Writeln(tex2, x); end; z := k; end; procedure Vyvod(const q: qT; a, z: byte); var i, j: byte; begin for i := 1 to a do begin for j := 1 to z do Write(tex2, q^[(i-1)*z+j]:9:3);Writeln(tex2); end; end; procedure Fin(var m: mT; a, b: byte; var sred: real ); var i, d: byte; begin sred := 0; d := 0; for i := 1 to a do begin sred := sred + m^[i]; d := d + 1; end; sred := sred / d; end; procedure Shell ( var q: mT ); var x: array [1..22] of real; l: real; j: integer; k, i, p, n, d: byte; label met; begin n := 1; for i := 1 to a do for j := 1 to b do begin X[n] := q^[(i-1)*b+ j]; inc(n); end; n := n - 1; d := 1; while d < N / 2 do met: d := d * 2; while d > 0 do begin for k := 1 to d do begin i := k + d; while i <= N do begin l := q^[i]; p := i; j := i - d; while j >= k do begin if q^[j] >= l then break; q^[p] := q^[j]; p := j; j := j - d; end; q^[p] := l; i := i + d; end; goto met; d := d div 2; end; for k := 1 to a * b do begin if k mod b = 1 then begin j := 1; i := k div b + 1; end; q^[(i-1)*(a*b)+ j] := x[k]; inc(j); end; Writeln(tex2, 'Sortirovka metodom Shella: '); pech(q, a, b); end; procedure podschet(var m: mT); var c: array [1..b] of real; n: array [1..b] of integer; i, j, k, t: byte; begin Writeln(tex2, 'Sortirovka metodom podschta: '); for i := 1 to a do begin for j := 1 to b do n[j] := 1; for j := b downto 2 do for k := j - 1 downto 1 do if m^[(i-1)*b+ j] > m^[(i-1)*a +k] then n[k] := n[k] + 1 else n[j] := n[j] + 1; for j := 1 to b do c[n[j]] := m^[(i-1)*b+ j]; for j := 1 to b do write(tex2, c[j]:6:2, ' ' ); writeln(tex2); end; end; begin Assign(tex1, 't1.txt'); Reset(tex1); Assign(tex2, 't2.txt'); Rewrite(tex2); Wod(m, a, b); Write(tex2, 'Ishodnye dannye:'); writeln(tex2); Pech(m, a, b); Write(tex2, 'Sformirovannyi massiv:'); writeln(tex2); OSN(m, a, b, q, k); Vyvod(q, a, z); for j := 1 to (b div 2) do begin Fin(m, a, 2 * j, sred); Write(tex2, 'Srednee znachenie ', 2 * j, ' stolbtsa: ');Writeln(tex2, sred:7:4); end; Shell(m); podschet(m); close(tex2); end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д