Вот есть готовая прога и мне нужно что бы объяснили пошагово каждое действие и сделали похожую если не трудно (задание лежит в документе ворд). Само задание готовой проги вот: 1. Сделать итеративную функцию вычисления значения суммы ряда. 2. Сделать рекурсивную функцию вычисления суммы ряда. 3. Сравнить результаты Ваших вычислений с результатом работы стандартной функции языка программирования. 4. Построить график функции на определенном выбранном промежутке (изобразить одним цветом график функции, точки для которого вычисляются “своей” функций, другим – график, точки для которого вычисляются стандартной функцией). Для построения графика сделать подпрограмму, параметром, которой будет функция вычисления. 5. Функция лежит тоже в ворде под номером 14.
А вот код:
| Код | #include <stdio.h> #include <math.h> #include <graphics.h>
float fy (float x, float a, int b) { return atan(x); }
float fy_iter (float x,float eps, int b) { float tmp,sum; int i,znac;
tmp = fy(x, eps, b);
if (x>-1) sum = 3.14/2; else sum = -3.14/2; i=1; znac = -1; while (fabs(sum-tmp)>eps) { sum+=1/(pow(x,i)*i)*znac; i+=2; znac=-znac; } return(sum); }
float fy_rec_tmp (float x, float eps, int i) { float tmp; tmp = 1/(pow(x,i)*i); if (fabs(tmp)>eps) return tmp - fy_rec_tmp(x,eps,i+2); else return tmp; }
float fy_rec (float x, float eps, int i) { if (x>-1)return (3.14/2 - fy_rec_tmp(x,eps,i)); else return (-3.14/2-fy_rec_tmp(x,eps,i)); }
void MinMax (int* min, int* max, int n, int xn, int xk) { int i,tmp; float dx; dx = (float)abs(xk-xn)/n; *min = *max = fy(xn+dx, i, tmp);
for (i=2; i<=n; i++) { tmp = fy(xn+dx*i, dx,n); if (*min>tmp) *min = tmp; else if (*max<tmp) *max = tmp; } }
void init (int* x0, int* y0, int* ed_izm, int xn, int xk ) { int xm,ym,gd,gm, ed_izmX, min, max;
*ed_izm = 50; gd=DETECT; initgraph(&gd,&gm,"c:\\studprog\\tc\\bgi"); setcolor(2); xm=getmaxx(); ym=getmaxy();
MinMax(&min,&max,50, xn, xk); if (abs(max)>abs(min)) *ed_izm = ym/abs(max*2); else *ed_izm = ym/abs(min*2);
if (abs(xk)>abs(xn)) ed_izmX = xm/abs(xk*2); else ed_izmX = xm/abs(xn*2);
if (ed_izmX<*ed_izm) *ed_izm = ed_izmX;
*y0=(int) (ym/2); *x0=(int) (xm/2);
line(0,*y0,xm-7,*y0); line (*x0,0,*x0,ym); outtextxy (*x0-3,0,"^"); outtextxy (xm-7,*y0-3,">"); setcolor(12);
outtextxy (*x0-10,*y0-*ed_izm,"1-"); outtextxy (*x0+*ed_izm,*y0-3,"|"); outtextxy (*x0+*ed_izm,*y0+9,"1"); setcolor(12); line (*x0+(*ed_izm),0,*x0+(*ed_izm),ym); line (*x0-(*ed_izm),0,*x0-(*ed_izm),ym); }
void ShowGraphic (float(*fn)(float, float, int),int n, int x0, int y0, float eps, int ed_izm, int color, int xn, int xk) { float d,x,y; int x1,x2,y1,y2,i; d=(float)(xk-xn)/n; x=xn; setcolor(color); if (n<30) while (xk>=x) { i=1; y=(*fn)(x,eps,i);
x2=(int)(x*ed_izm); y2=(int)(y*ed_izm); putpixel (x0+x2,y0-y2,color); circle (x0+x2,y0-y2,2); if (x>xn) line (x0+x1,y0-y1,x0+x2,y0-y2); x1=x2; y1=y2; x=x+d; } else while (xk>=x) { y=fy(x,x,1); x2=(int)(x*ed_izm); y2=(int)(y*ed_izm); putpixel (x0+x2,y0-y2,color); if (x>xn) line (x0+x1,y0-y1,x0+x2,y0-y2); x1=x2; y1=y2; x=x+d; } }
main()
{ float eps; char res; int x0,y0,x1,y1,x2,y2,n, ed_izm, xn, xk; do { clrscr(); printf ("Vvedite n "); scanf ("%d",&n); printf ("Vvedite epsilon "); scanf ("%f",&eps);
printf ("Vvedite xn "); scanf ("%d",&xn); printf ("Vvedite xk "); scanf ("%d",&xk);
if (((xn>1)&&(xk>1)) || ((xn<-1) && (xk<-1))) {
init(&x0,&y0, &ed_izm, xn,xk);
ShowGraphic(fy, n, x0, y0, eps, ed_izm,15, xn, xk); ShowGraphic(fy_iter, n, x0, y0, eps, ed_izm,13, xn, xk); ShowGraphic(fy_rec, n, x0, y0, eps, ed_izm,14, xn, xk); getch(); restorecrtmode (); } else printf ("Error!!!"); printf ("Press Y to continue or any key to exit"); res = getch(); } while (res == 'y'); }
|
ЗАРАНЕЕ БЛАГОДАРЕН ВСЕМ КТО ПОМОЖЕТ |