elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cómo hago que el usuario elija el tipo de función?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cómo hago que el usuario elija el tipo de función?  (Leído 2,101 veces)
Antoniio

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Cómo hago que el usuario elija el tipo de función?
« en: 17 Febrero 2016, 07:45 am »

Hola, buenas. Tengo un código que se basa en el algoritmo de bisección el cual encuentra una raíz de una función dada, en mi caso usé "x^3 + 2x^2 + x - 2"
pero quisiera saber cómo puedo hacer que el usuario elija qué tipo de función usar para la aproximación?, osea, que sean 4 las opciones:
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

mi código es el siguiente, sencillo pero útil:

Código:
#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; 
}
//******************************************************************************

Alguna sugerencia?, gracias de antemano.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Cómo hago que el usuario elija el tipo de función?
« Respuesta #1 en: 17 Febrero 2016, 15:10 pm »

usa switch o if y coloca cada formula en una función diferente, según la opción que escoja, se llama a la respectiva función


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Antoniio

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Cómo hago que el usuario elija el tipo de función?
« Respuesta #2 en: 17 Febrero 2016, 18:28 pm »

Usaré case, pero no puedo definir las funciones en código  :-\
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Cómo hago que el usuario elija el tipo de función?
« Respuesta #3 en: 17 Febrero 2016, 18:36 pm »

entonces coloca simplemente la operación dento del case y listo
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Antoniio

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Cómo hago que el usuario elija el tipo de función?
« Respuesta #4 en: 17 Febrero 2016, 19:04 pm »

Si, comprendo, una última cosa, que desde el principio no entendí, cómo declaro los símbolos?, por ejemplo: a Ω(k x + c) + b Ω = log, ln
Realmente ese era mi problema desde un principio pero planteé mal la pregunta..
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Cómo hago que el usuario elija el tipo de función?
« Respuesta #5 en: 17 Febrero 2016, 19:19 pm »

a nivel de código, no importan los simbolos, normalmente si son constantes, se hace un define con el nombre en mayúsculas y el valor... ejemplo

Código:
#define PI 3.1415926535
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Antoniio

Desconectado Desconectado

Mensajes: 121



Ver Perfil
Re: Cómo hago que el usuario elija el tipo de función?
« Respuesta #6 en: 21 Febrero 2016, 04:54 am »

Perfecto, ya está :3
gracias ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines