IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Вывод в программе (преобразованная таблица)
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


В самом конце программы делает нули заместо матрицы.
Не понимаю почему.
Две недели уже сижу над этим. =/
ML и MD сортирует положительные и отрицательные.
Все работает сначала нормально, но потом преобразованная таблица заполняется неверно!
Помогите пожалуйста ypriamii.gif


Прикрепленные файлы
Прикрепленный файл  Program.pas ( 5.5 килобайт ) Кол-во скачиваний: 439
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


При попытке компилировать FreePascal получаю сообщения
Цитата

Program.pas(64,10) Warning: Function result does not seem to be set
Program.pas(180,4) Warning: Label not defined "L1"
Program.pas(255,4) Error: Label used but not defined "L1"

Два первых - предупреждения, а последнее - ошибка.

Т.е. даже посмотреть из-за чего
Цитата
В самом конце программы делает нули заместо матрицы.

Не могу.

Может вы доведёте до компиляции программу?

И кроме того, приведите тестовые данные, т.к. трудно представить, что должно быть вместо нулей.

Могу её отформатировать для удобства автоматическим форматтером (но по прежнему, она не компилируется):
program Z21;

uses
  crt;   {Вывод на экран}


type
  matr  = array [1..6, 1..6] of integer;      {Описание переменных}
  matr2 = array[1..6, 1..6] of integer;
var
  a:  matr;
  tabl: matr2;
  Error: integer;
  for_0, for_1, for_2: char;
  i, j, n, k: byte;
  ch: char;    {переменная для хранения кода символа нажатой клавиши}
  nam_e: string; {строковый литерал}
label
  L1;      {Описание меток}

  {---------------Ввод значений элементов массива(имя, строки, столбцы)---------------}
  procedure Mv(var n, k: byte; var nam_e: string);
  var
    error: integer;
  begin {1}
    Gotoxy(2, 3);
    textcolor(green);
    Write('Введите имя матрицы: ');
    Readln(nam_e);
    Clrscr;
    repeat   {Начало цикла с постусловием}
      Gotoxy(4, 4);
      textcolor(lightblue);
      Writeln('Максимально допустимая размерность матрицы - 6х6 элементов');

      {---------------Ввод размерности матрицы---------------}
      gotoxy(4, 6);
      textcolor(lightcyan);
      Write('Введите количество строк матрицы:  ', nam_e, ':  ');
{$i-}
      ;
      Readln(n);
      error := IOresult;
{$i+}
      ;
      if (n < 1) or (n > 6) or (Error <> 0) then
      begin  {2}
        Textattr := lightred;
        Writeln('Ошибка! Количество строк матрицы - от 1 до 6. Повторите ввод!');
      end; {2}
    until (n >= 1) and (n <= 6) and (Error = 0); {Конец цикла с постусловием}
    begin {3}
      repeat
        Gotoxy(4, 8);
        Textattr := cyan;
        Write('Введите количество столбцов матрицы ', nam_e, ':  ');
{$i-}
        ;
        Readln(k);
        error := IOresult;
{$i+}
        ;
        if (k < 1) or (k > 6) or (Error <> 0) then
        begin  {4}
          Textattr := lightred;
          Writeln('Ошибка! Количество столбцов матрицы - от 1 до 6. Повторите ввод!');
        end;  {4}
      until (k >= 1) and (k <= 6) and (Error = 0);
    end; {3}
  end;
  {1}
  {---------------Ввод элементов матрицы (случайные числа)---------------}
  function Random(n, k: byte; var A: Matr): integer;
  var
    i, j: byte;
  begin  {1}

    for i := 1 to n do
    begin    {2}
      for j := 1 to k do
      begin     {3}
        A[i, j] := system.random(19) - 9;
        Write(A[i, j]: 4);
      end;{3}
    end;  {2}
  end;      {4}




  {---------------Ввод элементов матрицы(положительные)---------------}
  procedure Ml(var TABL: Matr2);
  var
    i, j: integer;
  begin   {1}
    gotoxy(3, 4);
    textattr := yellow;
    writeln('Положительные элементы: ');

    for i := 1 to n do
    begin    {2}

      for j := 1 to k do
      begin    {3}
        if a[i, j] > 0 then
          Write(a[i, j]: 4)
        else
          Write('  ');
        TABL[i, j] := A[i, j];
        writeln;
      end;       {3}
    end;              {2}

  end;
  {1}
  {---------------Ввод элементов матрицы(отрицательные)---------------}
  procedure Md(var TABL: Matr2);
  var
    i, j: integer;
  begin    {1}
    gotoxy(3, 4);
    writeln('Отрицательные элементы: ');

    for i := 1 to n do
    begin     {2}

      for j := 1 to k do

        if a[i, j] < 0 then
          Write(a[i, j]: 4)
        else
          Write('   ');
      TABL[i, j] := A[i, j];
      writeln;

    end;         {2}
    readln;
  end;            {1}

  {---------------Ввод элементов матрицы(Расположение исходной и преобразованной)---------------}
  procedure Raspl(for_2: char);
  var
    I, j: byte;
  label
    L1;
  begin  {1}
    clrscr;
    gotoxy(25, 1);
    Textattr := lightgreen;
    writeln('Исходная матрица');
    Textattr := yellow;
    writeln(nam_e);
    writeln;
    Textattr := lightblue;
    Gotoxy(1, 3);
    for i := 1 to n do
    begin  {2}
      for j := 1 to k do
        Write(A[i, j]: 5, ' ');
      writeln;
    end; {2}


    case for_2 of {3}
      #112, #80:
      begin {1}
        gotoxy(n + 38, 2); {Справа от исходной}
        Textattr := yellow;
        writeln(nam_e);
        writeln;
        window(40, 3, 80, 15);
        Textattr := lightblue;
        for i := 1 to n do
        begin  {2}
          for j := 1 to k do
            Write(TABL[i, j]: 5, ' ');
          writeln;
        end;  {2}
      end; {1}


      #76, #108:
      begin   {1}
        Textattr := yellow; {Под исходной}
        Gotoxy(2, k + 7);

        writeln(nam_e);
        writeln;
        gotoxy(1, k + 10);
        Textattr := lightblue;
        for i := 1 to n do
        begin   {2}
          for j := 1 to k do
            Write(TABL[i, j]: 5, ' ');
          writeln;
        end;   {2}
      end;  {1}
    end; {3}
  end;
  {1}
begin
  Mv(n, k, nam_e);
  clrscr;
  textattr := magenta;
  Writeln('Какие числа использовать в матрице?R-случайные,U-собственные');
  readln(for_0);
  case for_0 of {2}
    #82, #114: Random(n, k, A);
    #85, #117:
    begin {3}
      clrscr;
      textattr := white;
      writeln('Введите элементы матрицы'); {Ввод элементов матрицы}
      for i := 1 to n do
      begin            {4}
        for j := 1 to k do
        begin             {5}
          repeat
            Write('Введите a[', i, ' ', j, ']');
{$i-}
            ;
            readln(a[i, j]);
            error := IOresult;
{$i+}
            ;
            if (a[i, j] < -10000) or (a[i, j] > 10000) or (Error <> 0) then
            begin                    {6}
              Textattr := lightred;
              Writeln('Ошибка!Повторите ввод!');
            end;                        {6}




          until (a[i, j] <= 10000) and (a[i, j] >= -10000);

        end;                       {5}
        writeln;
      end;                            {4}
    end;                              {3}
  end; {2}


  clrscr;
  textattr := lightgreen;
  writeln('Какие элементы матрицы вывести? М-положительные,Q-отрицательные ');
  readln(for_1);
  case for_1 of {7}
    #77, #109: Ml(TABL);
    #81, #113: Md(TABL);
  end; {7}
  clrscr;
  textattr := green;

  writeln('В каком виде вывести матрицы?');

  textattr := brown;
  writeln('Новая матрица справа от исходной-S,под исходной-L');
  for_2 := readkey;
  clrscr;
  gotoxy(1, 15);
  textattr := lightcyan;
  writeln('Результат обработки: ');
  writeln;
  Raspl(for_2);
  window(20, 24, 80, 25);

  textattr := white;
  Write('Хотите начать заново?Y-Да, N-нет');
  window(1, 1, 80, 25);
  Write;
  case readkey of {8}
    #89, #121: goto L1;
    #78, #110: exit;
  end;           {8}

end.  {1}



Сообщение отредактировано: Федосеев Павел -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Исправил, проблема теперь в том, что там где исходная и новая матрица, не пишется новая


Прикрепленные файлы
Прикрепленный файл  Program_2.pas ( 5.32 килобайт ) Кол-во скачиваний: 434
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Я ставлю точку останова на строку 148. Запускаю, выбираю отобразить справа, но на точке останова не останавливаюсь. Это означает, что нужно не умничать #112,#80, а записывать 's', 'S'.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Цитата(Федосеев Павел @ 19.04.2016 23:56) *

Я ставлю точку останова на строку 148. Запускаю, выбираю отобразить справа, но на точке останова не останавливаюсь. Это означает, что нужно не умничать #112,#80, а записывать 's', 'S'.



теперь он пишет две одинаковые матрицы
так если
исходная и есть новая
то есть он печатает не новую
справа от исходной
или под
а саму исходную
дважды
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Я не знаю, что у вас за программа. Вижу модификацию переменной TABL в процедурах Md и Ml. Посмотрите в отформатированном мною некомпилирующемся исходнике и увидите, что в Ml просто копируется
TABL[i, j] := A[i, j];
а в Md происходит странное присвоение за пределами цикла for j.

Возьмите за привычку периодическое форматирование исходников - половина проблем легко находится.
Форматируйте JCF (Jedi Code Formatter) - тут я описывал как установить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Цитата(Федосеев Павел @ 20.04.2016 1:24) *

Я не знаю, что у вас за программа. Вижу модификацию переменной TABL в процедурах Md и Ml. Посмотрите в отформатированном мною некомпилирующемся исходнике и увидите, что в Ml просто копируется
TABL[i, j] := A[i, j];
а в Md происходит странное присвоение за пределами цикла for j.

Возьмите за привычку периодическое форматирование исходников - половина проблем легко находится.
Форматируйте JCF (Jedi Code Formatter) - тут я описывал как установить.




Я понимаю что проблема в присваивании
Но как сделать иначе-то?
чтобы печаталась и старая и новая
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Это шутка?

Вы не формируете новую матрицу, вернее полностью её копируете. Без малейших изменений.
Вот где здесь формирование отличий A от TABL?
  {---------------Ввод элементов матрицы(положительные)---------------}
  procedure Ml(var TABL: Matr2);
  var
    i, j: integer;
  begin   {1}
    gotoxy(3, 4);
    textattr := yellow;
    writeln('Положительные элементы: ');

    for i := 1 to n do
    begin    {2}

      for j := 1 to k do
      begin    {3}
        if a[i, j] > 0 then
          Write(a[i, j]: 4)
        else
          Write('  ');
        TABL[i, j] := A[i, j];
        writeln;
      end;       {3}
    end;              {2}

  end;

Почти так же и здесь
  {---------------Ввод элементов матрицы(отрицательные)---------------}
  procedure Md(var TABL: Matr2);
  var
    i, j: integer;
  begin    {1}
    gotoxy(3, 4);
    writeln('Отрицательные элементы: ');

    for i := 1 to n do
    begin     {2}

      for j := 1 to k do

        if a[i, j] < 0 then
          Write(a[i, j]: 4)
        else
          Write('   ');
      TABL[i, j] := A[i, j];
      writeln;

    end;         {2}
    readln;
  end;            {1}


Всё что мог, я уже диагностировал. Дальше вы должны предпринять меры по исправлению.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 8.04.2025 16:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name