Dev - C++ - Hacer que el usuario ingrese la función?

   
Vista:
Imágen de perfil de Antonio

Hacer que el usuario ingrese la función?

Publicado por Antonio (19 intervenciones) el 18/02/2016 19:18:47
Hola, tengo ese código de Bisección:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <iomanip>
//******************************************************************************
using namespace std;
void bisetzion(long double,long double,int);
long double f(long double);
void impresion(long double,long double,long double,long double,int);
long double Abs(long double);
//******************************************************************************
int main(){
   long double an,bn,pn,tol;
   int n;
   char resp;
   do{
      system("cls");
 
      cout<<"Programa que utiliza el proceso de bisecci\xA2n para aproximar la funci\xA2n \nx^3 + 2x^2 + x - 2\n\n";
 
      do{
         cout<<"introduzca la an: ";
         cin>>an;
         cout<<"introduzca la bn: ";
         cin>>bn;
      }while(f(an)*f(bn)>0);
      if(f(an) != 0 && f(bn) != 0){
         do{
            cout<<"Tolerancia(10^-n) n: ";
            cin>>n;
         }while(n<=0);
         bisetzion(an,bn,n);
      }else cout<<"La ra\xA1z es uno de los extremos"<<endl;
      cout<<"\xA8 \bDesea calcular de nuevo(s/n)\x3F";
      cin>>resp;
   }while(resp == 's' || resp == 'S');
   system("pause");
   return 0;
}
//******************************************************************************
void bisetzion(long double an,long double bn,int n){//función que realiza la bisección
   long double pn=0,anterior,error=1000;
   cout<<"n"<<"  "<<"an"<<"          "<<"bn"<<"          "<<"pn"<<"           "<<"f(an)"<<"        "<<"f(pn)"<<"         "<<"error"<<endl;
   for(int i=0;error>pow(10.0,-n);++i){
      anterior = pn;
      pn = (an+bn)/2;
      error = Abs((pn - anterior)/pn);
      impresion(an,bn,pn,anterior,i);
      f(an)*f(pn)<0 ?  : an = pn;
      f(bn)*f(pn)<0 ?  : bn = pn;
   }
}
//******************************************************************************
long double f(long double x){//función a aproximar
   long double Fx;
   Fx = pow(x,3) + 2*pow(x,2) + x -2;
   return Fx;
}
//******************************************************************************
void impresion(long double an,long double bn,long double pn,long double anterior,int i){//función para imprimir los valores
   long double error = Abs((pn - anterior)/pn);
   cout<<setiosflags(ios::left)<<setw(3)<<i+1<<setprecision(7)<<setw(12)<<an<<setw(12)<<bn<<setw(12)<<pn<<setprecision(6)<<setw(14)<<f(an)<<setw(14)<<f(pn);
   i == 0 ? cout<<" -"<<endl : cout<<error<<endl;
}
//******************************************************************************
long double Abs(long double numero){//función para valor absoluto
   if(numero < 0) return -numero;
   else return numero;
}
//******************************************************************************

como se ve, aproxima sólo la función "x^3 + 2x^2 + x - 2" , mi pregunta es: Qué modifico para que el usuario pueda escoger entre las distintas funciones:

Polinomial: f(x) = a0 + a1 x + a2 x2 + ... + an xn
Exponencial: f(x) = a e (k x + c) + b
Logaritmica: f(x) = a Ω(k x + c) + b Ω = log, ln
Trigonométrica: f(x) = a Ω(k x + c) + b Ω = sen, cos, etc

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Hacer que el usuario ingrese la función?

Publicado por agustin (311 intervenciones) el 19/02/2016 11:18:11
Te creas un menú donde con un cin obtienes la opción deseada y con un switch usas la fórmula elegida.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antonio

Hacer que el usuario ingrese la función?

Publicado por Antonio (19 intervenciones) el 24/02/2016 06:00:42
Ya lo logré, gracias :3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Hacer que el usuario ingrese la función?

Publicado por xve (56 intervenciones) el 24/02/2016 08:50:14
Hola Antonio, nos puedes compartir como lo lograste?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar