- •Лабораторная работа 2 Циклы
- •Организация циклов с параметром Цикл while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Определение наибольшей степени целого числа 100, которую можно вычислить, пользуясь типом long
- •Подсчет количества цифр в числе n
- •Вычисление значений функции на отрезке
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Цикл do-while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Калькулятор
- •Проверка входных данных
- •Вычисление значений функции на отрезке
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Цикл for в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Организация итерационных циклов Цикл while в итерационных циклах Вычисление числа π
- •Вложенные циклы
- •Вычисление значения многочлена на отрезке (схема Горнера)
- •Разложение функции на отрезке в ряд Тейлора
- •Организация работы с последовательностью чисел, вводимых с клавиатуры
- •Корректная организация циклов
- •Оптимизация программы
- •Алгоритм типа «развилка, вложенная в цикл с параметром»
- •Алгоритмы итерационных циклов Пример 1. Нахождение корня нелинейного уравнения методом итераций
- •Пример 2. Нахождение корня нелинейного уравнения методом половинного деления
- •Пример 3. Вычисление суммы членов бесконечного ряда.
- •Алгоритмы с вложенными циклами
- •Алгоритм вложенного цикла с развилкой
Разложение функции на отрезке в ряд Тейлора
Рассмотрим сначала разложение функции в ряд Тейлора в точке.
Разложение функции в ряд Тейлора в точке – это есть вычисление суммы S бесконечного ряда и пример итерационного цикла (неизвестно количество слагаемых в сумме, а момент завершения вычисления суммы (конец итерационного цикла) определяется только в ходе вычислений, при сравнении очередного получаемого слагаемого с наперед заданным значением точности ε (эпсилон).
Чтобы оптимизировать процесс вычислений, рассматриваемый алгоритм предполагает суммирование слагаемых слева направо с пересчетом очередного слагаемого в его отношении к предыдущему (т.е. умножением на некоторый коэффициент). Рассмотрим алгоритм на примере разложения функции sin(x):
Процесс вычисления суммы ряда S завершается, если очередное значение y по модулю будет меньше ε.
Вычислим в точке x сумму ряда S и количество слагаемых n:
int main ()
{
double y, x, S, eps = 0.00001; // y – очередное слагаемое
int n=0;
cin >> x; //значение точки, в которой выполняется вычисление
y=x; //первое слагаемое данного ряда равно х
S=y; //первое значение суммы
while (fabs(y) > eps) //пока точность не достигнута
{ n++;
y *=-x*x/(2*n*(2*n+1)); //пересчет слагаемого
S +=y;
}
cout << "x = " << x << " S =" << S << " n=" << n << endl;
_getch();
return 0;
}
Разложение функции в ряд Тейлора на отрезке представляется в виде вложенных циклов. Внешний цикл (организация движения по отрезку) является циклом с параметром. Его можно реализовать циклами for, while или do-while. Внутренний цикл (вычисление функции в точке) – это итерационный цикл. Его желательно реализовать циклами while или do-while:
#include <math.h>
int main ()
{ double y, x0, xn, h=0.1, S, eps = 0.00001;
int n; //счетчик числа слагаемых
cin >> x0 >> xn; //ввод границ отрезка
double x=x0;
const double B=xn+h/2;
while (x < B) //внешний цикл движения по отрезку
{n=0; y=x; S=y;
while (fabs(y) > eps) //цикл вычисления суммы ряда в точке
{ n++;
y *=-x*x/(2*n*(2*n+1));
S +=y;
} //end_while вычисления суммы ряда в точке
cout << "x=" << setw(5)<<setiosflags(ios::right)<< x << " S=" << setw(9) << setiosflags(ios::right)<< S << endl;
x+=h; //переход к очередной точке отрезка
} //end_while движения по отрезку
_getch();
return 0;
}
Результаты:
1 2 //границы отрезка
x= 1 S= 0.841471
x= 1.1 S= 0.891207
x= 1.2 S= 0.932039
x= 1.3 S= 0.963558
x= 1.4 S= 0.98545
x= 1.5 S= 0.997495
x= 1.6 S= 0.999574
x= 1.7 S= 0.991665
x= 1.8 S= 0.973848
x= 1.9 S= 0.9463
x= 2 S= 0.909297
Организация работы с последовательностью чисел, вводимых с клавиатуры
-
Определим минимальное число последовательности натуральных чисел:
int main ()
{
int a, min;
printf (" min\n");
printf (" input, exit - 0 \n");
printf ("->");
scanf ("%d", &a);
min = a;
while (a>0)
{
if (a < min) min = a;
printf ("->");
scanf ("%d", &a);
}
printf ("min: ");
printf ("%i \n", min);
printf ("\n exit - <enter>\n");
_getch();
return 0;
}
-
Для заданных n и целых чисел с1, с2, ..., сn и s1, s2, ..., sn
вычислить:
int main()
{ double proizv=1.; //переменная для вычисления произведения
double c=0, c1, s=0, s1; //переменные для числителя и знаменателя
int n;
cout <<"n="; cin>> n; //количество сомножителей
for (int i=1; i<=n; i++)
{cout <<"\nc" << i << "= "; cin >> c1;
cout <<"\ns" << i << "= "; cin >> s1;
c+=c1; //вычисление очередного числителя
s+=s1; //вычисление очередного знаменателя
proizv *=c/s; //вычисление произведения
}
cout << "\nproizv= " << proizv << '\n';
_getch();
return 0;
}