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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Operaciones matemáticas con números en cadena
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Operaciones matemáticas con números en cadena  (Leído 14,682 veces)
petrusqui

Desconectado Desconectado

Mensajes: 16



Ver Perfil WWW
Operaciones matemáticas con números en cadena
« en: 1 Abril 2012, 18:09 pm »

Buenas,

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...

Gracias de antemano.


Saludos


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Operaciones matemáticas con números en cadena
« Respuesta #1 en: 1 Abril 2012, 18:49 pm »

Usa una conversión de estructuras infija a postija, y después EVALÚA la estructura postfija!¡.

Dulces Lunas!¡.


En línea

The Dark Shadow is my passion.
$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: Operaciones matemáticas con números en cadena
« Respuesta #2 en: 1 Abril 2012, 19:04 pm »

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

¿?
En línea

petrusqui

Desconectado Desconectado

Mensajes: 16



Ver Perfil WWW
Re: Operaciones matemáticas con números en cadena
« Respuesta #3 en: 1 Abril 2012, 19:10 pm »

Usa una conversión de estructuras infija a postija, y después EVALÚA la estructura postfija!¡.

Dulces Lunas!¡.

Ui, todavia no he llegado a este nivel, cuando lea un poco más me pongo seguro en estudiar las diferentes estructuras :)

Gracias por la respuesta.

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

¿?

La primera que no hace mucho que empece en C/C++ :P

Gracias por la respuesta :D
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Operaciones matemáticas con números en cadena
« Respuesta #4 en: 1 Abril 2012, 19:38 pm »

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.
Código
  1. char *substring(size_t start, size_t stop, const char *src, char *dst, size_t size)
  2. {
  3.   int count = stop - start;
  4.   if ( count >= --size )
  5.   {
  6.      count = size;
  7.   }
  8.   sprintf(dst, "%.*s", count, src + start);
  9.   return dst;
  10. }
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 :)
En línea

Regístrate en
david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Operaciones matemáticas con números en cadena
« Respuesta #5 en: 2 Abril 2012, 00:20 am »

mirate mi programa, te puede servir por esas casualidades XD

http://foro.elhacker.net/programacion_cc/notacion_polaca_inversa-t358012.0.html

En línea

farresito


Desconectado Desconectado

Mensajes: 302



Ver Perfil
Re: Operaciones matemáticas con números en cadena
« Respuesta #6 en: 2 Abril 2012, 00:38 am »

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.
Código
  1. char *substring(size_t start, size_t stop, const char *src, char *dst, size_t size)
  2. {
  3.   int count = stop - start;
  4.   if ( count >= --size )
  5.   {
  6.      count = size;
  7.   }
  8.   sprintf(dst, "%.*s", count, src + start);
  9.   return dst;
  10. }
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 :)
La funcion atoi esta considerada obsoleta.
En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Operaciones matemáticas con números en cadena
« Respuesta #7 en: 2 Abril 2012, 01:12 am »

La funcion atoi esta considerada obsoleta.
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 » En línea

Regístrate en
farresito


Desconectado Desconectado

Mensajes: 302



Ver Perfil
Re: Operaciones matemáticas con números en cadena
« Respuesta #8 en: 2 Abril 2012, 01:43 am »

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.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Operaciones matemáticas con números en cadena
« Respuesta #9 en: 2 Abril 2012, 07:46 am »

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).

http://www.infor.uva.es/~cvaca/asigs/AlgInfPost.htm
tambien lee esto...
http://quegrande.org/apuntes/EI/1/EDI/teoria/06-07/tad_-_pila_-_expresiones_aritmeticas.pdf

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.

usa sscanf();

por ejemplo:

Código
  1.    float Variablefloat = 0.0f;
  2.    sscanf("10.510", "%f", &Variablefloat);
  3.    printf("%f\n", Variablefloat);
  4.  

aunque es mejor strol() y/o strod

Dulces Lunas!¡.
« Última modificación: 2 Abril 2012, 13:47 pm por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
localizar números primos. [bash]
Scripting
Dr Cray-- 3 8,222 Último mensaje 13 Febrero 2012, 03:50 am
por Selecta503
generar números aleatorios en dev c « 1 2 »
Programación C/C++
Quake-man 10 13,544 Último mensaje 26 Agosto 2011, 22:54 pm
por Quake-man
Programación Python_Extraer solo números de una cadena de texto « 1 2 »
Scripting
Tuplado 11 16,774 Último mensaje 4 Junio 2012, 02:51 am
por .:WindHack:.
¿Son diferentes las cadenas estáticas en C con respecto a C++?
Programación C/C++
theluigy13etv 6 3,522 Último mensaje 1 Octubre 2012, 08:20 am
por BlackZeroX
Dilema matemático con porcentajes
Programación General
WHK 5 3,289 Último mensaje 4 Julio 2013, 00:03 am
por WHK
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines