Subrutinas y funciones
Download
Report
Transcript Subrutinas y funciones
Subrutinas y Funciones
13 de Febrero de 2007
Problema
Construya un programa que:
Dibuje una tabla de 10x12
Luego una tabla de 8x11
Luego otra más de 15x10
3 tablas de diferente tamaño
¿Y si fueran 5? ¿7? ¿10?
Algoritmo Tradicional
Dibujar la tabla de 10x12
Dibujar 10 filas
En cada fila dibujar 12 celdas
Dibujar la tabla de 8x11
Dibujar 8 filas
En cada fila dibujar 11 celdas
Dibujar la tabla de 15x10
Dibujar 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>”
3 Iteraciones
Dim i,j
Document.Write “<Table>”
1
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>”
2
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>”
3
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>”
Parámetros
Dim i,j
Document.Write “<Table>”
1
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>”
2
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>”
3
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
Encabezado
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
Final
Nombre de la Subrutina
Sub DibujaTabla(Filas,Columnas)
Parámetros
Los
parámetros son
como variables
Subrutinas
Procedimientos o agrupaciones de
instrucciones
Que realizan una tarea concreta
Que 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 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
</Script>
<P Align=Center>Este texto estará al final de las tres
tablas</P>
</Body>
</HTML>
ej048.html
Parámetros
Dim i,j
Document.Write “<Table>”
1
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>”
2
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>”
3
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,Relleno)
‘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>” & Relleno & “</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table><BR>”
End Sub
Más Parámetros
Sub DibujaTabla(Filas,Columnas,Relleno,Borde)
‘Dibuja una tabla
Dim i,j
Document.Write “<Table Border=“ & Borde & “>”
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 Ámbito
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
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,3
Document.Write “</TD>”
Next
Document.Write “</TR>”
Next
Document.Write “</Table></Center>”
ej050.html
Convertir a Binario
Se divide la entrada entre 2
Si es el primer residuo solo se coloca
De lo contrario
1.
2.
3.
1.
Se coloca el residuo a la izquierda del residuo anterior
Si el resultado es mayor o igual que 2
4.
1.
Tomarlo como entrada y volver a paso 1
De lo contrario
5.
1.
2.
Colocar el resultado a la izquierda del residuo anterior
Fin del algoritmo
Subrutina
1.
2.
3.
Se divide la entrada entre 2
Si es el primer residuo solo se
coloca
De lo contrario
1.
4.
Si el resultado es mayor o
igual que 2
1.
5.
Se coloca el residuo a la
izquierda del residuo anterior
Tomarlo como entrada y
volver a paso 1
De lo contrario
1.
2.
Colocar el resultado a la
izquierda del residuo anterior
Fin del algoritmo
¿Nombre?
¿Parámetros?
¿Variables locales?
Subrutina
1.
2.
3.
Se divide la entrada entre 2
Si es el primer residuo solo se
coloca
De lo contrario
1.
4.
Si el resultado es mayor o
igual que 2
1.
5.
Se coloca el residuo a la
izquierda del residuo anterior
Tomarlo como entrada y
volver a paso 1
De lo contrario
1.
2.
Colocar el resultado a la
izquierda del residuo anterior
Fin del algoritmo
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
ej051.html
Funciones
Tienen
Nombre
Parámetros
Variables locales
Igual que una subrutine
Devuelven un valor
A = 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 = 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 = Salida
End Function
Dim i
Document.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 30
Document.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>”
Next
Document.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 pasan
Que le pasan a los objetos
A 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