Официальный сайт компании Arduino по адресу arduino.cc
Сортировка двумерного массива
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Дан массив [28][5], он состоит из целых чисел.
Например
0,3,9,10,1 1,5,10,10,1 1,5,15,0,0 0,6,3,30,0 2,0,21,20,1
Чтобы понять что мне нужно легче объяснить что эти числа из себя представляют. Сортировать нужно порядок следования строк, внутри этих строк ничего менять нельзя.
Результат сортировки положить в такой же массив.
Первое число это номер от 0 до 3 и они могут повторятся (в этом столбце). Первая сортировка это сортировка строк так чтобы строки с меньшим числом оказались наверху. Возрастание.
Следущие 3 числа это день (от 0 до 6), час (от 0 до 23), минута (от 0 до 59). Последняя цифра не важна.
Суть такова что строки нужно выстроить в последовательности по возрастанию сначала по первому столбцу. На основе полученных результатов выполнить сортировку по возрастанию для второго столбца, потом так же для третьего и четвертого. Самое важное условие - для каждой следующей сортировки сохранять порядок результатов предыдущей.
Короче нужно условно выражаясь выстроить строки в порядке хода времени для каждой из цифр первого столбца.
Скажите это вообще реально? Если кто-то готов взяться то напишите пожалуйста мне на почту wild_z@mail.ru
Ах да. Среда - Ардуино ИДЕ. Если это важно.
Бюджет ?
вот так ?
Курсовая?
условно говоря , каждая строчка - отметка времени(timestamp)
первая цифра месяц, вторая день, третья час. четвертая минута.
Переводим все четыре цифры в минуты - в итоге многомерная сортировка вырождается в одномерную по одному параметру. Задача элементарная. алгоритм сортировки можно взять любой из учебника.
Дизель, с вас 300 руб за разработку идеи.
кончай говниться, коллеги! Завтра протрезвею и днем накатаю сюда. Стыдно за сортировку бабки брать! Черти в аду котел заведут с несортированными дровами!
кончай говниться, коллеги! Завтра протрезвею и днем накатаю сюда.
ты опоздал, я уже все решил. А примерчик из учебника на сортировку пузырьком ТС и сам найдет
Да, спасибо, мне тоже подсказали перевести время в секунды. А это все упрощает. Сорян, что потратил ваше время. Задача оказывается была проще чем я думал.
Дизель, с вас 300 руб за разработку идеи.
Тебе придется поделиться со мной. Как вы много написали пока я скетч рисовал.
а чо, нынче qsort() насовсем отменили?
qsort памяти жреть очень много, эта простейшая программа вешает 4к, на Атмеге8 шибко и не применишь, :-)
Убейбох, не вижу в первом сапщении ни одного упоминания Atmega8
тагда применишь. Но всё равно жрёт многа
Учитывая, что результаты будут уходить в другой массив, все делается элементарно с помощью memcpy()
функция memcpy() не проверяет соответствие размера выходного буфера количеству копируемых байт. В результате совершается достаточно много ошибок, способных привести к переполнению буфера.
функция memcpy() не проверяет соответствие размера выходного буфера количеству копируемых байт. В результате совершается достаточно много ошибок, способных привести к переполнению буфера.
В данном случае размеры массива заданы конкретные.
qsort памяти жреть очень много
Чушь
Спасибо, brokly
Я решил упростить себе задачу и просто ввел еще один элемент массива, в который будет записываться сумма секунд. По ней и будет происходить сортировка. Это слегка ускорит процесс, потому что не потребуется столько операций перемножения.
Спасибо, brokly
Я решил упростить себе задачу и просто ввел еще один элемент массива, в который будет записываться сумма секунд. По ней и будет происходить сортировка. Это слегка ускорит процесс, потому что не потребуется столько операций перемножения.
Можно ещё проще сделать.
Взять текущее время и включать реле по модулю.
currentTime%setTime<60?digitalWrite(RELE2,HIGH):digitalWtite(RELE2,LOW);
Где currentTime время UT в секундах, а setTime- время в секундах когда нужно включать
Я делаю это по расписанию. Что собственно и представляет из себя этот массив.
Я делаю это по расписанию. Что собственно и представляет из себя этот массив.
Так и будет по расписанию:
for(int i=0;i< array_size;i++){
А тут все тоже самое, только в качестве setTime берется член массива.
}
Сортировка мне нужна для отображения ее на web интерфейсе. Для наглядности.
Дан массив [28][5], он состоит из целых чисел.
Например
Чтобы понять что мне нужно легче объяснить что эти числа из себя представляют. Сортировать нужно порядок следования строк, внутри этих строк ничего менять нельзя.
Результат сортировки положить в такой же массив.
Первое число это номер от 0 до 3 и они могут повторятся (в этом столбце). Первая сортировка это сортировка строк так чтобы строки с меньшим числом оказались наверху. Возрастание.
Следущие 3 числа это день (от 0 до 6), час (от 0 до 23), минута (от 0 до 59). Последняя цифра не важна.
Суть такова что строки нужно выстроить в последовательности по возрастанию сначала по первому столбцу. На основе полученных результатов выполнить сортировку по возрастанию для второго столбца, потом так же для третьего и четвертого. Самое важное условие - для каждой следующей сортировки сохранять порядок результатов предыдущей.**
Короче нужно условно выражаясь выстроить строки в порядке хода времени для каждой из цифр первого столбца. ***
Скажите это вообще реально? Если кто-то готов взяться то напишите пожалуйста мне на почту wild_z@mail.ru
** По моему после первой сортировки все последующие уже не актуальны...
*** Если после первой сортировки, последующие проводить отдельно в каждом полученном блоке, то актуальным будет только первый результат.
** По моему после первой сортировки все последующие уже не актуальны...
*** Если после первой сортировки, последующие проводить отдельно в каждом полученном блоке, то актуальным будет только первый результат.
Первая сортировка, массивов по значению первой ячейки.
Вторая сортировка по значению второй ячейки, но только тех значений, у которых первый член равен самому мелкому. И тд
а чо, нынче qsort() насовсем отменили?
А оно упростило бы нам жизнь ?
Кстати не правильно отсортировалось. По первому числу сортировка не важна. Главное 3 числа по середине.
Да и упростим задачку. Просто добавим в конец каждой строки еще одно число sum = дни * 1440 + часы * 60 + минуты и будем сортировать строчки по нему.
Да и упростим задачку. Просто добавим в конец каждой строки еще одно число sum = дни * 1440 + часы * 60 + минуты и будем сортировать строчки по нему.
это это заказ - то озвучьте цену. А если нет - то вам уже столько советов надавали. что могли бы и сами сделать.
Еще одна переменная, на мой взгляд. нафик не нужна. Можно вычислять в процессе, контроллеру все равно заняться нечем
И, кстати, где наш с брокли гонорар?
А лучше поставь библиотеку Time.h, переведи все в UnixTime и работай с ним
Первое число это номер от 0 до 3 и они могут повторятся (в этом столбце). Первая сортировка это сортировка строк так чтобы строки с меньшим числом оказались наверху. Возрастание.
А, понял, не вопрос.
Как говориться "найди три отличия".
и перевести надо еще до вкладывания в массив, хранить в нем часы и минуты отдельно совершенно лишнее
Он хочет в веб интерфейсе это показывать. Поэтому задача не облегчается, данные все равно туда сюда конвертить. И память не экономится. Так что наверное большого смысла нет.
brokly Извиняюсь, за то что криво написал. Так получается что все ок.
b707 Я знаю, что уже охамел. =) Но это я уже побольшей части так для себя пишу ....в космос.
чтобы строки с меньшим числом оказались наверху.
А, понял, не вопрос.
что-то ты как-то не так понял....
что-то ты как-то не так понял....
Да нет, как раз задача мутно поставлена, он хочет, что бы сортировка по первой ячейке была "по убыванию", а по времени по возрастанию. У него первая ячейка это какой то признак, а не день.
Верно первое число это номер релюхи и оно само сортируется на веб страничке...
Верно первое число это номер релюхи и оно само сортируется на веб страничке...
Так если на веб морде включена сортировка по первой ячейке, то у тебя последовательность разрушится. Если конечно сортировка не по убыванию.
Ну точнее скажем так что там не происходит сортировка. Там данные разбираются по этому числу. А так как разбор идет по порядку от 0 до 29, то данные будут представлены в отсортированном виде и упорядоченно согласно времени от самого раннего до позднего события..
Да нет, как раз задача мутно поставлена, он хочет, что бы сортировка по первой ячейке была "по убыванию", а по времени по возрастанию. У него первая ячейка это какой то признак, а не день.
Так... начинается типичное "потреблятство" - "пиджак хорош, но нельзя ли чуть-чуть изменить цвет"...
Брокли, я бы на твоем месте ничего бы ему не давал, пока не договоритесь о цене.
Не, я и не прошу. Я не хочу лезть на рожон. Брукли и так если честно поступил очень благородно. Дело в том что я описал даже не конкретно под свою задачу, а в общих чертах. Так что даже тот алгоритм что дал Брукли мне придется слегка адаптировать под себя. А вот если уже не будет получаться то я попрошу у Брукли имейл и думаю там мы уже договоримся.
Да Брукли, извините, пожалуйста, но кстати все равно не верно:
А вот если уже не будет получаться то я попрошу у Брукли имейл и думаю там мы уже договоримся.
напомню, что ты изначально разместил тему в платном разделе. Брукли уже написал код и я не вполне понимаю, почему оплата его труда зависит от каких-то "если"...
Решать, конечно, Брукли... но как клиент ты ведешь себя некрасиво.
Брукли уже написал код и я не вполне понимаю, почему оплата его труда зависит от каких-то "если"...
Извините но сделки не было. Не было оговрены условия. Брукли проявил инициативу.
А чё, qsort уже выбросили из стандартной библиотеки?
http://arduino.ru/forum/ishchu-ispolnitelya/sortirovka-dvumernogo-massiv...
Да какая цена :) Дракула прав, за сортировку деньги брать стремно.
Да какая цена :) Дракула прав, за сортировку деньги брать стремно.
ну я за то, чтобы это был твой выбор :) А не нахальство со стороны клиента :)
А чё, qsort уже выбросили из стандартной библиотеки?
http://arduino.ru/forum/ishchu-ispolnitelya/sortirovka-dvumernogo-massiva#comment-581854
Нате вам за это каку:
Нате вам за это каку:
О! Приятно посмотреть!
Тока это ... чё функция сравнения ноль-то не ворочает, когда равны? Никашерна! :-)
Вот еще :) На самом деле она ничего не возвращает . Она просто не компилится.
Так надо курить.