Помощь - Поиск - Пользователи - Календарь
Полная версия: Стрвнности с "распространением" информации в массиве
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Общие вопросы разработки программ
TriuS-Strannik
Я тут впервые... так что сильно не ругайте, если не в ту тему залез...

Пишу пошаговую статегию., и возникла одна проблема уже вторую неделю долблю...

Созданно два двумерных массива для хранения информации;
я обхожу каждую ячейку, и если она занята, то выполняю для неё некий "скрипт" а результаты записываю во второй массив, и вывожу на экран;
потом одновляю первый массив...

а проблема такая текущая ячейка на окружением упрвляет нормально, а вот в зависимости от окружения управляется только по направлению обхода массива...

В примере должен получиться симметричный крести, но данные о длинне линии на второй ячейке теряются...

Помогите, уже терпение испоряеся...

Зарание спасибо!
TriuS-Strannik
Я тут еще немного поработал - максимально упростил прогу... может понятнее будет...

Нажмите для просмотра прикрепленного файла

Глюк остался...
volvo
Цитата
может понятнее будет...
Не будет. В частности, почему у тебя в процедуре Translate для одних вариантов меняются все Pered[X, 1], а для других - только устанавливается значение Pered[1, 0] := 40 (кстати, цвет №40 - это что, по-твоему?).

Что именно за преобразования ты пытаешься произвести в Translate, объясняй подробнее. Что-то у тебя там не то.
TriuS-Strannik
Когда обращение к Pered[X, 1] - это задание типа поля для обработки на следующем проходе, я называю это типом организма; Pered[1, 0] := 40 - это яркий красный цвет текущей клетки, я спользую FPC...

А преобразования такие: текущая клетка выполняет те или иные действия в зависимости от значения поля Pered[1, 1], в своём поле она устанавливает собственный цвет Pered[1, 0] или значение счётчика Pered[1, 2],
а когда обращение к Pered[X, 1], где Х = 1..6 - это установка типа соседней клетки...

Это своего рода программа по развертки нейросети, но пока олько развертки...

Добавлено через 4 мин.
Извеняюсь одна опечатка
Цитата
где Х = 1..6 - это установка

надо Х=1..5...
TriuS-Strannik
Опять упс...
Свой тип клетка менять не может, поэтому Х=2..5...
volvo
Ну, раз не хочешь говорить какие именно преобразования (то, что КАКИЕ-ТО - это я вижу, вот эти КАКИЕ-ТО у тебя неправильные) - ищи в них ошибку сам. Здесь тебе помочь нельзя, не зная, что ты пытаешься сделать.

Следствие: у тебя на третьем проходе по матрице при i = 147 клетка "вниз" заполняется значением "6", это прекращает работу с теми клетками, которые находятся ниже нее, потому что уже на следующем шаге все, что находится ниже - обнуляется, и потом вообще не обрабатывается.

Какова причина этого? Я не знаю, тебе лучше знать, ты программируешь что-то, делиться своими задумками не хочешь, тебе и править код. Так правь...
TriuS-Strannik
Система влияя на соседние клктки должна развиваться...
Как ещё объяснить увы незнаю...

После того как, клетка принимает значение 6 развитие должно остановиться - это правильно, но получает она это значение, если у вышестоящей счетчик обнуляется, а это должно случиться только через 147 циклов, ещё странность, рас её значение 6, то она должна быть красного цвета, а она чёрного...

Собственно если подробно:
case Pered[1,1] of
1 : отображает свой цвет, устанавливает начальное значение счётчика, устанавливает значение клеток окружения
2 : отображает свой цвет, устанавливает счётчик dec(снизу), если счетчик - 0 то устанавливает 6 тип верхней ячейки иначе опять же второй тип сверху
3..5 : тоже что и 2-тип только по своему направлению
6 : только устанавливает свой цвет


Как ещё объяснить преобразования не знаю...
renesko1
""(кстати, цвет №40 - это что, по-твоему?)""
Как я понял имеется ввиду :
http://insidecpp.ru/antipatterns/magic_numbers/
TriuS-Strannik удачи.
TriuS-Strannik
renesko1 спасибо за ссылку...в принципе конкретно это я знал, просто в данном случае так действительно легче - просто я сильно упростил программу - функция Translatiya принадлежала другому объекту, и читала "скрипты" - потом я прописал их в код...
TriuS-Strannik
Собственно вышеуказанная функция работает правильно...
Ошибка пороисходит где-то пр передачи данных из буферной переменной Pered[] в SPole или при обновлении: PPole:=SPole... скорее всего второе, но как это проверить...
TriuS-Strannik
Вот пример решения:
Pered[Eta  ]:=PPole[x  ,y  ];
Pered[Verh ]:=PPole[x+1,y ];
Pered[Pravo]:=PPole[x ,y+1];
if GOST <> 0 then
begin
Pered[Niz ]:=SPole[x-1,y ];
Pered[Levo ]:=SPole[x ,y-1]
end
else
begin
Pered[Niz ]:=PPole[x-1,y ];
Pered[Levo ]:=PPole[x ,y-1]
end;

Trans^.Ustanovka(@Pered);

str(nom^,t);
t:='fv'+t;

Trans^.Translatiya(t);

SPole[x ,y ]:=Pered[Eta ];
if GOST <> 0 then
begin
SPole[x+1,y ]:=Pered[Verh ];
SPole[x ,y+1]:=Pered[Pravo];
SPole[x-1,y ]:=Pered[Niz ];
SPole[x ,y-1]:=Pered[Levo ]
end
else
begin
SPole[x+1,y ,Tip]:=Pered[Verh ,Tip];
SPole[x ,y+1,Tip]:=Pered[Pravo,Tip];
SPole[x-1,y ,Tip]:=Pered[Niz ,Tip];
SPole[x ,y-1,Tip]:=Pered[Levo ,Tip]
end

- это решение для конкрктного примера.
rolleyes.gif
ошибка происходила из-за заполнения обработанных ячеек необработаными из PPole...

Добавлено через 10 мин.
а ещё: здесь два примера ешения, которые переключаются GOST...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.