|
Нарушитель
|
||||||
Создать класс из процедуры так, чтобы в нём при вызове можно было менять направление отсчёта счётчика цикла01.08.2023, 21:53. Показов 3283. Ответов 52
Метки нет (Все метки)
Могу-ли я создать класс из процедуры так, чтобы в нём при вызове можно было менять направление отсчёта счётчика цикла, и некоторые формулы расчёта результата работы этого класса?
Ранее я задавал вопрос по меткам и намекал на классы, но в общем стало ясно что там ответа не будет. Но метки - не камень преткновения, проблему можно решить с помощью классов, я читал по ним но не знаю как создавать из в Lazarus. Вот в этом коде Кликните здесь для просмотра всего текста
мне нужно поменять будет для второго варианта вызова строки 17-19, аналогично 71-82. Кроме них мне нужно будет поменять направления отсчёта в двух циклах которые заканчиваются в строках 61 и 91, соответственно поменяв знак "<" на знак ">". Что меня держит от простого копирования и модификации с увеличением кода? То что я не смогу используя тогда в будущем эффективно использовать своё рабочее время. Мне нужно освоить классы хоть немного. Очень буду благодарен за разъяснение моментов.
0
|
||||||
| 01.08.2023, 21:53 | |
|
Ответы с готовыми решениями:
52
Переопределить ввод\вывод класса так, чтобы при их вызове можно было указывать TextBox как источник Как сделать так чтобы можно было менять путь к БД Можно ли сделать так, чтобы во время цикла можно было вводить какую нибудь символ? |
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
|
||
| 12.08.2023, 08:07 | ||
|
1
|
||
|
Нарушитель
|
|
| 12.08.2023, 18:35 [ТС] | |
|
Это движок, когда я закончу - сделаю публикацию по нему. С картинками анимированными, для описания алгоритма.
Уже надоело делать записи каждый раз когда я сделаю хоть что-то ни как другие и когда на то чтобы сделать не так есть весомая причина. Будет готов движок - будет запись. Этот движок вообще не похож на те что делают другие, мне не делать-же записи через каждые 10 строк кода. Если вы считаете что я каждые 10 строк кода должен делать запись в блоге - сами так тогда тоже занимайтесь программированием - 10 строк кода на запись в блоге. Я просто посмотрю что Вы бросите первым - программировать или делать записи. Добавлено через 1 час 39 минут Кроме того в движке много закономерных совпадений, и по каким причинам они получаются - мне вообще не понятно: там я это делал для того, а там то-же самое для другого, цели совершенно разные, а путь достижения один... для решения разных задач почему-то действия над одними и теми же переменными одинаковые. Поэтому скорее всего я не знаю как правильно вести документацию, и вообще короче...я понял одно - написание движков (нормальных движков с максимально эффективными лайфхаками) неблагодарное занятие от которого реально ехать крыша начинает при вникании в код, а бонус только в быстродействии и компактности. А вы думали у Вас только едет крыша при чтении этого кода? Мне самому не понятно почему порой возникает необходимость повтроения одного и того же действия для достижения совершенно разных целей. То что я хотел одним кодом решить много разных задач и избежать копирования процедур это понятно, но я не ожидал что там будут одинаковые действия для достижения разных целей внутри техпроцесса - совершенно не понятно, причём эти разные цели не являются следствием ветвления кода. Они с самого начала были, ещё до ветвления, а для их достижения нужно одно и то-же действие с одной и той-же переменной. И это закономерно и совершенно не понятно.
0
|
|
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
|
||
| 12.08.2023, 18:45 | ||
|
Каждые 10 строк делать запись в блог или писать сообщение в тему - что выбрать?
А если серьёзно, то зачем так часто делать записи в тот же блог? Появился более-менее приличный результат - сделали запись. А промежуточные размышления кому интересны? А если у вас есть потребность поделиться со всеми своими мыслями - это уже другое дело. Блоги как раз для этого и созданы.
0
|
||
|
Нарушитель
|
||||||||
| 12.08.2023, 19:38 [ТС] | ||||||||
|
правка
Добавлено через 1 минуту
Я боюсь что если я не уделю этому внимание, то потом забуду... Добавлено через 5 минут Мне не понятно по какой закономерности нужно делать stepsBig+1 притом, что это делается для достижения совршенно разных трёх целей, соврешенно разных, и причём stepsBig никогда равен нулю не бывает. Никогда, чтобы решить три разных задачи нужно сделать это. Это можно сделать сразу перед запуском движка - но тогда я забуду этот случай, а тот кто будет читать код - никогда его не поймёт. И поэтому у меня в теле движка везде этот stepsBig+1 маячит как бельмо перед глазами. И это закономерно. Это добавляет раздражительности. Не цели определяют путь, а методы. Тогда появляется раздражающий фактор что цели накладываются друг на друга, иначе почему они разные но находятся в одной точке абстракций. Почему абстракции так накладываются закономерно? Этого вообще не должно быть в принципе, по определению абстракции. Но оно есть, и это раздражает. Раздражает по причине что я не могу объяснить причину существования этого факта. Добавлено через 18 минут Законы программирования и абстракций нужно изучать на программировании движков, только правильных движков, которые не сделаны "лишь-бы побыстрее написать, а работает пусть хоть как черепаха". В "движках" настоящие законы программирования и абстракций. Добавлено через 13 минут Точнее вру - один раз в цикле бывает равен нулю stepsBig, но это следствие строки размещённой в цикле
тут проект опубликованный и сжатый в зиппапку https://github.com/Andrei-Y/A-... al_law.zip Если будет интересно - я поясню три случая необходимости инкримента stepsBig, они все три разные, я их не убрал и не заменил одной операцией перед запуском движка только чтобы обратить внимание и не забыть. Операция применяется в коде чаще, но причин только три, и они разные.
0
|
||||||||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
|
||||||
| 12.08.2023, 20:13 | ||||||
1
|
||||||
|
Нарушитель
|
||
| 12.08.2023, 21:16 [ТС] | ||
|
0
|
||
|
Нарушитель
|
|
| 13.08.2023, 10:48 [ТС] | |
|
Я могу это объяснить - во втором случае это последствия чередования частых шагов с одним редким
, ну с логикой потом разберусь, с первым и вторым разобрано .Добавляет нервов когда занимаешься чем-то урывками, так как нет возможности уделять больше времени. Но всё равно как то странно совпадает - три случая, и все разные, а решение одно и то-же , так или иначе будет наводить на мысль о закономерностях.Да в публикацию это нужно будет внести, описание трёх случаев, читатели могут самостоятельно заменить повторяющийся код, так он будет лучше виден. Впрочем и циклы организованы соответственно чередованию. осталось рассмотреть один случай. В общем чередование потребовало величиный суммарной шагов, частых шагов с редким, и она применяется скорее всего во всех трёх случаях, когда пишешь все эти случаи отдельно - не особо берёшь во внимание. И проблема ещё вызвана тем, что там много переменных схожих по названиям, которые можно посчитать ошибочными, но если присмотреться для чего они служат, то становится ясно что названия в принципе оправданные. Да в принципе просто подробно разжевать алгоритм в публикации, и всё будет норм, никаких повествований не надо. Пора быстрее это уже заканчивать. Добавлено через 1 час 10 минут Уныло, с таким ветвлением упала скорость выполнения. Ассемблер реально тормозит. Но с ассемблером время выполнения становится стабильнее, если вызывать процедуру многократно - время выполнения не скачет. Скажет так лучшее время расчёта карты 10 000 на 10 000 без такого ветвления составляет 150 миллисекундм и вариаруется от клика к клику до 200, с ассемблером 230-260, почти не прыгает время выполнения: при первом клике 260, при последующих стабильно 230 . Видимо Pascal не заточен под написание движков компактных, ну зато я хоть отладку провёл нормально.
0
|
|
|
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
||
| 13.08.2023, 12:04 | ||
|
1
|
||
|
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
|
||
| 13.08.2023, 12:40 | ||
|
1
|
||
|
Нарушитель
|
|
| 13.08.2023, 15:46 [ТС] | |
|
А если процедура одна, а в ней вложенные циклы, где внутренний за несколько вызовов суммарно выполняет 100 000 000 проходов за 230 миллисекунд?
И имеется два варианта кода исполнения этих циклов, а код один и тот-же в расчётах. В общем ассемблерная реализация циклов сделала стабильной скорость выполнения, но замедлила. Обычные циклы по скорости выполнения скачут, но вроде как выполняются быстрее. И что-то не найду я нигде, где он включается - профайлер. Хотя читаю https://wiki.lazarus.freepascal.org/Profiling Почитал, интересно, но не понятно как что делать. Тут читаю https://wiki.lazarus.freepascal.org/LazProfiler У меня линукс, кажется это проблема для профайлера. Да, вроде как проблема... В параметрах проекта в отладке установил галочку генерировать код для Valgrind (gv). Это ничего не дало, больше ничего не нашёл. Посмотрел на гитхабе, на там файл Readme пустой, написано только что установка в один клик. Ничего кликать не стал.
0
|
|
|
Супер-модератор
|
||
| 13.08.2023, 16:05 | ||
|
1
|
||
|
Нарушитель
|
|||||||||||||||||||||
| 13.08.2023, 18:48 [ТС] | |||||||||||||||||||||
|
На линукс я самостоятельно не установлю.
Добавлено через 1 час 41 минуту Причём есть странный момент, если я сокращу высоту таблицы в 10 раз, и увеличу ширину в 10 раз - это не влияет на скорость расчётов абсолютно, в то время как начинает работать формула более сложная и время должно значительно увеличиться. Но, как ни странно время выполнения остаётся тем-же что и было ![]() Вот это формула расчёта трассировки это последнего столбца последней строки карты
, и даже разница например как выполнить 10 000 или 100 000 ничего для неё не значат. Впрочем расчёт из первой нужно использовать во второй, чтобы не повторять. Только какая разница если машина её не видит...Добавлено через 23 минуты Сделал так
0
|
|||||||||||||||||||||
| 13.08.2023, 18:48 | |
|
Есть идеи как можно адекватно переписать запрос так, чтобы в нём не было подзапросов? Получить переменную типа Control из цикла foreach так, чтобы ей можно было присвоить значение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|