Código:
#include <iostream> #include <cstdlib> #include <math.h> #include <iomanip> #define nmax 35 using namespace std; //----------------------------------------------------------------------------// float FuncionF(int, float); float FuncionG(int, float); float Absoluto(float); int Menu(); //----------------------------------------------------------------------------// enum{SALIR=0, PRIMERA, SEGUNDA, TERCERA, CONTINUAR=1}; //----------------------------------------------------------------------------// int main() { float a, b, pn_anterior, pn, fpn; int eleccion, seguir=CONTINUAR, tol; double error; bool NoCumple; cout << "\n\tPrograma que aproxima la ra" << (char) 161 << "z de una funci" << (char) 162 << "n dada por el m" << (char) 130 << "todo \n\tde punto fijo." << endl; do{ cout << endl; eleccion = Menu(); if(eleccion == SALIR) break; //Se da y valida el intervalo. do{ cout << "Indique el intervalo [a,b]" << endl; cout << "\n\ta: "; cin >> a; do{ cout << "\n\tb: "; cin >> b; if(b<=a) cout << "\aERROR: Valor invalido (el fin del intervalo debe ser mayor al inicio)." << endl; }while(b<=a); system("cls"); NoCumple=false; if( eleccion==PRIMERA && a<=-4 ) NoCumple=true; if( eleccion==TERCERA && a<=-24 ) NoCumple=true; if(FuncionF(eleccion,a)*FuncionF(eleccion,b)>0){ NoCumple=true; } if(NoCumple){ do{ cout << "\a\a ERROR: La funci" << (char) 162 << "n evaluada en los extremos del intervalo no presenta \n los requisitos minimos para utilizar el algoritmo de \n punto fijo. Elija que hacer a continuaci" << (char) 162 << "n:" << endl << endl; cout << "( " << SALIR << " ) Volver a elegir funci" << (char) 162 << "n." << endl; cout << "( " << CONTINUAR << " ) Introducir otro intervalo." << endl; cin >> seguir; system("cls"); if(seguir<SALIR || seguir>CONTINUAR) cout << "\aERROR: Valor invalido." << endl; }while(seguir<SALIR || seguir>CONTINUAR); } }while(NoCumple && seguir!=SALIR); system("cls"); if(seguir == SALIR) continue; //Se indica la tolerancia para la aproximación. do{ cout << "Indique las cifras de tolerancia[0,10]: "; cin >> tol; system("cls"); if(tol<0 || tol>10) cout << "\aERROR: Valor invalido." << endl; }while(tol<0 || tol>10); //Se tabula todo. cout << setw(5) << "n" << setw(20) << "pn" << setw(20) << "f(pn)" << setw(20) << "error" << endl; pn = (a+b)/2; error=1; for(int i=1 ; i<=nmax ; ++i){ switch(eleccion){ case PRIMERA: fpn = FuncionG(PRIMERA,pn); break; case SEGUNDA: fpn = FuncionG(SEGUNDA,pn); break; case TERCERA: fpn = FuncionG(TERCERA,pn); break; } if(i>=2 && fpn!=0) error = Absoluto(( pn - pn_anterior) / pn); cout << setw(5) << i; cout << setw(20) << pn; cout << setw(20) << fpn; if(i==1) cout << setw(20) << "---" << endl; else if(fpn==0) cout << setw(20) << "0" << endl; else cout << setw(20) << error << endl; pn_anterior = pn; pn = fpn; if(error<(0.5*pow(10,-tol))) break; } cout << "\nValor aproximado: " << pn << endl << endl; system("pause"); system("cls"); }while(true); return 0; }