Autor
|
Tema: Cómo hago que el usuario elija el tipo de función? (Leído 3,072 veces)
|
Antoniio
Desconectado
Mensajes: 121
|
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: #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
|
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
Mensajes: 121
|
Usaré case, pero no puedo definir las funciones en código
|
|
|
En línea
|
|
|
|
engel lex
|
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
Mensajes: 121
|
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
|
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
|
|
|
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
Mensajes: 121
|
Perfecto, ya está :3 gracias
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Quiero mandar una postal, con la canción que yo elija, de fondo! ¿Cómo?
Multimedia
|
nichihack
|
6
|
6,001
|
13 Febrero 2008, 14:53 pm
por nichihack
|
|
|
Como hacer que elija entre varias cosas al azar? (batch)
Scripting
|
Sr.Origami
|
2
|
3,974
|
30 Junio 2010, 20:25 pm
por leogtz
|
|
|
[C++] Conversión tipo predefinido <-> tipo definido por usuario
Programación C/C++
|
dopin
|
2
|
2,571
|
22 Agosto 2012, 15:04 pm
por dopin
|
|
|
Ayuda con dato tipo subtitulo, ¿cómo sería la función definir? gracias
Programación C/C++
|
comemelguevo
|
2
|
1,844
|
7 Enero 2016, 23:30 pm
por DeIMachine
|
|
|
[?] Como hago la evaluacion de una funcion algebraica
Programación Visual Basic
|
.:: KsV ::.
|
3
|
1,496
|
19 Enero 2016, 23:17 pm
por fary
|
|