online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
#pragma hdrstop #pragma argsused #include <stdio.h> #include <math.h> #include <conio.h> double f1(double x){ //Первая функция (один параметр типа double и результат double) return 1/(1.2*tan(x)+sqrt(x+1))-x; } double f2(double x){ //Вторая функция (один параметр типа double и результат double) double z = (sin(x)+cos(x)); return z*z/pow(33.5,2./3)+sqrt(3./7)-x; } double func1(double x){ //Преобразованная для метода бисекции первая функция return (1/(2*(1.2*tan(x)+sqrt(x+1)))+(x/2)); //1/2*f1(x)+x } double func2(double x){ //Преобразованная для метода итераций вторая функция return f2(x)+x; } /* //Метод деления отрезка пополам double bisekcii(double a,double b,double e,int i,int j, int N, double (*f)(double)){ double c; i=0;//Счетчик итераций e=1/pow(10,j);//Погрешность while(fabs(b-a)>=e){ //продолжать поиск корня пока не достинута заданная точность c=(a+b)/2; //делим промежуток пополам if((f(a))*(f(c))<=0) //в зависимости от знака b=c; //двигаемся к одному else a=c; //или другому концу промежутка i++; } printf("%14.*lf|",j,e); //Погрешность выводится с точностью j знаков после . printf("%4d|", i); //Число итераций метод I return (a+b)/2.0; //Вернуть найденный корень уравнения } */ double bisekcii(double a, double b, double e, int& i,int& j, double (*f)(double)) { i = 0; e=1/pow(10,j); double fa = f(a), fb = f(b); while(b-a >= e) { double c=(a+b)/2; double fc = f(c); if (fa*fc <= 0) b=c; else a=c; i++; } printf("%14.*lf|",j,e); //Погрешность выводится с точностью j знаков после . printf("%4d|", i); //Число итераций метод I return (a+b)/2.0; } double iteracii(double a, double e, int& i,int& j, double (*f)(double)){ i=0; double b = f(a); e=1/pow(10,j); while(fabs(b-a) >=e ) { a = b; b = f(a); i++; } printf("%5d|", i); //Число итераций return b; } int main(){ int k,l,i,j,N; int flg2=1,flg3=1, flg1=1; double a,b,e,x1,x2,x3,x4; printf("В таблице:\n I - кол-во итераций цикла при методе бисекций \n"); printf("II - кол-во итераций цикла при методе простых итераций \n"); printf("Введите число N: "); while (flg1) { while (!fflush(stdin) && !scanf("%d", &N)) printf("N - не число. Повторите ввод: "); if (N < 1 || N > 10){ printf("N выходит за границы допустимого диапазона. Введите N[1...10]: "); scanf("%d", &N); break; } else{ flg1 = 0; } } printf("Введите число a: "); while (flg2) { while (!fflush(stdin) && !scanf("%lf", &a)) printf("a - не число. Повторите ввод: "); if ((a>=2)||(a<=0)) { printf("a за пределами диапазона 0<a<2. Введите a:"); scanf("%lf",&a); break; } else{ flg2 = 0; } } printf("Введите число b: "); while (flg3) { while (!fflush(stdin) && !scanf("%lf", &b)) printf("b - не число. Повторите ввод: "); if ((b>=2)||(b<=0)||(b<=a)) { printf("b за пределами диапазона 0<a<b<2. Введите b: "); scanf("%lf",&b); break; } else{ flg3 = 0; } } printf(" \n"); if (f1(a)*f1(b)>0) { printf("У f1 корня на отрезке AB нет\n"); } else{ printf("Для первой функции:\n"); printf(" Погрешность | I | II | Корень I | Корень II \n"); for (j = 1; j <= N; j++){ e=1/pow(10,j); x1=bisekcii(a,b,e,i,j,f1); //Поиск корня f1 на интервале (a;b) первым методом x3=iteracii(a,e,i,j,func1); //Поиск корня f1 на интервале (a;b) вторым методом printf("%14.*lf|%14.*lf\n",j,x1,j,x3); } printf("\n"); } if(f2(a)*f2(b)>0) { printf("У f2 корня на отрезке AB нет\n"); } else{ printf("Для второй функции:\n"); printf(" Погрешность | I | II | Корень I | Корень II \n"); for (j = 1; j <=N; j++) { e=1/pow(10,j); x2=bisekcii(a,b,e,i,j,f2); //Поиск корня f2 на интервале (a;b) первым методом x4=iteracii(a,e,i,j,func2); //Поиск корня f2 на интервале (a;b) вторым методом printf("%14.*lf|%14.*lf\n",j,x2,j,x4); } printf("\n"); } printf("Press any key to exit"); getch(); return (0); }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue