Re[2]: Изучение С++ с уклоном на математику
От: tensor1982  
Дата: 01.12.09 18:42
Оценка:
Здравствуйте, vvv104, Вы писали:

V>Все зависит от того, что собственно требуется. Если хочется просто изучить синтаксис языка, то любая книжка пойдет. Но ни в одной не будет какого-то подробного описания использования языка в контексте алгоритмов, так как с++ — язык общего назначения. Более того, считаю, что именно с++ мало годится для реализации алгоритмов в том смысле, что все его сила (классы, шаблоны и прочее) скорей всего не понадобятся для решения алгоритмических задач — вполне сойдет тот набор, что предоставляет собственно язык С, возможно с привлечением алгоритмов STL (в простейших случаях). Синтаксис знать нужно, чтобы хоть что-то написать, но этого мало. Надо понимать как это работает изнутри, во что компилятор преобразует те или иные конструкции языка, что такое стек, куча, выравнивание данных, разделяемые ресурсы (прошу прощения что свалил все эти термины в одну кучу), а для алгоритмистов особенно важно понимание численной арифметики, округления, переполнения и многое многое что связано с ограничениями вычислительной техники. Это в контексте тех высказываний, что код математиков "из ряда вон". Не знаю, есть ли ли что-то в книгах об этом, мне кажется это просто с опытом приходит.


Вот-вот, именно это мне и надо! Округления, переполнение, погрешности при решении уравнений и т.д. А еще где почитать о компиляторе? Сейчас мучаюсь с выбором книжки №2 по С++. Как более продуктивно работать со второй книжкой по С++ и тщательно обдумывая прорабатывать примеры?
Я установил первое, что попалось под руку — Microsoft Visual Studio 2005. Работаю с консолью. Но я не понимаю как использовать его на полную мощь при отладке.
Когда программировал на Matlab(е) — хотя бы видел при отладке программы в workspace сколько памяти у меня занимает матрица, мог свободно посмотреть какое число и на каком этапе у меня записывается в матрицу. То же самое и со структурами. Но в Matlab нет никакого компилятора – жми run, все само собой работает. Хотя как то давно с помощью встроенных в Matlab инструментов и какого то не матлабовского компилятора как то бездумно компилировал свои функции — выполнение функций в большинстве случаев в секундах становилось быстрее. Но все это было от меня скрыто и не понятно. Я всего лишь набирал команду, сообщал имя функции которую надо откомпелировать, а потом появлялись в папочке какие то файлы с неизвестными мне расширениями. И вызов функции уже происходил из этой папки.
Совсем немного давно пытался програмить на С микроконтроллеры фирмы Atmel — чисто для расширения кругозора сделал бездумно несколько готовых примеров, до изучения библии K&R руки не дошли. При отладке программы на бесплатном компиляторе WinAVR GCC я видел на каждом шаге что происходит с памятью, какие данные записаны в регистре, что на портах микроконтроллера. Мог в любой момент ткнуть мышью в порт и сменить 1 на 0 (т.е. проимитировать смену напряжения с 5 Вольт на 0 Вольт на порту контроллера) и посмотреть что будет на следующем шаге.
Ничего подобного в Visual Studio я не нахожу (не нахожу методом научного тыка) ни для работы с матрицами, ни для просмотра памяти или не понимаю, как отлаживать программу обдуманно.

Наверное книжкой №2 попробую «Седжвик Р. Фундаментальные алгоритмы на C++» — там хотя бы задачки интересные. Только не знаю хватит ли знаний языка (после Шилдта). Все таки к чтению библии Страуструпа и классиков С++ я еще не готов. Да и нет времени, так как программирование на С++ это пока что всего лишь хобби.
Эллочка Людоедка из Ильфа&Петрова знала всего 30ть слов, но могла выражать практически любую свою мысль. Но говорила ли Эллочка Людоедка на русском?! Не мешал ли ей мыслить столь скудный языковой запас?!
Я хочу на С++, познать необходимый мне минимум (основы, матрицы и циклы с примерами решения алгебраических уравнений, алгоритмы и т.д.) без чтения библии и классиков С++, а потом уже по ходу освоить тонкости языка.

V>А вот если говорить о реализации алгоритмов в рамках языка с++, да и любого другого, то было бы полезно ознакомиться с готовыми библиотеками, такими как LAPACK и их различными (реинкарнациями) расширениями, оптимизациями, как например интеловская MKL. Там много готовых базовых алгоритмов из линейной алгебры, FFT, sparse, заточенных под конкретное "железо".

Спасибо за подсказку! Как-нибудь после основ С/С++ поищу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.