Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод в программе (преобразованная таблица)
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Общие вопросы разработки программ
Lepsik1777
В самом конце программы делает нули заместо матрицы.
Не понимаю почему.
Две недели уже сижу над этим. =/
ML и MD сортирует положительные и отрицательные.
Все работает сначала нормально, но потом преобразованная таблица заполняется неверно!
Помогите пожалуйста ypriamii.gif
Федосеев Павел
При попытке компилировать 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}

Lepsik1777
Исправил, проблема теперь в том, что там где исходная и новая матрица, не пишется новая
Федосеев Павел
Я ставлю точку останова на строку 148. Запускаю, выбираю отобразить справа, но на точке останова не останавливаюсь. Это означает, что нужно не умничать #112,#80, а записывать 's', 'S'.
Lepsik1777
Цитата(Федосеев Павел @ 19.04.2016 23:56) *

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



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

Возьмите за привычку периодическое форматирование исходников - половина проблем легко находится.
Форматируйте JCF (Jedi Code Formatter) - тут я описывал как установить.
Lepsik1777
Цитата(Федосеев Павел @ 20.04.2016 1:24) *

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

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




Я понимаю что проблема в присваивании
Но как сделать иначе-то?
чтобы печаталась и старая и новая
Федосеев Павел
Это шутка?

Вы не формируете новую матрицу, вернее полностью её копируете. Без малейших изменений.
Вот где здесь формирование отличий 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}


Всё что мог, я уже диагностировал. Дальше вы должны предпринять меры по исправлению.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.