Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
1-1095283565
KilkennyCat
2004-09-16 01:26
2004.10.03
интерфейс как у Delphi.


1-1094662910
Davinchi
2004-09-08 21:01
2004.10.03
Создание компонента просмотра буфера обмена


10-1042206104
zx2
2003-01-10 16:41
2004.10.03
Создание сервера Corba и клиента Corba


8-1087554408
NEEDHelp
2004-06-18 14:26
2004.10.03
Kak mozhno v Delphi narisovat zvuk iz mikrofona?


11-1081078411
Василий
2004-04-04 15:33
2004.10.03
Установить KOL пакет