Привет всем.
Вопрос, как можно пройти по абсолютно всем диагоналям матрицы? Ну для двух главных диагоналей я сам написал, для остальных, как мне подсказали, нужны циклы for, обращаться к элементам матрицы надо по индексам i+j,j и j,j+i, но вот что-то меня вторая пара параметров смущает... И кажется, они не все диагонали проходят..
Ps: в поиск заглядывал, работу с матрицами смотрел, диагоналей не нашёл.
for i:=1 to n do for j:=1 to m do
Вообще-то у квадрата только две диагонали. И у квадратной матрицы - тоже.
Что ты называешь диагоналями кроме этих двух?
for j := 0 to N-1 do // перебор по "диагоналям"Это по одному семейству и аналогично по перпендикулярным
for i := 0 to N-1-j do // идем вдоль "диагонали"
a[j+i,i]...
Чтобы не повторять "настоящие" диагонали, лучше их обработать отдельно, тогда кроме них:
for j := 1 to N-1 do // перебор по "диагоналям"
for i := 0 to N-1-j do begin// идем вдоль двух симметричных "диагоналей"
a[j+i,i]... // вниз от диагонали "верх-лево -- низ-право"
a[i,j+i]... // вверх от диагонали "верх-лево -- низ-право"
a[j+i,N-1-i]... // вниз от диагонали "верх-право -- низ-лево"
a[i,N-1-i+j]... // вверх от диагонали "верх-право -- низ-лево"
end;
Спасибо, оно, только придётся делать 4 цикла, т.к. мне по порядку именно надо:)
А этот код рассчитан на матрицу, индексы в которой начинаются с нуля? Просто если подразумевалась начало с единицы, то например a[j+i,i] при первой итерации будет обращаться к элементу, принадлежащему к настоящей диагонали.
Мы ведь пишем на Паскале, а не на Фортране, поэтому, если не оговорено обратное, индексы ВСЕГДА начинаются с 0.
Да и границы цикла по i однозначно на это указывают.