Пример программы
//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);
}