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 - 2011GUIA 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
Dok= 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 SubFunction 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 SubFunetion 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 SubFunction 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