Гость TSerg 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Студент не обязан догадываться, что препод "тупит".. Сначала научитесь ясно выражать свои мысли, а потом занимайтесь преподавательством. Ну, извини, забыл взять в кавычки "середина" массива. А тебе, любезный - тоже не стоит тупить. Пример приведен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=SSN= 0 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Ну, извини, забыл взять в кавычки "середина" массива. А тебе, любезный - тоже не стоит тупить. Пример приведен. Не надо мне "ты-кать", не на базаре.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Не надо мне "ты-кать", не на базаре.. Как хочу - так и обращаюсь. Не нравится - не читай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=SSN= 0 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Как хочу - так и обращаюсь. Не нравится - не читай. Так ты специально по форумам шляешься, чтобы потупить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Сарказм тэе где тут :) Меня приколоа идея сложения указателей.. или как-то так? Я уже снова не понимаю как это работает (int (*)(_t*) ((uint32_t)setpin*...+ (uint32_t) ....) () О! А я понял. Значит берет он два указателя на функции. Преобразует их в целые и умножает один на состояние, а другой на инвертированное состояние. Получает в результате суммы только один из указателей. Потом снова приводит указатель к функции и вызывает ее вкладывая как аргумент структуру описывающую пин. Фишка этой функции в том, что она не требует if т.е. абсолютно детерминирована. Ай! Красота. Надо записать где-то на память. Тому кто пишет драйвера и не знает такие финты должно быть стыдно по моему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 43 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Пример: rnd= 19 [40,14,17,46,12,53,3,49,26,56,10,28,59,20,35,42,42,18,24] sort=19 [56,46,42,42,40,28,26,24,20,18,14,12,10,3,17,35,49,53,59] Требования: простота, изящность, самодокументируемость кода для понимания студентами. Реализация планировалась на тех или иных разновидностях Pascal/Delphi/FreePascal/Lazarus. #!/usr/bin/python rnd = [40,14,17,46,12,53,3,49,26,56,10,28,59,20,35,42,42,18,24] even = [x for x in rnd if not x%2] odd = [x for x in rnd if x%2] res = sorted(even, reverse=True) + sorted(odd) print res Вывод: [56, 46, 42, 42, 40, 28, 26, 24, 20, 18, 14, 12, 10, 3, 17, 35, 49, 53, 59] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Так ты специально по форумам шляешься, чтобы потупить? Нет, конечно, исключительно, чтобы тупых выявить :) Все как обычно - профи все поняли правильно, студенты - затупили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба О! А я понял. Значит берет он два указателя на функции. Преобразует их в целые и умножает один на состояние, а другой на инвертированное состояние. Получает в результате суммы только один из указателей. Потом снова приводит указатель к функции и вызывает ее вкладывая как аргумент структуру описывающую пин. Фишка этой функции в том, что она не требует if т.е. абсолютно детерминирована. Ай! Красота. Надо записать где-то на память. Тому кто пишет драйвера и не знает такие финты должно быть стыдно по моему. а цель? Кстати умножать на bool это видимо по вашему ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба .. even = [x for x in rnd if not x%2] odd = [x for x in rnd if x%2] res = sorted(even, reverse=True) + sorted(odd) .. Отлично! Прекрасный пример на Питоне по краткости, хотя тут не сортировка на месте. Идея была именно такая - разделить четные/нечетные в массиве по месту, отдельно отсортировать на месте части массива (четные/нечетные). Т.е. метод разделения сложного на части, простые операции над частями - доступны для понимания студентам с начальным уровнем. P.S. Я это затеял не для того, что быть здесь Рефери. Просто предложил Профи показать возможности тех или иных языков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба #!/usr/bin/python rnd = [40,14,17,46,12,53,3,49,26,56,10,28,59,20,35,42,42,18,24] even = [x for x in rnd if not x%2] odd = [x for x in rnd if x%2] res = sorted(even, reverse=True) + sorted(odd) print res Ну.., это слишком сложно. В Matlab гораздо короче: X = [40,14,17,46,12,53,3,49,26,56,10,28,59,20,35,42,42,18,24] >> [sort(X(find(mod(X,2) <= 0)),'descend' ), sort(X(find(mod(X,2) > 0))) ] ans = 56 46 42 42 40 28 26 24 20 18 14 12 10 3 17 35 49 53 59 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба В Matlab гораздо короче: >> [sort(X(find(mod(X,2) <= 0)),'descend' ), sort(X(find(mod(X,2) > 0))) ] Кратко, да. Но, Mathlab.. сложно назвать чистым ЯП. Александр, а Вы приведите трансляцию этого кода на Си :) Кроме того, опять же это не сортировка на месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 43 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Ну.., это слишком сложно. В Matlab гораздо короче: Было сказано, чтобы читабельно и понимабельно бегиннерам - т.е. разумная декомпозиция. Но для любителей говнокода, извольте: res = sorted([x for x in rnd if not x%2], reverse=True) + sorted([x for x in rnd if x%2]) Кратко, да. Но, Mathlab.. сложно назвать чистым ЯП. Матлаб в данном контексте ничем не лучше питона и даже наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Было сказано, чтобы читабельно и понимабельно бегиннерам - т.е. разумная декомпозиция. Но для любителей говнокода, извольте: res = sorted([x for x in rnd if not x%2], reverse=True) + sorted([x for x in rnd if x%2]) Матлаб в данном контексте ничем не лучше питона и даже наоборот. +1. Совершенно верно. С таким подходом - налетят Сишники и такое понапишут в "три буквы" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость TSerg 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Пример обфускации программ на C ( 21-й конкурс IOCC ). Второй призер (hamano): Есть желающие это понять? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Поясните чем все-таки вот это: ((int (*)(dev_gpio_t *))((uint32_t)cs_pin->setpin*(!state) + (uint32_t)cs_pin->resetpin*(state)))(cs_pin); лучше чем вот это? if (state) cs_pin->resetpin(cs_pin); else cs_pin->setpin(cs_pin); return 0; Вот сортировка на месте на C. Просто 2 сортировки вставкой. Да, не коротко конечно, но надеюсь понятно. void swap(int *a, int *b ) { int tmp = *a; *a = *b; *b = tmp; } int odd_even_separate(int* mas, int len) { // odd to left, even to right int i; int n = len; for (i = 0; i < n;) { if ((mas[i] % 2) == 0) { i++; } else { swap(&mas[i],&mas[n-1]); n--; } } return n; //even start } int cmp (int a, int b, int par) { return par ? a > b : a < b; } void insertion_sort(int* mas, int len, int dir) { // dir - diretion : 0 for down, 1 for up int i; int j; for(i=1; i<len; i++) { for( j=i; j>0 && cmp(mas[j-1], mas[j], dir); j--) { swap(&mas[j], &mas[j-1]); } } } void test_sort(int *mas, int len) { int even_start = odd_even_separate(mas, len); insertion_sort(mas, even_start, 0); // left part(odd) sort down insertion_sort(mas+even_start, len-even_start, 1); // right part(even) sort up } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться