Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизHelp - помогите заполнить дв. массив по диагоналям, зигзагом Найти похожие ветки
← →
PulSS © (2004-09-21 10:30) [0]Народ, помогите пожалуйста!
Нужно заполнить двумерный массив по диагоналям, перпендикулярным главной диагонали, начиная из левого верхнего угла зигзагом...
Алгоритм не рождается у меня никак...
Мож кто сталкивался, а?
← →
Romkin © (2004-09-21 10:37) [1]Ну обычный двойной цикл ;)
← →
pasha_golub © (2004-09-21 10:40) [2]Подсказка. Сумма номера столбца элемента и номера строки элемента для отдельно взятой диагонали число постоянное.
← →
TUser © (2004-09-21 10:42) [3]Бутылка пива + бутылка водки. При необходимости увеличить дозу. Будет зигзагом.
Если я понял правильно надо опреджелить некий хитрый порядок ячеек. Значит пишем сначала
1-я диагональ - [0,0]
2-я диагональ - [0,1] - [1,0]
3-я диагональ - [0,2] - [2,0]
4-я диагональ - [0,3] - [3,0]
...
n-я (где n - размер массива) [0,n] - [n,0]
n+1 [1,n] - [n,1]
i-я, i > n - [i-n,n] - [n,i]
Дальше спасет тот факт, что на каждой диагонали, как бы она не была расположена, семмы координат постоянна. Следовательно, имеем набор начальных клеток и направление движения (увелияивать или уменьшать координату X). На каждом шаге увеличиваем (или уменьшаем) ее на единицу, а другую координату - наоборот. Таким образом совершаем обход массива.
Тут, кстати, возниукает вопрос, какая диагональ главная. Грубо говоря их две - заполненная черными и белыми клетками, если как в шахматах.
← →
Amoeba © (2004-09-21 10:44) [4]Массив квадратный?
Даю подсказку.
Делаются 2 двойных цикла, в которых во вложенном цикле дипазон изменения счетчика цикла зависит от счетчика внешнего цикла.
Первый цикл проходит до середины дагонали. Второй цикл - почти зеркальный к нему -завершает операцию.
Далее думай сам. Это не так уж и сложно.
← →
SergP. (2004-09-21 10:46) [5]
> Нужно заполнить двумерный массив по диагоналям, перпендикулярным
> главной диагонали, начиная из левого верхнего угла зигзагом...
>
Хм.. Я не особо представляю себе это все... Что значит "зигзагом"?
← →
TUser © (2004-09-21 10:52) [6]
> Хм.. Я не особо представляю себе это все... Что значит "зигзагом"?
Ну я же сказал, что это значит. См. первый абзац в [3]
← →
SergP. (2004-09-21 11:22) [7]
> TUser © (21.09.04 10:52) [6]
>
> > Хм.. Я не особо представляю себе это все... Что значит
> "зигзагом"?
>
> Ну я же сказал, что это значит. См. первый абзац в [3]
Ну вобще-то когда я это писал, то твоего поста еще не было. (инет у меня хреновый).
Я было подумал что порядок заполнения должен быть типа таким:
[1,1]
[1,2]-[2,1]
[3,1]-[1,3]
[1,4]-[4,1]
[5,1]-[1,5]
и т.д.
хотя черт его знает что имелось ввиду под словом "зигзагом"
А если делать по [3] то типа так:
uses math;
...
for diagonal:=2 to xmax+ymax do
for i:=max(1,diagonal-ymax) to min(xmax,diagonal-ymax) do
a[i,diagonal-i]:=...;
где xmax и ymax - размерность массива
← →
Рамиль © (2004-09-21 11:27) [8]Прям ностальгия - чуть ли не первая лаба по паскалю:) Пошевели мозгами и сделай сам.
← →
TUser © (2004-09-21 11:34) [9]
> SergP. (21.09.04 11:22) [7]
Это зависит от много чего. Какой минимальный индекс, например. Ну и, конечно, что такое зигзаг?
← →
SergP. (2004-09-21 11:48) [10]
> for diagonal:=2 to xmax+ymax do
> for i:=max(1,diagonal-ymax) to min(xmax,diagonal-ymax)
> do
> a[i,diagonal-i]:=...;
>
> где xmax и ymax - размерность массива
Извиняюсь. Ошибка.
Правильно так:
for diagonal:=2 to xmax+ymax do
for i:=max(1,diagonal-ymax) to min(xmax,diagonal) do
a[i,diagonal-i]:=...;
> Это зависит от много чего. Какой минимальный индекс, например.
> Ну и, конечно, что такое зигзаг?
Пока исходил из [3] и из того что минимальные индексы равны единицам. Для других вариантов нетрудно и переделать. Но инет ужасный. Пол-часа нужно потратить чтобы загрузить ветку и отправить ответ. :-(((
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c