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