![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример программы. //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); void okno(int x1, int y1, int x2, int y2, int colfona, int colbukv);
void main() {int var, n, re1, re2, re3; float rez1, rez2, rez3, z, eps, y0, y1, y2; textbackground(BLACK); textcolor(15); clrscr(); for(;;) {okno(20, 1, 60, 6, 1, 15); //Ввод исходных данных cprintf(" \n Вид действия: \n\r"); cprintf(" 1 - вычисление по рекуррентной формуле\n\r"); cprintf(" 2 - вычисление предела произведения\n\r"); cprintf(" 3 - завершение задачи\n\r"); cprintf(" Введите вид действия -> "); cin > > var; switch(var) {case 1: okno(1, 10, 37, 15, 2, 15); //Ввод исходных данных для первой задачи cprintf(" Введите n -> "); cin > > n; cprintf(" Введите 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); okno(40, 10, 80, 15, 4, 15); //Вывод результата cprintf(" Для цикла WHILE результат =%d\n\r", re1); cprintf(" Для цикла DO..WHILE результат=%d\n\r", re2); cprintf(" Для цикла FOR результат =%d\n\r", re3); break; case 2: okno(1, 10, 37, 15, 2, 15); //Ввод исходных данных для второй задачи cprintf(" Введите точность вычисления\n\r"); cin > > eps; rez1 = predel1(eps); rez2 = predel2(eps); rez3 = predel3(eps); okno(40, 10, 80, 15, 4, 15); //Вывод результата cprintf(" Для цикла WHILE результат =%f\n\r", rez1); cprintf(" Для цикла DO..WHILE результат=%f\n\r", rez2); cprintf(" Для цикла FOR результат =%f\n\r", rez3); break; default: abort(); }//switch }//for }
//Вывод окна на экран void okno(int x1, int y1, int x2, int y2, int colfona, int colbukv) {window(x1, y1, x2, y2); textbackground(colfona); textcolor(colbukv); clrscr(); }
//вычисление значения рекуррентного выражения циклом 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 = 0.5; int n = 1; while(fabs(1 / an) > eps) {pr *= (0.5 + 1 / an); n++; an = n * (an + 1); } return(pr); }
//вычисление предела произведения циклом do..while float predel2(float eps) {float an = 0.5, pr = 1; int n = 1; do {pr *= (0.5 + 1 / an); n++; an = n * (an + 1); } while (fabs(1 / an) > eps); return(pr); }
//вычисление предела произведения циклом for float predel3(float eps) {float an = 0.5, pr = 0.5 + 1 / an; int n; for(n = 2; n < INT_MAX; n++) {an = n * (an + 1); if(fabs(1 / an) > eps) pr *= (0.5 + 1 / an); else break; } return(pr); }
|