Está en la página 1de 11
ESCUELA DE INGENIERIA ASIGNATURA: FUNDAMENTOS DE PROGRAMACION GUIA DE PRACTICA 5 “Y= FUNCIONES: Profesores Responsables: CHECA FERNANDEZ; ROCIO (Coordinadora) GARCIA VILCAPOMA, GLADYS de la Universidad de Limé con lo dispuesto por los derechos de autor: Decreto Legislative 622 SETIEMBRE - 2011 GUIA DE PRACTICA 5 FUNCIONES OBJETIVos: B Definir y utilizar Funciones |B Conocer los parametros por valor. ® Conocer el Ambito de las variables. & Elaborar programas que utilicen funciones. CONCEPTOS: FUNCION Es un mecanismo mediante el cual se recibe como entrada un valor x 0 grupo de valores x1, x2,..2tc. (constante, variable o vector) y mediante un proceso establecido se produce un valor y de salida. Declaracién de una funcion Function NombreFuncion (Lista_Parametros) As TipoRetomado ‘Instrucciones End Function Donde: NombreFuncion: Es el nombre o identificador que se le da a la funcion Lista_Parametros: También llamados argumentos formales, se declaran separados por coma, de la siguiente manera: ByVal Vart As Tipot, ByVal Var2 As Tipo2, TipoRetornado: _Es el valor que de vuelve la funcion, este valor debe estar precedido de la palabra Return. POR EJEMPLO. Esta funcién recibe 3 valores enteros que se asignan a los parémetros n1, n2 y n3 respectivamente y con esos valores calcula el promedio y luego retorna el resultado del promedi Los pardmetros nt, n@ y 3 toman los valores Pardmetros Formales <0 *) lin <=OThen MessageBox Show("ERROR, VUELVA A INGRESAR’, “EL NUMERO DEBE SER >0") Endit Loop Unti'n >0 Do k= VallinputBox("# de elementos en el grupo de combinacion k >0 yk <=n")) ifke= 0 or kon Then MessageBox Show"ERROR, VUELVA A INGRESAR’, ‘EL NUMERO DEBE SER Ock<=n") End if Loop Untilk > 0 And k <= "2. Calcular el ntimero de combinaciones Cnk, liamando 3 veces a la funcién CalFactorial df=n-k comb = CalFactorial (mn) /( CalFactorial ( k )* CalFactorial (dif) ) oe Ki(n— kK)! "3, Mostrar el niimero de combinaciones Crk MessageBox.Show("Nro de Combinaciones = " & comb,) End Sub Function CalFactorial ( ByVal num As Integer ) As Double Dimi As Integer Dim Fact As Double Funcién que calcula el factorial de un nimero Tonum Fact = Fact "i Next Return Fact End Function | End Class Problema 2: Hacer un programa que muestre y calcule los nimeros primos entre 10 y 50. Para determinar si un numero es 0 no primo use una funcién llamada EsPrimo, que reciba un parametro entero n y devuelva true 0 false, segin sea primo 0 no. Version 4 para cada jentre 10 y 50 * mostrar i, si al ser invocada la funcién Es Primo recibiendo i retorna true * finspara mostrar la cantidad de primos encontrada Version 2 Public Class Formt Private Sub BtnEjecutar_Click(8Val sender As System.Object, ByVal e As System. EventArgs) Handles BnEjecutar. Click Dimi, op As Integer ListBoxt Jtems.Add (‘Lista de PRIMOS:") op=0 ‘Cantidad de primos inicializa en 0 "1. para cada jentre 10y 50 + ‘mostrar i, si al ser invocada la funcién EsPrimo recibiendo i retorna true * fin-para Forl=10To 0 Se invoca a lafuncién EsPrimo, y se compara lo que la funcion devuelve con true If EsPrimo(i) = True Then i ListBox! tems. Add (i) op=op+t Endit | Lo cuenta como nto primo Next "2, mostrar la cantidad de primos encontrada ListBox tems. Add("Hay *& cp & " primos") | End Sub Function EsPrimo (ByVal n As Integer) As Boolean’ Si eigin nimero entre 2 y Dimi As integer ivi rt 8 divisor den, pt Primo As Boolean asignar False a Primo. LLuego salir del for porque siun nimero diferente de en eee tynes divisor ya no es primo. Fori=2Tomt tn Mod Primo = false Exit for End if Next i Return Primo End Function End Class Problema 3: Desarrollar un programa que procese las notas de un grupo de n alumnos (n >0). Mediante una funcién llamada CalNotaFinal el programa calculara la nota final en el curso de cada alumno. La Funcién recibira como datos de entrada las notas de tarea académica (peso 3), ‘examen parcial (peso 3), examen final (peso 4). La funcién debe retornar la nota final. Debe verificarse que las notas se encuentren en el rango de 0-20. Versién 1 i “1. asignar el nimero de alumnos a la variable n ‘2. para cada jentre 1 yn * "2.1 asignar las notas a las variables nota1, nota2 y nota3 2.2 mostrar el promedio final de cada alumno i obtenido al invocar a la funcién fin-para Version 2 | Public Class Form1 Private Sub BtnEjecutar_Click(ayV/al sender As System Objet, ByVal e As System Evertags) Handls BinEjeuter Clk Dim notat, nota2 nota, n, i As Integer “1. asignar el nimero de alumnos ala variable n Do 1 = Val(inputBox("# alumnos de la seccion, "Entrega de notes") lin<=0Then MessageBox Show("ERROR, VUELVA A INGRESAR’, ‘EL NUMERO DEBE SER >0") End if Loop unt n > 0 LstBox‘.iters.Add("Notas Finales de la Seccién") ListBox‘. tems Add( "2, para cada ientre 1 y n Fori=1Ton * 24 asignar las notas alas variables nota’, nota2 y nota Do ‘otat = Val(inputBox("Tarea académica:, “Alumno * & i) | ‘nota2 = Val(inputBox("Examen Parcial:*, ‘Alumno * & i) ‘notad = Val nputBox("Examen Final, “Alumno "& i) Hfnotat < 0 Or notat > 20 Or nota2 < 0 Or notae > 20 Or notaS <0 Or notad > 20 Then MessageBox.Show("ERROR, VUELVA A INGRESAR’, ‘LAS NOTAS DEBEN SER (0-20/) End it Loop unt notat >=0 And notat <=20 And nota2 >=0 And notad <=20 And nota >=0 And nota <=20 | + 22mostrar el promedio final de cada alumno i obtenido al invocar ala funcién ListBox! tems. Add("Alumno "& | & vbTab & vbTab & CalNotaFinal(notat, nota2, nota) * fin-para Next End Sub Funetion CalNotaFinal(@yVal ta As integer, ByVal ep As integer, ByVal ef As Intege) As integer Dim suma As Integer Dim NotaFinal As Integer suma=ta*2+ep"4+ef*4 NotaFinal = suma \ 10 | suma Mod 10 >= 8 Then NotaFinal = NotaFinal +1 Endif Return NotaFinal End Function End Class Problema 4: Una empresa de courier reparte paquetes por toda la ciudad, atendiendo como maximo 100 clientes por dia. Para planificar el trabajo diario registra los m repartos del dia, para ello se requiere los siguientes datos: -Nombre de cliente. -Distancia,a recorrer (km). La tarifa para cada entrega'de paquete se basa en: Distancia (km) Tarifa <5 75 (Soles/km) “distancia (km) | 2.5 (soles/km) * distancia (km) Se soliita que el programa muestre un listado de repartos indicando: nombre y_tarfa, para lo cual se empleara la funcién HallarTarifa(). Al finalizar mostrar e! costo total de! combustible para el reparto del dia, sabiendo que rendimiento de! combustible es 14 kmigaién y el galén de combustible cuesta 10 soles, Version 1. “1. Asignar a la variable n el # repartos del dia "2. Para cada i desde 1 hasta n 2.1 Asignar valores para nombre y Distancia en km de cada reparto 2.2 Mostrar en una lista el nombre y la tarifa_cada reparto, para lo cual se invocara previamente a la funcién HallarTarifa() 2.3 Acumular la distancia de cada reparto en la variable KmAcumul Fin del para ‘3. Mostrar el costo del combustible para el reparto del dia Version 2 Public Class Form! Private Sub BtnEjecutar_Click(BVal sender As System Objet, B/Val e As System.EventArgs) Handles BinEjecutar. Click Dim n, i As Integer, Nombre As String Tarifa, kmAcumul,CosTotComb, Distancia As Single “1. Asignar ala variable n el # repartos del dia 11 = Val(InputBox(‘# de pedidos del dia *, "Maximo 100") ListBoxt.ltems.Add('Nombres* & vbTab & vbTab & *Costo Parciat") ListBoxt tems Add('=======" & vbTab & vbTab & " KmAcumul= 0 "2, Para cada idesde 1 hasta n Fori=1Ton ‘21 Asignar valores para nombre y Distancia en km de cada reparto Nombre = InputBox("Nombre del cliente: *, Reparto "&j) Distancia = Val(inputBox(‘Distancia a recorrer (km): *, "Reparto* & i) ‘22 Mostrar en una lista el nombre y latarifa cada reparto, para lo cual se 'invocaré previamente a la funcién HallarTarifa() Tarifa = HallarTarita(Distancia) ListBoxt.Items.Add(Nombre & vbTab & vbTab & Tarifa ) "23 Acumular la distancia de cada reparto en la variable KmAcurnul KmAcumul = KmAcumul + Distancia |Next "3. Mostrar en la lista el CosTotComb de combustible para el reparto del dia CosTotComb = KmAcumul * 10/14 ListBoxt.ltems.Add(‘E! costo Total de combustibl End Sub & CosTotComb) Function HallarTarifa (ByVal ist As Single) As Single Dim Tara as Single Itist <5 Then Tatita= dist" 1.5 Else Tatfa = dist *2.5, End if Return Tarifa | End Function Lend Class: Funcién que calcula la Tarifa de un reparto Problema 5: Desarrollar una aplicacién que calcule el area de un circulo y el volumen de la esfera generada por la rotacién del semicirculo, alrededor de su diametro. Para ello debe declarar el radio r del circulo como variable global. El radio debe ser leido como dato del circulo Para realizar los célculos del area del circulo y de volumen de la esfera generada, utilice dos funciones previamente definidas: + Circulo(ByVal radio as single) As single, y + Esfera (ByVal radio as single) As single: Las cuales tienen como parémetro por valor el radio y retornan el area y volumen respectivamente. Pama Hon cK Aa Public Class Form Dims Single "Variable Formevel, 6 visible en todas las unconeso procadimienos del ormularo Private Sub BtnCirulo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCirculo. Click ‘Declara area (variable local al procedimiento de evento) Dim areaC As Single ‘Asigna valor (variable formeveh : Los procedimientos 1 =Val(nputBoxt'ng. radio :."Ciculo)) ‘Uamada al uncion Cicuo) sin argumentos Deca sastea) ter aeaC = Crcul( & ‘Muestra el aoa onl lista istBoxt S) nay UstBiort tems Addarea del ckeulo ="& areaC) End Sub Private Sub BtnEsfera_Click(By¥al sender As System, Object, ByVal e As System EventArgs) Handles BtnEstoraG Click ‘Variable focal Dim volE As Single ‘Tamada ala funcon Estera() volE = Esfora(’) "Muestra el volumen dela esfora generada ListBoxt Items. Add(El volumen dela estera generada = "& volE) End Sub Function Circulo(ByVal radio As Single) As Single ‘Declara area (variable local ala funcion) Dim area As Single Las funciones pueden ‘area = Math PI “radio ® 2 ser reutiizadas. Es Retum area deci sipreviamente ya End Function han sido definidas, las podemos uta Function Erato A Single Shae, CO tote tteron aetna ‘Deca vel arabe tal al ure) Divo As Sale 13)* Math.PI * radio * 3. Fn ol fd Function PROBLEMAS PROPUESTOS: Problema 1: Escribir una funcién que dados a y b enteros devuelva a’, Problema 2: Un numero entero positivo se dice perfecto si es igual a la suma de todos sus divisores excepto el mismo. Ejemplo: Los nimeros 6 (1+2+3) 28 (1424447414) y 496 (1424448+16+314624124 +248) son perfectos. Escribir un programa que pida el ingreso de un nimero entero mayor que cero y mediante una funcién llamada esPerfecto que recibe como parametro este nimero retomne true si el numero es perfecto y false si no lo es. Problema 3: Dos niimeros se dicen amigos cuando uno de ellos es igual a la suma de todos los divisores del otro excepto el mismo. Ejemplo: los numeros 220 (142+445+10+11420+22+44+55+110=284) 284 (142+4471+142=220) son amigos. Se pide Escribir un programa que solicite el ingreso de dos nimeros enteros mayores que cero, y que invoque a la funcién sonAmigos, pasandole como parametros dichos némeros. La funcién sonAmigos retorna valor true si los numeros son amigos y false si no lo son. Se deberd usar como apoyo otra funcién llamada sumaDivisores, que permita retornar la suma de los divisores de un numero determinado, pasado como parémetro. Problema 4: Escriba un programa que solicite el ingreso de una fecha determinada en formato dia, mes afio. Estos tres datos serén pasados como parémetros a una funcién llamada esFechaCorrecta que retomara un valor légico (true o false). En caso sea true se mostrara un mensaje de fecha correcta en caso contrario se mostraré fecha invalida. Problema 5: Crear un programa que solicite un afio y que llame a una funcién que determine si es 0 no afio bisiesto. Recuerde: "Un afio es bisiesto si es divisible por 400, 0 bien si es divisible por 4 pero no por 100" Problema 6: Desarrollar una funcién de nombre Siguiente que solicite un nimero primo mayor que uno y devuelva el néimero primo inmediato superior a dicho numero primo. Por ejemplo, si se invoca Siguiente(7), la funcién devoiverd el numero 11. El nimero primo ingresado se validara mediante la funcién llamada esPrimo que tiene como parametro ese numero y devolvera true si lo es, false en caso contrario, Problema 7: Hacer un programa que permita el ingreso de las 4 notas de practica que conforman la tarea académica de N alumnos (maximo 30). Para cada alumno se pediran los siguientes datos: Nombres Practica 1 Practica 2 Practica 3 Practica 4 Se deberd crear una funcién llamada hallarTarea que reciba como parémetros la practica 1, practica 2, practica 3 y practica 4. La funcién debe devolver como resultado e! promedio redondeado de las notas, eliminando previamente la mas baja. El programa mostrara un listado de las notas de tarea académica indicando: + Nombres + Promedio de tarea académica + Un mensaje de “Felicitaciones” para aquellos cuya tarea académica es >=16 Problema 8: La computadora de un avién recibe la velocidad registrada por 3 sensores. La computadora toma como la velocidad verdadera aquella que es reportada por 2 0 mas de los 3 sensores; en caso de que los 3 sensores reporten velocidades diferentes de las otras dos, la computadora emite un mensaje de alarma. + Escriba una funcién que reciba 3 velocidades (de tipo entero) y produzca como resultado la velocidad verdadera de acuerdo al criterio anterior; en caso de que las 3 velocidades sean diferentes entre si, la funcién debe producir el resultado ~1 + Lea 3 velocidades verificando que sea mayor que 0; luego invoque al a funcién creada y de acuerdo al resultado emita el mensaje: “velocidad actu: 0 el mensaje “Alarma: problemas en los sensores de velocidad, solicitar ayuda al aeropuerto’ Problema 9: Desarrollar una aplicacién que permita el ingreso de un numero entero y muestre en pantalla la siguiente informacion: 1) Cantidad de cifras, 2) Suma de cifras impares, 3) Suma de cifras pares, 4) Suma total de cifras, 5) Cifra mayor, 6) Cifta menor y 7) suma de divisores 8) Divisores de dicho némero. Use funciones, Problema 10: Definir una funcién para calcular el enésimo elemento de la serie FIBONACCI: 1, 1, 2, 3, 5, 8,13,.... Utilizar dicha funcién para calcular el enésimo elemento de la serie fibonacci solicitado por el usuario. El programa procesaré las solicitudes hasta que el usuario decida no continuar. Problema 11: Desarrollar una funcién que reciba como parémetro un némero entero y calcule la suma de los digitos de dicho némero. Utiizar dicha funcién para calcular la suma de los digitos de 8 némeros ingresados por el usuario. Problema 12: Desarrollar un algoritmo para un programa que halle el elemento n de la serie: 1248 16 3264 128... para N=0,1,2,3,4,5,6,7,8, Utiizar dicha funcién para calcular y mostrar los enésimos valores de la serie cuyas posiciones N son ingresadas, hasta que el usuario ya no desee seguir. Problema 13: Desarrollar un programa que solicite las dimensiones de un recténgulo y calcule mediante funciones: a) El area de un rectangulo conocido su base y su altura b) El erimetro de un recténgulo conocida su base y altura. c) La diagonal de un recténgulo conocida la base y la altura. d) El Angulo entre la diagonal y la base, conocida la base y la altura Problema 14: En un experimento de cultivo de bacterias, el nimero de bacterias en un instante T (en minutos) esta dado por: N(T) = Noe" ‘Siendo No el numero de bacterias en el instante T= + Desarrolle una funcién con parametros T y No que calcule el némero de bacterias en el instante T + Empleando la funcién creada, mostrar el nimero de bacterias en los 5, 7,9 ,0024 Nota: para calcular e” se usa la funcién exp tantes T=3, DEBE RECORDAR QUE: PASO DE PARAMETROS POR VALOR En la llamada con paso de parémetros por valor: ~ El valor de los argumentos se copian en los parametros formales. Estos parametros formales funcionan como variables locales. Por tanto deben existir tantos parametros formales en la definicién de la funcién como argumentos existan en la llamada ~ Los argumentos pueden ser variables o valores. ~ La seccién del programa que llama comunica un valor a la funcién procedimiento invocado. @ VARIABLES LOCALES, DE NIVEL FORMULARIO Y GLOBALES. En Visual Basic Net el lugar donde sea declarada una variable afectara el uso que el Programa quiera hacer de esa variable. Las reglas basicas que determinan como una variable puede ser usada dependen de tres lugares donde se puede declarar una variable. - El primer lugar es dentro de cualquier funcion o procedimiento, a estas se les llama variables locales y solo pueden ser usadas por instrucciones que estén dentro de esa funci6n o procedimiento. - El segundo lugar es como parémetro de una funcién, donde después de haber recibido el valor podré actuar como variable local en esa funcién o procedimiento. En esencia una variable local solo es conocida por el cédigo de esa funcin o procedimiento y es desconocida por otras funciones 0 procedimientos. - En tercer lugar es fuera de todos los procedimientos o funciones. Si la variable se deciara con la clausula Dim al inicio de un formulario se denomina variable nivel formulario (form-level) y puede ser usada por cualquier funcién o procedimiento contenido en el formulario. Si la variable se declara con el modificador Public dentro de un médulo (module) se denomina variable global y puede ser usada por cualquier funcién o procedimiento de la aplicacién En programacién no es una buena practica usar demasiadas variables globales ni demasiadas variables Form-level (nivel formulario) por dos razones. Una de ellas es que dichas variables estén “vivas" (en memoria) todo el tiempo de ejecucién y si son usadas por algunos procedimientos no tiene caso que este disponible para todos los demas. Otra razon @s que un conjunto de procedimientos y funciones tienen acceso a ellas y comparien su valor, siendo posible que inadvertidamente alguno las modifique innecesariamente. 10

También podría gustarte