Форум программистов, компьютерный форум, киберфорум
Hrethgir
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Правило - альфа она же и омега, иначе путаница в мыслях и коде..

Запись от Hrethgir размещена 15.09.2023 в 22:55
Показов 1306 Комментарии 2

[OFF]Впервые шагнул дальше двух итераций, ранее заканчивалось обычно на паре.[/OFF]
Ищу остаток чтобы организовать циклы работы движка без каких либо ещё ассемблерных прыжков.
Сам движок генератора карт отписан тут немного
[url]https://habr.com/ru/articles/743758/[/url]
, но это работает, и просто мне не нравится организация циклов внешних, да и этот может сменю проверкой равенства условия нулю
[PASCAL]for BFCount :=Biger- 1 downto 0 do begin
//lowerCycle:
//repeat
//////////////////////////////////////////////////////////////////////////////////////////////////
{%REGION 'Engine'}
asm
JMP p
end;
p1:
StringGrid1.Cells[px^, py^] := IntToStr(pTracerX^) + ',' + IntToStr(pTracerY^) + ',' + '1';
//запись правого столбца
p := @p3;
goto p4;
p2:
y1:=y+1;
//автоматическое забивание координат в местах скоса трассы
p := @p3;
goto p5;
p3:
y1:=y;
p5:
x1:=x-xInc;
StringGrid1.Cells[px^, py^] := IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
//автоматическое забивание координат трассы на прямых участках
p4:
x:=x+xInc;
{%ENDREGION}

end; [/PASCAL]

и вот я пытался решить как это сделать не копируя часть
[PASCAL] remainderstepsFrequent:=round(remainder/stepFrequent);
remainder:=remainder-remainderstepsFrequent*stepFrequent;[/PASCAL]

и тут подзатупил и подзавис

[PASCAL] if RazmerX>bigStep+stepRare then begin
stepsSetapInLine:=trunc(RazmerX / (bigStep+stepRare));
remainder:=RazmerX - stepsSetapInLine*(bigStep+stepRare);
if remainder>stepFrequent then begin
remainderstepsFrequent:=round(remainder/stepFrequent);
remainder:=remainder-remainderstepsFrequent*stepFrequent;
end else
remainderstepsFrequent:=0;
end else begin
stepsSetapInLine:=0;
remainderstepsFrequent:=0;
end;[/PASCAL]

А всё просто - значение остатку нужно задавать в самом начале:

[PASCAL]
remainder:=RazmerX;
if remainder>bigStep+stepRare then begin
stepsSetapInLine:=trunc(RazmerX / (bigStep+stepRare));
remainder:=RazmerX - stepsSetapInLine*(bigStep+stepRare);
end else stepsSetapInLine:=0;
if remainder>stepFrequent then begin
remainderstepsFrequent:=round(remainder/stepFrequent);
remainder:=remainder-remainderstepsFrequent*stepFrequent;
end else remainderstepsFrequent:=0;
[/PASCAL]
Раньше больше двух итераций у меня не было никогда, поэтому значения не придавал. А тут вот - оказывается самое последнее должно быть определно самым первым, факт. Ну вроде всё так. Суть задачи тем кто читал по этому проекту в принципе ясна должна быть. Даже не знаю, правило вроде есть и вроде эффективно, а когда его применишь вроде как и не так важно, важно пока с кодом затупливаешь - понимаешь что есть правило какое-то.
То есть это правило поиска остатков, при делении на разные величины, чередующиеся в порядке на одной числовой линейке. Здесь самый-самый остаток это remainder . И фишка в том, что его желательно определять сразу, пусть даже придавая ему самое большое возможное значение, а потом уже уменьшать его при проверках условий. Ну в принципе, кто учит математику тот знаком с понятием глобализма и бесконечности, но я уже на этом проекте настолько зациклился что ряд логических волшебных правил подзабыл, а глобализм как ветром сдуло, и вроде как всё переоткрываешь заново уже для самого себя. Видимо в этом тоже проявляется чудное многообразие вселенной, что порой на давно тебе известное порой смотришь как баран на новые ворота. Но скорее это всё-же от того, что не так часто программируешь новые алгоритмы.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для Welemir1
    IntToStr(px1^) + ',' + IntToStr(py1^) + ',' + '0';
    - в джаве и питоне такие конструкции неэффективны из-за конкатенации, выполняется создание нескольких объектов. Как в паскале с этим, может и там есть верный способ формировать строки, типа join или стрингБилдер?
    Запись от Welemir1 размещена 16.09.2023 в 19:35 Welemir1 вне форума
  2. Старый комментарий
    эти строки чисто для отладки, информацию в ячейкахх потом читает парсер и проверяет трассировку на карте. Просто удобно отладку делать, когда помимо проверяющего карту кода ты можешь сам увидеть карту в таблице. В этом весь фокус, что алгоритм генератора карт устроен так, что практиески ничего не считает, а заливает автоматом данные. Есть конечно формулы, но они считают только x+y от площади карты, равной x*y. Естественно такая автоматика и такие расчёты требуют кропотливой отладки, да и ещё вывертов из-за предпочтения математики условностям, когда в формулу приходится включать математическое выражение, заменяющее блок кода проверки условий, но это только одна линия на одной оси координат.
    Запись от Hrethgir размещена 16.09.2023 в 23:13 Hrethgir вне форума
 
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru