Resumen Subprogramas y Funciones del Usuario - 1- SUBRUTINAS o Subprogramas Y FUNCIONES Un subprograma o subrutina es una parte de codificación que realiza un proceso o procedimiento al que se puede acceder desde varias partes del programa, con el fin de no repetir codificación. Los subprogramas normalmente serán de tipo público y se les llamará desde cualquier procedimiento público o privado, pudiendo llevar variables o no. Llamadas al subprograma Call borrar Call retraso(dato) Subprograma…………………… Public Sub borrar ( ) ……………… End Sub Call errores (entrada,sino) Public Sub retraso (mm) ……………… End Sub Las funciones son similares a los subprogramas ya que también tendrán un nombre y se podrán llevar o no variables. llamada a la función ……… Val(num) cambiosigno(n) redondeo(num,3) Función ……………………………… Public Function redondeo(xx,yy) ………………. redondeo=……… (Siempre nombre función=…) End Function La diferencia entre subprogramas y funciones está en que las funciones al realizar un proceso retornan un valor y el subprograma no. PASO POR VALOR Y PASO POR REFERENCIA Al pasar variables a los subprogramas o funciones, estas se podrán hacer por valor, declarando las variables como ByVal o por referencia declarando las variables como ByRef. La diferencia consiste en que las variables ByVal envían una copia de la variable, por lo que el subprograma o función no variará su contenido en el programa principal y las ByRef envían un puntero a la variable, por lo que si modificará el contenido de la variable en el programa principal. Public Function redondeo (ByVal n as integer, ByVal m as integer ) as long Public Function redondeo (n as integer, m as integer ) as long Public Function redondeo (n, m) Public Function calculo (ByVal xx, ByRef yy) (Si no se especifica ByVal, el paso de variables será por referencia, ByRef) Resumen Subprogramas y Funciones del Usuario - 2- FUNCIONES DEL USUARIO Las funciones se crean mediante Herramientas, agregar función • Diseño de la función sin argumentos Public Function Proceso ( ) ………………. Proceso=….. End Function Una vez diseñada la función proceso( ) se podrá utilizar como las funciones del sistema: Private Sub Command1_Click() ……………………….. Picture1.print proceso ( ) ………………………. Text2= proceso/5 End Sub • Diseño de la función con un argumento/s Public Function fraccion (n ) tot=2 fraccion=......tot * n........ End Function Public Function fraccion (x,y ) m=2 +x : n=tot-y fraccion=........m - sqr(n)... End Function Una vez diseñada la función fraccion(x) se podrá utilizar como las funciones del sistema Private Sub Command1_Click() picture1.print fraccion(3) ………………………. Tot=fraccion(deci) + dato .......................... End Sub Private Sub Command1_Click() picture1.print fraccion(3,dat) ………………………. Tot=fraccion(deci,vari) + dato .......................... End Sub Resumen Subprogramas y Funciones del Usuario - 3- • Declaración de las variables Las variables de Entrada a la Función estarán declaradas en el procedimiento o en General Declaraciones. Las variables utilizadas exclusivamente en la función, se declararán en la propia Función. Por ejemplo, Sumar números consecutivos entre dos valores dados Private Sub Command1_Click() Dim num1 As Integer, num2 As Integer num1 = Val(InputBox("Teclear indice 1")) num2 = Val(InputBox("Teclear indice 2")) Picture1.Print suma(num1, num2) End Sub Public Function suma (ByVal li as integer, ByVal ls as integer ) as long Dim ind as integer For ind=li to ls Suma=suma+ind Next ind End Function • Otras formas Public Function redondeo (ByVal n as integer, ByVal m as integer ) as long Public Function redondeo (n as integer, m as integer ) as long Public Function redondeo (n, m) Public Function calculo (ByVal xx, ByRef yy) (Si no se especifica ByVal, el paso de variables será por referencia, ByRef) Resumen Subprogramas y Funciones del Usuario - 4- • La utilización de tablas/matrices en las funciones Por ejemplo: Sumar los datos de una tabla entre dos índices dados Private Sub Command1_Click() Dim tabla(10) As Integer Dim num1 As Integer, num2 As Integer Call cargadatos(tabla, 10) '……(Ver Subprogramas) For i = 1 To 10 Picture1.Print tabla(i) Next i num1 = Val(InputBox("Teclear indice 1")) num2 = Val(InputBox("Teclear indice 2")) Picture2.Print suma(tabla, num1, num2) End Sub Public Function suma(ByRef ta() As Integer, ByVal x As Integer, ByVal y As Integer) As Single Dim indice As Integer For indice = x To y suma = suma + ta(indice) Next indice End Function Public Sub cargadatos(ta, xx) Dim i As Integer Randomize For i = 1 To xx ta(i) = Fix(Rnd * 100) Next i End Sub Resumen Subprogramas y Funciones del Usuario - 5- SUBRUTINAS o Subprogramas Los subrutinas o subprogramas se crean mediante Herramientas, agregar procedimiento Al ser procedimientos PÚBLICOS se podrán acceder (CALL) desde el resto procedimientos del programa. de No devuelven un resultado como las funciones, si se desea obtener un resultado de salida, se deberá indicar alguna variable de entrada como variable ByRef o incluir una variable diferente a las utilizadas en el proceso, como ByRef para obtener un resultado de salida. • Diseño del subprograma sin argumentos Public Sub subpro1 ( ) ................. ……………… End Sub Private Sub Command1_Click() ……………………….. CALL subpro1 End Sub • Diseño del subprograma con uno o varios argumentos SOLAMENTE DE ENTRADA Public Sub subpro2(n,m) ................n.................. .........................m........ End Sub Private Sub Command1_Click() ……………………….. CALL subpro2(dato,5) End Sub Private Sub Command1_Click() op = Val(InputBox("Teclear opción 1/2")) If op = 1 Then Call proteger Else Call desproteger End If End Sub Public Sub proteger() Public Sub desproteger() End Sub End Sub Text1.Visible = False Text2.Visible = False Text1.Visible = True Text2.Visible = True Resumen Subprogramas y Funciones del Usuario - 6- • Diseño del subprograma con uno o varios argumentos DE ENTRADA Y UNO DE SALIDA Por ejemplo control de una variable de entrada, con mensaje de error si todos sus caracteres no son numéricos Private Sub Command1_Click() Dim dato As String, num As Integer, er As Boolean dato = InputBox("Teclear dato numérico entero") Call control(dato, er) ‘…………………..control(dato, longitud, er) If er = True Then '………………........If er = "si" Then MsgBox "Entrada errónea" Else MsgBox "Entrada correcta" num = Val(dato) Picture1.Print num, num ^ 2 End If End Sub Public Sub control(valor, error) Dim i As Integer error = False '……………………..….....error="no" For i = 1 To Len(valor) c = Mid(valor, i, 1) If c < "0" Or c > "9" Then error = True '………………....error="si" End If Next i End Sub Otra información, sobre funciones y subprogramas (subrutinas): http://www.recursosvisualbasic.com.ar/htm/tutoriales/tutorial-basico4.htm#subrutinas