Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Antoniio en 7 Septiembre 2015, 08:49 am



Título: Leer y operar bisección con una función
Publicado por: Antoniio en 7 Septiembre 2015, 08:49 am
Hola, tengo un programa de bisección en c++ pero lee dos variables (a y b), alguien sabe cómo hacer para que realice las operaciones dada una función del usuario?

este es el code:
Código:
#include <iostream>
#include <cstdlib>
#include <math.h>

using namespace std;

double f(double x);
double biseccion ( double a, double b, double tol, int n);
int main()
{
    double a, b, tol, raiz;
    int n;
    cout<< "Ingrese el n\xA3mero de iteraciones:  ";
    cin>>n;
    cout << "Ingrese a:  ";
    cin>>a;
    cout<< "Ingrese b:  ";
    cin>>b;
    cout<< "Ingrese la tolerancia:  ";
    cin>>tol;
    raiz=biseccion(a,b,tol,n);
    cout<<"La ra\xA1z es: "<< raiz <<endl;
    system("pause");
    return 0;
}
 
 double f(double x)
 {
        return x*x*x+4*x*x-10;
 }
 double biseccion(double a, double b, double tol, int n)
 {
        double c;
        int nolter=0;
        do
        {
            c=(a+b)/2;
            if(f(a)*f(c)<0)
            {
               b=c;
            }
            else
            {
               a=c;
            }
            cout<<nolter<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t"<<f(c)<<endl;
            nolter++;
         }
         while((fabs(f(c))>tol)&&(nolter<n));
         return c;
 }

gracias de antemano.


Título: Re: Leer y operar bisección con una función
Publicado por: ivancea96 en 7 Septiembre 2015, 14:06 pm
Citar
sabe cómo hacer para que realice las operaciones dada una función del usuario?
Si lo que quieres es que el usuario te ponga una función, la única posibilidad que te queda en C++ es interpretar y transformar la cadena de entrada, pero es algo más complicado.

En C++, en vez de <math.h>, <cmath>.


Título: Re: Leer y operar bisección con una función
Publicado por: Antoniio en 7 Septiembre 2015, 17:15 pm
Sí, sin duda es más complicado, no supe hacerlo por eso vengo a ver si alguien me puede hechar una mano para explicarme más o menos cómo hacer todo ese proceso, gracias :3


Título: Re: Leer y operar bisección con una función
Publicado por: someRandomCode en 8 Septiembre 2015, 16:32 pm
Vos te referis a esta biseccion? click aca (https://es.wikipedia.org/wiki/M%C3%A9todo_de_bisecci%C3%B3ni)

O sea, a buscar raices por aproximacion?


Título: Re: Leer y operar bisección con una función
Publicado por: Antoniio en 8 Septiembre 2015, 19:43 pm
Sí, puedo llegar a la raíz con el código pero no se cómo hacer para que el usuario ingrese la función y con ella realizar las operaciones, no con a y b como lo tengo...


Título: Re: Leer y operar bisección con una función
Publicado por: someRandomCode en 8 Septiembre 2015, 21:15 pm
a y b son puntos continuos en la recta?
Porque la idea es que hay varios criterios a cumplir para que puedas usar este metodo..
Basicamente igual vas a tener que cargarlo por pantalla, y en cuanto a la ecuacion tendras que hacer un parser lamentablemente..


Título: Re: Leer y operar bisección con una función
Publicado por: Antoniio en 8 Septiembre 2015, 21:27 pm
Sí, el problema es que me piden sacar la aproximación a una raíz de una función dada, pero no se cómo implementar el código con una función dada por el usuario, sólo pidiendo los puntos a y b...no sé cómo hacer para que en lugar de pedir dos puntos pida la ecuación y realice lo mismo..


Título: Re: Leer y operar bisección con una función
Publicado por: ivancea96 en 8 Septiembre 2015, 22:25 pm
Como dijo someRandomCode, tendrás que parsear la ecuación. Tendrás que interpretar la cadena de caracteres, y de ahí sacar las operaciones (manteniendo prioridad en los operadores), los coeficientes, y las variables. Salvo que solo lo quieras hacer con ecuaciones que sigan un patrón (Ej. "aX^2+bX+c"), tendrás que interpretarlo con todas sus posibilidades, y eso ya te va a llevar más tiempo.


Si real, realmente quieres hacerlo ahora, te aconsejo apartarte de ese proyecto momentaneamente y ponerte con lo otro. Pensar en cómo lo harás, pensar en cómo mantendrás el orden de los paréntesis, en como cambiarás las variables por tus valores, etc.

Para ver operadores, solo es comparar los caracteres (str[ i ] == '+'), y los números los separas y conviertes a variables enteras o flotantes con el set de funciones <stof, stoi...>.

Dale tiempo a pensar el algoritmo.


Título: Re: Leer y operar bisección con una función
Publicado por: Antoniio en 9 Septiembre 2015, 01:37 am
Sí, tal parece que es un problema que con lo que sé de c++ no podré realizar por el momento. Ahora, que pasaría si yo incluyo las funciones?, eso debe ser mucho más fácil, osea, no pedir nada al usuario, que sean supongamos 3 funciones ya establecidas y hacer las operaciones con esas. Sinceramente no se hacerlo, algún consejo para hacerlo de esa forma?, gracias de antemano.


Título: Re: Leer y operar bisección con una función
Publicado por: ivancea96 en 9 Septiembre 2015, 15:41 pm
Crea las funciones
Código
  1. float func1(float x, float y);

Y luego las introduces como sea.
¿Qué es lo que no das hecho?