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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Transformar una entrada de palabras en entrada matematica
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Transformar una entrada de palabras en entrada matematica  (Leído 2,907 veces)
Milagrosh25

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Transformar una entrada de palabras en entrada matematica
« en: 16 Septiembre 2017, 20:00 pm »

Buenas Tardes Chicos (as)

Necesito crear un programa que sea capaz de realizar una operación matemática con cualquier función que se le ingrese por teclado.
La verdad mi profesor dice que es posible transformar de texto a una función trigonométrica pero no encuentro la forma.

La otra opción que me han dado es, declarar una variable de tipo char y que esa almacene la función y a si poderla usar, siempre y cuando se ingrese la función de forma que el lenguaje lo interprete. Ejemplo, seno(x) --> sin(x)
El problema es que necesito evaluar es función y no se de que forma puede hacerse.

Cualquier consejo que puedan darme seria de mucha ayuda


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Transformar una entrada de palabras en entrada matematica
« Respuesta #1 en: 16 Septiembre 2017, 20:14 pm »

directamente no puedes evaluar la entrada, lo normal en este caso es hacer un "analizador lexico" lees el input en busca de los operandos y vas almacenandolos para operar con ellos... recomiendo buscar ejemplos, hay muchos ejemplos de calculadoras así


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

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Transformar una entrada de palabras en entrada matematica
« Respuesta #2 en: 16 Septiembre 2017, 23:35 pm »

Muchas gracias por tu opinión, buscare esos ejemplos!
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: Transformar una entrada de palabras en entrada matematica
« Respuesta #3 en: 16 Septiembre 2017, 23:41 pm »

Hay algunos lenguajes que sí permiten hacer esa evaluación, por ejemplo VBScript, tienen un método Eval(string), que puede (intentar) procesar un texto entrado por el usuario... Esto es posible, porque va interpretando, no requiere compilación...

Como casi ningún lenguaje posee esa funcionalidad, en efecto tienes que hacer como te dice Engel, sin necesidad de ir tan lejos, te basta 'crear tu pequeño lenguaje', es suficiente con dos expresiones ( te recomiendo ojear la "notación BNF", te dará las ideas necesarias para poder encajarlo todo de una forma sencilla y asimilable):
------> variable Operador variable
----------------> Operador variable

Te defino todas las producciones mínimas que podría requerir 'tu lenguaje':
-------------------------------------------------------------------------------
1 expresion = numero + spc + operador1 + spc + numero | operador2 + spc + numero
2 numero = 0-9 + [numero]
3 spc = espacio + [spc] |tabulador + [spc]
4 operador1 = " + "|" - "|" * "|" / "|" ^ "|" sqr "|" or "|" and "|" xor "|" mod "
5 operador2 = " not "|" sin "|" cos "|" round "|" int "
======================================

- El simbolo "+" indica que concatenación de producciones (de partes, que tras una parte va obligadamente (salvo que sea opcional) otra parte).
- Los símbolos opcionales, tenemos 3:
------->  "x|y|z" indican que se elige uno solo entre los posibles elementos delimitados por los separadores.
------->  "-" es un separador de un rango, por ejemplo A-E, equivale a: A,B,C,D,E,F
-------> "," es un separador de lista, por ejemplo: "Set", "Get", "Do"
- Los símbolos "[x,y,z] indican que el contenido interior entre corchetes es opcional.
- Los literales (que en la expresión deben escribirse tal cual), en la descripción van encerrados entre comillas (para distinguirlos de otra producción).
     Ojo los símbolos "" + "", "" - "", (en operador1) son literales.


Llevándolo un poco más lejos puede hacerse algo más complejo, aparte de añadir más operadores (que es trivial), puedes añadir la admisión de números no solo en la base decimal y enteros, tambien  binario, hexadecimal, octal, etc... ...y/o decimales (coma flotante)
Admitiendo más posibilidades con los números
----------------------------------------------------------------------
2 numero = numeroDec | numeroBin | numeroHex | numeroOct  // sobrescribimos lo que es un número.
6 digitoBin = 0|1
7 digitoOct = digitoBin | [2-7]
8 digitoDec = digitoOct | [8-9]
9 digitoHex = digitoDec | [A-F]

10 digitosBin = digitoBin + [digitosBin]
11 digitosOct = digitoOct + [digitosOct]
12 digitosDec = digitoDec + [digitosDec]
13 digitosHex = digitoHex + [digitosHex]

16 numeroBin = "Bx" + digitosBin
17 numeroOct = "Ox" + digitosOct
18 numeroDec = digitosDec
19 numeroHex = "Hx" + digitosHex
Los números con decimales, lo dejo a tu esfuerzo...

Y por supuesto admitir variables, además de números...
-------------------------------------------------------------------------
0 valor = variable | numero
1 expresion = valor + spc + operador1 + spc + valor | operador2 + spc + valor // esta producción se modifica
14 variable = identificador + " = " + expresion
15 identificador = A-Z + [identificador] | A-Z + [0-9] + [identificador]
« Última modificación: 17 Septiembre 2017, 00:14 am por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda para simular un dispositivo de entrada o periferico de entrada
Programación C/C++
bardackx 0 2,339 Último mensaje 9 Septiembre 2010, 23:23 pm
por bardackx
transformar y cambiar las palabras de un archivo.txt con java
Ejercicios
roby79 0 6,355 Último mensaje 11 Mayo 2012, 04:15 am
por roby79
entrada avg
Windows
pABL012 1 1,572 Último mensaje 13 Septiembre 2013, 14:33 pm
por vangodp
Transformar el monto numérico del cheque a palabras [C].
Programación C/C++
DanielPy 2 2,307 Último mensaje 18 Enero 2015, 12:41 pm
por DanielPy
No lee bien los datos de entrada
.NET (C#, VB.NET, ASP)
Meta 1 2,726 Último mensaje 25 Febrero 2021, 12:14 pm
por Meta
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines