Autor
|
Tema: Transformar una entrada de palabras en entrada matematica (Leído 3,274 veces)
|
Milagrosh25
Desconectado
Mensajes: 2
|
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
|
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
Mensajes: 2
|
Muchas gracias por tu opinión, buscare esos ejemplos!
|
|
|
En línea
|
|
|
|
Serapis
|
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
|
|
|
|
|
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,659
|
9 Septiembre 2010, 23:23 pm
por bardackx
|
|
|
transformar y cambiar las palabras de un archivo.txt con java
Ejercicios
|
roby79
|
0
|
6,527
|
11 Mayo 2012, 04:15 am
por roby79
|
|
|
entrada avg
Windows
|
pABL012
|
1
|
1,860
|
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,564
|
18 Enero 2015, 12:41 pm
por DanielPy
|
|
|
No lee bien los datos de entrada
.NET (C#, VB.NET, ASP)
|
Meta
|
1
|
3,151
|
25 Febrero 2021, 12:14 pm
por Meta
|
|