LINUX.ORG.RU
ФорумTalks

Вопросы по изучению C

 ,


0

2

Итак, нужно довольно быстро (счёт идёт на недели) ознакомиться с C. Задача, которая стоит передо мной: создание моделей биологического нейрона и нейросетей. Поэтому C мне нужен не для написания драйверов и компиляторов, а для максимальной производительности, которую требуют эти модели. А вопросы следующие:

  1. Какой посоветуете учебник, желательно не слишком объёмный, для новичков (до этого немного программировал в Delphi, да и давно это было)? Поковыряв ЛОР, обнаружил, что все просто в восторге от книги Кернигана и Ритчи «Язык программирования C». Пойдёт ли она для моих целей?
  2. Существует ли в природе учебник, обучающий одновременно C и C++?
  3. В чём лучше писать программы? Опять-таки, на изучение Emacs'а времени мало, нужно что-нибудь попроще. Присмотрелся к Anjuta, поделитесь впечатлениями, желательно в сравнении с другими IDE (например, Eclipse). Кстати, есть ли какой-нибудь учебник или руководство по Anjuta на русском языке?
★★★★★
Ответ на: комментарий от static_lab

А почему бы нет? Cairo в руки и вперед.

Deleted
()
Ответ на: комментарий от Slackware_user

на C сложнее грохнуть производительность

Грохнуть производительность всегда просто, разве что в си может быть понятнее, где именно.

quantum-troll ★★★★★
()
Ответ на: комментарий от Deleted

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

Slackware_user ★★★★★
()
Ответ на: комментарий от Sadler

Нелинейные сумматоры со взвешенными связями будете рисовать? :) Скучно.

Модель биологического нейрона подразумевает максимальное сходство с реальным нейроном, а нейросеть — с мозгом. Тут нужно учитывать такие явления, как синаптическая пластичноссть, долговременная потенциация, пачечная активность и т. п.

eugeno ★★★★★
() автор топика
Ответ на: комментарий от eugeno

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

Sadler ★★★
()
Ответ на: комментарий от Deleted

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

Надо было искать книги не для лесорубов, а для маньяков :)

Sadler ★★★
()
Ответ на: комментарий от Sadler

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

В мае защита курсовой, обязательно оповещу :) А пока можете глянуть эти программы:

http://www.neuron.yale.edu/neuron/

http://www.briansimulator.org/

Они обе свободные, первая на C++, более профессиональная, вторая на Python, лучше подойдёт для ознакомления.

eugeno ★★★★★
() автор топика

Не ставьте телегу впереди лошади. Если есть задача «создание моделей биологического нейрона и нейросетей» то и надо заниматься её изучением. Когда будут понятны алгоритмы которые надо реализовать - возьмёте справочник по целевому языку (в вашем случае С) и за неделю реализуете. Непонятные или сложные моменты спросите на форуме - вам ответят и помогут.

MKuznetsov ★★★★★
()
Ответ на: комментарий от eugeno

Из killing-feature C++ - классы и шаблоны, а точнее библиотека Standard Template Library (STL). Еще я пользуюсь cin/cout/cerr/clog - это облегчает жизнь в некоторых ситуациях. Еще исключения неплохи, но я ими редко пользуюсь. Это я к тому, что можешь учить С, а из С++ возьми только то, что я сказал.

STL поначалу немного заморочена, но потом привыкаешь. Но очень полезна если не хочешь заморачиваться с самостоятельным выделением и освобождением памяти (хоть от этого в сложных проектах не уйти на 100%), и ловить соответствующие приколы, как-то утечки, двойное освобождение памяти и т. п.

Также пару добрых советов:
- помни, что в классах по умолчанию все члены класса - private. Поэтому скорее всего ты захочешь написать class CMyClass{ public: ...};
- для классов рекомендую переопределять оператор = если хочешь пользоваться конструкцией a=b для классов. В принципе, это необязательно, и в 95% C++ сам все правильно сделает (на самом деле, пока в классе нет динамических переменных, все будет хорошо). Но мне это добавляет спокойствия, так как я контролирую весь процесс. С той же целью (для успокоения души) рекомендую объявлять конструктор CMyClass::CMyClass(const CMyClass &a); если ты хочешь передавать объекты в функции по значению (чего я тебе очень не рекомендую - см. далее).
- все объекты (переменные класса) передавай в функции по ссылке (что лучше) или через указатель, но не по значению; простые переменные - как хочешь, хоть и по значению;
- работу со строками очень облегчает тип string в C++ (#include <string>). Только, если будешь делать ввод данных в него - используй cin (#include <iostream> ). Также использование string спасает от переполнения памяти в некоторых ситуациях.
- при использовании STL чтобы объявления некоторых переменных (например, итераторов) не рябило глаза, используй typedef. Например:

typedef deque<char>::size_type TBufferIndex;
TBufferIndex index;
- когда пишешь код, обязательно помечай места, в которых может быть баг (например, проверка введенных значений) или вида «неплохо бы сделать еще и это» (например более красивую подсказку для пользователя). Помечай эти места как // TODO: ... Обычно редакторы это подсвечивают. Потом, когда программа работает, пройдись по всем TODO. Это позволит не закопаться в мелочах когда пишешь сам алгоритм, но и не пропустить баги. Программа не закончена пока есть хоть один TODO.
- Обязательно комментируй: 1) что делает каждая функция (не думай что ты это будешь всегда помнить); 2) какие-то замороченные алгоритмы (аналогично).
- Если программа будет работать в никсах и будет хоть какой-то вывод в консоль (например, debug-информация), можешь раскрашивать вывод. Вот это printf(«\033[31m»); (или cout << «\033[31m»;) поменяет цвет на красный, остальные цвета - сам разберешься (можешь глянуть в /etc/DIR_COLORS ) , возвратить в дефолтный цвет - printf(«\033[31m») (или cout << «\033[39m»;); Я это использовал, когда нужно было вывести на экран значение буффера (строка) и указать символ с которым сейчас происходит работа; вместо того чтобы выводить его индекс, я его просто подсвечивал другим цветом - удобно;
- Сделай #define DEBUG и строки кода вида
#ifdef DEBUG
  printf ("Значание переменной: %d",a);
#endif
Это позволит переключать программу в debug-режим и выводить промежуточные переменные. Чтобы выключить debug-режим, комментируй #define DEBUG.
- если будешь пользоваться cin, cout, cerr, cin , вот соответствие конструкций C и C++: тыц. Как видишь конструкции C++ наглядней. А при использовании манипуляторов (библиотека iomаnip) - мощнее.
- Про бекапы, комментарии (кроме того что писал выше), оформление/отступы - это должно быть и так понятно.

Good luck!

Kroz ★★★★★
()

Поэтому C мне нужен не для написания драйверов и компиляторов, а для максимальной производительности, которую требуют эти модели.
создание моделей биологического нейрона и нейросетей.

Если уж серьезно увлекаться - то смотри в сторону LISP, в остальном не нужно изобретать велосипед, а посмотри как это код уже написан и отточен в других библиотеках. Например погляди на FANN - она как-раз написана на C и достаточно производительная, только в ней реализован только многослойный персептрон и нет большого разнообразия алгоритмов обучения (впрочем может уже допилили, давно ее не тыкал)

А еще можешь подглядеть код нейронок прямо из CERN'а, они все в открытом доступе выкладывают и фигню не кодят.

Siado ★★★★★
()

А еще ходят слухи, что если жабе выделить достаточное кол-во памяти, то она обрулит С и С++ вместе взятые по производительности.

Siado ★★★★★
()

Kwrite+gcc program.c+./a.out

prog.c

#include"stdio.h" int main(){ printf(«hello»); return 0; }

bender ★★★★★
()
Ответ на: комментарий от MKuznetsov

Зачинатель темы, слушай этот комментарий

bender ★★★★★
()
9 мая 2012 г.

Прата Язык Си Руководство для начинающих (S.Prata C Primer Plus)

qulinxao ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.