Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple [email protected]...

27
Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple [email protected] om Disponible en: http://www.ingenieriasimple.com/introp right 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados

Transcript of Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple [email protected]...

Page 1: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

Subrutinas y Funciones

Leonel Morales Díaz

Ingeniería Simple

[email protected]

Disponible en: http://www.ingenieriasimple.com/introprograCopyright 2008 by Leonel Morales Díaz – Ingeniería Simple.

Derechos reservados

Page 2: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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?

Page 3: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 4: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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>”

Page 5: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 6: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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>”

Page 7: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 8: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 9: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 10: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 11: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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>”

Page 12: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 13: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 14: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 15: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 16: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 17: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 18: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 19: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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?

Page 20: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 21: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

Funciones

TienenNombreParámetrosVariables locales Igual que una subrutine

Devuelven un valorA = F(X,Y)

Page 22: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 23: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 24: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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>

Page 25: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 26: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

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

Page 27: Subrutinas y Funciones Leonel Morales Díaz Ingeniería Simple leonel@ingenieriasimple.com Disponible en:  Copyright.

Ejercicio

Hacer un formulario que cargue la página que dibuja tablas de Fils x Cols