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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Диагонали матрицы
сообщение
Сообщение #1


mea culpa
*****

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

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


Привет всем.

Вопрос, как можно пройти по абсолютно всем диагоналям матрицы? Ну для двух главных диагоналей я сам написал, для остальных, как мне подсказали, нужны циклы for, обращаться к элементам матрицы надо по индексам i+j,j и j,j+i, но вот что-то меня вторая пара параметров смущает... И кажется, они не все диагонали проходят..

Ps: в поиск заглядывал, работу с матрицами смотрел, диагоналей не нашёл.

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Unconnected @ 11.12.2009 22:58) *
как можно пройти по абсолютно всем диагоналям матрицы
Чтот это значит? Выразись точнее, плз. Иначе, боюсь, что вот такой ответ будет верным:
for i:=1 to n do for j:=1 to m do

- проходит по всем диагоналям без проблем.
Тебе важен порядок? Тогда высаажись точнее, чего именно ты хочешь.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

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

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


Вообще-то у квадрата только две диагонали. И у квадратной матрицы - тоже.
Что ты называешь диагоналями кроме этих двух?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

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

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


Цитата
И у квадратной матрицы - тоже

Безусловно согласен.
Массивы. Матрицы. Типичные задачи.


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


mea culpa
*****

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

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


Цитата
- проходит по всем диагоналям без проблем.
Тебе важен порядок? Тогда высаажись точнее, чего именно ты хочешь.


Получается, что важен порядок.
Цитата

Вообще-то у квадрата только две диагонали. И у квадратной матрицы - тоже.
Что ты называешь диагоналями кроме этих двух?


Я не силён в терминологии, приложил рисунок, на нём якобы квадратная матрица, красными линиями я обозначил то, что назвал главными диагоналями, синими - все остальные, "диагонали"... И мне нужно пройти по каждой синей, именно последовательно, сначала по одной, потом по следующей...



--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

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

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


for j := 0 to N-1 do // перебор по "диагоналям"
for i := 0 to N-1-j do // идем вдоль "диагонали"
a[j+i,i]...
Это по одному семейству и аналогично по перпендикулярным

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


mea culpa
*****

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

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


Цитата
Это по одному семейству и аналогично по перпендикулярным


А аналогично - это как? Индексы местами поменять при обращении к элементу?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

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

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


Чтобы не повторять "настоящие" диагонали, лучше их обработать отдельно, тогда кроме них:

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;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


mea culpa
*****

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

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


Спасибо, оно, только придётся делать 4 цикла, т.к. мне по порядку именно надо:)


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


mea culpa
*****

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

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


А этот код рассчитан на матрицу, индексы в которой начинаются с нуля? Просто если подразумевалась начало с единицы, то например a[j+i,i] при первой итерации будет обращаться к элементу, принадлежащему к настоящей диагонали.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

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

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


Мы ведь пишем на Паскале, а не на Фортране, поэтому, если не оговорено обратное, индексы ВСЕГДА начинаются с 0.
Да и границы цикла по i однозначно на это указывают.

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

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

 





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