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

 
 Ответить  Открыть новую тему 
> Стрвнности с "распространением" информации в массиве, наверно несовершенный алгоритм
TriuS-Strannik
сообщение 12.08.2009 7:19
Сообщение #1


Левша-Самоучка


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

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


Я тут впервые... так что сильно не ругайте, если не в ту тему залез...

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

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

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

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

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

Зарание спасибо!


Прикрепленные файлы
Прикрепленный файл  mir.zip ( 104.69 килобайт ) Кол-во скачиваний: 195


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TriuS-Strannik
сообщение 12.08.2009 22:13
Сообщение #2


Левша-Самоучка


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

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


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

Прикрепленный файл  Fizika.rar ( 1.05 килобайт ) Кол-во скачиваний: 424


Глюк остался...


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.08.2009 11:39
Сообщение #3


Гость






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

Что именно за преобразования ты пытаешься произвести в Translate, объясняй подробнее. Что-то у тебя там не то.
 К началу страницы 
+ Ответить 
TriuS-Strannik
сообщение 13.08.2009 12:21
Сообщение #4


Левша-Самоучка


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

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


Когда обращение к 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...


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TriuS-Strannik
сообщение 13.08.2009 13:05
Сообщение #5


Левша-Самоучка


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

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


Опять упс...
Свой тип клетка менять не может, поэтому Х=2..5...


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 13.08.2009 13:16
Сообщение #6


Гость






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

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

Какова причина этого? Я не знаю, тебе лучше знать, ты программируешь что-то, делиться своими задумками не хочешь, тебе и править код. Так правь...
 К началу страницы 
+ Ответить 
TriuS-Strannik
сообщение 13.08.2009 15:54
Сообщение #7


Левша-Самоучка


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

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


Система влияя на соседние клктки должна развиваться...
Как ещё объяснить увы незнаю...

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

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


Как ещё объяснить преобразования не знаю...


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
renesko1
сообщение 13.08.2009 19:13
Сообщение #8


поиск
****

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

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


""(кстати, цвет №40 - это что, по-твоему?)""
Как я понял имеется ввиду :
http://insidecpp.ru/antipatterns/magic_numbers/
TriuS-Strannik удачи.

Сообщение отредактировано: renesko1 - 13.08.2009 19:16


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TriuS-Strannik
сообщение 14.08.2009 4:57
Сообщение #9


Левша-Самоучка


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

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


renesko1 спасибо за ссылку...в принципе конкретно это я знал, просто в данном случае так действительно легче - просто я сильно упростил программу - функция Translatiya принадлежала другому объекту, и читала "скрипты" - потом я прописал их в код...


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TriuS-Strannik
сообщение 14.08.2009 7:48
Сообщение #10


Левша-Самоучка


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

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


Собственно вышеуказанная функция работает правильно...
Ошибка пороисходит где-то пр передачи данных из буферной переменной Pered[] в SPole или при обновлении: PPole:=SPole... скорее всего второе, но как это проверить...

Сообщение отредактировано: TriuS-Strannik - 14.08.2009 7:49


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TriuS-Strannik
сообщение 18.08.2009 13:43
Сообщение #11


Левша-Самоучка


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

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


Вот пример решения:
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...


--------------------
Молодой старик...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 10.11.2024 15:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"