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

8. Что такое ошибка этапа редактирования связей? Приведите три примера.

9. Что такое логическая ошибка? Приведите три примера.

10. Перечислите четыре источника потенциальных ошибок, рассмотренных в тексте.

11. Как распознать разумные результаты? Какие методы используются для ответа на этот вопрос?

12. Сравните обработку ошибки во время выполнения программы в модуле, вызывающем функцию, и в самой функции.

13. Почему использование исключений лучше, чем возврат признака ошибки?

14. Как выполнить тестирование при последовательном вводе данных?

15. Опишите процесс генерирования и перехвата исключений.

16. Почему выражение v[v.size()] относительно вектора v порождает ошибку диапазона? Каким может быть результат такого вызова?

17. Дайте определение пред- и постусловия; приведите пример (который отличается от функции area() из этой главы), предпочтительно использовать вычисления, требующие применения цикла.

18. В каких ситуациях можно не проверять предусловие?

19. В каких ситуациях можно не проверять постусловие?

20. Назовите этапы отладки.

21. Чем комментарии могут помочь при отладке?

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

Термины

Упражнения

1. Выполните задание из раздела ПОПРОБУЙТЕ, если вы его еще не сделали.

2. Следующая программа вводит температуру по шкале Цельсия и преобразует ее в шкалу Кельвина. Этот код содержит много ошибок. Найдите ошибки, перечислите их и исправьте программу.

double ctok(double c) // преобразует шкалу Цельсия в шкалу Кельвина

{

  int k = c + 273.15;

  return int

}

int main()

{

  double c = 0;         // объявляем переменную для ввода

  cin >> d;             // вводим температуру в переменную ввода

  double k = ctok("c"); // преобразуем температуру

  Cout << k << endl;    // выводим температуру на печать

}

3. Самой низкой температурой является абсолютный нуль, т.е. –273,15°C, или 0 K. Даже после исправления приведенная выше программа выводит неверные результаты для температуры ниже абсолютного нуля. Поместите в функцию main() проверку, которая выводит сообщение об ошибке, если температура ниже –273,15°C.

4. Повторите упр. 3, но на этот раз ошибку обработайте в функции ctok().

5. Измените программу так, чтобы она преобразовывала шкалу Кельвина в шкалу Цельсия.

6. Напишите программу, преобразовывающую шкалу Цельсия в шкалу Фаренгейта и наоборот (по формуле из раздела 4.3.3). Для того чтобы распознать разумные результаты, используйте оценку из раздела 5.8.

7. Квадратное уравнение имеет вид

Для решения этого уравнения используется формула

Тем не менее есть одна проблема: если b2–4ac меньше нуля, возникнет ошибка. Напишите программу, вычисляющую решение квадратного уравнения. Напишите функцию, которая выводит на печать все корни квадратного уравнения при заданных коэффициентах a, b и c. Вызовите эту функцию из модуля main() и перехватите исключение, если возникнет ошибка. Если программа выявит, что уравнение не имеет действительных корней, она должна вывести на печать соответствующее сообщение. Как распознать разумные результаты? Можете ли вы проверить, что они являются правильными?

8. Напишите программу, считывающую ряд чисел и записывающую их в vector. После того как пользователь введет все числа, он может попытаться определить, сколько чисел он ввел, чтобы найти их сумму. Выведите ответ N, равный количеству элементов в векторе. Например:

“Пожалуйста, введите несколько чисел (для прекращения ввода нажмите клавишу <|>):”

12 23 13 24 15 “Пожалуйста, введите количество чисел, которые хотите просуммировать:”

“Сумма первых 3 чисел: 12 , 23 и 13 равна 48.”

9. Измените программу из упр. 8, чтобы она использовала тип double вместо int. Кроме того, создайте вектор действительных чисел, содержащий N–1 разностей между соседними величинами, и выведите этот вектор на печать.

10. Напишите программу, вычисляющую начальный отрезок последовательности Фибоначчи, т.е. последовательности, начинающиеся с чисел 1 1 2 3 5 8 13 21 34. Каждое число в этой последовательности равно сумме двух предыдущих. Найдите последнее число Фибоначчи, которое можно записать в переменную типа int.

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

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

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных