Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2016, 23:29
Avatar de Jose_A
Jose_A
 
Fecha de Ingreso: mayo-2015
Ubicación: México, Sonora.
Mensajes: 180
Antigüedad: 8 años, 9 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;
}