Абсолютно корректно.
Вы вводите строчки по одной (а разве можно как-то иначе?) и помещаете каждую из них сразу в нужное место. И У Вас массив всегда отсортирован, будь там один элемент или максимально допустимое число.
Расход памяти - только на текущую вводимую строку. Даже второй строки - для обеспечения работы алгоритма - не нужно. Дополнительная память под данные - 1 (прописью: один) байт.
Алгоритм быстрый - единственный проход по массиву, выполняется при вставке каждой новой строки. И нет ограничения, что на каждую новую строку нужна перезагрузка.
Эээ , а разве для new конструктор,деструктор, инициализация, а также обработка исключения к ARDUINO не относятся?
Видимо не доконца прочитал ![]()
`
Вам это приснилось. Стек может проломить кучу, но чтобы куча проломила стек - никогда! Такого не бывает в принципе.
Извините неправильно выразился…
Вы не пробовали стрелять уток при помощи С-300 или хотя бы “Иглы”?
я подумал , что Вы имели ввиду в плане кода п-ец… ![]()
я вначале писал изредко возможно надо будет менять неправильно написанные слова, соответственно сортировка может сбиться…
чем это отличается от ввода новой строчки?
Самый верный способ завалить проект - это отвлекаться на то, что в данном проекте не будет использовано. В Вашем случае - на сортировку. Когда будет действительно насущная потребность - тогда и разберетесь.
Правда, Влад предложил другое интересное решение: новая строка тупо пишется в конец массива и внутри EEPROM ничего не отсортировано. А в памяти каждый раз при загрузке создается отсортированный список индексов, с которым впоследствии и работаем. Тогда сортировка нужна. Плюс такого варианта - в очень экономном расходе ресурса EEPROM: каждая ячейка будет перезаписана не более одного раза, тогда как в предложенном мною методе - до 30 раз (при ресурсе в сотни тысяч - миллионы). Минус - в некоторой задержке из-за затрат времени на сортировку (впрочем, неочевидно, что данная задержка будет заметна на глаз).
индекс уже нельзя менять …к нему привязаны остальные таблицы а так да ничем
Если по методу Влада - неактуально
Роман, у меня к вам отвлеченный вопрос.
Нафига вы спрашиваете это в форуме, если вы все равно делаете так, как считаете нужным?
К чему эта мексиканская мыльная опера на 150 сообщений?
Честно, я не хочу вас обидеть - я и сам обычно действую как вы - то есть стремлюсь разобраться сам. Ну и зачем вам “раздеваться перед партией” - то есть выкладывать на общий суд все свои мельчайшие ошибки?
Тогда дополняем наш код процедурой удаления строки из массива.
Тогда редактирование будет выглядеть так:
- извлекаем строку из EEPROM в RAM,
- удаляем строку из EEPROM,
- редактируем строку в RAM,
- заносим отредактированную строку в нужное место в EEPOM.
Процедура удаления - очевидна: просто сдвигаем весь “хвост” массива к началу на длину строки. Возможно, придется еще дописать в конец байт-терминатор, если он используется в алгоритме.
Я просто хотел научится использовать сортировку выделение памяти и порнять где я накосячил…
почему , мне указали очень хороший способ который по мимо сортировки решает мои проблемы с индексами и редактирование я его и буду использовать … я не отказываюсь от хороших советов:)
для меня мои ошибки не кажутся мельчайшими и я спрашиваю когда сам встаю в тупик , чтоб получить толчок , но с высоты профи - да …возможно они мельчашии
Какой нахер конструктор для указателя на чар? У него есть конструктор? Прекратите умничать и говорить о том, чего не знаете.
Дет еще в 50-м сообщении предложил. Но тут какие-то “индексы”?? Адрес начала строки в еепром и есть индекс. Прочесть в озу попарно и отсортировать пузырьком, только не строки тасовать, а адреса первого знака сохранять в массиве в порядке сортировки
Индексы, это стандарт в DBASE
Индексы - это общее, а “стандарт DBASE” - это частное.
@kolyn , индексы тут намекают на историю с БД. С любым dbf-ом модно было иметь idx.
Вобщем, M строк в еепроме лежат с шагом в N ячеек.
Там же есть область, допустим на M ячеек. В каждой ячейке хранится некое число K, умножив которое на N, получаем физическое смещение в области строк, указывающую на некий блок-строку.
Теперь, при добавлении строки в хранилище, мы пишем её в конец хранилища строк, а вот K находим, произведя поиск места сравнением реальных строк.
В итоге должно быть так: ячейка индекс #1 хранит число 8 - значит в блоке строк по смещению 8xN лежит первая строка, ячейка индекс #2 хранит число 3 - вторая строка в блоке 3xN. И тд. Если в индексе, допустим, FF - блок не используется.
При этом двигать байты придётся только в области индекса - M ячеек максимум.
С индексами не очень понял, нужно читать, но то такое))
Но стальное - то по сути верно? И отсортировать, сохраняя массив соответствующих стоке индексов, а не адресов еепром можно точно так же?
Суть индекса и заключается в том, чтобы хранить соответствие сортированного списка физическому-историческому.
Индексов может быть больше одного: по возрастанию, по убыванию, по регистру, по длине. Чтобы не пересохранять длинные строки во всех порядках - просто создаешь индекс, созданный по любому вычурному правилу и скочешь по нему, подсасывая реальные записи БД.
Коллеги, ТС застрял где-то в мк-61, научится правильному не хочет, индексы и СУБД для него тёмный лес, указатели учить не хочет (хотя дед правильно в начале темы написал что нехрен дальше общаться пока не выучит), и че тратить силы/время на человека.
Не надо обобщать , про индексы не я спрашивал , я хорошо разбираюсь в базах данных и двасе и парадокс и вскякие sql …и как раз таки наоборот я именно в указателях хотел разобраться ,если вы почитаете выше то увидите
Гы ![]()
Человек, знающий и работающий с реляционными СУБД, знающий sql, должен понимать что такое индексы, и не будет гонять все поле данных для сортировки))))
учиться надо самому, читая учебник и пробуя на практике. А так как вы тут устроили - глупо и стыдно.
Так не учатся - задавая тысячи вопросов и даже не успевая читать ответы. Вы пытаетесь программировать методом тыка. Вам подсказали сортировку по индексам - так сядьте и подумайте. Потом попробуйте реализовать. Это не делается в 10 минут. Над этим надо подумать день, два…
Неужели вам не стыдно, что сами без форума вы вообще ничему не учитесь?