Estos dias he estado pensado en como poder hacer un programa que haga operaciónes matemáticas, pero en vez de pedir al usuario que operación quiere realizar, tenga que introducir una cadena y hacer las operaciones, un ejemplo.
5 + 2 - 1
No necesito que me escriban el código ni nada por el estilo, solo necesito alguna idea de como hacer-lo. Como soy nuevo, esto se me hace bastante complicado...
Depende a que grado de dificultad quieres hacer que realize operaciones, dependera como lo haras. Por ejemplo.. tenes pensado que haga cosas como esta:
Depende a que grado de dificultad quieres hacer que realize operaciones, dependera como lo haras. Por ejemplo.. tenes pensado que haga cosas como esta:
Si quieres meterle signos de operación de dividir y multiplicar te complicas más la vida pues tienes que mirar la prioridad yo lo haría así si solo fuese sumar y restar :
Código:
-Pedir la cadena. -Buscar el primer operando en la cadena. LOOP(mientras cadena no sea igual que '\0') { -Cortar la cadena(con la función de abajo)desde el operando anterior (si es la primera vez será[0] )hasta ese operando y convertirla a int con la función atoi()(ya que sólo te quedarán los números). -Si ese operando es - pasar ese valor en negativo. -Sumar ese valor convertido, a una variable resultado. -Buscar el siguiente operando en la cadena. } Imprimir la variable resultado.
Recuerdo esto solo es para sumar o restar , si quieres hacer multiplicaciones y divisiones tienes que complicarlo mas.Yo optaría por ir haciéndolo poco a poco y después ya le añades más operaciones , prioridad con paréntesis etc.. Puede haber algun fallo , si és así hazlo saber. Un saludo
Si quieres meterle signos de operación de dividir y multiplicar te complicas más la vida pues tienes que mirar la prioridad yo lo haría así si solo fuese sumar y restar :
Código:
-Pedir la cadena. -Buscar el primer operando en la cadena. LOOP(mientras cadena no sea igual que '\0') { -Cortar la cadena(con la función de abajo)desde el operando anterior (si es la primera vez será[0] )hasta ese operando y convertirla a int con la función atoi()(ya que sólo te quedarán los números). -Si ese operando es - pasar ese valor en negativo. -Sumar ese valor convertido, a una variable resultado. -Buscar el siguiente operando en la cadena. } Imprimir la variable resultado.
Recuerdo esto solo es para sumar o restar , si quieres hacer multiplicaciones y divisiones tienes que complicarlo mas.Yo optaría por ir haciéndolo poco a poco y después ya le añades más operaciones , prioridad con paréntesis etc.. Puede haber algun fallo , si és así hazlo saber. Un saludo
ah pues no lo sabia la verdad , bueno supongo que lo de ser novato me pasa factura, y ¿cual se utiliza en vez de esa ? EDITO: Gracias , la que se utiliza si no me indicas otra vez lo contrario es strtol.
« Última modificación: 2 Abril 2012, 01:22 am por avesudra »
ah pues no lo sabia la verdad , bueno supongo que lo de ser novato me pasa factura, y ¿cual se utiliza en vez de esa ? EDITO: Gracias , la que se utiliza si no me indicas otra vez lo contrario es strtol.
No, si yo de conocimientos no voy sobrado ni mucho menos, pero son cosas que se te quedan de haberlo leido en algun sitio. Y si, efectivamente, la nueva, o la mas adecuada, funcion es strtol.
Depende a que grado de dificultad quieres hacer que realize operaciones, dependera como lo haras. Por ejemplo.. tenes pensado que haga cosas como esta:
5 + 2 - 1 * 3 + 6
o como esta:
(7+3)*4-1(4+5(2*3+1)+6)+10
¿?
@EDU: *A eso se llama conversión a cola de prioridad y se ocupa en la conversion de ifija a postfija
Eso es indiferente con lo que ya le dije... inclusive Sen(2*(4^(tan(4-5/5)*sqr(4+5*x)))) convirtiendo a una estructura postfija lo resuelve fácilmente con una evaluación muy sutil y limpia...
Aquí te dejo el algoritmo MUY CLARO (LEE, ENTIENDE, COMPRE, TRADUCE Y ADAPTA)... te recomiendo tener a la mano lapiz y papel y si no le entiendes revisa algunos videos en youtube sobre el tema (para que veas el proceso).
Los códigos de la 2da liga están en Delphi si no mal recuerdo...
mírate este video... para que te quede mas claro...
(La cagaron con la música en ingles... esta mejor la original.) Ademas de in-fija a postfija te muestra como evaluar la postfija... Así que no hay pre-testo ahora
ah pues no lo sabia la verdad , bueno supongo que lo de ser novato me pasa factura, y ¿cual se utiliza en vez de esa ? EDITO: Gracias , la que se utiliza si no me indicas otra vez lo contrario es strtol.