Cómo escribir expresiones aritméticas en notación de programación
Una expresión es una instrucción compuesta de operandos y operadores, y que tiene como objetivo obtener un valor para asignarlo a una variable.
El tipo de resultado de una expresión puede ser numérico, booleano o texto. (Puedes leer aquí más información sobre los tipos de datos)
Un ejemplo de expresión es una ecuación matemática. Pero el concepto de expresión va más allá, porque el resultado de las ecuaciones y funciones matemáticas sólo son valores numéricos, ya sean enteros o decimales. En cambio, el resultado de una expresión puede ser de cualquiera de los tipos de datos que se establecen dentro de la programación.
Por ejemplo:
- La siguiente expresión es una ecuación matemática:
Como te puedes imaginar, el valor de w será un valor numérico, ya sea entero o de punto flotante.
- En cambio, en la siguiente expresión:
El resultado no es un valor numérico, sino un valor lógico del tipo falso/verdadero (true/false).
En esta entrada me enfocaré en las expresiones ariméticas.
Operandos.
Se puede decir que los operandos son las entradas de un operador. En las figuras 1, 2 y 3 se representan a los operandos como entradas de los distintos tipos de operadores que existen en programación.

Figura 1: Entradas y salidas de una operación aritmética

Figura 2.Entradas y salidas de una operación relacional

Figura 3. Entradas y salidas de una operación lógica
Para más información sobre los operadores, consulta las siguientes entradas:
Expresiones y jerarquía de operadores (Parte 1: Operadores aritméticos)
Expresiones y jerarquía de operadores (Parte 2: Operadores Relacionales)
Expresiones y jerarquía de operadores (Parte 3: Operadores lógicos o booleanos)
Los operandos pueden ser:
- Variables: como x, y, z; y deben ser declaradas antes de su uso.
- Constantes: valores que no pueden cambiar durante la ejecución de un programa y que a su vez pueden ser:
- Constantes numéricas: o literales, y que son: los números (1, 13.4, -52.3), las cadenas de texto(“Hola”), los caracteres (‘r’) y los valores true y false para los datos de tipo lógico.
- Constantes simbólicas: identificadores a los que se le asigna un valor al inicio del programa.
Sentencias de asignación.
Una sentencia en lenguaje Java representa una acción o secuencia de acciones y debe terminar con ; (punto y coma).
En una sentencia de asignación debe existir el operador de asignación (=) y tiene como objetivo darle valor a una variable. Pueden ser tan simples como:
x = 3;
O tan complejas como:
x = 3 *z*z-(12+x)/(5-y);
Las sentencias de asignación son primordiales por varias razones:
- En un programa en Java, todas las variables deben tener un valor inicial.
- Uno de los principales usos de un programa es el de calcular resultados de ecuaciones matemáticas.
Pero al escribir sentencias de asignación, frecuentemente los programadores nóveles olvidan o desconocen ciertas reglas fundamentales que deben ser tomadas en cuenta para la creación exitosa de programas:
- Una vez más: una expresión no es igual a una ecuación matemática. Tampoco una sentencia de asignación es igual a una ecuación matemática.
- Una sentencia de asignación no es lo mismo que una igualdad, ya que el operador de asignación (=) es diferente al operador de igualdad (==).
- Las constantes numéricas siempre deben iniciar con número. Por ejemplo, en matemáticas da lo mismo escribir 0.5 que .5 pero no en programación. El valor .5 no será reconocido como una constante simbólica o literal, por lo que generará error de sintaxis.
- El único operador de multiplicación que tiene el lenguaje Java es *. Pero en matemáticas es muy común que suceda lo siguiente:
- Que para multiplicar simplemente se escriban “pegados” las variables y literales como en 3x, que en realidad indica que 3 debe multiplicarse por el valor de x.
- Que para multiplicar se usen los paréntesis, por ejemplo: y = (x-2) (x+2). Sin embargo, en la mayoría de lenguajes de programación, los paréntesis no indican agrupación ni multiplicación, sólo alteración de la precedencia de operadores, por lo que este tipo de ecuaciones deben ser traducidas así: y = (x-2) * (x+2);
- Existe algo que se llama precedencia de operadores y que pocas veces utilizamos al resolver ecuaciones matemáticas. Los lenguajes de programación definen la forma y el orden en que serán evaluados cada uno de los operadores en una sentencia de asignación. Con la finalidad de que obtengamos el mismo resultado con el programa que al realizarla manualmente, debemos conocer y aplicar adecuadamente la jerarquía de operadores.
- Debemos limitarnos al conjunto de operadores del lenguaje de programación. Las matemáticas tienen un conjunto muy amplio y variado de operadores, que al compararlo con el conjunto de operadores de un lenguaje es mucho más pequeño y “básico”. Entonces operaciones como la radicación y la potenciación, entre otras, deben ser traducidas adecuadamente, o en muchas ocasiones usar una función propia del lenguaje creada para realizar esta operación. En pocas palabras, para traducir el operador matemático para la radicación: no puede usarse el símbolo ^ en el lenguaje Java.
- El operador = en matemáticas expresa una igualdad, en Java, expresa una asignación. Si queremos comparar un valor con otro, debemos usar el operador apropiado, que en Java es ==. El no utilizar apropiadamente los operadores generará un error de sintaxis y en ocasiones hasta un error de lógica que puede ser difícil de resolver, en especial para los programadores nóveles.
Ejemplo # 1: Traduciendo expresiones aritméticas en notación matemática a notación de programación.
Veamos ahora un ejemplo. Considera la siguiente expresión, escrita en notación matemática:
Podemos observar que la expresión se compone de dos términos, separados por el operador de resta. (Casi siempre los operadores de suma y resta establecen los límites de los términos).

Figura 4. Términos de la ecuación 1
Traducción del primer término

Figura 5. El primer término
- En el numerador del primer término (observa la figura 5), 3x es la notación matemática para expresar que 3 debe multiplicarse por x, por lo que en programación debemos colocar explícitamente el operador de multiplicación de esta forma: 3*x
- En el denominador del primer término, existe una operación: una multiplicación entre 2 y la variable w, por lo que también debe colocarse explícitamente el operador *: 2*w
- El término 1 puede quedar escrito de esta forma: 3*x/2*w. Pero considerando la jerarquía de operadores, y la operación inicial en notación matemática, se estaría generando una ecuación diferente. Vamos a suponer que x=2 y w=5, por lo que, de acuerdo a la precedencia, el orden de la aplicación de los operadores sería:
- 3*x: que sería 3*2 lo que nos daría 6.
- 6/2, dado que el siguiente operador encontrado es la división y recordemos que la multiplicación y la división tienen la misma precedencia de operadores. Esto genera 3
- Por último, se efectuaría 3 * w, siendo esta operación 3 * 5 igual a 15.
- Sin embargo, la expresión original pide que el producto de 3x sea dividido entre el producto de 2w y no sólo entre 2, situación que está sucediendo.
- Para corregir la situación, el término 1 se debe traducir: 3*x/(2*w), para que de esa forma la multiplicación de 2 por w se efectúe antes de la división.
Traducción del segundo término
- En el numerador del segundo término nos encontramos con una operación de potenciación. Este tipo de operaciones deberán realizarse con el llamado a una función propia del lenguaje de programación que la ejecute. Pero en este caso, sólo se trata de elevar al cuadrado el valor de x, que matemáticamente equivale a multiplicar x por x, por lo que será traducida así: 8*x*x
- También nos encontramos con una operación de resta, por lo que es importante recordar que la tabla de jerarquía de operadores, la resta tiene una menor jerarquía que la multiplicación y la división.
- Esto implica que debemos asegurarnos de que la resta se realice primero, antes de la división, y esto sólo será posible si se colocan paréntesis para alterar la precedencia de los operadores, de la siguiente forma: (8*x*x-w)/3.
- Nota que traducir de esta forma: 8*x*x-w/3, hubiera generado la resta entre el producto de 8*x*x y la división entre w y 3, y una vez más, esto no es lo que se pedía en la ecuación original. Por eso colocamos el paréntesis en el denominador, para forzar a que la resta de 8*x*x menos w se realice primero, antes de dividir entre 3.
La ecuación completa queda de la siguiente forma:
z = 3*x/(2*w) - (8*x*x-w)/3;
Ejemplo # 2: Traduciendo expresiones aritméticas en notación matemática a notación de programación.
Para el segundo ejemplo, considera la siguiente expresión, escrita en notación matemática:
La expresión se compone de dos términos, delimitados por los paréntesis. Recordemos que en matemáticas, los paréntesis, se usan para multiplicar y agrupar término. Por eso en el ejemplo anterior, mencioné que “casi siempre” los operadores de suma y resta establecen los límites de los términos, pero existen casos como el de este ejemplo donde los paréntesis hacen el papel de delimitadores de términos. Mucho cuidado, porque una vez más repetiré que en programación, en expresiones aritmético-lógicas, la única función de los paréntesis es la de alterar la jerarquía de operadores
Traducción del primer término
El primer término es muy sencillo y se compone de una multiplicación. Ya se ha hablado la forma de traducir un número elevado al cuadrado, por lo que la traducción a notación de programación no tiene mayores complicaciones y es la siguiente: 2*x*x
Traducción del segundo término
- El segundo término está encerrado entre paréntesis y a su vez se subdivide en dos términos, delimitados por el operador de suma.
- Se puede observar que en el primer subtérmino, el numerador contiene una operación de multiplicación (8x). Esta parte se traduce: 8*x, y dado que el operador * tiene un alto nivel de precedencia, no requerimos paréntesis en el numerador.
- En el denominador del primer subtérmino, sólo se encuentra una variable, por lo que el primer subtérmino completo se traduce así: 8*x/w
- Ahora en el numerador del segundo término nos encontramos con una operación de resta. La resta, así como la suma, tiene menor precedencia que la división, por lo que sí será necesario agregar paréntesis para obligar a que primero se ejecute la resta y después la división, por lo que la traducción es la siguiente: (9-x)
- En el denominador del segundo subtérmino se encuentra una operación. En el caso de los denominadores, siempre que encuentres operaciones, sin importar el tipo de operación que sea (suma, resta, multiplicación o potenciación) siempre debe encerrarse entre paréntesis para asegurarnos que la división se realice entre el término completo y no sólo entre una parte del término. Esto genera: (2*x*x)
- De esta forma, el segundo término completo queda traducido así: 8*x/w+(9-x)/(2*x*x)
- Por último, por regla general, cada vez que en la expresión original existan paréntesis, los respetaremos en la traducción, por lo que la traducción de la expresión completa es la siguiente:
Z = 2*x*x*(8*x/w+(9-x)/(2*x*x));
Reglas generales
De estos ejemplos podemos sacar algunas reglas que te pueden guiar utilizar mejor los paréntesis, y se pueden apreciar en la figura

Figura 6. Reglas para el uso de paréntesis
Espero que este artículo te haya sido de utilidad, y si tienes dudas, puedo agrandártelas si me escribes un comentario. No olvides compartir con los amigos a los que podría interesarles esta información. ¡Hasta el próximo post!
Muy buena informacion
Dania Garcia Montiel 1° A TIDSM