14/12/2016, 23:29
|
| | | Fecha de Ingreso: mayo-2015 Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 9 años, 6 meses Puntos: 0 | |
Evaluar en otra función Hola, quisiera saber si hay manera de evaluar en este programa:
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;
}
|