12 April 2014: The OpenOffice Wiki is not, and never was, affected by the heartbleed bug. Users' passwords are safe and wiki users do not need take any actions.

Operadores

From Apache OpenOffice Wiki
Jump to: navigation, search


Editing.png Esta página está en estado borrador.

OOo Basic soporta los siguiente operadores aritméticos, de relación y lógicos.

Operadores aritméticos

“ ^ ” Exponenciación (aritmético)

ES StarBasic Operadores.01.png

Se usa para elevar un número llamado base a otro llamado exponente. El número resultante del siguiente ejemplo, tal vez te resulte familiar.


Option Explicit
Sub Potencias1()
Dim iNum1 As Integer
Dim iNum2 As Integer
Dim iResul As Integer
iNum1 = 2 'Base
iNum2 = 10 'Exponente
iResul = iNum1 ^ iNum2
MsgBox Str(iResul)
End Sub


En general con todos los operadores, debes de tener la precaución de prever lo mejor posible, que el resultado de la operación no exceda el “tamaño” de la variable destino, por ejemplo, la siguiente operación te tiene que dar un error de desbordamiento, es decir, el resultado no cabe en la variable iResul declarada como entera (Integer).


Sub Potencias2()
Dim iNum1 As Integer
Dim iNum2 As Integer
Dim iResul As Integer
iNum1 = 3 'Base
iNum2 = 10 'Exponente
iResul = iNum1 ^ iNum2
MsgBox Str(iResul)
End Sub


ES StarBasic Operadores.04.png


La solución es cambiar la variable iResul por una más grande, en este caso Long, pero según tus necesidades podría ser incluso más grande.


Dim iResul As Long


La base y el exponente no tienen por que ser enteros, observa el cambio de declaración de las variables.


Sub Potencias3()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Double
iNum1 = 2.53 'Base
iNum2 = 5.54 'Exponente
iResul = iNum1 ^ iNum2
MsgBox Str(iResul)
End Sub


Tampoco tienen por que ser positivos, cuando la base es negativa, el signo de la potencia lo determinará el exponente, si este es par será positiva, si es impar será negativa, de acuerdo a las leyes de los signos que ya conoces desde la escuela elemental, como se comprueba en los siguiente ejemplos.


Sub Potencias4()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Double
iNum1 = -2 'Base
iNum2 = 4 'Exponente
iResul = iNum1 ^ iNum2
MsgBox Str(iResul) 'Resultado positivo
iNum1 = -2 'Base
iNum2 = 5 'Exponente
iResul = iNum1 ^ iNum2
MsgBox Str(iResul) 'Resultado negativo
End Sub


En el caso de que el exponente sea negativo, lo que hace el lenguaje, como lo dictan las matemáticas, invierte la base para que el exponente sea positivo.

ES StarBasic Operadores.02.png


Sub Potencias5()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Double<math>{2}^{-3}=\frac{1}{{2}^{3}}=\frac{1}{8}=0.125</math>
iNum1 = 2 'Base
iNum2 = -3 'Exponente
iResul = iNum1 ^ iNum2
MsgBox Str(iResul)
End Sub


“ * ” Multiplicación (aritmético)

La multiplicación es la operación aritmética que nos permite hacer una suma abreviada, al resultado se le llama producto y los números multiplicados factores.


Option Explicit
Sub Multiplicacion1()
Dim iNum1 As Integer
Dim iNum2 As Integer
Dim iResul As Integer
'Factores
iNum1 = 365
iNum2 = 34
iResul = iNum1 * iNum2
MsgBox Str(iResul)
End Sub


Recuerda que la variable donde asignes el resultado, debe ser lo suficientemente grande para contenerlo, que puedes multiplicar valores enteros y no enteros, positivos y negativos, en este caso, las leyes de los signos aplican correctamente.


Option Explicit
Sub Multiplicacion2()
Dim iNum1 As Integer
Dim iNum2 As Integer
Dim iResul As Integer
iNum1 = 11
iNum2 = 56
iResul = iNum1 * iNum2
MsgBox Str(iResul)
iNum1 = -11
iNum2 = 56
iResul = iNum1 * iNum2
MsgBox Str(iResul)
iNum1 = 11
iNum2 = -56
iResul = iNum1 * iNum2
MsgBox Str(iResul)
iNum1 = -11
iNum2 = -56
iResul = iNum1 * iNum2
MsgBox Str(iResul)
End Sub


Recuerda que en las multiplicaciones el orden de los factores no altera el producto (propiedad conmutativa).


Sub Multiplicacion3()
Dim iNum1 As Integer
Dim iNum2 As Integer
Dim iResul As Long
iNum1 = 12345
iNum2 = 18
iResul = iNum1 * iNum2
MsgBox Str(iResul)
iNum1 = 18
iNum2 = 12345
iResul = iNum1 * iNum2
MsgBox Str(iResul)
End Sub


“ / ” División (aritmético)

Operación aritmética para saber cuantas veces cabe un número en otro, es, podría decirse, una resta abreviada. El número a dividir se llama “dividendo”, al otro “divisor”, al resultado entero se le llama “cociente” y si no es exacta la división a lo que resta se le llama “residuo”. Es la operación inversa a la multiplicación. Puedes dividir numero enteros y no enteros, negativos y positivos, las leyes de los signos aplican de la misma forma que en la multiplicación.


Option Explicit
Sub Division1()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Double
iNum1 = 123456790 'Dividendo
iNum2 = 123 'Divisor
iResul = iNum1 / iNum2
MsgBox Str(iResul)
End Sub
Sub Division2()
Dim iNum1 As Integer
Dim iNum2 As Integer
Dim iResul As Integer
iNum1 = 589 'Dividendo
iNum2 = -25 'Divisor
iResul = iNum1 / iNum2
MsgBox Str(iResul)
End Sub


En el caso de la división, el orden de los operandos si importa, es muy diferente que un número sea dividendo que divisor como podemos verlo en el siguiente ejemplo.


Sub Division3()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Double
iNum1 = 98765
iNum2 = 321
iResul = iNum1 / iNum2
MsgBox Str(iResul)
iNum1 = 321
iNum2 = 98765
iResul = iNum1 / iNum2
MsgBox Str(iResul)
End Sub


“ \ ” División entera (aritmético)

Con este operador obtenemos solo la parte entera de una división.


Option Explicit
Sub Division_Entera1()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 100
iNum2 = 15
iResul = iNum1 / iNum2
MsgBox Str(iResul)
'Devuelve solo la parte entera
iResul = iNum1 \ iNum2
MsgBox Str(iResul)
End Sub


En algunos casos, cuando el valor decimal es muy cercano al siguiente entero, este operador te devuelve el siguiente entero, como en.


Sub Division_Entera2()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 100
iNum2 = 25.1
iResul = iNum1 / iNum2
MsgBox Str(iResul)
iResul = iNum1 \ iNum2
MsgBox Str(iResul)
End Sub


Si quieres asegurarte que “siempre” te regrese “solo” la parte entera, mejor usa la función Int(valor) que te devuelve solo la parte entera del valor pasado, como te muestro aquí.


Sub Division_Entera3()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 100
iNum2 = 25.1
iResul = iNum1 / iNum2
MsgBox Str(iResul)
iResul = iNum1 \ iNum2
MsgBox Str(iResul)
iResul = '''Int'''( iNum1 / iNum2 )
MsgBox Str(iResul)
End Sub


“Mod” Resto de una división entera (aritmético)

ES StarBasic Operadores.03.png

Este operador nos devuelve el residuo entero de una división entera.


Option Explicit
[[Image:Pic_001_odt2pml.png]]Sub Resto_Division1()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 100
iNum2 = 15
iResul = iNum1 Mod iNum2
MsgBox Str(iResul)
End Sub


El siguiente ejemplo hace uso de los operadores “Mod” y “\” (división entera) para convertir un número decimal en binario.


Sub Decimal_Binario()
Dim iDec As Integer
Dim sBin As String
Dim iBase As Integer
'Número entero a convertir
iDec = 100
'El sistema binario es base 2
iBase = 2
'Hasta que el número sea menor que la base
Do Until iDec < iBase
'Obtenemos el residuo y lo vamos concatenando
sBin = (iDec '''Mod''' iBase) & sBin
'Obtenemos la división entera y reasignamos el numero
'si no haces esto, te quedaras en un ciclo infinito
iDec = iDec '''\''' iBase
Loop
'Por ultimo concatenamos el ultimo cociente
sBin = iDec & sBin
'Mostramos el valor en binario
MsgBox sBin
End Sub


“ + ” Suma (aritmético)

La adición, es la operación aritmética que nos permite combinar dos cantidades para obtener una sola. A dichas cantidades se les llama sumandos y al resultado suma.


Option Explicit
Sub Sumas1()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 159.25
iNum2 = 489.55
iResul = iNum1 + iNum2
MsgBox Str( iResul )
End Sub


Por su propiedad conmutativa, el orden de los sumandos no altera la suma.


Sub Sumas2()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 1974
iNum2 = 34
iResul = iNum1 + iNum2
MsgBox Str( iResul )
iNum1 = 34
iNum2 = 1974
iResul = iNum1 + iNum2
MsgBox Str( iResul )
End Sub


Por leyes de los signos, la suma tendrá el signo del mayor sumando.


Sub Sumas3()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 4268
iNum2 = -258
iResul = iNum1 + iNum2
MsgBox Str( iResul )
iNum1 = -5689
iNum2 = 197
iResul = iNum1 + iNum2
MsgBox Str( iResul )
End Sub


“ - ” Resta (aritmético)

La sustracción o resta es la operación aritmética que nos permite conocer la diferencia entre dos números, al primero se le llama minuendo y al segundo sustraendo. Es la operación inversa de la suma.


Option Explicit
Sub Restas1()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 5000 'Minuendo
iNum2 = 2125 'Sustraendo
iResul = iNum1 - iNum2
MsgBox Str( iResul )
End Sub


La resta no tiene propiedad conmutativa, es decir, si intercambias el minuendo y el sustraendo, no te dará el mismo resultado, pero fíjate que curioso resultado.


Sub Restas2()
Dim iNum1 As Single
Dim iNum2 As Single
Dim iResul As Single
iNum1 = 562
iNum2 = 956
iResul = iNum1 - iNum2
MsgBox Str( iResul )
iNum1 = 956
iNum2 = 562
iResul = iNum1 - iNum2
MsgBox Str( iResul )
End Sub


Operadores de relación

Estos operadores nos permiten comparar el valor de dos expresiones o términos, siempre devuelven un valor verdadero (True) o falso (False), es decir, un valor booleano.


Option Explicit
Sub Operadores_Relacion()
Dim bResul As Boolean
Dim iNum1 As Integer
Dim iNum2 As Integer
iNum1 = 99
iNum2 = 19
bResul = iNum1 '''=''' iNum2
MsgBox "Son iguales? " & bResul
bResul = iNum1 '''<>''' iNum2
MsgBox "Son distintos? " & bResul
bResul = iNum1 '''<''' iNum2
MsgBox "Menor que? " & bResul
bResul = iNum1 '''>''' iNum2
MsgBox "Mayor que? " & bResul
bResul = iNum1 '''<=''' iNum2
MsgBox "Menor o igual? " & bResul
bResul = iNum1 '''>=''' iNum2
MsgBox "Mayor o igual? " & bResul
End Sub


Ten cuidado de no confundir los signos de igual (=), el primero de izquierda a derecha es el signo igual usado como asignación, el resultado de la expresión a la derecha del signo se asigna a la variable a la izquierda del signo, el segundo signo igual (en negritas y rojo) es usado como operador de relación entre dos términos, este ejemplo es más claro pues esta entre paréntesis.


bResul = ( iNum1 '''=''' iNum2 )



Operadores lógicos

“ Not ” Negación (lógico)

Cambia el valor de la expresión de falso a verdadero y viceversa. Se aplica a solo un operador.


Option Explicit
Sub Negacion()
Dim bValor As Boolean
'Valor original Verdadero
bValor = True
Msgbox bValor
'Le aplicamos el operador
bValor = Not bValor
Msgbox bValor
'Valor original Falso
bValor = False
Msgbox bValor
'Le aplicamos el operador
bValor = Not bValor
Msgbox bValor
End Sub


Su tabla de verdad es muy sencilla, siendo esta una herramienta para conocer los posibles valores de una expresión cuando se le aplican operadores lógicos.


A Not A
V F
F V


“ And ” Y (lógico)

Se aplica a dos operadores, devuelve verdadero (True) solo en el caso de que los dos operadores sean verdaderos (True), cualquier otro valor, devuelve falso (False). Ahora, primero te muestro su tabla de verdad y después los ejemplos.


A B A And B
V V V
V F F
F V F
F F F


Option Explicit
Sub Conjuncion()
Dim bValor1 As Boolean
Dim bValor2 As Boolean
Dim bResul As Boolean
'Solo en caso de que los dos sean verdaderos
'el resultado sera verdadero
bValor1 = True
bValor2 = True
bResul = bValor1 And bValor2
Msgbox bResul
bValor1 = True
bValor2 = False
bResul = bValor1 And bValor2
Msgbox bResul
bValor1 = False
bValor2 = True
bResul = bValor1 And bValor2
Msgbox bResul
bValor1 = False
bValor2 = False
bResul = bValor1 And bValor2
Msgbox bResul
End Sub


“ Or ” O (lógico)

Se aplica a dos operadores. Si los dos operadores son falsos (False), devuelve falso (False), cualquier otro valor devuelve verdadero (True). Su tabla de verdad es.


A B A Or B
V V V
V F V
F V V
F F F


Option Explicit
Sub Disyuncion()
Dim bValor1 As Boolean
Dim bValor2 As Boolean
Dim bResul As Boolean
bValor1 = True
bValor2 = True
bResul = bValor1 Or bValor2
Msgbox bResul
bValor1 = True
bValor2 = False
bResul = bValor1 Or bValor2
Msgbox bResul
bValor1 = False
bValor2 = True
bResul = bValor1 Or bValor2
Msgbox bResul
bValor1 = False
bValor2 = False
bResul = bValor1 Or bValor2
Msgbox bResul
End Sub


“ XOr ” O exclusiva (lógico)

Se aplica a dos operadores. Si los dos operadores son iguales devuelve falso (False), si son diferentes devuelve verdadero (True). Su tabla de verdad es.


A B A Xor B
V V F
V F V
F V V
F F F


Option Explicit
Sub Operador_Xor()
Dim bValor1 As Boolean
Dim bValor2 As Boolean
Dim bResul As Boolean
bValor1 = True
bValor2 = True
bResul = bValor1 Xor bValor2
Msgbox bResul
bValor1 = True
bValor2 = False
bResul = bValor1 Xor bValor2
Msgbox bResul
bValor1 = False
bValor2 = True
bResul = bValor1 Xor bValor2
Msgbox bResul
bValor1 = False
bValor2 = False
bResul = bValor1 Xor bValor2
Msgbox bResul
End Sub


“ Eqv ” Equivalencia (opuesto a Xor) (lógico)

Se aplica a dos operadores. Si los dos operadores son iguales devuelve verdadero (True), si son diferentes devuelve falso (False). Su tabla de verdad es.


A B A Eqv B
V V V
V F F
F V F
F F V


Option Explicit
Sub Operador_Eqv()
Dim bValor1 As Boolean
Dim bValor2 As Boolean
Dim bResul As Boolean
bValor1 = True
bValor2 = True
bResul = bValor1 Eqv bValor2
Msgbox bResul
bValor1 = True
bValor2 = False
bResul = bValor1 Eqv bValor2
Msgbox bResul
bValor1 = False
bValor2 = True
bResul = bValor1 Eqv bValor2
Msgbox bResul
bValor1 = False
bValor2 = False
bResul = bValor1 Eqv bValor2
Msgbox bResul
End Sub


“ Imp ” Implicación (lógico)

Se aplica a dos operadores. Si el primer operador es verdadero (True) y el segundo es Falso (False) devuelve falso (False), cualquier otro valor, devuelve verdadero (True). Su tabla de verdad es.


A B A Imp B
V V V
V F F
F V V
F F V


Option Explicit
Sub Operador_Imp()
Dim bValor1 As Boolean
Dim bValor2 As Boolean
Dim bResul As Boolean
bValor1 = True
bValor2 = True
bResul = bValor1 Imp bValor2
Msgbox bResul
bValor1 = True
bValor2 = False
bResul = bValor1 Imp bValor2
Msgbox bResul
bValor1 = False
bValor2 = True
bResul = bValor1 Imp bValor2
Msgbox bResul
bValor1 = False
bValor2 = False
bResul = bValor1 Imp bValor2
Msgbox bResul
End Sub


Los operadores de relación y lógicos vistos en este apartado, son de vital importancia para su implementación en cualquier tipo de condición en ciclos o bifurcaciones. Recuerda que siempre obtendrás un valor verdadero (True) o falso (False). Ten a la mano siempre las tablas de verdad de cada uno.

Precedencia de operadores

En resumen, los operadores que puedes usar en OOo Basic, son los siguientes, están ordenados de mayor a menor precedencia, es decir, la prioridad que les asigna el lenguaje cuando en una sentencia están implicados dos o mas operadores. Los operadores que están en la misma linea, tiene el mismo nivel de precedencia


Operador Operación Tipo
^ Exponenciación Aritmético
* , / Multiplicación y división Aritmético
\ División entera Aritmético
Mod Resto de una división entera Aritmético
+ , - Suma y resta Aritmético
= , <> , < , >

<= , >=

Igual, distinto, menor que, mayor que, menor o igual que, mayor o igual que Relacionales
Not Negación Lógico
And Y Lógico
Or O Lógico
Xor O exclusiva Lógico
Eqv Equivalencia (opuesto a Xor) Lógico
Imp Implicación Lógico


La prioridad de ejecución es muy importante, pues si no la utilizas correctamente, te puede dar resultados diferentes a los esperados, toma en cuenta las siguiente reglas:

  • La precedencia va de mayor a menor, es decir, se ejecutan primero los operadores de mayor jerarquía
  • Si los operadores tienen la misma precedencia, se ejecutan de izquierda a derecha
  • La precedencia se puede “romper” (cambiar) usando paréntesis, tienen prioridad los más internos y hacia afuera


Option Explicit
Sub Precedencia_Operadores1()
Dim num As Double
'Observa como la prioridad va de izquierda a derecha
'4 16 1 3
num = 2 ^ 2 * 4 Mod 3 + 2
MsgBox num
'Y ahora va de derecha a izquierda
'16 32 34
num = 2 + 2 * 4 ^ 2
MsgBox num
End Sub


Lo más sencillo, es que tú determines el orden de las operaciones, ya sea en sucesivas líneas como en el primer ejemplo o usando paréntesis como en el segundo ejemplo.


Sub Precedencia_Operadores2()
Dim num As Double
num = 45 * 56
num = num / 10
num = num ^ 3
num = num + 125
MsgBox num
num = (((45 * 56) / 10) ^ 3) + 125
MsgBox num
'Observa como, sin los paréntesis da un resultado totalmente diferente
num = 45 * 56 / 10 ^ 3 + 125
MsgBox num
End Sub


Los paréntesis nos ayudan a determinar el orden en que queramos hacer una operación cuando la precedencia de operaciones no es muy clara. Mi recomendación como casi siempre lo notaras, es que mantengas el control de tu código. Los operadores de relación y lógicos son muy importantes al aplicarse en condiciones para bucles y bifurcaciones, es importante que los domines.

ES.Plantillas.Logo foro es.png
Si tienes dudas acerca de lo aquí explicado, tienes algún problema con AOO,
o quieres ampliar la información, no dudes en dirigirte al

Foro Oficial en español de Apache OpenOffice para Macros y API UNO

Personal tools