Найти ошибку в программе - 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.

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


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

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

13   голосов , оценка 3.846 из 5
Похожие ответы