class="p1"> 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<int>. После того как пользователь введет все числа, он может попытаться определить, сколько чисел он ввел, чтобы найти их сумму. Выведите ответ 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.
11. Реализуйте простую игру на угадывание “Быки и коровы”. Программа должна хранить вектор из четырех чисел в диапазоне от 0 до 9, а пользователь должен угадать загаданное число. Допустим, программа загадала число 1234, а пользователь назвал число 1359; программа должна ответить “1 бык и 1 корова”, поскольку пользователь угадал одну правильную цифру (1) на правильной позиции (бык) и одну правильную цифру (3) на неправильной позиции (корова). Угадывание продолжается, пока пользователь не получит четырех быков, т.е. не угадает четыре правильные цифры на четырех правильных позициях.
12. Эта программа довольно сложная, поскольку ответы трудно кодировать. Создайте вариант, в котором игрок может играть постоянно (без остановки и повторного запуска) и в каждой новой игре генерируются новые четыре цифры. Четыре случайные цифры можно сгенерировать с помощью четырех вызовов генератора случайных целых чисел randint(10) из заголовочного файла std_lib_facilities.h. Обратите внимание на то, что при постоянном выполнении программы вы каждый раз при новом сеансе будете получать одинаковые последовательности, состоящие из четырех цифр. Для того чтобы избежать этого, предложите пользователю ввести любое число и вызовите функцию srand(n), где n — число, введенное пользователем до вызова функции randint(10). Такое число n называется начальным значением (seed), причем разные начальные значения приводят к разным последовательностям случайных чисел.
13. Введите пары (день недели, значение) из стандартного потока ввода. Например:
Tuesday 23 Friday 56 Tuesday –3 Thursday 99
Запишите все значения для каждого дня недели в вектор vector<int>. Запишите значения семи дней недели в отдельный вектор. Напечатайте сумму чисел для каждого из векторов. Неправильный день недели, например Funday, можно игнорировать, но синонимы допускаются, например Mon и monday. Выведите на печать количество отвергнутых чисел.
Послесловие
Не считаете ли вы, что мы придаем ошибкам слишком большое значение? Новички могут подумать именно так. Очевидная и естественная реакция такова: “Все не может быть настолько плохо!” Именно так, все именно настолько плохо. Лучшие умы планеты поражаются и пасуют перед сложностью создания правильных программ. По нашему опыту, хорошие математики, как правило, недооценивают проблему ошибок, но всем ясно, что программ, которые с первого раза выполняются правильно, очень немного. Мы вас предупредили! К счастью, за пятьдесят лет мы научились организовывать код так, чтобы минимизировать количество проблем, и разработали методы поиска ошибок, которые, несмотря на все наши усилия, неизбежны. Методы и примеры, описанные в этой главе, являются хорошей отправной точкой.
Глава 6. Создание программ
“Программирование — это понимание”.
Кристен Нюгорд (Kristen Nygaard)
Создание программы предполагает последовательное уточнение того, что вы хотите сделать и как вы желаете это выразить. В этой и следующей главах мы разработаем одну программу, пройдя весь путь от первой еще неясной идеи через этапы анализа, проектирования, реализации, тестирования. повторного проектирования и повторной реализации. Наша цель — дать вам представление о способе мышления программиста, создающего свою программу. По ходу изложения мы обсудим структуру программы, типы, определенные пользователем, и обработку входной информации.
6.1. Задача
Создание программы начинается с постановки задачи; иначе говоря, должна существовать задача, которую вы хотите решить с помощью своей программы. Понимание этой задачи является основной предпосылкой хорошей задачи. Помимо всего прочего, программа, решающая неправильно поставленную задачу, будет редко применяться, хотя может быть очень элегантной. Существуют счастливые случаи, когда программа оказывается полезной для решения задачи, которую никто не собирался решать, но на это везение рассчитывать не стоит. Мы хотим, чтобы программа просто и ясно решала поставленную задачу. Как может выглядеть программа на этом этапе? Перечислим основные характеристики такой программы.
• Иллюстрирует методы проектирования и программирования.
• Дает возможность исследовать разные варианты решения, которые должен