Читаем Программирование. Принципы и практика использования C++ Исправленное издание полностью

8. Что такое многомерный массив в стиле языка C?

9. Какими свойствами должен обладать язык программирования (например, должна существовать библиотека) для матричных вычислений?

10. Что такое размерность матрицы?

11. Сколько размерностей может иметь матрица?

12. Что такое срезка?

13. Что такое пересылка? Приведите пример.

14. В чем заключается разница между индексированием в стиле языков Fortran и C?

15. Как применить операцию к каждому элементу матрицы? Приведите примеры.

16. Что такое объединенное умножение и сложение (fused operation)?

17. Дайте определение скалярного произведения.

18. Что такое линейная алгебра?

19. Опишите метод исключения Гаусса.

20. Что такое опорный элемент (в линейной алгебре и реальной жизни)?

21. Что делает число случайным?

22. Что такое равномерное распределение?

23. Где найти стандартные математические функции? Для каких типов аргументов они определены?

24. Что такое мнимая часть комплексного числа?

25. Чему равен корень квадратный из –1?

Термины

Упражнения

1. Аргументы функции f в выражениях a.apply(f) и apply(f,a) являются разными. Напишите функцию triple для каждого варианта и примените их для удвоения элементов массива { 1 2 3 4 5 }. Определите отдельную функцию triple, которую можно было бы использовать как в выражении a.apply(triple), так и в выражении apply(triple,a). Объясните, почему нецелесообразно писать все функции именно так для использования в качестве аргумента функции apply.

2. Повторите упр. 1, используя не функции, а объекты-функции. Подсказка: примеры можно найти в заголовке Matrix.h.

3. Только для экспертов (средствами, описанными в книге эту задачу решить невозможно). Напишите функцию apply(f,a), принимающую в качестве аргумента функции void (T&), T (const T&), а также эквивалентные им объекты-функции. Подсказка: Boost::bind.

4. Выполните программу исключения методом Гаусса, т.е. завершите ее, скомпилируйте и протестируйте на простом примере.

5. Примените программу исключения методом Гаусса к системе A=={{0 1}{1 0}} и b=={5 6} и убедитесь, что программа завершится крахом. Затем попробуйте вызвать функцию elim_with_partial_pivot.

6. Замените циклами векторные операции dot_product и scale_and_add в программе исключения методом Гаусса. Протестируйте и прокомментируйте эту программу.

7. Перепишите программу исключения методом Гаусса без помощи библиотеки Matrix. Иначе говоря, используйте встроенные массивы или класс vector, а не класс Matrix.

8. Проиллюстрируйте метод исключения методом Гаусса.

9. Перепишите функцию apply, не являющуюся членом класса Matrix, так, чтобы она возвращала объект класса Matrix, содержащий объекты, имеющие тип примененной функции. Иначе говоря, функция apply(f,a) должна возвращать объект класса Matrix, где R — тип значения, возвращаемого функцией f. Предупреждение: это решение требует информации о шаблонах, которая не излагалась в этой книге.

10. Насколько случайной является функция rand? Напишите программу, принимающую два целых числа n и d из потока ввода, d раз вызывающую функцию randint(n) и записывающую результат. Выведите на экран количество выпавших чисел из каждого диапазона [0:n] и оцените, насколько постоянным является их количество. Выполните программу с небольшими значениями n и небольшими значениями d, чтобы убедиться в том, что очевидные смещения возникают только при небольшом количестве испытаний.

11. Напишите функцию swap_columns, аналогичную функции swap_rows из раздела 24.5.3. Очевидно, что для этого необходимо изучить код библиотеки Matrix. Не беспокойтесь об эффективности своей программы: быстродействие функции swap_columns в принципе не может превышать быстродействие функции swap_rows.

12. Реализуйте операторы

Matrix operator*(Matrix&, Matrix&);

и

Matrix operator+(Matrix&, Matrix&).

При необходимости посмотрите их математические определения в учебниках.

Послесловие

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

<p id="AutBody_Root480"><strong>Глава 25</strong></p><p>Программирование встроенных систем</p>

“Слово “опасный ” означает, что кто-то может умереть”.

Сотрудник службы безопасности

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

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

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT