Паскаль - помогите найти проблему

IF
На сайте с 12.09.2008
Offline
150
431

Помогите пожалуйста :)

Составил программу, которая заменяет строки на столбцы в матрице:


Program zerkalo_11_LAb; {зеркальное отображение матрицы относительно главной оси}
uses crt;
var n,i,j:integer;a,b:array[1..50,1..50] of integer;
{
i,j параметры матрицы
n- размер матрицы
a,b матрица
}
BEGIN
clrscr;

Write('n=');
Readln(n);
Writeln('Исходная матрица');
Randomize;
for i:=1 to n do
Begin
for j:=1 to n do
Begin
a[i,j]:=random(100);
Write(a[i,j]:3);
End;
Writeln;
End;
{Readln;}
{Writeln('Povorot na 270 grad:');}
for i:=1 to n do
for j:=1 to n do
b[i,j]:=a[j,n-i+1];
for i:=1 to n do
Begin
for j:=1 to n do
Begin
{Write(b[i,j]:3);}
End;
{Writeln;}
End;
Readln;
a:=b;
Writeln('Замена строк и столбцов :');
for i:=n downto 1 do
begin
for j:=1 to n do
begin
write(a[i,j]:3);
end;
writeln;
end;
readln;
{Третья строка}


for i:=n downto n do
Begin
for j:=1 to n do
begin
write(a[5,j]:3);
end;
writeln;
end;
readln;

END.

Выполнение показал. Препод задал дополнительный вопрос: "Вывести третью строку получившейся матрицы".

Ну я и вывел.. В конце программы код ниже "{третья строка}" преподу не понравился :) А именно:

  write(a[5,j]:3);

Сказал , что я хочу его обмануть :rolleyes:.

Получается что я матрице даю обратный ход..

Нужно как-то его не обманывать и получить правильный результат - помогите пожалуйста! Долго пытался что-то сделать - не получается.

на прокси зарабатываю тут: https://goo.su/ZhNUUnG
fine
На сайте с 01.12.2005
Offline
151
#1


{Третья строка}

for i:=n downto n do
Begin
for j:=1 to n do
begin
write(a[5,j]:3);
end;
writeln;
end;
readln;

END.

Это что Вы с переменной i делаете и зачем? Опечатка или так задумано?

IF
На сайте с 12.09.2008
Offline
150
#2
Это что Вы с переменной i делаете и зачем? Опечатка или так задумано?

Пытался что-то придумать.. Раскручивал это место по разному.. Не получилось. Можно сказать опечатка :)

fine
На сайте с 01.12.2005
Offline
151
#3

Вот это

{Третья строка}

for i:=n downto n do
Begin
for j:=1 to n do
begin
write(a[5,j]:3);
end;
writeln;
end;
readln;

END.

заменить на это

{Третья строка}

for i:=n downto 1 do
begin
for j:=1 to n do
begin
if (n-i)=2 then write(a[i,j]:3);
end;
writeln;
end;
readln;

END.

Выведется третья строка полученной матрицы (если n больше или равно 3, конечно :) ).

Кстати, а в работе проверяли программу? В Вашем варианте одни нули выводились.

IF
На сайте с 12.09.2008
Offline
150
#4

fine,

Огромный МегаРеспект! Очень долго с этим мучался )

Кстати, а в работе проверяли программу? В Вашем варианте одни нули выводились.

Проверял. Даже работало (компилятор Pascal ABC) :)

Сегодня ночку не посплю - уже завтра возможно зачёт получу :)

fine
На сайте с 01.12.2005
Offline
151
#5

Пожалуйста. ;) Обращайтесь, если что. Люблю помогать в небольших программах по Паскалю из-за ностальгии по нему. :)

Да, Ваш вариант работает, если n>4. Т.е. выводит просто не ту строку, а иногда ту. А я на 3 и 4 сначала попробовала - нули просто выводит.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий