Page 48
Image_476_0
Editor de código Visual Basic, lista de miembros automática, etc.
__rendered_path__4
Caso 4 versiones menos recientes:
Caso 4 versiones más recientes:
Image_526_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_525_0
Option Explicit
Option Explicit On
Dim seleccionado As Boolean
Public
Dim
Class
seleccionado
Form1
As
Boolean
Private Sub Form_Load()
10 seleccionado = True
Líneamuestramensaje: MsgBox
("El valor actual de
System.
Handles
Private
Object
MyBase
Sub
,
Form1_Load(
ByVal
e
As
.Load
ByVal
System.
sender
EventArgs
As
)
seleccionado es " & seleccionado)
10: seleccionado =
True
End Sub
Líneamuestramensaje: MsgBox("El valor actual
de seleccionado es " & seleccionado)
Image_477_0
End Sub
__rendered_path__64
End Class
Image_514_0
__rendered_path__77
Los cuatro casos presentados son distintas posibilidades para numerar o etiquetar las líneas. Escribe el
código en tu editor y compruébalo tú mismo.
El caso 1 corresponde a un programa en el que no existe identificación de las líneas, que para nosotros
será lo habitual (en general es infrecuente identificar las líneas).
El caso 2 corresponde a un programa con las líneas numeradas (en las versiones más recientes después
del número de línea se incluyen dos puntos). Recuerda a lo que era el Basic tradicional, para el que la
numeración de líneas tenía una importancia notable al ser un tipo de programación altamente
dependiente de la instrucción Go To (IrA), circunstancia que ya no se da con Visual Basic. Por tanto, en
general no usaremos este tipo de numeración aunque Visual Basic la permite.
El caso 3 corresponde a un programa con las líneas identificadas por etiquetas. Cada línea tiene un
nombre descriptivo que le precede, separado del contenido del código en sí por un signo de dos
puntos. En circunstancias puntuales puede ser de interés, pero tampoco tiene sentido usarlo de forma
constante para programar.
El caso 4 corresponde a un programa donde algunas líneas están numeradas, otras identificadas por
una etiqueta y otras carecen de identificación.
Las posibilidades que se nos abren son amplias. Nosotros prescindiremos de la identificación de líneas,
excepto para cuestiones puntuales como podría ser direccionar la gestión de errores. Sobre gestión de
errores hablaremos más adelante.
Próxima entrega: CU00314A
Acceso al curso completo en aprenderaprogramar.com ‐‐ > Cursos, o en la dirección siguiente:
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__1__rendered_path__60
© 20062029 aprenderaprogramar.com

Page 49
Image_535_0
Comentarios y herramientas lógicas y matemáticas en Visual Basic
__rendered_path__4
INSERCIÓN DE COMENTARIOS EN EL CÓDIGO
Existen distintas posibilidades para insertar comentarios en el código de Visual Basic como son:
La palabra clave Rem: la presencia de la palabra clave Rem (REM en mayúsculas algunas versiones)
transforma en comentario todo lo que se encuentre a continuación de ella en una línea. Rem puede
encontrarse al principio de una línea, con lo cual nada de lo que aparezca en dicha línea será ejecutado,
o bien después de una o varias instrucciones que se encuentren en una línea. En algunas versiones no
es necesario separador, mientras que en otras Rem debe estar separado de las instrucciones anteriores
en la línea mediante dos puntos.
El signo apóstrofe ': la presencia del signo apóstrofe convierte en comentario todo lo que se encuentre
detrás de él en una línea dada. Puede situarse al principio de una línea, con lo cual nada de lo que
aparezca en dicha línea será ejecutado, o bien después de una o varias instrucciones sin necesidad de
que existan dos puntos ni ningún otro signo de separación.
La parte del código que son comentarios es marcada por el editor de Visual Basic con un color verde
que lo diferencia de las instrucciones que van a ser ejecutadas. En un mismo programa pueden
aparecer indistintamente instrucciones Rem y apóstrofes. Veamos ejemplos equivalentes:
Ejemplo 1 (versiones menos recientes):
Ejemplo 1 (versiones más recientes):
Image_539_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_537_0
Option Explicit
Option Explicit On
Dim seleccionado As Boolean
Public Class Form1
Dim seleccionado As Boolean
Private Sub Form_Load()
Rem A ejecutar cuando se carga el formulario
Private
Sub
Form1_Load(
ByVal
sender
As
seleccionado = True
Rem Mostramos por pantalla mensaje
System.
Handles
Object
MyBase
,
ByVal
.Load
e
As
System.
EventArgs
)
MsgBox ("El valor actual
seleccionado)
de seleccionado es " &
REM A ejecutar cuando se carga el formulario
seleccionado =
True
End Sub
MsgBox(
REM Mostramos por pantalla mensaje
"El valor actual de seleccionado
es "
& seleccionado)
End
Sub
Image_538_0
End Class
__rendered_path__53
Image_536_0
Ejemplo 2 (versiones menos recientes):
Ejemplo 2 (versiones más recientes):
__rendered_path__68
Image_539_0
'Curso Visual Basic aprenderaprogramar.com
'Curso Visual Basic aprenderaprogramar.com
Image_537_0
Option Explicit
Option Explicit On
Dim seleccionado As Boolean
Public Class Form1
Dim seleccionado As Boolean
Private Sub Form_Load()
'A ejecutar cuando se carga el formulario
Private
Sub
Form1_Load(
ByVal
sender
As
seleccionado = True
'Mostramos por pantalla mensaje
System.
Handles
Object
MyBase
,
ByVal
.Load
e
As
System.
EventArgs
)
MsgBox ("El valor actual
seleccionado)
de seleccionado es " &
'
seleccionado =
A ejecutar cuando se carga el formulario
True
End Sub
MsgBox(
'
Mostramos por pantalla mensaje
"El valor actual de seleccionado
es "
& seleccionado)
End
Sub
Image_538_0
End Class
__rendered_path__1__rendered_path__53Image_536_0__rendered_path__68
© 2006-2029 aprenderaprogramar.com

Page 50
Image_535_0
Comentarios y herramientas lógicas y matemáticas en Visual Basic
__rendered_path__4
Ejemplo 3 (versiones menos recientes):
Ejemplo 3 (versiones más recientes):
Image_561_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Image_560_0
Option Explicit
Option Explicit On
Dim seleccionado As Boolean
Public
Dim
Class
seleccionado
Form1
As
Boolean
Private Sub Form_Load()
seleccionado = True 'Ejecu
ta al cargar formulario
System.
Private
Object
Sub
,
Form1_Load(
ByVal
e
As
ByVal
System.
sender
EventArgs
As
)
Handles
MsgBox ("El valor actual
seleccionado) ' Mostramos por pantalla mensaje
de seleccionado es " &
MyBase
seleccionado =
.Load
True
'
Ejecuta al cargar formulario
End Sub
MsgBox(
seleccionado)
"El valor actual de seleccionado es "
'
Mostramos por pantalla mensaje
&
End
End
Class
Sub
Image_538_0
__rendered_path__54
Image_536_0
Ejemplo 4 (versiones menos recientes):
Ejemplo 4 (versiones más recientes):
__rendered_path__68
Image_559_0Image_560_0
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit
Option Explicit On
Dim seleccionado As Boolean
Public
Dim
Class
seleccionado
Form1
As
Boolean
Private Sub Form_Load()
seleccionado = True 'Ejecu
ta al cargar formulario
System.
Private
Object
Sub
,
Form1_Load(
ByVal
e
As
ByVal
System.
sender
EventArgs
As
)
Handles
MsgBox ("El valor actual
seleccionado) : Rem Mostrar por pantalla mensaje
de seleccionado es " &
MyBase
seleccionado =
.Load
True
REM Ejecuta al cargar formulario
End Sub
MsgBox(
seleccionado)
"El valor actual de seleccionado es "
'
Mostramos por pantalla mensaje
&
End Sub
End Class
Image_538_0
__rendered_path__130
Image_536_0
El ejemplo 1 corresponde a un programa con comentarios insertados a través de Rem situados previos
__rendered_path__68
a la línea que comentan. El ejemplo 2 es igual con los Rem sustituidos por apóstrofes. En el ejemplo 3
los comentarios con apóstrofes se sitúan a continuación de las instrucciones, en la misma línea. Por
último, el ejemplo 4 combina el uso de apóstrofes con Rem en la misma línea de instrucciones a
ejecutar.
Los criterios para insertar comentarios pueden consultarse en el curso “Bases de la programación nivel
I” de aprenderaprogramar.com. Los comentarios son una parte importante de los programas, por lo
que es conveniente cuidar su estructuración y contenidos. Dado que con el pseudocódigo trabajamos
con corchetes, podemos usar los corchetes detrás de los apóstrofes para "recordar" el carácter de
comentario de dicho texto.
'[Esto es un comentario detrás de un apóstrofe. El corchete no es estrictamente necesario pero podemos
ponerlo si queremos]
En las empresas de programación suele existir un manual de estilo donde se definen distintas reglas
que deben cumplir los programadores, y la forma de comentar los programas suele ser una de ellas.
__rendered_path__1
© 2006-2029 aprenderaprogramar.com

Page 51
Image_535_0
Comentarios y herramientas lógicas y matemáticas en Visual Basic
__rendered_path__4
HERRAMIENTAS LÓGICAS Y MATEMÁTICAS EN VISUAL BASIC
Visual Basic clasifica los operadores con que trabaja de la siguiente manera:
Operadores aritméticos: operadores utilizados para ejecutar cálculos matemáticos.
Operadores de comparación: operadores utilizados para efectuar comparaciones.
Operadores de concatenación: operadores utilizados para combinar cadenas de caracteres.
Operadores lógicos: operadores usados para realizar operaciones lógicas.
__rendered_path__44__rendered_path__45
Operadores
Operadores de
Operaciones de
Operadores
__rendered_path__32__rendered_path__46__rendered_path__49
Aritméticos
comparación
concatenación
lógicos
__rendered_path__31__rendered_path__32__rendered_path__47__rendered_path__51
Operador ^
< (Menor que)
&
Operador And
__rendered_path__34__rendered_path__32__rendered_path__48__rendered_path__53
Operador *
<= (Menor o igual que)
+
Operador Eqv
__rendered_path__36__rendered_path__32__rendered_path__50__rendered_path__55
Operador /
> (Mayor que)
Operador Imp
__rendered_path__34__rendered_path__47
Operador \
>= (Mayor o igual que)
Operador Not
__rendered_path__36__rendered_path__48
Operador Mod
= (Igual a)
Operador Or
__rendered_path__34__rendered_path__52
Operador +
<> (Distinto de)
Operador Xor
__rendered_path__41__rendered_path__47
Operador -
Is
__rendered_path__34__rendered_path__48
Like
__rendered_path__54
__rendered_path__44
La mayoría de estos operadores han sido explicados en el curso “Bases de la programación nivel I” de
__rendered_path__56
aprenderaprogramar.com. El operador & tiene interés para concatenar cadenas. Por ejemplo "Hoy
__rendered_path__57
puede" & "ser un gran día" equivale a "Hoy puede ser un gran día”. Te remitimos a la ayuda de Visual
__rendered_path__56
Basic para obtener mayor información sobre operadores. Ten en cuenta que puede haber pequeñas
__rendered_path__58
diferencias entre las distintas versiones de Visual Basic.
__rendered_path__59
En cuanto a las funciones matemáticas, algunas de las funciones disponibles son las siguientes:
__rendered_path__58
Funciones
__rendered_path__56
Significado
Funciones Matemáticas
Significado
__rendered_path__58
Matemáticas
__rendered_path__57
Abs
Valor absoluto
Log
Logaritmo neperiano
__rendered_path__60__rendered_path__68__rendered_path__69
Atn ó Atan según
versión
Arcotangente
Rnd
Generación de número
aleatorio
__rendered_path__61__rendered_path__46__rendered_path__71
Cos
Coseno
Sgn ó Sign según versión
Signo de un número
__rendered_path__63__rendered_path__70__rendered_path__73
Ex p
Ex ponenciación
Sin
Seno
__rendered_path__1__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__72__rendered_path__70__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__56__rendered_path__75__rendered_path__56__rendered_path__76__rendered_path__59__rendered_path__76__rendered_path__56__rendered_path__76__rendered_path__75__rendered_path__60__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__68__rendered_path__69__rendered_path__46__rendered_path__70__rendered_path__71__rendered_path__72__rendered_path__70__rendered_path__73__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__56__rendered_path__75__rendered_path__56__rendered_path__76__rendered_path__59__rendered_path__76__rendered_path__56__rendered_path__76__rendered_path__75__rendered_path__60__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__68__rendered_path__69__rendered_path__46__rendered_path__70__rendered_path__71__rendered_path__72__rendered_path__70__rendered_path__73__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__56__rendered_path__75__rendered_path__56__rendered_path__76__rendered_path__59__rendered_path__76__rendered_path__56__rendered_path__76__rendered_path__75__rendered_path__60__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__68__rendered_path__69__rendered_path__46__rendered_path__70__rendered_path__71__rendered_path__72__rendered_path__70__rendered_path__73__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__56__rendered_path__75__rendered_path__56__rendered_path__76__rendered_path__59__rendered_path__76__rendered_path__56__rendered_path__76__rendered_path__75__rendered_path__60__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__68__rendered_path__69__rendered_path__46__rendered_path__70__rendered_path__71__rendered_path__72__rendered_path__70__rendered_path__73__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__56__rendered_path__75__rendered_path__56__rendered_path__76__rendered_path__59__rendered_path__76__rendered_path__56__rendered_path__76__rendered_path__75__rendered_path__60__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__68__rendered_path__69__rendered_path__46__rendered_path__70__rendered_path__71__rendered_path__72__rendered_path__70__rendered_path__73__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__56__rendered_path__75__rendered_path__56__rendered_path__76__rendered_path__59__rendered_path__76__rendered_path__56__rendered_path__76__rendered_path__75__rendered_path__60__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__68__rendered_path__69__rendered_path__46__rendered_path__70__rendered_path__71__rendered_path__72__rendered_path__70__rendered_path__73__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__56__rendered_path__75__rendered_path__56__rendered_path__76__rendered_path__59__rendered_path__76__rendered_path__56__rendered_path__76__rendered_path__75__rendered_path__60__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__63__rendered_path__61__rendered_path__66__rendered_path__61__rendered_path__68__rendered_path__69__rendered_path__46__rendered_path__70__rendered_path__71__rendered_path__72__rendered_path__70__rendered_path__73__rendered_path__74__rendered_path__70__rendered_path__69__rendered_path__46__rendered_path__68__rendered_path__105__rendered_path__45__rendered_path__76__rendered_path__49__rendered_path__76__rendered_path__51__rendered_path__76__rendered_path__53__rendered_path__105__rendered_path__55__rendered_path__115__rendered_path__116__rendered_path__118__rendered_path__120__rendered_path__121__rendered_path__123__rendered_path__124__rendered_path__126__rendered_path__121__rendered_path__128__rendered_path__129__rendered_path__130__rendered_path__131__rendered_path__132__rendered_path__133__rendered_path__134__rendered_path__128__rendered_path__135__rendered_path__136__rendered_path__131__rendered_path__132__rendered_path__133__rendered_path__134__rendered_path__128__rendered_path__55__rendered_path__137__rendered_path__57__rendered_path__138__rendered_path__58__rendered_path__139__rendered_path__57__rendered_path__138__rendered_path__58__rendered_path__57__rendered_path__140__rendered_path__118__rendered_path__142__rendered_path__121__rendered_path__144__rendered_path__124__rendered_path__146__rendered_path__121__rendered_path__148__rendered_path__149__rendered_path__150__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__154__rendered_path__155__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__137__rendered_path__156__rendered_path__138__rendered_path__157__rendered_path__139__rendered_path__156__rendered_path__138__rendered_path__157__rendered_path__156__rendered_path__115__rendered_path__116__rendered_path__118__rendered_path__120__rendered_path__121__rendered_path__123__rendered_path__161__rendered_path__126__rendered_path__163__rendered_path__165__rendered_path__148__rendered_path__149__rendered_path__150__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__154__rendered_path__155__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__137__rendered_path__57__rendered_path__138__rendered_path__58__rendered_path__139__rendered_path__57__rendered_path__138__rendered_path__58__rendered_path__57__rendered_path__140__rendered_path__118__rendered_path__142__rendered_path__121__rendered_path__144__rendered_path__124__rendered_path__146__rendered_path__121__rendered_path__148__rendered_path__149__rendered_path__150__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__154__rendered_path__155__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__137__rendered_path__156__rendered_path__138__rendered_path__157__rendered_path__139__rendered_path__156__rendered_path__138__rendered_path__157__rendered_path__156__rendered_path__140__rendered_path__118__rendered_path__142__rendered_path__121__rendered_path__144__rendered_path__124__rendered_path__146__rendered_path__121__rendered_path__148__rendered_path__149__rendered_path__150__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__154__rendered_path__155__rendered_path__151__rendered_path__152__rendered_path__153__rendered_path__148__rendered_path__137__rendered_path__156__rendered_path__175__rendered_path__138__rendered_path__176__rendered_path__152__rendered_path__139__rendered_path__156__rendered_path__177__rendered_path__138__rendered_path__176__rendered_path__152__rendered_path__178
© 2006-2029 aprenderaprogramar.com

Page 52
Image_535_0
Comentarios y herramientas lógicas y matemáticas en Visual Basic
__rendered_path__4
__rendered_path__21__rendered_path__22
Funciones
__rendered_path__23__rendered_path__26
Significado
Funciones Matemáticas
Significado
__rendered_path__9__rendered_path__24__rendered_path__28
Matemáticas
__rendered_path__8__rendered_path__14__rendered_path__25__rendered_path__26
Fix
Truncamiento tipo 1
Sqr ó Sqrt según versión
Raíz cuadrada
__rendered_path__11__rendered_path__17__rendered_path__27__rendered_path__30
Int
Truncamiento tipo 2
Tan
Tangente
__rendered_path__13__rendered_path__14__rendered_path__21
__rendered_path__16__rendered_path__29
Las funciones relacionadas con ángulos trabajan en radianes. Por tanto si queremos operar con grados
__rendered_path__19__rendered_path__24
habremos de realizar la conversión oportuna.
__rendered_path__25
Vamos a centrarnos en algunas funciones que no se han descrito en el curso “Bases de la programación
__rendered_path__27
nivel I”. Empezando por Fix e Int, se trata de funciones que devuelven la parte entera de un número,
__rendered_path__21
que es diferente a redondear. La diferencia entre ambas es que si el número es negativo Int devuelve el
__rendered_path__31
primer entero menor o igual mientras que Fix devuelve el primer entero mayor o igual.
__rendered_path__32
__rendered_path__33
Ejemplo:
__rendered_path__34
Int(8.7) = 8
Int( 8.7) = 9
__rendered_path__35
Fix(8.7) = 8
Fix( 8.7) = 8
__rendered_path__32
__rendered_path__33
La función Rnd permite generar números aleatorios. Por su importancia para la programación y para la
__rendered_path__34
verificación de programas, vamos a desarrollarla un poco más extensamente.
__rendered_path__32
En las versiones más recientes de Visual Basic para usar una función matemática debemos escribir
__rendered_path__36__rendered_path__44__rendered_path__45
Math.nombreDeLaFuncion(valorACalcular). Por ejemplo, este es un pequeño programa para calcular la
__rendered_path__11__rendered_path__46__rendered_path__48
raíz cuadrada de un número.
__rendered_path__38__rendered_path__47__rendered_path__50
Versiones menos recientes:
Versiones más recientes:
__rendered_path__14__rendered_path__49__rendered_path__48
__rendered_path__40__rendered_path__44
Rem Curso Visual Basic aprenderaprogramar.com
REM Curso Visual Basic aprenderaprogramar.com
__rendered_path__17__rendered_path__51
Option Explicit
Option Explicit On
__rendered_path__42__rendered_path__47
Dim num As Double
Public
Dim
Class
num
As
Form1
Double
__rendered_path__14__rendered_path__49
Private Sub Form_Load()
num = 1344
System.
Private
Object
Sub
,
Form1_Load(
ByVal
e
As
ByVal
System.
sender
EventArgs
As
)
Handles
__rendered_path__44
MsgBox ("La raíz cuadrada de " & num & " es " &
Sqr(num))
MyBase
num = 1344
.Load
__rendered_path__31
End Sub
MsgBox(
Math
.Sqrt(num))
"La raíz cuadrada de "
& num &
" es "
&
__rendered_path__52
End Sub
__rendered_path__33
End Class
__rendered_path__53
__rendered_path__35
La función Sgn (Math.Sign en las versiones más recientes) devuelve el signo de un número o de una
__rendered_path__52
variable numérica tomando valor 1 para un número positivo, 1 para un número negativo y cero
__rendered_path__33
cuando el número es cero. Supongamos A = 7.44, B = 23, C = 0.
__rendered_path__1__rendered_path__53__rendered_path__52__rendered_path__36__rendered_path__11__rendered_path__38__rendered_path__14__rendered_path__40__rendered_path__17__rendered_path__42__rendered_path__14__rendered_path__44__rendered_path__45__rendered_path__46__rendered_path__47__rendered_path__48__rendered_path__49__rendered_path__44__rendered_path__50__rendered_path__51__rendered_path__47__rendered_path__48__rendered_path__49__rendered_path__44__rendered_path__58__rendered_path__22__rendered_path__53__rendered_path__26__rendered_path__58__rendered_path__28__rendered_path__53__rendered_path__26__rendered_path__58__rendered_path__30Image_581_0Image_538_0__rendered_path__112Image_580_0Image_536_0__rendered_path__124
© 2006-2029 aprenderaprogramar.com

Page 53
Image_535_0
Comentarios y herramientas lógicas y matemáticas en Visual Basic
__rendered_path__4
Versiones menos recientes:
Sgn(A) = 1 Sgn(43) = 1
Sgn(B) = 1 Sgn( 453.33) = 1
Sgn(C) = 0 Sgn(0) = 0
Versiones más recientes:
Math.Sign(A) = 1 Math.Sign(43) = 1
Math.Sign(B) = 1 Math.Sign( 453.33) = 1
Math.Sign(C) = 0 Math.Sign(0) = 0
__rendered_path__31
Si vas a trabajar con constantes físicas o matemáticas te resultará de interés la instrucción
__rendered_path__32
Const para declaración de constantes. La ventaja de declarar una constante en vez de una variable
__rendered_path__29__rendered_path__31
es que la constante no puede variar en el transcurso del programa. Por tanto, se impide que por
__rendered_path__33__rendered_path__70__rendered_path__71__rendered_path__72
error pueda tener un valor no válido en un momento dado. Las constantes facilitan la documentación
__rendered_path__33__rendered_path__73
del programa y lo hacen fácil de modificar. Una declaración tipo de constante podría ser la siguiente:
__rendered_path__34
Const Pi As Double = 3.14159265358979
__rendered_path__36
El redondeo de un decimal a un entero se realiz a en Visual Basic a través de la función CInt,
__rendered_path__36
correspondiente a un grupo de funciones denominadas "Funciones de conversión de tipos" que no
__rendered_path__34
vamos a entrar a estudiar. CInt(A) devuelve el valor de A redondeado al número entero más próx imo.
__rendered_path__36
Prueba a visualiz ar el resultado de este código:
__rendered_path__36
Dim A As Double
__rendered_path__34
A = 7.32
__rendered_path__36
MsgBox ("El redondeo de 7.32 es " & CInt(A))
__rendered_path__36
__rendered_path__41
__rendered_path__43
__rendered_path__43
__rendered_path__41
__rendered_path__43
__rendered_path__43
Próxima entrega: CU00315A
__rendered_path__34
Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente:
__rendered_path__36
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__1__rendered_path__36__rendered_path__34__rendered_path__36__rendered_path__36__rendered_path__34__rendered_path__36__rendered_path__36__rendered_path__41__rendered_path__43__rendered_path__43__rendered_path__41__rendered_path__43__rendered_path__43__rendered_path__41__rendered_path__43__rendered_path__43__rendered_path__52__rendered_path__31__rendered_path__32__rendered_path__31__rendered_path__54__rendered_path__54__rendered_path__68__rendered_path__74__rendered_path__75__rendered_path__76__rendered_path__77
© 2006-2029 aprenderaprogramar.com

Page 54
Image_595_0
Generación de números aleatoros en Visual Basic.
__rendered_path__3
GENERACIÓN DE NÚMEROS ALEATORIOS – FUNCIÓN Rnd
La generación de números aleatorios adquiere gran relevancia para un programador, pudiendo usarse
para:
Construcción preliminar de programas, en los que a falta de datos definitivos introducimos datos
aleatorios.
Simular procesos aleatorios (número resultante de tirar un dado, elección de un color por parte de
una persona, número premiado en un sorteo de lotería, cantidad de personas que entran a un
supermercado en una hora...)
Verificación de programas, y en particular simular datos que le llegan al programa como si fueran
datos provinientes de entradas de usuario, de una base de datos, de un fichero, etc.
Otras aplicaciones.
Conviene recordar que "aleatorio" no puede confundirse con "cualquier cosa", "descontrol", "incierto",
"impredecible", etc. Usaremos aleatorio más en el sentido de no predeterminado que en el de no
predecible, ya que en general vamos a definir qué tipo de resultado queremos obtener y en qué rango
de valores debe estar. Vamos a imaginar que Visual Basic genera números aleatorios como si fuera un
robot lanzador de dardos muy preciso (robot Rnd). De este modo, cuando se le dice que comience a
tirar dardos en distintas posiciones, repite siempre los lugares. Por ejemplo, si la diana está marcada
con números, cada vez que le decimos que tire genera la misma secuencia: 7, 5, 6, 3, etc. ¿Cómo
conseguir convertir este proceso predefinido en aleatorio? Pues simplemente poniendo a girar la diana
(mayordomo Randomize) esta vez a una velocidad que depende del segundo del día en que nos
encontremos. Así pues, el proceso lo dividimos en decirle al mayordomo que ponga a girar la diana y en
decirle al robot que dispare. Bueno, un poco simple, pero ¿para qué complicarnos? Veamos la sintaxis a
emplear:
1) Asignación de valor aleatorio a una variable
Randomize
[Instrucción que inicializa el generador de números aleatorios]
Variable = Rnd [Obtención de un número aleatorio igual o mayor que cero y menor que uno]
En las versiones más recientes de Visual Basic la sintaxis es Randomize(): Variable = Rnd()
2) Mostrar un valor aleatorio.
Randomize: MsgBox (“El número aleatorio es “ & Rnd) para las versiones menos recientes
Randomize() : MsgBox("El número aleatorio es " & Rnd()) para las versiones más recientes
El valor devuelto por Rnd es de tipo Single, aunque si la variable a la que se asigna el contenido de Rnd
es de otro tipo, tendrá lugar la conversión del valor originario para adaptarlo al tipo de variable de que
se trate. Un aspecto importante a tener en cuenta es que el valor devuelto se encuentra en el rango 0
<= Rnd < 1. Es decir, el número devuelto puede ser cero pero no puede ser uno. Podemos trasladarnos
a un intervalo distinto simplemente multiplicando. Por ejemplo Rnd * 100 ó Rnd() * 100 devolverá
números comprendidos entre cero y cien excluido el cien. Si usamos CInt(Rnd * 100) ó CInt(Rnd() * 100)
__rendered_path__1
© 2006-2029 aprenderaprogramar.com

Page 55
Image_595_0
Generación de números aleatoros en Visual Basic.
__rendered_path__3
estaremos convirtiendo el tipo Single que nos devuelve el Rnd en un tipo Integer, con lo que
obtenemos valores enteros comprendidos entre 0 y 99.
Un caso muy habitual será el de querer generar números aleatorios comprendidos en un intervalo
delimitado por un límite superior y un límite inferior siendo estos límites valores positivos. Para ello
podemos usar la fórmula:
N = (Limsup - Liminf) * Rnd + Liminf
__rendered_path__51
Limsup y Liminf son los límites superior e inferior respectivamente (valores positivos) y N el número
aleatorio generado. El primer sumando puede adquirir el valor comprendido entre cero y el intervalo
diferencia, excluido éste. El segundo sumando determina que el valor debe estar necesariamente
comprendido entre el límite inferior y el límite superior.
Consideremos ahora que queremos generar valores enteros comprendidos entre a y b incluidos ambos,
siendo a y b valores positivos. La fórmula a emplear sería:
N = Int((b - a + 1) * Rnd + a)
__rendered_path__54
En este caso, usamos un truncamiento para garantizar que el valor superior del intervalo se encuentre
entre los posibles valores de N.
Una instrucción Randomize te puede servir para varios Rnd. De todas formas, cuando tengas dudas, pon
un Randomize asociado a cada uno de los Rnd.
Recuerda que en algunas versiones se usa Randomize y Rnd sin paréntesis y en otras se usa
Randomize() y Rnd() con paréntesis.
Próxima entrega: CU00316A
Acceso al curso completo en aprenderaprogramar.com -- > Cursos, o en la dirección siguiente:
http://www.aprenderaprogramar.com/index.php?option=com_content&view=category&id=37&Itemid=61
__rendered_path__1__rendered_path__49
© 2006-2029 aprenderaprogramar.com