Subrutinas y Funciones
Leonel Morales Díaz
Ingeniería Simple
Disponible en: http://www.ingenieriasimple.com/introprograCopyright 2008 by Leonel Morales Díaz – Ingeniería Simple.
Derechos reservados
Problema
Construya un programa que:Dibuje una tabla de 10x12Luego una tabla de 8x11Luego otra más de 15x10
3 tablas de diferente tamaño
¿Y si fueran 5? ¿7? ¿10?
Algoritmo Tradicional
Dibujar la tabla de 10x12Dibujar 10 filas
En cada fila dibujar 12 celdas
Dibujar la tabla de 8x11Dibujar 8 filas
En cada fila dibujar 11 celdas
Dibujar la tabla de 15x10Dibujar 15 filas
En cada fila dibujar 10 celdas
Programa
Dim i,j
Document.Write “<Table>”
For i = 1 To 10
Document.Write “<TR>”
For j = 1 To 12
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 8
Document.Write “<TR>”
For j = 1 To 11
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 15
Document.Write “<TR>”
For j = 1 To 10
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table>”
33
22
3 Iteraciones
Dim i,j
Document.Write “<Table>”
For i = 1 To 10
Document.Write “<TR>”
For j = 1 To 12
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 8
Document.Write “<TR>”
For j = 1 To 11
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 15
Document.Write “<TR>”
For j = 1 To 10
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table>”
11
33
22
Parámetros
11
Dim i,j
Document.Write “<Table>”
For i = 1 To 10
Document.Write “<TR>”
For j = 1 To 12
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 8
Document.Write “<TR>”
For j = 1 To 11
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 15
Document.Write “<TR>”
For j = 1 To 10
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table>”
Transformarlo a Subrutina
Sub DibujaTabla(Filas,Columnas)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=1>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
‘Llamadas a la subrutina
DibujaTabla 10,12
DibujaTabla 8,11
DibujaTabla 15,10
Subrutina
Sub DibujaTabla(Filas,Columnas)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=1>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
EncabezadoEncabezado
FinalFinal
Sub DibujaTabla(Filas,Columnas)
Nombre de la Nombre de la SubrutinaSubrutina
ParámetrosParámetros
Los Los parámetros son parámetros son como variablescomo variables
Subrutinas
Procedimientos o agrupaciones de instruccionesQue realizan una tarea concretaQue varía por los parámetros
Puede que no lleve parámetros
Tiene sus propias variables
En el código<HTML><Head><Title>Dibuja varias tablas con
subrutinas</Title></Head><Body><H1>En esta página se dibujan varias tablas mediante el
uso de subrutinas.</H1><Script Language=“VBScript”>Option Explicit
Sub DibujaTabla(Filas,Columnas)‘Dibuja una tablaDim i,jDocument.Write “<Table Border=1>”For i = 1 To Filas
Document.Write “<TR>”For j = 1 To Columnas
Document.Write “<TD>*</TD>”
NextDocument.Write “</TR>”
NextDocument.Write “</Table><BR>”
End Sub
‘Llamadas a la subrutina
DibujaTabla 10,12
DibujaTabla 8,11
DibujaTabla 15,10
</Script>
<P Align=Center>Este texto estará al final de las tres tablas</P>
</Body>
</HTML>
ej048.html
33
22
Parámetros
11
Dim i,j
Document.Write “<Table>”
For i = 1 To 10
Document.Write “<TR>”
For j = 1 To 12
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 8
Document.Write “<TR>”
For j = 1 To 11
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table><BR>”
Document.Write “<Table>”
For i = 1 To 15
Document.Write “<TR>”
For j = 1 To 10
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>“
Next
Document.Write “</Table>”
Más Parámetros
Sub DibujaTabla(Filas,Columnas,RellenoRelleno)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=1>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>” & RellenoRelleno & “</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
Más Parámetros
Sub DibujaTabla(Filas,Columnas,Relleno,BordeBorde)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=“ & BordeBorde & “>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>” & Relleno & “</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
Múltiples Llamadas
Sub DibujaTabla(Filas,Columnas)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=1>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
‘Llamadas múltiples
Dim i,j
j = 3
For i = 1 To 10
DibujaTabla i,j
j = j + 5
Next
ej049.html
Múltiples Llamadas
Sub DibujaTabla(Filas,Columnas)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=1>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
‘Llamadas múltiples
Dim i,j
j = 3
For i = 1 To 10
DibujaTabla i,j
j = j + 5
Next
ej049.html
Múltiples Llamadas
Sub DibujaTabla(Filas,Columnas)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=1>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
‘Llamadas múltiples
Dim i,j
j = 3
For i = 1 To 10
DibujaTabla i,j
j = j + 5
Next
Diferente ÁmbitoDiferente Ámbitoej049.html
Múltiples Llamadas
Sub DibujaTabla(Filas,Columnas)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=1>”
For i = 1 To Filas
Document.Write “<TR>”
For j = 1 To Columnas
Document.Write “<TD>*</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
‘Llamadas múltiples
Dim i,j
Document.Write “<Center><Table Border=1 Width=50%>”
For i = 1 To 10
Document.Write “<TR>”
For j = 1 To 5
Document.Write “<TD Align=Center Valign=Middle><BR>”
DibujaTabla 3,3DibujaTabla 3,3
Document.Write “</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table></Center>”
ej050.html
Convertir a Binario
1. Se divide la entrada entre 2
2. Si es el primer residuo solo se coloca
3. De lo contrario1. Se coloca el residuo a la izquierda del residuo anterior
4. Si el resultado es mayor o igual que 21. Tomarlo como entrada y volver a paso 1
5. De lo contrario1. Colocar el resultado a la izquierda del residuo anterior
2. Fin del algoritmo
Subrutina
1. Se divide la entrada entre 22. Si es el primer residuo solo se
coloca3. De lo contrario
1. Se coloca el residuo a la izquierda del residuo anterior
4. Si el resultado es mayor o igual que 2
1. Tomarlo como entrada y volver a paso 1
5. De lo contrario1. Colocar el resultado a la
izquierda del residuo anterior2. Fin del algoritmo
¿Nombre?
¿Parámetros?
¿Variables locales?
Subrutina
1. Se divide la entrada entre 22. Si es el primer residuo solo se
coloca3. De lo contrario
1. Se coloca el residuo a la izquierda del residuo anterior
4. Si el resultado es mayor o igual que 2
1. Tomarlo como entrada y volver a paso 1
5. De lo contrario1. Colocar el resultado a la
izquierda del residuo anterior2. Fin del algoritmo
Sub CambiaBase(UnNumero,LaBase)Dim Resu,Resi,SalidaResu = UnNumero\LaBaseResi = UnNumero Mod LaBaseSalida = “” & ResiDo While Resu >= LaBase
Resi = ResuResu = Resu\LaBaseResi = Resi Mod LaBaseSalida = Resi & Salida
LoopSalida = Resu & SalidaDocument.Write “<P>Salida: “ & Salida & “</P>”
End Sub
ej051.html
Funciones
TienenNombreParámetrosVariables locales Igual que una subrutine
Devuelven un valorA = F(X,Y)
Comparación
Sub CambiaBase(UnNumero,LaBase)
Dim Resu,Resi,Salida
Resu = UnNumero\LaBase
Resi = UnNumero Mod LaBase
Salida = “” & Resi
Do While Resu >= LaBase
Resi = Resu
Resu = Resu\LaBase
Resi = Resi Mod LaBase
Salida = Resi & Salida
Loop
Salida = Resu & Salida
Document.Write “<P>Salida: “ & Salida & “</P>”
End Sub
Function CambiaBase(UnNumero,LaBase)
Dim Resu,Resi,Salida
Resu = UnNumero\LaBase
Resi = UnNumero Mod LaBase
Salida = “” & Resi
Do While Resu >= LaBase
Resi = Resu
Resu = Resu\LaBase
Resi = Resi Mod LaBase
Salida = Resi & Salida
Loop
Salida = Resu & Salida
CambiaBase = SalidaCambiaBase = Salida
End Function
Llamadas a Funciones
Function CambiaBase(UnNumero,LaBase)
Dim Resu,Resi,Salida
Resu = UnNumero\LaBase
Resi = UnNumero Mod LaBase
Salida = “” & Resi
Do While Resu >= LaBase
Resi = Resu
Resu = Resu\LaBase
Resi = Resi Mod LaBase
Salida = Resi & Salida
Loop
Salida = Resu & Salida
CambiaBase = SalidaCambiaBase = Salida
End Function
Dim iDocument.Write “<Table
Border=1><TR><TH>Número </TH><TH>Base 2</TH> <TH>Base 5</TH> <TH>Base 8</TH> <TH>Base 16</TH></TR>”
For i = 1 To 30Document.Write “<TR><TD>” & i & “</TD><TD>” & CambiaBase(i,2) & “</TD><TD>” & CambiaBase(i,5) & “</TD><TD>” & CambiaBase(i,8) & “</TD><TD>” & CambiaBase(i,16) & “</TD></TR>”
NextDocument.Write “</Table>”
ej052.html
Utilización en Formularios
Al crear un botón:<Input Type=Button Name=Salir OnClick=“SalirPrograma”>
<Script Language=“VBScript”>
Sub SalirPrograma
Window.Close
End Sub
</Script>
Utilización en Formularios
En un hipervínculo:<a href=“ej040.html” OnClick=“SalirPrograma”>Parece que va a
ej040.html pero sale del programa.</a>
<Script Language=“VBScript”>
Sub SalirPrograma
Window.Close
End Sub
</Script>
ej053.html
Eventos
Cosas que pasanQue le pasan a los objetosA las ventanas:Las abren, las cierran
A los documentos:Los cargan
A los botones e hipervínculos:Les dan click
Ejercicio
Hacer un formulario que cargue la página que dibuja tablas de Fils x Cols