Программа 9. Вычисление квадратного корня
Приближенное значение квадратного корня из некоторого положительного числа a можно найти с помощью последовательных приближений:
Начальным приближением x0 может быть любое положительное число, например, или . Итерационный процесс следует продолжать до тех пор пока два последовательных приближения не станут достаточно близки, что можно записать в виде:
,
где e – заданная малая величина – точность вычисления.
Далее приведен текст программы, реализующий процесс последовательных приближений для вычисления корня.
// Файл SqrtRoot.cpp
// Вычисление квадратного корня
#include <iostream.h>
#include <conio.h>
#include <math.h> // Для fabs
int main()
{
double a, xn, xn1, eps;
do{ // Ввод и проверка исходных данных
cout << "Введите число > 0: ";
cin >> a;
cout << "Введите точность: ";
cin >> eps;
}while(a < 0 || eps <= 0); // Повторяем ввод при поступлении
// отрицательного числа или неверной точности
xn1 = a; // Начальное приближение
cout << xn1 << "\n";
do{
xn = xn1; // Следующее приближение делаем предыдущим
xn1 = (xn + a / xn) / 2.0; // Новое приближение
cout << xn1 << "\n";
}while(fabs(xn1 - xn) > eps); // Пока не достигнута нужная точность,
getch();
return 0;
}
При вычислении программа выдает следующее:
Введите число > 0: 2
Введите точность: 0.0001
2.000000
1.500000
1.416667
1.414216
1.414214
Видно, что уже пятое приближение имеет заданную точность.
Обсудим данную программу.
Включение заголовочного файла math.h необходимо, так как в программе имеется обращение к объявленной в этом файле функции
double fabs(double x);
вычисляющей абсолютное значение для числа с плавающей точкой.
Число a, два последовательных приближения к квадратному корню xn, xn1 и точность eps определены как числа с плавающей точкой двойной точности double.
Ввод исходных данных производится в цикле do … while. Этот цикл повторится, если будет истинным выражение a < 0 || eps <= 0. Оператор || является логическим оператором ИЛИ и все выражение будет истинным, если введено или отрицательное значение для a, или для точности eps. Синтаксис языка требует, чтобы между do и while была единственная инструкция. Здесь четыре инструкции объединены в одну составную инструкцию фигурными скобками { и }.
Вычисления начинаются с присваивания переменной xn1 значения a. Далее вычисления продолжаются в цикле do while.
Важным приемом программирования является присваивание
xn = xn1;
которое позволяет обойтись только двумя переменными при вычислении многих последовательных приближений.
Каждое из приближений печатается.
Переключатель
Для выбора одного из многих вариантов удобно использовать оператор switch, который имеет вид:
switch(выр){
case константа1 :
инструкция1
break;
case константа2 :
инструкция2
break;
…
case константаN :
инструкцияN
break;
default: инструкция
}
Ветвь default может отсутствовать.
Работа переключателя состоит в следующем. Вычисляется выражение выр, затем его значение сравнивается с константами. При совпадении выполняется соответствующая инструкция и работа завершается. Если выр не совпало ни с одной константой, выполняется инструкция ветви default, если она есть.
Программа 10. День недели
Программа предлагает ввести номер дня недели и выводит его название.
// Файл DayWeek.cpp
// Программа выводит название дня недели по его номеру
#include <iostream.h>
#include <conio.h>
int main()
{
int n; // Номер дня недели
cout << "\nВведите номер дня недели от 1 до 7 \n";
cin >> n;
cout << "Это ";
switch(n){
case 1: cout << "Понедельник"; break;
case 2: cout << "Вторник"; break;
case 3: cout << "Среда"; break ;
case 4: cout << "Четверг"; break;
case 5: cout << "Пятница"; break;
case 6: cout << "Суббота"; break;
case 7: cout << "Воскресенье"; break;
default: cout << "Неверный номер";
}
getch();
return 0;
}
Ниже приводятся результаты двух запусков программы.
Введите номер дня недели от 1 до 7
Это Пятница
Введите номер дня недели от 1 до 7
Это Неверный номер
Операторы break и continue
Оператор break вызывает немедленный выход из циклов for, while, do-while и переключателя switch. Выход осуществляется только из одного самого внутреннего из нескольких охватывающих циклов или переключателей.
Оператор continue вызывает следующую итерацию охватывающего его цикла for, while, do-while до окончания выполнения всех инструкций в теле цикла. Использование операторов break и continue иллюстрируется следующей программой.