|
|
  |
Кризис в самообразовании. |
|
|
Guest_TSerg_*
|
Mar 27 2017, 14:15
|
Guests

|
Цитата(=SSN= @ Mar 27 2017, 17:12)  Студент не обязан догадываться, что препод "тупит".. Сначала научитесь ясно выражать свои мысли, а потом занимайтесь преподавательством. Ну, извини, забыл взять в кавычки "середина" массива. А тебе, любезный - тоже не стоит тупить. Пример приведен.
|
|
|
|
|
Mar 27 2017, 14:19
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 9-09-08
Из: РФ
Пользователь №: 40 076

|
Цитата(TSerg @ Mar 27 2017, 17:15)  Ну, извини, забыл взять в кавычки "середина" массива. А тебе, любезный - тоже не стоит тупить. Пример приведен. Не надо мне "ты-кать", не на базаре..
|
|
|
|
Guest_TSerg_*
|
Mar 27 2017, 14:22
|
Guests

|
Цитата(=SSN= @ Mar 27 2017, 17:19)  Не надо мне "ты-кать", не на базаре.. Как хочу - так и обращаюсь. Не нравится - не читай.
|
|
|
|
|
Mar 27 2017, 14:25
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 9-09-08
Из: РФ
Пользователь №: 40 076

|
Цитата(TSerg @ Mar 27 2017, 17:22)  Как хочу - так и обращаюсь. Не нравится - не читай. Так ты специально по форумам шляешься, чтобы потупить?
|
|
|
|
|
Mar 27 2017, 14:25
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(DASM @ Mar 27 2017, 16:09)  Сарказм тэе где тут  Меня приколоа идея сложения указателей.. или как-то так? Я уже снова не понимаю как это работает (int (*)(_t*) ((uint32_t)setpin*...+ (uint32_t) ....) ()О! А я понял. Значит берет он два указателя на функции. Преобразует их в целые и умножает один на состояние, а другой на инвертированное состояние. Получает в результате суммы только один из указателей. Потом снова приводит указатель к функции и вызывает ее вкладывая как аргумент структуру описывающую пин. Фишка этой функции в том, что она не требует if т.е. абсолютно детерминирована. Ай! Красота. Надо записать где-то на память. Тому кто пишет драйвера и не знает такие финты должно быть стыдно по моему.
|
|
|
|
|
Mar 27 2017, 14:27
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (TSerg @ Mar 27 2017, 20:45)  Пример: 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. CODE #!/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 Вывод: CODE [56, 46, 42, 42, 40, 28, 26, 24, 20, 18, 14, 12, 10, 3, 17, 35, 49, 53, 59]
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Guest_TSerg_*
|
Mar 27 2017, 14:43
|
Guests

|
Цитата(=SSN= @ Mar 27 2017, 17:25)  Так ты специально по форумам шляешься, чтобы потупить?  Нет, конечно, исключительно, чтобы тупых выявить  Все как обычно - профи все поняли правильно, студенты - затупили.
|
|
|
|
Guest_TSerg_*
|
Mar 27 2017, 14:47
|
Guests

|
Цитата(dxp @ Mar 27 2017, 17:27)  .. 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. Я это затеял не для того, что быть здесь Рефери. Просто предложил Профи показать возможности тех или иных языков.
|
|
|
|
|
Mar 27 2017, 14:57
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(dxp @ Mar 27 2017, 17:27)  Код #!/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
|
|
|
|
Guest_TSerg_*
|
Mar 27 2017, 15:03
|
Guests

|
Цитата(AlexandrY @ Mar 27 2017, 17:57)  В Matlab гораздо короче: >> [sort(X(find(mod(X,2) <= 0)),'descend' ), sort(X(find(mod(X,2) > 0))) ] Кратко, да. Но, Mathlab.. сложно назвать чистым ЯП. Александр, а Вы приведите трансляцию этого кода на Си  Кроме того, опять же это не сортировка на месте.
|
|
|
|
|
Mar 27 2017, 15:24
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
QUOTE (AlexandrY @ Mar 27 2017, 21:57)  Ну.., это слишком сложно. В Matlab гораздо короче: Было сказано, чтобы читабельно и понимабельно бегиннерам - т.е. разумная декомпозиция. Но для любителей говнокода, извольте: CODE res = sorted([x for x in rnd if not x%2], reverse=True) + sorted([x for x in rnd if x%2]) QUOTE (TSerg @ Mar 27 2017, 22:03)  Кратко, да. Но, Mathlab.. сложно назвать чистым ЯП. Матлаб в данном контексте ничем не лучше питона и даже наоборот.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Guest_TSerg_*
|
Mar 27 2017, 15:31
|
Guests

|
Цитата(dxp @ Mar 27 2017, 18:24)  Было сказано, чтобы читабельно и понимабельно бегиннерам - т.е. разумная декомпозиция. Но для любителей говнокода, извольте: Код res = sorted([x for x in rnd if not x%2], reverse=True) + sorted([x for x in rnd if x%2]) Матлаб в данном контексте ничем не лучше питона и даже наоборот. +1. Совершенно верно. С таким подходом - налетят Сишники и такое понапишут в "три буквы"
|
|
|
|
Guest_TSerg_*
|
Mar 27 2017, 16:37
|
Guests

|
Пример обфускации программ на C ( 21-й конкурс IOCC ). Второй призер (hamano):
Есть желающие это понять?
|
|
|
|
|
Mar 27 2017, 17:49
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970

|
Поясните чем все-таки вот это: Код ((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 сортировки вставкой. Да, не коротко конечно, но надеюсь понятно. CODE 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 }
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|