Funciones y procedimientos en Visual Basic 2005 para calcular el valor en letras de un monto y el detalle del vuelto correspondiente (página 2)
MONTO DE $13.00
MONTO DE $47.00
MONTO DE $82.00
MONTO DE $96.00
MONTO DE $100.0
CLICK AL BOTÓN
LIMPIAR
CLICK AL BOTÓN
SALIR
Los TextBox tienen los siguientes nombres de arriba
hacia abajo:
montoapagar
montoenletras
efectivo
vuelto
billetes20
billetes10
billetes5
billetes1
Los tres botones tienen los siguientes nombres de
izquierda a derecha:
calcular
limpiar
salir
CÓDIGO DEL FORMULARIO Y SUS
CORRESPONDIENTES PROCEDIMIENTOS
Public Class Form1
Private Sub calcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles calcular.Click
If (montoapagar.Text
= "")
Then
MsgBox("Escriba el valor del
monto.", MsgBoxStyle.Exclamation,
"Cálculo de
Montos")
montoapagar.Focus()
Else
If (montoapagar.Text >
100) Then
MsgBox("El monto no puede
ser mayor que $100.00.",
MsgBoxStyle.Exclamation, "Cálculo de Montos")
montoapagar.Text = ""
montoenletras.Text = ""
efectivo.Text = "$100.00"
vuelto.Text = ""
billetes20.Text = ""
billetes10.Text = ""
billetes5.Text = ""
billetes1.Text = ""
montoapagar.Focus()
Else
montoenletras.Text =
montoenletras1(montoapagar.Text)
vuelto.Text = vuelto1(montoapagar.Text)
vueltoendetalle(vuelto.Text, billetes20.Text,
billetes10.Text, billetes5.Text, billetes1.Text)
End If
End If
End Sub
Private Sub
montoapagar_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
Handles
montoapagar.KeyPress
If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
(Asc(e.KeyChar) = 8) Then 'Los únicos
caracteres que se permitirá introducir en el TextBox
serán los números del 0 al 9 (ASCII del 48 al
57).
'No se hace nada porque el caracter
presionado es válido.
Else
'Beep() 'Emite sonido cuando se
presiona una tecla que no está permitida o que es
inválida.
e.KeyChar = ""
'Reemplaza la tecla digitada con el valor
de nada para que no se puedan introducir caracteres
inválidos.
End If
End Sub
Private Sub salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles salir.Click
Dim mensaje
As String
mensaje = MsgBox("¿Desea realmente salir del programa?", vbYesNo,
"Cálculo de
Montos")
If mensaje = 6
Then
End
End If
End Sub
Private Sub limpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles limpiar.Click
montoapagar.Text = ""
montoenletras.Text = ""
efectivo.Text = "$100.00"
vuelto.Text = ""
billetes20.Text = ""
billetes10.Text = ""
billetes5.Text = ""
billetes1.Text = ""
End Sub
End Class
CÓDIGO DEL MÓDULO Y SUS
CORRESPONDIENTES FUNCIONES Y
PROCEDIMIENTOS
Module Module1
Public Function unidades(ByVal montoapagar As Integer) As Integer
unidades = Val(Strings.Right(Str(montoapagar),
1)) 'A partir de la derecha, toma un
valor, de modo que devuelve las unidades.
End Function
Public Function decenas(ByVal montoapagar As Integer) As Integer
decenas =
Val(Strings.Left(Strings.Right(Str(montoapagar), 2), 1))
'A partir de la derecha, toma dos valores. Luego
de ese resultado, a partir de la izquierda toma un valor, de modo
que devuelve las decenas.
End Function
Public Function
montoenletras1(ByVal
montoapagar As
Integer) As String
Dim unidades1,
decenas1 As Integer
unidades1 = unidades(montoapagar)
decenas1 = decenas(montoapagar)
montoenletras1 = ""
If (montoapagar >=
30) Then
Select Case decenas1
Case 3
montoenletras1 += "Treinta"
Case 4
montoenletras1 += "Cuarenta"
Case 5
montoenletras1 += "Cincuenta"
Case 6
montoenletras1 += "Sesenta"
Case 7
montoenletras1 += "Setenta"
Case 8
montoenletras1 += "Ochenta"
Case 9
montoenletras1 += "Noventa"
Case 0 'Si El valor es "100", el segundo digito de derecha a
izquierda (el valor de las decenas) es "0".
montoenletras1 += "Cien"
End Select
Select Case unidades1
Case 1
montoenletras1 += " y
uno"
Case 2
montoenletras1 += " y
dos"
Case 3
montoenletras1 += " y
tres"
Case 4
montoenletras1 += " y
cuatro"
Case 5
montoenletras1 += " y
cinco"
Case 6
montoenletras1 += " y
seis"
Case 7
montoenletras1 += " y
siete"
Case 8
montoenletras1 += " y
ocho"
Case 9
montoenletras1 += " y
nueve"
End Select
Return
montoenletras1
Else
Select Case montoapagar
Case 0
Return "Cero"
Case 1
Return "Uno"
Case 2
Return "Dos"
Case 3
Return "Tres"
Case 4
Return "Cuatro"
Case 5
Return "Cinco"
Case 6
Return "Seis"
Case 7
Return "Siete"
Case 8
Return "Ocho"
Case 9
Return "Nueve"
Case 10
Return "Diez"
Case 11
Return "Once"
Case 12
Return "Doce"
Case 13
Return "Trece"
Case 14
Return "Catorce"
Case 15
Return "Quince"
Case 16
Return "Dieciséis"
Case 17
Return "Diecisiete"
Case 18
Return "Dieciocho"
Case 19
Return "Diecinueve"
Case 20
Return "Veinte"
Case 21
Return "Veintiuno"
Case 22
Return "Veintidos"
Case 23
Return "Veintitres"
Case 24
Return "Veinticuatro"
Case 25
Return "Veinticinco"
Case 26
Return "Veintiséis"
Case 27
Return "Veintisiete"
Case 28
Return "Veintiocho"
Case 29
Return "Veintinueve"
End Select
End If
End Function
Public Function vuelto1(ByVal montoapagar As Integer) As String
vuelto1 = (100 – montoapagar)
vuelto1 = "$"
+ vuelto1 'Concatenando "$"
para la respuesta.
End Function
Public Sub vueltoendetalle(ByVal vuelto As String, ByRef billetes20 As String, ByRef billetes10 As String, ByRef billetes5 As String, ByRef billetes1 As String) 'Este
es un procedimiento, no
una funcion. Notese que el primer parametro es por valor y los
demas por referencia. Es porque el primer parametro es para darle
datos con que
trabajar al procedimiento y los demas son donde se hacen los
intercambios u operaciones. Los
ultimos 4 parametros tienen que ser "ByRef", pues de lo contrario
el programa no da error pero no funcionaria correctamente, pues
esperaria parametros por valor provenientes de los TextBox. Lo
que se pretende es que el procedimiento realice las respectivas
operaciones y modifique las variables
correspondientes que se le dan como parametro, de modo que
imprimira los resultados en los TextBox correspondientes cuando
estos se pasen correctamente como parametros del procedimientos
cuando este sea llamado por el programa.
Dim residuo
As Integer 'Ira almacenando
los residuos
billetes20 = Str(Int(vuelto / 20)) 'Cuantos billetes de $20 se necesitan para dar el
vuelto.
'billetes20 = Str(vuelto Mod 20)
'"Str()" porque los parametros del procedimiento son tipo String,
entonces se requiere la conversion.
residuo = vuelto Mod
20 'Residuo luego de dar los
billetes de $20.00
billetes10 = Str(Int(residuo / 10)) 'Cuantos billetes de $10 se necesitan para dar el
vuelto.
residuo = residuo Mod 10 'Residuo luego de dar los billetes de
$10.00.
billetes5 = Str(Int(residuo / 5)) 'Cuantos billetes de $5 se necesitan para dar el
vuelto.
residuo = residuo Mod 5 'Residuo luego de dar los billetes de $5.00.
billetes1 = Str(Int(residuo / 1)) 'Cuantos billetes de $1 se necesitan para dar el
vuelto.
residuo = residuo Mod 1 'Residuo luego de dar los billetes de $1.00. Esta linea
realmente no tiene sentido, pues dividir entre 1 no dara residuo
diferente de cero, entonces se sabe que el residuo es
cero.
End Sub
End Module
Este sencillo programa permite comprender el uso y
utilidad de
funciones y procedimientos, así como percibir la
diferencia entre la una y la otra. Básicamente la
diferencia es que una función
devuelve uno y sólo un valor, mientras que un
procedimiento puede devolver varios valores o incluso no devolver
ninguno.
Las funciones y procedimientos son fundamentales en la
programación
orientada a objetos, por lo cual es necesario comprender y
utilizar adecuadamente estas poderosas herramientas.
Analizar este programa y comprenderlo en su totalidad será
de gran ayuda para aprender el uso y utilidad de las funciones y
procedimientos.
Jaime Montoya
Santa Ana, 29 de enero de 2008
El Salvador
Página anterior | Volver al principio del trabajo | Página siguiente |