Помощь - Поиск - Пользователи - Календарь
Полная версия: Двумерный массис
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
denolend
Задача : Напечатать диагонали таблицы m*n двигаясь от леого нижнего угла к правому верхнему.
я вроде как придумал алгоритм ,но программа почему-то не работает. Подскажите что добавить или исправить плз.
код:
program napechatat;
uses crt;
Const n=3;
m=3;
var a:array[1..m,1..n] of integer;

i,j,s,ostatok:integer;
begin
clrscr;
randomize;
s:=0;
j:=0;
i:=0;
for i:=1 to n do
begin
for j:=1 to m do
begin
s:=s+1;
a[i,j]:=s;
write(a[i,j]:4);
end;
writeln;
end;
writeln;
s:=0;
for j:=1 to n do
begin
for i:=1 to s+1 do
begin
write(a[m-i+j,j]:4);
s:=s+1;
end;
writeln;
end;
writeln;


end.
Krjuger

for i:=1 to s+1 do
begin
write(a[m-i+j,j]:4);
s:=s+1;
end;


В теле цикла нельзя менять пределы прохода цикла,вы уходите в бесконечность.А вообще помимо прямого прохода цикла есть и обратный for i:=m downto 1 do вы пройдете с mого элемента до первого.....я думаю правильней его использовать.А вообще задание не совсем корректно,как можно напечатать диагональ неквадратной матрицы???Затем бессмысленно писать randomize; ,если вы его не используете при заполнении матрицы.
IUnknown
Цитата
А вообще задание не совсем корректно,как можно напечатать диагональ неквадратной матрицы???
Опять ты за свое? Я ж тебе уже где-то говорил, что диагональ - это то, что начинается в одном из углов (в зависимости от того - какая именно диагональ), и продолжается не до другого угла, а пока не закончатся строки/стобцы матрицы (что раньше закончится - то и прекращает процесс прохода по диагонали). Просто в случае квадратной матрицы эти 2 условия выполняются одновременно, и диагональ проходит от одного угла до другого. Так что напечатать можно все, что угодно. Для этого даже не надо десяток циклов, достаточно:

const
n = 5;
m = 6;
arr : array[1 .. n, 1 .. m] of integer =
( ( 1, 2, 3, 4, 5, 50),
( 6, 7, 8, 9, 10, 51),
(11, 12, 13, 14, 15, 52),
(16, 17, 18, 19, 20, 53),
(21, 22, 23, 24, 25, 53) );
var
i, j, k : integer;

begin
for i := n downto -(m-2) do
begin
k := 1;
for j := i to n do
begin
if (j > 0) and (k < succ(m)) then write(arr[j, k]:5);
inc(k);
end;
writeln;
end;
end.
, что выводит:

21
16 22
11 17 23
6 12 18 24
1 7 13 19 25
2 8 14 20 53
3 9 15 53
4 10 52
5 51
50

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