[C con Clase] operaciones combinadas en c

Gilberto Cuba Ricardo gilbert en hlg.rimed.cu
Mar Mayo 11 17:38:48 CEST 2010


Hola Arturo,

Hace un tiempo hice un programa que se dedicaba a realizar cálculos
internamente de este tipo, con una expresión cualquiera que se le
antojara al usuario, para que entonces se graficara la función
correspondiente en la pantalla y que con parámetros que el podía
fijar, podía variarlo desde una barra de desplazamiento y veía el
cambio que se producía sobre el gráfico de dicha función.

La idea que yo utilicé en ese entonces fue convertir la expresión que
me daba el usuario (notación infija, que es lo que nosotros utilizamos a
diarío) a una expresión en notación postfija. El hecho es que con la
notación infija (la que utilizamos a diarío) es difícil determinar la
precedencia de operadores, -o por lo menos me pasaba a mí en aquel
entonces con Delphi-, además como iba a estar evaluando constantemente
la expresión, con la notación postfija no tendría ningún inconveniente
en la precedencia de los operadores, porque ella queda organizada de
tal forma que tiene en cuenta si la multiplicación o los paréntesis
van primero o cuando, y si la potenciación y cosas así, etc.

En tu caso, realmente no sé si lo que quieras sea evaluar la expresión
numérica solamente o realizar otra cosa. De todas formas te sirve
convertirlo a postfija y luego evaluarlo. Lo que me parece que sería
engorroso porque solamente vas a evaluar una vez y podría demorarse un
poco el hecho de convertirla a postfija y luego evaluarlo.

Otra alternativa es utilizar la librería spirit de boost, que está
fuerte en eso y de seguro sale rápido, pero es como tirarle con un cañón
a una hormiga.

Explica un poco más para poder ayudarte o tal vez darte algo de código
de aquel programa, sólo que tendrías que traducirlo de Delphi para
C/C++, o esperar que te pueda dedicar un tiempecito. Aunque no sé si
otra persona tiene otra idea genial o tiene documentación de las
notaciones postfija, prefija e infija, porque yo la perdí toda hace
tiempo :(

Aquí básicamente los token, son números (enteros y reales),
operadores (+, -, *, /, ^) y los paréntesis que yo los analizo como si
fuera una subexpresión de la expresión general, es decir, que lo mismo
que yo le aplico a la expresión que me da el usuario, cuando me topo
con un paréntesis, se lo aplico también a la cadena que está
contenida entre los paréntesis.

Con los ejemplos que pones las notaciones postfijas serían:

> 5+5*6(6+8)

5,5,6,*,6,8,+,*,+

> 6+8*6-8^(5*8)/3

6,8,6,*,+,8,5,8,*,^,3,/,-
(este tengo mis dudas ahora, porque lo hice a pulmón y rápido :))

> 1+7

1,7,+

Como ves primero van los operandos y luego los operadores, que los
puedes ir poniendo en una pila e ir recorriéndolo; te dejo ahí y
ya me dirás para seguir contándote.


-- 
Salu2,
 Gilbert





Más información sobre la lista de distribución Cconclase