Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кризис в самообразовании.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > Образование в области электроники
Страницы: 1, 2, 3, 4, 5
Myron
Цитата(aiwa @ Mar 25 2017, 14:35) *
если у кого есть программа "электронного" вуза, т.е. последовательный список вопросов и прилагающийся к ним список литературы просто выложите его, вместо того, чтобы пинать.
Если чел засыпает на 5-й стринице (Фихтенгольца), то сколько времени ему потребуется, чтобы изучить самостоятельно по "списку". Знания в электронике быстро прогрессируют. По моим подсчетам придется переучиваться (доучиваться) примерно каждые 7-8 лет. Причем в свободное от работы время. С преподами это делается более эффективно, если выбраны (найдены) лучшие. Правда после некоего числа таких шагов процесс обучения идет быстрее.
Бросайте вы это. Без мотивации ничего не выйдет.
aiwa
Цитата(Myron @ Mar 26 2017, 02:08) *
Если чел засыпает на 5-й стринице (Фихтенгольца), то сколько времени ему потребуется, чтобы изучить самостоятельно по "списку".

Так в том то и дело, что если бы был "список", то в нем отсутствовал бы Фихтенгольц.
Потому что он довольно специфичен: его нужно читать будущим математикам в 14-летнем возрасте. В любых других случаях - это бесполезная трата времени.
Взять в руки книгу - это уже мотивация. А был бы "список", т.е. хоть какой-то методический ориентир что изучать и в какой последовательности может человек тихой сапой и освоил что ему требуется самостоятельно. А потраченное время - это же его время ему и решать.


hsoft
Цитата(aiwa @ Mar 26 2017, 02:28) *
Так в том то и дело, что если бы был "список", то в нем отсутствовал бы Фихтенгольц.
Потому что он довольно специфичен: его нужно читать будущим математикам в 14-летнем возрасте. В любых других случаях - это бесполезная трата времени.
Взять в руки книгу - это уже мотивация. А был бы "список", т.е. хоть какой-то методический ориентир что изучать и в какой последовательности может человек тихой сапой и освоил что ему требуется самостоятельно. А потраченное время - это же его время ему и решать.

можно поспорить...
Если Вы собираетесь работать с базами данных в банке или писать сайты, Фихтенгольца можно не читать.

Если же Ваша цель создание реальных железок, Фихтенгольц нужен. Те знания которые приведены в трехтомнике не являются чем то узкоспецифичным.
Он заканчивает на рядах Фурье. А как известно сейчас на преобразовании Фурье завязано практически все, видеообработка, аудиообработка, радиосвязь, передача данных.

Фихтенгольц по настоящему качественный учебник математики. Я бы прописал его любому специалисту после 35 чтобы "прокачать" заплывшие мозги.
В отличие от авторов 70х и позже годов, он пишет просто, очень доступно и при этом очень последовательно и позволяет пройти все концепции
без преподавателя, самостоятельно. Как раз в силу того, что пишет очень просто, логично и без разрывов в концепциях.
Усилия потраченные на освоение математики с Фихтенгольцем однозначно дадут результат.
Smoky
Цитата(xinortcele @ Mar 23 2017, 03:41) *
Видимо это и было какой-то ошибкой, но взяв первый том Фихтенгольца и начав неспеша, вдумчиво читать каждое предложение, я столкнулся с тем что меня хватает примерно на 5 страниц и все! Срабатывает какой-то тормоз и дальнейшее чтение приносит одни муки, ощущение какой-то нехватки памяти!
В общем описал все несколько сумбурно. Может кто-то сталкивался с чем-то подобным. Отдых (две недели) как-то не помогает, (правда мысли как-бы по инерции работали в том же ключе).


Вдумчиво читать Фихтенгольца есть смысл когда есть мотивация в расширении знаний. Для начала понимания достаточно книги Мартина Хартли Джонса ЭЛЕКТРОНИКА-ПРАКТИЧЕСКИЙ КУРС с обязательным сочетанием с какой либо программой моделирования, например бесплатной MultiSIM BLUE, в которой куча наглядных измерительных приборов. В книге номинал математики, просто и доступно. Все примеры можно наглядно проверить виртуально в программе. Такой способ более интересен и результативен, проверено на себе...
Эдди
Цитата(ViKo @ Mar 24 2017, 09:14) *
Вот C# мне нравится.

Как может нравиться это говнище?
Цитата(yanvasiij @ Mar 24 2017, 22:47) *
Что значит "недоязык"? Ничего, что на C++ написано, пожалуй, наибольшее количество проектов по сравнению с другими языками?

Это — ваши фантазии. На С написано больше полезного софта, чем на любом другом языке. Потому что только С позволяет иметь большую гибкость и кучу удобств!
Цитата
Попробуйте-ка на C# написать операционную систему, системную службу или системный драйвер - не выйдет.

си-диез - это вообще финиш! На нем вообще ничего нельзя писать, как и на пхытоне.
Цитата
А что касается python, то это, на мой взгляд, самой простой по порогу вхождения язык.

Тоже чушь! Начать с отступов вместо скобок, спагетти-кода и вообще полной алогичности самого языка! Нет, на пхытоне работать — себя не уважать! Единственное, что удобно в пхытоне — количество кода в разы меньше, чем на С. Но, естественно, только под узкий круг задач: микроконтроллеры на пхытоне не попрограммируешь, и операционку на нем не напишешь. Ибо убог.


Цитата(aiwa @ Mar 25 2017, 23:35) *
Да, выбор Фихтенгольца был Вашей ошибкой. Редкий человек не засыпает после 5-ти его страниц.
И вообще эта книга предназначена для молодых начинающих математиков...

Ну, я по Фихтенгольцу матан учил. И я — не математик, я — физик. Мне понравилась подача материала, и я не засыпал после пяти страниц.
Если же человек реально не может осилить Фихтенгольца, то и матан ему не стоит пытаться понять. Да и нужно ли? Матан — штука сложная, и 99% из него в реальной жизни никогда не пригодится (разве что "скрутить в форме интеграла проволоку и шляпу из лужи достать").
Есть уйма литературы по обработке данных, где матана минимум — софт вроде той же октавы все за вас сделает. Для обработки 1D данных советую Сергиенко почитать, а если нужно с изображениями работать, то Гонсалеса-Вудса.
AlexandrY
Цитата(hsoft @ Mar 26 2017, 06:11) *
Если же Ваша цель создание реальных железок, Фихтенгольц нужен. Те знания которые приведены в трехтомнике не являются чем то узкоспецифичным.


Хм, посмотрел я первый том Фихтенгольц-а.
Это что-то.

Уважаю тех кто смог прочитать там за раз 5-ть страниц и понять о чем там и для чего. Местами напоминает схоластику.

Но для электронщика это потеря времени.
Избыточность изложения, чуждая терминология, устаревший язык, отсутствие дискретной математики, узость охвата.

mdmitry
Андре Анго. Математика для электро- и радиоинженеров. Издательство Наука, 1964.
aiwa
Цитата(hsoft @ Mar 26 2017, 06:11) *
можно поспорить...
...
Если же Ваша цель создание реальных железок, Фихтенгольц нужен. Те знания которые приведены в трехтомнике не являются чем то узкоспецифичным.
...

Согласен, знания в трехтомнике не являются узкоспецифичными - более того, по сути первый том в наше время это уже материал средней школы.
Но изложение материала является узкоспецифическим: его скрупулезная последовательность предназначена для тех, кто связывает свою жизнь с математикой в качестве работы или хобби. Ну не нужны для создания реальных железок доказательство замечательных пределов или вывод формулы ряда Фурье. Достаточно знать что о существовании и их свойствах.
Поэтому, ИМХО, лучше подходит более краткий курс, пусть даже элементарный справочник.
А вот про доступность изложения, - я согласен, если отсутствует понимание чего-то на "молекулярном" уровне, то полезно заглянуть в Фихтенгольц на данную тему.
yanvasiij
Цитата(TSerg @ Mar 25 2017, 01:29) *
Да, не переживайте Вы так уж сильно sm.gif
Этот "товарищ" временами спускается с гор и обнаруживает новую реальность на равнинах, начинает бороться с внутренним несоответствием "горных знаний" и современной индустрии программирования.


Вот только что осознал, как же Вы правы! )))
DASM
Цитата(Myron @ Mar 26 2017, 03:08) *
Если чел засыпает на 5-й стринице (Фихтенгольца), то сколько времени ему потребуется, чтобы изучить самостоятельно по "списку". Знания в электронике быстро прогрессируют. По моим подсчетам придется переучиваться (доучиваться) примерно каждые 7-8 лет. Причем в свободное от работы время. С преподами это делается более эффективно, если выбраны (найдены) лучшие. Правда после некоего числа таких шагов процесс обучения идет быстрее.
Бросайте вы это. Без мотивации ничего не выйдет.

Да ничего не прогрессирует. Идут другие технологии, но они это забытое старое. По большому счету все абсолютно тоже самое что и 30 лет назад. "свободное от работы время." - эту фразу вообще не понял. "чтобы изучить самостоятельно по "списку"." - а не надо ничего изучать, надо делать серьезный проект и все. Просто взять и сделать, а не вставать в красивые стойки, читать акад учебники покупать агиленты и трындеть на форуме как страшно жить

Цитата(Эдди @ Mar 26 2017, 11:46) *
И я — не математик, я — физик.

Вы не физик, я бы сказал кто вы но мат тут запрещен
dxp
QUOTE (Эдди @ Mar 26 2017, 15:46) *
Это — ваши фантазии. На С написано больше полезного софта, чем на любом другом языке. Потому что только С позволяет иметь большую гибкость и кучу удобств!

Именно! Шарп - это вообще какая-то местечковая поделка M$. Захотелось иметь свою жабу, вот и родили. А цэ-крест-крест - уже в самом названии - язык, на котором даже автор поставил аж два креста! Ну, что там можно от него ожидать?! Одни понты: какие-то, дескать, типы, определяемые пользователем - это зачем? чтобы запутать? Перегрузка операторов - зачем? Опять чтобы запутать. Как будто без этого у программиста проблем нет. А шаблоны - эт ваще песня! Многословный мутный синтаксис, по которому компилятор должен что-то родить. Нередко там оно такого нарожает, что мама-не горюй! Тонны дублирующегося кода. А потом удивляются, что процы на гигагерцах и гигабаты памяти, а проги всё равно тормозят и не лезут.

А этот самый полиморфизм! Написать код, который не ясно, что конкретно делает, а ясно только на рантайме. А там уже поздно выяснять. И зачем это? Опять чтобы запутать. Если кто в этом что-то и может делать, то только автор. В общем, write-only язык.

Отдельно хочется отметить так называемые виртуальные функции! Это что за название? Что обычно называют виртуальным? Что-то такое, что как бы является похожим. Т.е "виртуальные функции" - это "как бы функции", т.е. не настоящие, а выдающие себя за них. Так понимать? И так там во всём. Костыли на костылях.

Но и С - это тоже полумеры! С - есть попытка сделать портабельный макроассемблер, и вся его мощь в том, что программист может управлять ресурсами на низком уровне. И если раньше этот подход (портабельный макросассемблер) был ещё как-то оправдан, то сегодня это уже анахронизм - компания ARM решила эту проблему - изобрела унифицированную ISA, и теперь без разницы, какой проц - надо микроконтроллер или апликушный процессор, ассемблер тот же самый. Т.е. без разницы, Cortex-M или Cortex-A, команды пишем те же самые. Скажете: "А как же другие процы, которые не ARM?". Так они все обречены на вымирание, нет смысла тратить на них время. Надо учить ассемблер ARM, это решает все проблемы без гемора, вносимого так называемыми "языками высокага уровня".

Возвращаясь к С - и этот тоже туда же (в смысле, больше проблем от него, чем пользы). Например, если надо обратиться по конкретному адресу, это требует явного преобразования типов через мерзкий, ломающий мозг синтаксис типа (*(int *)ptr). А у ж разместить переменную по конкретному адресу вообще средствами языка невозможно - начинают тянуться всякие расширения, которые у разных вендоров все разные, а у некоторых отсутствуют. Ну, и где эта хвалёная переносимость?

А пресловутая "адресная арифметика"?! Это нескончаемый источник труднообнаруживаемых ошибок. Недаром серьёзные фирмы, выпускающие ответственные изделия (автомобильная электроника), осознав эту проблему, разработали отдельный стандарт для безопасности - MISRA, где вся эта возня с указателями и адресной арифметикой просто запрещена!

Другое дело ассемблер: доступны абсолютно все средства используемой целевой платформы, без всякого гемора оптимальнейшим образом достигаем любой цели. Например, попробуйте на С написать такое:
CODE
    mrc    p15, 0, r0, c1, c0, 0        /* read CP15 register 1 */
    bic    r0, r0, #0x1            /* clear bit 0 */
    mcr    p15, 0, r0, c1, c0, 0        /* write value back */


А уж про синтаксические правила и говорить нечего. Ведь это же надо придумать конструкции вроде такой:

int (*(af[]))(int);

Ведь тут без бутылки не разберёшься. Нет, чтоб читать выражение слева-направо, тут надо расшифровывать по специальным правилам, а всего-то массив указателей на функции. Конечно, человек ко всему привыкает, но новичкам это срывает крышу. Да даже с простым вопросом, где идеологически правильно ставить звёздочку, и то не ясно:

int* ptr;

или

int *ptr;

Я вот думал поначалу (и довольно долго), что первый вариант - дескать, int* - это тип указателя. Хотя даже тогда не покидало чувство, что что-то тут не так - почему для объектов звезда применяется слева, а для типов справа. А потом узнал, что правильно - второй вариант. И трактуется это так: "ptr - это такой тип, при разыменовании которого, получается int".

Т.е. по сути типа указатель в языке вообще нет! Есть неявный тип, при разыменовании которого получается уже настоящий тип. Это ж какая извращённая логика в этом заложена! Отсюда и этот ужасный синтаксис выше - про массив указателей на функции.

Т.ч. не, не говорите, что С хороший язык. Попытка сделать портабельный макроассемблер - да. Имела право на жизнь? Да. Нужна ли сейчас? Нет! Учите ISA от ARM, и будет вам счастье.

QUOTE (Эдди @ Mar 26 2017, 15:46) *
На нем вообще ничего нельзя писать, как и на пхытоне.

Я даже больше скажу: Python - вообще не язык программирования. Серьёзно. Сам бы удивлён, когда узнал. Т.ч. его и рассматривать как ЯП не стоит.

QUOTE (Эдди @ Mar 26 2017, 15:46) *
Тоже чушь! Начать с отступов вместо скобок, спагетти-кода и вообще полной алогичности самого языка! Нет, на пхытоне работать — себя не уважать! Единственное, что удобно в пхытоне — количество кода в разы меньше, чем на С. Но, естественно, только под узкий круг задач: микроконтроллеры на пхытоне не попрограммируешь, и операционку на нем не напишешь. Ибо убог.

Да, какой-то голландский (кстати, это может не случайно) мужык по имени Гуидо решил, что мне удобно везде использовать одинаковый отступ для выделения блока, а я вот, может, люблю каждую строчку индивидуально отодвинуть от края. И потом - подумать только - ведь каждый объект - это выделение памяти в куче (malloc, сиречь). Это ж какой тормоз-то получается! Ну подумаешь, динамическая типизация - зачем она? Только запутывает! Никогда не знаешь, какого типа объект.

И вообще типы - зло. Какая-то лишняя сущность. Вон на ассемблере нет никаких типов, всё просто и прозрачно - все данные либо в регистрах, либо по конкретным адресам памяти. Ничего не сокрыто, никакой мути - всё честно перед глазами программиста. В наше время унификации ассемблера, когда, повторяю, хоть для МК, хоть для толстого проца можно писать на одном и том же языке ассемблера, просто глупо вастить время на изучение этих "высокоуровневых" костылей.
hsoft
Я тоже хочу такой травы.... sm.gifsm.gifsm.gif
DASM
Вы ничего не понимаете в программировании. Вот код настоящих профи своего дела, такие кадры воспитываются в отдельных элитных ВУХах страны и они нарсхват
CODE
static int bus_spi_cs(dev_spi_t * dev, bool state)
{
dev_gpio_t * cs_pin = ((dev_spi_stm32f_hints_t *) dev->hints)->spi_cs_pin;
((int (*)(dev_gpio_t *))((uint32_t)cs_pin->setpin*(!state) + (uint32_t)cs_pin->resetpin*(state)))(cs_pin);
return 0;
}

Я всего лишь колхозник самоучка и заменил на
CODE
static int bus_spi_cs(dev_spi_t * dev, bool state)
{
dev_gpio_t * cs_pin = ((dev_spi_stm32f_hints_t *) dev->hints)->spi_cs_pin;

if (state)
cs_pin->resetpin(cs_pin);
else
cs_pin->setpin(cs_pin);
return 0;
}

Мне придется много учиться еще, чтобы хоть немного достичь уровня этих, не побоюсь этого слова, Мастеров.
crying.gif
А вы говорите Питон плохой и Сишарп
Кстати все поняли как работает первый вариант? Мой уровень на грани имбицилла позволил понять примерно минут за 10 только
моя б воля запретил бы приведение типов программистом вообще, а еще лучше и сами типы как класс, лишнее это нонче
AlexandrY
Цитата(DASM @ Mar 27 2017, 14:32) *
Кстати все поняли как работает первый вариант? Мой уровень на грани имбицилла позволил понять..


Видно, что программно, остальное не интересно.
Переходите на Kinetis, там CS передается вместе с данными. Можно одним блоком DMA писать/читать сразу из 6-и слэйвов, вообще не парясь установкой и снятием CS.
DASM
Цитата(AlexandrY @ Mar 27 2017, 14:58) *
Видно, что программно, остальное не интересно.
Переходите на Kinetis, там CS передается вместе с данными. Можно одним блоком DMA писать/читать сразу из 6-и слэйвов, вообще не парясь установкой и снятием CS.

мне лично никуда переходить не надо, я на Питон перелезаю, ну и драйвер на Сях немного V4L
AlexandrY
Цитата(DASM @ Mar 27 2017, 15:12) *
мне лично никуда переходить не надо, я на Питон перелезаю, ну и драйвер на Сях немного V4L


Кстати в VS2017 бесплатно идет Xamarin.
Это С# для всего - iOS, Android, Win

Как бы must-have в свете последних трендов, важнее математики. biggrin.gif
dxp
QUOTE (DASM @ Mar 27 2017, 18:32) *
Вы ничего не понимаете в программировании. Вот код настоящих профи своего дела, такие кадры воспитываются в отдельных элитных ВУХах страны и они нарсхват
CODE
static int bus_spi_cs(dev_spi_t * dev, bool state)
{
dev_gpio_t * cs_pin = ((dev_spi_stm32f_hints_t *) dev->hints)->spi_cs_pin;
((int (*)(dev_gpio_t *))((uint32_t)cs_pin->setpin*(!state) + (uint32_t)cs_pin->resetpin*(state)))(cs_pin);
return 0;
}

Мне придется много учиться еще, чтобы хоть немного достичь уровня этих, не побоюсь этого слова, Мастеров.

Я не понял, где тут какое-то особое мастерство? Явное преобразование типов на каждом шагу, тонны скобок, от чего не видно толком, где какое подвыражение начинается и где заканчивается, что код стал совершенно нечитабельным. Это как раз пример того, как не надо писать код.

Или критерий оценки - чем запутаннее, тем круче? По мне так ровно наоборот. Хороший код прозрачен, лёгок для восприятия и модификации. Мастерам есть куда расти.

Вот такие вот примеры и приводят желанию писать на ассемблере - там такого безобразия в принципе быть не может.
DASM
Цитата(dxp @ Mar 27 2017, 16:02) *
Я не понял, где тут какое-то особое мастерство? Явное преобразование типов на каждом шагу, тонны скобок, от чего не видно толком, где какое подвыражение начинается и где заканчивается, что код стал совершенно нечитабельным. Это как раз пример того, как не надо писать код.

Или критерий оценки - чем запутаннее, тем круче? По мне так ровно наоборот. Хороший код прозрачен, лёгок для восприятия и модификации. Мастерам есть куда расти.

Сарказм тэе где тут sm.gif Меня приколоа идея сложения указателей.. или как-то так? Я уже снова не понимаю как это работает
(int (*)(_t*) ((uint32_t)setpin*...+ (uint32_t) ....) ()
TSerg
Цитата(dxp @ Mar 27 2017, 11:43) *
Именно!
Но и С - это тоже полумеры!
Другое дело ассемблер:
Да, какой-то голландский
И вообще типы - зло. Какая-то лишняя сущность. Вон на ассемблере нет никаких типов, всё просто и прозрачно

5+!!!

Недавно, на одном из форумов, студент обратился за помощью для решения одной из тестовых задач - не за кодом, а именно за помощью в части идей ее решения.
Задачка простая:
- есть/создается массив random-целых (integer 32b) чисел;
- требуется отсортировать массив на месте по следующим правилам:
-- массив должен быть отсортирован так, чтобы слева от середины массива находились бы все четные числа по убыванию от начала к центру, а справа - все нечетные по возрастанию от центра к концу массива.

Пример:
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.

Были предложены решения (код) тремя программистами в качестве междусобойчика уже (про студента быстро забыли).
Два программиста исповедовали стиль аля Си, но на Pascal (Turbo Pascal).
Третий предложил метод "разделяй и властвуй" тоже на Pascal ( PascalABC.Net).
Причем, как было показано, высокоуровенное решение вообще сводится к array.Sort(cmp), где cmp - функция сравнения для сортировки.
Что выбрал студент - к бабке не ходи sm.gif

P.S.
К чему это я - желающие могут попробовать решить эту простую студенческую задачку на любом ЯП, с учетом требований.
=SSN=
Цитата(TSerg @ Mar 27 2017, 16:45) *
Задачка простая:
- есть/создается массив random-целых (integer 32b) чисел;
- требуется отсортировать массив на месте по следующим правилам:
- массив должен быть отсортирован так, чтобы слева от середины массива находились бы все четные числа по убыванию от начала к центру, а справа - все нечетные по возрастанию от центра к концу массива.

P.S.
К чему это я - желающие могут попробовать решить эту простую студенческую задачку на любом ЯП, с учетом требований.

Яркий пример некорректно поставленной "задачки".

"Задачка" имеет решение в том единственном случае, когда в массиве по какому-то случайному совпадению, оказалось одинаковое кол-во четных и нечетных чисел.

В противном случае, "задачка" решения не имеет.. biggrin.gif
hsoft
Цитата(TSerg @ Mar 27 2017, 14: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]

Результаты
[73, 52, 1, 33, 26, 84, 39, 58, 24, 57, 74, 37, 87, 90, 84, 8, 50, 89, 16, 9, 70, 15, 75, 37, 77]
[90, 84, 84, 74, 70, 58, 52, 50, 26, 24, 16, 8, 1, 9, 15, 33, 37, 37, 39, 57, 73, 75, 77, 87, 89]
TSerg
Цитата(=SSN= @ Mar 27 2017, 16:57) *
Яркий пример некорректно поставленной "задачки".
"Задачка" имеет решение в том единственном случае, когда в массиве по какому-то случайному совпадению, оказалось одинаковое кол-во четных и нечетных чисел.
В противном случае, "задачка" решения не имеет.. biggrin.gif

Ерунда. Задачка имеет четкое решение, без особенностей.
Надо было понять, что "центр" массива - плавающий индекс, который определяется конкретным набором rnd-чисел.
=SSN=
Цитата(TSerg @ Mar 27 2017, 17:09) *
Надо было понять, что "центр" массива - плавающий индекс, который определяется конкретным набором rnd-чисел.

Студент не обязан догадываться, что препод "тупит"..

Сначала научитесь ясно выражать свои мысли, а потом занимайтесь преподавательством.
TSerg
Цитата(hsoft @ Mar 27 2017, 17:01) *
Вот так на Java
..
list.sort(new Comp());
..

Вот и я про это.
AHTOXA
Цитата(DASM @ Mar 27 2017, 16:32) *
Код
static int bus_spi_cs(dev_spi_t * dev, bool state)
{
    dev_gpio_t * cs_pin = ((dev_spi_stm32f_hints_t *) dev->hints)->spi_cs_pin;
    ((int (*)(dev_gpio_t *))((uint32_t)cs_pin->setpin*(!state) + (uint32_t)cs_pin->resetpin*(state)))(cs_pin);    
    return 0;
}

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

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

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

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

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


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

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

Тому кто пишет драйвера и не знает такие финты должно быть стыдно по моему.
dxp
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]
TSerg
Цитата(=SSN= @ Mar 27 2017, 17:25) *
Так ты специально по форумам шляешься, чтобы потупить? biggrin.gif

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

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

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

а цель?
Кстати умножать на bool это видимо по вашему )
TSerg
Цитата(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.
Я это затеял не для того, что быть здесь Рефери.
Просто предложил Профи показать возможности тех или иных языков.
AlexandrY
Цитата(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


TSerg
Цитата(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
Кроме того, опять же это не сортировка на месте.
dxp
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.. сложно назвать чистым ЯП.

Матлаб в данном контексте ничем не лучше питона и даже наоборот.
TSerg
Цитата(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
TSerg
Пример обфускации программ на C ( 21-й конкурс IOCC ).
Второй призер (hamano):
Нажмите для просмотра прикрепленного файла

Есть желающие это понять? sm.gif
Swup
Поясните чем все-таки вот это:
Код
((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
}
des333
Цитата(dxp @ Mar 27 2017, 11:43) *
Именно!
...

+100
Сарказм на отлично! beer.gif
Единственный вопрос -- не лень было столько писать? sm.gif
ViKo
Например, так. Сортировка пары чисел.
Код
void sort(int *x, int *y)
{
  bool a = *x & 1;
  bool b = *y & 1;
  bool c = *x < *y;
  if (a && !b) swap(*x, *y);
  else if (!a && !b && c) swap(*x, *y);
  else if (a && b && !c) swap(*x, *y);
}

Остальное - стандартно. Любой из алгоритмов.
TSerg
Цитата(ViKo @ Mar 27 2017, 21:49) *
Например, так. Сортировка пары чисел.

Не-не.., ну хотелось бы полностью, да и с проверочкой.
Вот, кстати и "чистый" Си, еще один вариант.
Эдди
Зачем городить пузырек или вставки, если есть qsort?
Кстати, тем, кому на мелкоконтроллерах нужно медиану считать, советую взять примеры из Numerical receipes. Сам так фильтрую данные с АЦП по 9 точкам (DMA заполняет буфер, дальше делается memcpy этого буфера и расчет).
TSerg
Цитата(Эдди @ Mar 27 2017, 22:47) *
Зачем городить пузырек или вставки, если есть qsort?

Задачку студенческую, выполни, плиз - "горный ты наш джигит".
AlexandrY
Цитата(Swup @ Mar 27 2017, 20:49) *
Поясните чем все-таки вот это:
лучше чем вот это?


Потому что условный переход - это угроза промаха кэша.
Ну и контекст опять же надо раскрывать полностью автору, когда речь идет о жестком риалтайме.
Эдди
Цитата(TSerg @ Mar 27 2017, 23:09) *
Задачку студенческую, выполни, плиз - "горный ты наш джигит".

Лень. Надергай сам из моего гитхаба ☺
TSerg
Цитата(Эдди @ Mar 28 2017, 00:22) *
Лень. Надергай сам из моего гитхаба ☺

Ой, тут есть спеши, которые понимают - слился Эдди.

P.S.
Летом собираюсь в вело-поход с приятелями, проедем через КЧ. Примешь? sm.gif
Эдди
У меня условия не сильно-то позволяют поселить народ. Но если заранее гостиницу забронируете, то выгул (шашлык-машлык, экскурсия на телескоп, экскурсии по окрестностям и, если есть желание, мини-походец в горы) обеспечу.
TSerg
Цитата(Эдди @ Mar 28 2017, 00:51) *
У меня условия не сильно-то позволяют поселить народ. Но если заранее гостиницу забронируете, то выгул (шашлык-машлык, экскурсия на телескоп, экскурсии по окрестностям и, если есть желание, мини-походец в горы) обеспечу.

Ок, договорились.
И, давай заканчиваем тут между-собойские сражения, а также наезды на технологии.
Все мы (здесь) выступаем с ограниченными возможностями - и по статусу, и по разумению.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.