|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
Затык с ООП и динамическими функциями23.05.2023, 10:07. Показов 736. Ответов 19
Метки нет (Все метки)
Сидел я и думал (непривычное занятие) о том, как бы мне модифицировать код с ООП так, чтобы можно было автоматически объекты создавать в нужном количестве просто передавая нужно число в конструктор.
Код рисует массивы на форме по таймеру, и я хочу чтобы если я указал 1, то масштабировался и рисовался на форме один блок, если укажу 8, чтобы было 8 блоков, при этом в идеале конструктору кроме числа блоков хорошо бы отдавать перечень функций, которые будут участвовать в изменении данных каждого блока. Сейчас это реализации сортировок побайтно. Код нерабочий по очевидным причинам. Всё что мог запихал в списки. А вот как запихать в списки UpdateData1 и Sort1 я уже не врубаюсь. Хорошо видно что я в CombSort вызываю отрисовку явно указывая нужную функцию и по сути всё будет кисоваться во втором блоке. На скринах то как у меня выглядит статичный вариант с двумя потоками. Кликните здесь для просмотра всего текста
0
|
||||||
| 23.05.2023, 10:07 | |
|
Ответы с готовыми решениями:
19
Работа с динамическими массивами и функциями Работа с динамическими массивами и функциями С++ В чем различие между функциями VBA и функциями Excel? |
| 23.05.2023, 10:53 | |||
|
1
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||
| 23.05.2023, 11:42 [ТС] | |||||||
|
Добавлено через 17 минут
0
|
|||||||
|
|
|||||||||||||||||||
| 23.05.2023, 12:27 | |||||||||||||||||||
|
Как создать N-объектов? Вам ответили -- фабрика. Ну либо цикл for(n), вообще не понимаю как вы дошли до ООП, но застряли на этом.
1
|
|||||||||||||||||||
| 23.05.2023, 12:29 | |
|
belalugoci, в вашем коде творится что-то несуразное - потоки, таймер, измеритель времени, сами данные и методы их обработки всё это в куче. Разделите по классам - массивы данных и методы их сортировки в один класс, UI в классе формы.
Измеритель времени применён не правильно, т.к. в работу метода сортировки вклинен UI.
2
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||
| 23.05.2023, 13:14 [ТС] | |||||||
|
0
|
|||||||
| 23.05.2023, 19:14 | |||||||||||
|
Для начала отделите данные от UI
Класс данных
Затем где-то в форме можно применить так
1
|
|||||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||
| 24.05.2023, 05:16 [ТС] | ||||||||||||
|
при запуске программа ждет событие (клик на форму например), после чего в форме на канвасе показывается графически преобразование массива на разных этапах сортировки. после окончания программы (последнего потока) - конец. сама программа при старте формирует Х баров (прямоугольников), в которых изображены в виде столбцов значения в массиве (гистограмма). Сейчас я в программе для того чтобы выводить бары должен явно заходить в код каждой функции и руками прописывать что и где рисуется. Когда это делаешь 1 раз, то можно и так, а когда 18-40 раз за пол часа, то это утомляет. Идея в том чтобы я мог любому алгоритму сортировку (хоть старому коду, хоть вновь написанному) весьма легко передавать информацию о его месте отрисовки. В моём понимании в Main я создаю что-то (запускаю конcтрукторы), которые определяют ID, обращаясь к определенному коду и указывая ID я могу однозначно понимать где рисовать и что рисовать. Не обязателен такой алгоритм, просто я его так вижу, но с ООП я не представляю как именно нужно строить задачу в конечном итоге.
я буду благодарен если покажете как именно нужно замерять скорость выполнения кода, я создавал такую тему но никто не ответил. Обычно я запускаю 10-20 прогонов и использую среднее значение. Обычно этого достаточно чтобы видеть разницу между O(n), O(nLOG2(n)) и O(n^2).
0
|
||||||||||||
|
|
||
| 24.05.2023, 10:39 | ||
|
Что по отрисовке я бы сделал: - задал фиксированый Bitmap с unsafe code, чтобы работать с пикселями напрямую - ширина Bitmap -- 4px * n, где n -- количество элементов в arr - высота -- Min(максимальный элемент, максимально адекватное разрешение монитора) - получаем массив, и тупо рисуем линии на Bitmap (с поправкой на высоту) - далее -- тупо делаем Draw текущего Bitmap на форму. p.s. код таки лучше не сваливать в кучу, а расфасовать по классам, раз взялись за ООП.
1
|
||
| 24.05.2023, 11:03 | ||||||
|
1
|
||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||
| 24.05.2023, 11:38 [ТС] | ||||||||||
|
Мне ООП не понравился в основном тем (и за 25 лет ни кто не смог опровергнуть это, нам в целом в ВУЗе это и говорили, да и читал тоже много об этом), что он перегружает код лишним текстом не давая явного преимущества на массе вариантов кода. Как и в моей теме потребность в ООП появилась на стыке определенных задач. Я давно, в начале 90-х делал что-то похожее на Си, без ООП, просто было давно и уже такое не делал лет 20, да и решение для DOS в данном случае мне не нужно. Я даже не знаю как это делать в Watcom C. С год назад смотрел на гитхабе код TimSort сделанный по тру правилам ООП, при этом сам код сортировки занимал 5-7% кода, остальное было описанием классов и методов, часто однострочных. Читать практически невозможно. Добавлено через 4 минуты
0
|
||||||||||
| 24.05.2023, 12:30 | |||||||
|
1
|
|||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 24.05.2023, 15:04 [ТС] | ||||||
|
0
|
||||||
| 24.05.2023, 15:47 | ||||||
|
UI начинает перерисовывать графики. Взяв первый элемент первого массива (datalist[0]) он его рисует. Затем управление получает Поток1, который меняет первый элемент с, допустим, вторым. Управление возвращается потоку UI и он переходит к рисованию второго элемента первого массива, но там находится та же величина, что уже была нарисована ранее, а первый нарисованный сегмент не соответствует действительности. Далее звучит звук видео.
0
|
||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 24.05.2023, 16:26 [ТС] | ||
|
Ладно, неблагодарное это дело - ковыряние в устоявшихся традициях. Лучше посмотрим что я наговнокодю.
0
|
||
| 24.05.2023, 16:36 | |
|
belalugoci, да причём тут Поток0 и Поток1. Пример приведён для двух потоков: UI и Поток0. Один рисует другой сортирует. Работа с потоками всегда требует щепетильности. Как только появляются потоки тут же появляются и объекты синхронизации их работы, если только не требуется действительно параллельная обработка чего либо.
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 24.05.2023, 16:38 [ТС] | ||
|
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 24.05.2023, 18:15 [ТС] | |||
|
За вечер я могу запускать тесты раз 200, при последовательном выполнении это занимает кратно большее время.
0
|
|||
| 24.05.2023, 18:15 | |
|
Помогаю со студенческими работами здесь
20
FILE_MAP_EXECUTE затык Затык с VARIANT затык с модулями
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|