Difference between revisions of "ES/Manuales/GuiaAOO/TemasAvanzados/Macros/StarBasic/ElLenguajeOOoBasic/Operadores"
(Created page with "{{DISPLAYTITLE:Operadores}} {{ES/AyudaWiki/Borrador}} OOo Basic soporta los siguiente operadores aritméticos, de relación y lógicos. = Operadores aritméticos = == “ ^ ...") |
|||
Line 39: | Line 39: | ||
End Sub | End Sub | ||
</source> | </source> | ||
+ | |||
+ | |||
+ | |||
+ | [[Image:ES_StarBasic_Operadores.04.png|center]] | ||
Latest revision as of 16:07, 17 March 2013
OOo Basic soporta los siguiente operadores aritméticos, de relación y lógicos.
Contents
Operadores aritméticos
“ ^ ” Exponenciación (aritmético)
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
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.
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)
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.
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 |