#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <cstring>
#include <list>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[]) {
int imax;
double k,t,x,fx,e,y;
cout<<"Ingrese el valor de la constante k=";
cin>>k;
cout<<"\nk="<<k; // muestre el valor de k
cout<<"\n\nIngrese el valor de la tolerancia t=";
cin>>t;
cout<<"\nt="<<t; // muestre el valor de t
cout<<"\n\nIngrese el valor de Xo=";
cin>>x;
cout<<"\nx="<<x; // muestre el valor de x
//fx = (x-3.0*x*x); // f= x-3*x^2
//fx=x-pow(2,-x);
cout<<"\n\nIngrese f(x)=";
cin>>fx;
cout<<"\n\nfx="<< fx <<endl; // muestre la funcion
system("PAUSE");
cout<<"\n\nIngrese el numero de interaciones maximas iMax=";
cin>>imax;
cout<<"\nprocesando"<< endl;
for( int i = 0; i <= imax; i++){
cout<<"\n\nIteracion #" << i <<"\n";
system("PAUSE");
y = x - ( fx / k ); // y = Xo-(funcion evaluada en Xo/CONSTANTE);
cout<<"\ny="<<y;
e = (y - x) / y; // ERROR RELATIVO = (nuevo valor de Xo-valor inicial de Xo)/ nuevo valor de Xo;
cout<<"\ne="<<e;
if( e < t ){
i = imax + 1; // sale del ciclo for por que se excede en 1 imax
cout<<"\nEl error es menor que la tolerancia :" << "\n";
cout<<"\nEl valor de convergencia es de :" << y <<"\n";
cout<<"\nEl valor aproximado es de :"<< x <<"\n"; ;
cout<<"\nCon una tolerancia de :"<< t << "\n";;
}
else{
x=y; // SI EL ERROR RELATIVO NO ES IGUAL O MENOR A LA TOLERANCIA , EL NUEVO x SERA EL NUEVO VALOR de y
}
}
return 0;
}
// datos de prueba k=1.49, tolerancia 0.2, x inicial 0.5
// fx = (x-3.0*x*x); // f= x-3*x^2
// fx = x-pow(2,-x);