КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример программы. //1.Пользуясь рекуррентной формулой yi=yi-1 + yi-3^2, где i=3,4,n,
//1.Пользуясь рекуррентной формулой yi=yi-1 + yi-3^2, где i=3,4,...n, //для заданного значения n вычислить yn, если известны y0, y1, y2. //2.Последовательность {an} задана равенствами: // a1=0.5; an=n*(an-1+0.5). // Вычислить предел произведения (1+1/a1)*...*(1+1/an). // Вычисления закончить при |1/an| < eps. #include<iostream.h> #include<math.h> #include<conio.h> #include<stdlib.h> #include<limits.h>
int recur1(int n, int y0, int y1, int y2) ; int recur2(int n, int y0, int y1, int y2) ; int recur3(int n, int y0, int y1, int y2) ; float predel1(float eps) ; float predel2(float eps) ; float predel3(float eps) ;
int main() {int var, n ; int re1, re2, re3 ; //результаты решения первой задачи float rez1, rez2, rez3 ; //результаты решения второй задачи float eps ; //точность вычисления результата float y0, y1, y2 ; //исходные данные для первой задачи clrscr() ; for(;;) { //Выбор вида действия cout << " Вид действия:\n" ; cout << " 1 - вычисление по рекуррентной формуле\n" ; cout << " 2 - вычисление предела произведения\n" ; cout << " 3 - завершение задачи\n" ; cout << " Введите вид действия -> " ; cin >> var ; switch(var) {case 1: //Ввод исходных данных для первой задачи cout << " Введите n -> " ; cin >> n; cout << " Введите y0, y1, y2 -> " ; cin >> y0 >> y1 >> y2 ; re1 = recur1(n, y0, y1, y2) ; re2 = recur2(n, y0, y1, y2) ; re3 = recur3(n, y0, y1, y2) ; //Вывод результата cout << " Для цикла WHILE результат = " << re1 << endl ; cout << " Для цикла DO..WHILE результат= " << re2 << endl ; cout << " Для цикла FOR результат = " << re3 << endl ; break ; case 2: //Ввод исходных данных для второй задачи cout << " Введите точность вычисления -> " ; cin >> eps ; rez1 = predel1(eps) ; rez2 = predel2(eps) ; rez3 = predel3(eps) ; //Вывод результата cout.precision(4) ;//число знаков после дес. точки cout << " Для цикла WHILE результат =" << rez1 << endl ; cout.precision(4) ; cout << " Для цикла DO..WHILE результат=" << rez2 << endl ; cout.precision(4) ; cout << " Для цикла FOR результат =" << rez3 << endl ; break ; default: return 0 ; }//switch }//for }
//вычисление значения рекуррентного выражения циклом while int recur1(int n, int y0, int y1, int y2) {int i = 3, y ; while(i <= n) {y = y2 + y0 * y0 ; y0 = y1 ; y1 = y2 ; y2 = y ; i++ ; } return y ; }
//вычисление значения рекуррентного выражения циклом do..while int recur2(int n, int y0, int y1, int y2) {int i = 3, y ; do {y = y2 + y0 * y0 ; y0 = y1 ; y1 = y2 ; y2 = y ; i++ ; } while(i <= n) ; return y ; }
//вычисление значения рекуррентного выражения циклом for int recur3(int n, int y0, int y1, int y2) {int i, y ; for(i = 3 ; i <= n ; i++) {y = y2 + y0 * y0 ; y0 = y1 ; y1 = y2 ; y2 = y ; } return y ; }
//вычисление предела произведения циклом while float predel1(float eps) {float pr = 1, an = .5 ; int n = 1 ; while(fabs(1 / an) > eps) {pr *= (1 + 1 / an) ; n++ ; an = n * (an + .5) ; } return pr ; }
//вычисление предела произведения циклом do..while float predel2(float eps) {float an = .5, pr = 1 ; int n = 1 ; do {pr *= (1 + 1 / an) ; n++ ; an = n * (an + .5) ; } while (fabs(1 / an) > eps) ; return pr ; }
//вычисление предела произведения циклом for float predel3(float eps) {float an = .5, pr = 1 + 1 / an ; for(int n = 2 ; n < INT_MAX; n++) {an = n * (an + .5) ; if(fabs(1 / an) > eps) pr *= (1 + 1 / an) ; else break ; } return pr ; }
|