реклама на сайте
подробности

 
 
14 страниц V  « < 4 5 6 7 8 > »   
Reply to this topicStart new topic
> Кризис в самообразовании.
Guest_TSerg_*
сообщение Mar 27 2017, 14:15
Сообщение #76





Guests






Цитата(=SSN= @ Mar 27 2017, 17:12) *
Студент не обязан догадываться, что препод "тупит"..
Сначала научитесь ясно выражать свои мысли, а потом занимайтесь преподавательством.

Ну, извини, забыл взять в кавычки "середина" массива.
А тебе, любезный - тоже не стоит тупить. Пример приведен.
Go to the top of the page
 
+Quote Post
=SSN=
сообщение Mar 27 2017, 14:19
Сообщение #77


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 9-09-08
Из: РФ
Пользователь №: 40 076



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

Не надо мне "ты-кать", не на базаре..
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 14:22
Сообщение #78





Guests






Цитата(=SSN= @ Mar 27 2017, 17:19) *
Не надо мне "ты-кать", не на базаре..

Как хочу - так и обращаюсь. Не нравится - не читай.
Go to the top of the page
 
+Quote Post
=SSN=
сообщение Mar 27 2017, 14:25
Сообщение #79


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 9-09-08
Из: РФ
Пользователь №: 40 076



Цитата(TSerg @ Mar 27 2017, 17:22) *
Как хочу - так и обращаюсь. Не нравится - не читай.

Так ты специально по форумам шляешься, чтобы потупить? biggrin.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 27 2017, 14:25
Сообщение #80


Ally
******

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



Цитата(DASM @ Mar 27 2017, 16:09) *
Сарказм тэе где тут sm.gif Меня приколоа идея сложения указателей.. или как-то так? Я уже снова не понимаю как это работает
(int (*)(_t*) ((uint32_t)setpin*...+ (uint32_t) ....) ()


О! А я понял.
Значит берет он два указателя на функции. Преобразует их в целые и умножает один на состояние, а другой на инвертированное состояние.
Получает в результате суммы только один из указателей. Потом снова приводит указатель к функции и вызывает ее вкладывая как аргумент структуру описывающую пин.

Фишка этой функции в том, что она не требует if т.е. абсолютно детерминирована.
Ай! Красота. Надо записать где-то на память.

Тому кто пишет драйвера и не знает такие финты должно быть стыдно по моему.
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 27 2017, 14:27
Сообщение #81


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]


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 14:43
Сообщение #82





Guests






Цитата(=SSN= @ Mar 27 2017, 17:25) *
Так ты специально по форумам шляешься, чтобы потупить? biggrin.gif

Нет, конечно, исключительно, чтобы тупых выявить sm.gif
Все как обычно - профи все поняли правильно, студенты - затупили.
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 27 2017, 14:46
Сообщение #83


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(AlexandrY @ Mar 27 2017, 17:25) *
О! А я понял.
Значит берет он два указателя на функции. Преобразует их в целые и умножает один на состояние, а другой на инвертированное состояние.
Получает в результате суммы только один из указателей. Потом снова приводит указатель к функции и вызывает ее вкладывая как аргумент структуру описывающую пин.

Фишка этой функции в том, что она не требует if т.е. абсолютно детерминирована.
Ай! Красота. Надо записать где-то на память.

Тому кто пишет драйвера и не знает такие финты должно быть стыдно по моему.

а цель?
Кстати умножать на bool это видимо по вашему )
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 14:47
Сообщение #84





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.
Я это затеял не для того, что быть здесь Рефери.
Просто предложил Профи показать возможности тех или иных языков.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 27 2017, 14:57
Сообщение #85


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


Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 15:03
Сообщение #86





Guests






Цитата(AlexandrY @ Mar 27 2017, 17:57) *
В Matlab гораздо короче:
>> [sort(X(find(mod(X,2) <= 0)),'descend' ), sort(X(find(mod(X,2) > 0))) ]

Кратко, да.
Но, Mathlab.. сложно назвать чистым ЯП.
Александр, а Вы приведите трансляцию этого кода на Си sm.gif
Кроме того, опять же это не сортировка на месте.
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 27 2017, 15:24
Сообщение #87


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.. сложно назвать чистым ЯП.

Матлаб в данном контексте ничем не лучше питона и даже наоборот.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 15:31
Сообщение #88





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.
Совершенно верно.
С таким подходом - налетят Сишники и такое понапишут в "три буквы" sm.gif
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Mar 27 2017, 16:37
Сообщение #89





Guests






Пример обфускации программ на C ( 21-й конкурс IOCC ).
Второй призер (hamano):
Прикрепленное изображение


Есть желающие это понять? sm.gif
Go to the top of the page
 
+Quote Post
Swup
сообщение Mar 27 2017, 17:49
Сообщение #90


Частый гость
**

Группа: Свой
Сообщений: 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
}
Go to the top of the page
 
+Quote Post

14 страниц V  « < 4 5 6 7 8 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 15:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01471 секунд с 7
ELECTRONIX ©2004-2016