При использовании операторов цикла с параметром вещественного типа имейте в виду следующее. Дробная часть (мантисса) «плохого» вещественного числа (0.1, 0.3, 23.47е-4 и т.п.) – начального или конечного значения параметра и шага в память компьютера будет записана с округлением, поэтому добиться точного равенства текущего значения параметра его последнему значению х = хn в этом случае из-за ошибок округления практически невозможно. Мы можем не увидеть на экране результат при последнем значении параметра. Для выполнения цикла и при последнем значении параметра рекомендуется в условии_повторения записывать выражение вида x <= xn + h / 2. Точного равенства, конечно, не будет, но последнее вычисленное в процессоре значение параметра хn будет меньше значения xn + h / 2. При использовании оператора for тоже следуйте приведенной рекомендации. Но лучше всего посчитать по приведенной выше формуле число повторений цикла Nи в качестве параметра цикла использовать целочисленную переменную к, которая изменяется от 1 до N. В этом случае вещественный параметр цикла х необходимо проинициализировать в выражении_1 (х = х0;), а его изменение должно обеспечить выражение_3 (к++, х += h) в заголовке оператора for, либо оператор присваивания x = x = + h в конце цикла.
Пример 1. Составить таблицу значений функции y = sinxдля значений x = -2π (π / 6) 2π. Результаты вывести в виде таблицы с «шапкой», указывая в дробной части результата три цифры.
Для организации цикла используем оператор цикла с предусловием. Для вывода заголовка («шапки») таблицы необходимо определить ширину поля вывода для каждого столбца таблицы. Так как количество цифр в значениях дробной части – 3 цифры, то минимальная ширина столбцов для аргумента х и результата у – 5 позиций (1 – целая часть, 1 – для десятичной точки, 3 – для дробной части). Мы примем ширину полей таблицы равной 7. Для указания ширины поля и количества знаков в дробной части необходимо использовать манипуляторы, поэтому подключаем файл iomanip.h.
// Таблица значений функции y = sin x отрезке [-2π, 2π] с шагом h = π /6.
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <math.h>
int main ()
{
const double pi = 3.141592;
double x, x0 = -2 * pi, xn = 2* pi, h = pi / 6;
// вывод заголовка таблицы с обрамлением
for (int i = 1; i <= 17; i++) cout << ‘_’;
cout << “| X | Y |” << endl;
for (int i = 1; i <= 17; i++) cout << ‘_’;
cout << endl;
x = x0; // инициализация параметра
while (x <= (xn + h/2))
{
y = sin (x);
// манипулятор setw (7) устанавливает ширину столбца таблицы, а
// манипулятор setprecision (3) определяет количество знаков в дробной части
cout << ‘|’ << setw (7) << setprecision (3) << x << ‘|’;
cout << setw (7) << setprecision (3) << y << ‘|’ << endl;
x += h; // изменение текущего значения параметра (только здесь!!!)
}
return 0;
}
В файле лаб_2_ауд представлены следующие материалы:
· слайды 8 – 10: синтаксис операторов цикла;
· слайды 3 – 5: разветвление в цикле с параметром, вывод значений функции;
· слайды 11 – 18, 20,21: примеры организации цикла с параметром;
· слайд 23: типовое задание 2.1;
· слайд 29: вычисление многочлена в точке;
· слайды 30 – 31: схема Горнера для вычисления значения полинома;
· слайд 35: вложенный цикл;
· слайды 36 – 37: корректная организация циклов;
· слайды 38 – 47: оптимизация программ.
В файле лаб_2_а_примеры представлены примеры организации циклов в программах.
1.5. Организация итерационного цикла
Синонимом термина«повторение» является термин «итерация». Свое название циклы этого вида получили, очевидно, в связи с тем, что они реализуют так называемые итерационные методы вычисления корней нелинейных уравнений и систем, а также широко используются при суммировании рядов, вычислении бесконечных сумм и произведений. Итерационный циклимеет две характерные особенности:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.