Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
22. Почему преобразование типа double в тип int может привести к неверным результатам?
23. Сформулируйте правило, помогающее выявить безопасные и опасные преобразования типов.
Термины
Упражнения
1. Выполните задание из раздела ПОПРОБУЙТЕ, если вы не сделали его раньше.
2. Напишите программу на языке C++, которая преобразует мили в километры. Ваша программа должна содержать понятное приглашение пользователю ввести количество миль. Подсказка: в одной миле 1,609 км.
3. Напишите программу, которая ничего не делает, а просто объявляет переменные с допустимыми и недопустимыми именами (например, int double = 0;), и посмотрите на реакцию компилятора.
4. Напишите программу, предлагающую пользователю ввести два целых числа. Запишите эти значения в переменные типа int с именами val1 и val2. Напишите программу, определяющую наименьшее и наибольшее значение, а также сумму, разность, произведение и частное этих значений.
5. Измените программу так, чтобы пользователь вводил числа с плавающей точкой и сохранял их в переменных типа double. Сравните результаты работы этих двух программ на нескольких вариантах. Совпадают ли эти результаты? Должны ли они совпадать? Чем они отличаются?
6. Напишите программу, предлагающую пользователю ввести три целых числа, а затем вывести их в порядке возрастания, разделяя запятыми. Например, если пользователь вводит числа 10 4 6, то программа должна вывести на экран числа 4, 6, 10. Если два числа совпадают, то они должны быть упорядочены одновременно. Например, если пользователь вводит числа 4 5 4, то программа должна вывести на экран числа 4, 4, 5.
7. Выполните упр. 6 для трех строковых значений. Так, если пользователь вводит значения "Steinbeck", "Hemingway", "Fitzgerald", то программа должна вывести на экран строку "Fitzgerald, Hemingway, Steinbeck".
8. Напишите программу, проверяющую четность или нечетность целого числа. Как всегда, убедитесь, что результат ясен и полон. Иначе говоря, не следует ограничиваться простой констатацией вроде “да” или “нет”. Вывод должен быть информативным, например “Число 4 является четным”. Подсказка: см. оператор вычисления остатка в разделе 3.4.
9. Напишите программу, преобразующую слова “нуль”, “два” и т.д. в цифры 0, 2 и т.д. Когда пользователь вводит число в виде слова, программа должна вывести на экран соответствующую цифру. Выполните эту программу для цифр 0, 1, 2, 3 и 4. Если пользователь введет что-нибудь другое, например фразу “глупый компьютер!”, программа должна ответить “Я не знаю такого числа!”
10. Напишите программу, принимающую на входе символ оператора с двумя операндами и выводящую на экран результат вычисления. Например:
+ 100 3.14
* 4 5
Считайте символ операции в объект типа string с именем operation и, используя инструкцию if, выясните, какую операцию хочет выполнить пользователь, например if (operation=="+"). Считайте операнды в переменные типа double. Выполните операции с именами +, –, *, /, plus, minus, mul и div, имеющие очевидный смысл.
11. Напишите программу, предлагающую пользователю ввести определенное количество 1-, 5-, 10-, 25-, 50-центовых и долларовых монет. Пользователь должен по отдельности ввести количество монет каждого достоинства, например “Сколько у вас одноцентовых монет?” Результат должен выглядеть следующим образом.
У вас 23 одноцентовые монеты.
У вас 17 пятицентовых монет.
У вас 14 десятицентовых монет.
У вас 7 25-центовых монет.
У вас 3 50-центовые монеты.
Общая стоимость ваших монет равна 573 центам.
Усовершенствуйте программу: если у пользователя только одна монета, выведите ответ в грамматически правильной форме. Например, “14 десятицентовых монет” и “1 одноцентовая монета” (а не “1 одноцентовых монет”). Кроме того, выведите результат в долларах и центах, т.е. 5,73 доллара, а не 573 цента.
Послесловие
Не следует недооценивать важность типовой безопасности. Тип — наиболее важное понятие для создания правильных программ, и некоторые из наиболее эффективных методов разработки программ основаны на разработке и использовании типов (см. главы 6 и 9, части II–IV).
Глава 4
Вычисления
Если результат не обязательно должен быть точным,
я могу вычислить его сколь угодно быстро”.
Джеральд Вайнберг (Gerald M. Weinberg)
В главе излагаются основы вычислений. В частности, объясняется, как вычислять значения с помощью набора операндов (выражений), как выбирать альтернативные действия (операции выбора) и повторять вычисления (итерации), как присвоить имя конкретному фрагменту вычислений (функции). Основная цель главы — представить вычисления с помощью методов, ведущих к созданию правильных и хорошо организованных программ. Для того чтобы научить вас выполнять более реалистичные вычисления, мы вводим тип vector, предназначенный для хранения последовательностей значений.
4.1. Вычисления
Все программы что-нибудь вычисляют; иначе говоря, они получают на вход какие-то данные и выводят какие-то результаты. Кроме того, само устройство, на котором выполняются программы, называется компьютером[5]. Эта точка зрения является правильной и обоснованной, пока мы придерживаемся широкой трактовки ввода и вывода.
Входная информация может поступать с клавиатуры, от мыши, с сенсорного экрана, из файлов, от других устройств ввода и других частей программы. К категории “другие устройства ввода” относятся наиболее интересные источники данных: музыкальные клавишные пульты, устройства видеозаписи, датчики температуры, сенсоры цифровых видеокамер и т.п. Разнообразие этих устройств бесконечно.
Для обработки входной информации программы обычно используют специальные данные, которые называют структурами данных (data structures) или их состояниями (states). Например, программа, имитирующая календарь, может содержать списки праздничных дней в разных странах и список ваших деловых свиданий. Некоторые из этих данных с самого начала являются частью программы, а другие возникают, когда программа считывает данные и извлекает из них полезную информацию. Например, программа, имитирующая календарь, может создавать список ваших деловых встреч по мере того, как вы будете вводить их в нее. В этом случае основной входной информацией являются запросы месяца и дня встречи (возможно, с помощью щелчка мышью) и ввод данных о деловых встречах (возможно, с помощью клавиатуры). Устройством вывода для этой программы является экран, на котором высвечиваются календарь и данные о назначенных встречах, а также кнопки и приглашения для ввода, которые программа может выводить на экран самостоятельно.
Входная информация может поступать от самых разных источников. Аналогично, результаты могут выводиться на разные устройства: на экран, в другие программы или части программы. К устройствам вывода относятся также сетевые интерфейсы, музыкальные синтезаторы,