Está en la página 1de 5

Gua 4: Procedimientos y Funciones

Lic. Manuel Camejo, Charly Talavera, Fernando Caceres.


27 de marzo de 2017

No te preocupes si no funciona bien. Si lo hiciera, estaras sin trabajo. - Dont worry if it doesnt
work right. If everything did, youd be out of a job. - Moshers Law of Software Engineering.

1. Introduccion
Los problemas, en la mayora de los casos, son complejos de resolver si uno los abarca en su totatildad,
sin embargo, dividiendo el problema en problemas mas pequenos, podemos ver que esos subproblemas son mas
sencillos que el original. A su vez, estos subproblemas pueden dividirse en otros mas pequenos y as llegar hasta
tener acciones atomicas (como vimos en la Gua 1 - Introduccion a la Algoritmia). Estas acciones atomicas,
pueden agruparse de tal manera que resuelvan un problema puntual, y que pueden utilizarse para resolver ese
problema puntual cada vez que se necesite. Pensemos el problema de pagar con tarjeta de debito, ya sea en la
carnicera, en el supermercado, en la ferretera o en un local de ropa, los pasos son siempre los mismos. A este
conjunto de pasos que se realiza siempre en el mismo orden para resolver un problema puntual se lo denomina
procedimiento.
Los procedimientos generalmente necesitan datos para poder resolver el problema, a estos datos se los denomina
parametros. Pensemos el caso de un procedimiento que calcule la edad de una persona, esto claramente depende
de la fecha de nacimiento, entonces el procedimiento necesitara que se le pase como parametro la fecha de
nacimiento de la persona.
A un procedimiento se le pueden pasar parametros de 2 formas:

Por valor: Es como cuando alguien nos pide que le demos una fotocopia del documento, la usa, la modifica,
la firma, la puede romper, pero siempre sobre la copia, nuestro documento queda intacto.
Por referencia: Es como cuando le damos a un profesor la libreta para que nos la firme, le pone la fecha
en la que rendimos, la nota, la firma y nos la devuelve, modificada.

Entonces, si pasamos un parametro por valor, el procedimiento recibira una copia, y si lo pasamos por referencia,
recibira el original, por lo que si se modifica dentro del procedimiento, nos volvera modificado.
A su vez, los procedimientos pueden devolver un valor, a este tipo de procedimientos se los denomina funciones.
Pensemos el caso en que nos subimos a una balanza a pesarnos, la balanza recibe como parametro a nuestro
cuerpo, y nos devuelve un valor, que es nuestro peso expresado en kilos.

2. Objetivo
En esta gua se aprendera a modularizar los problemas, logrando programas mas legibles y entendibles.
Asmismo se busca que aprendan el correcto uso y envo de parametros.

3. Forma de resolucion
Supongamos que entramos al banco Algo1Mendez y tenemos que hacer varios tramites. Por un lado quere-
mos consultar el saldo que tenemos en la cuenta, si este saldo es mayor a $100 vamos a retirar una suma de
dinero ingresada por el usuario, y si no, vamos a solicitar un prestamo por $1000.

1
3.1. Analisis del problema
El problema puede ser dividido en varios subproblemas:
Consultar el saldo: El cajero nos solicitara la clave y nos dara como resultado en saldo en nuestra
cuenta. A los fines practicos tomaremos que cualquier clave ingresada sera valida y el saldo sera un numero
aleatorio entre 0 y 1000. Este procedimiento devolvera un entero (porque tomaremos como convencion que
el saldo es un numero entero) por lo que se denomina funcion. Cabe aclarar que esta funcion no recibe
parametros.
Retirar dinero: Solo retiraremos dinero si el saldo es mayor o igual a $100. Este procedimiento debe
recibir como parametro el saldo, y ademas sera modificado ya que el dinero que retiremos debe ser des-
contado del saldo inicial. Tambien hay que tener en cuenta que no podemos retirar mas dinero del que
tenemos en la cuenta.

Solicitar prestamo: Solicitaremos un prestamo en caso de tener menos de $100 en la cuenta, el monto
a solicitar sera de $1000 y deberan ser descontados a nuestro saldo en la cuenta, es decir, quedaremos
con saldo negativo. El prestamo puede o no ser aprobado, en caso de que nuestro DNI sea par, se apro-
bara, en caso contrario, no. El procedimiento recibira como parametros el saldo (por referencia porque
lo modificaremos en caso de que nos aprueben el prestamo) y el numero de DNI (por valor ya que no lo
modificaremos).

3.2. Resolusion
#i n c l u d e <s t d i o . h>
#i n c l u d e < s t d l i b . h>
#i n c l u d e <time . h>

int consultarSaldo () {
i n t s a l d o = rand ( ) %1001; // Da un v a l o r e n t r e 0 y 1000
p r i n t f ( Su s a l d o e s : $ %i \n , s a l d o ) ;
return saldo ;
}

void r e t i r a r D i n e r o ( i n t saldo ) {
int dineroRetirar ;
do {
p r i n t f ( I n g r e s e e l monto a r e t i r a r : ) ;
s c a n f ( %i , &d i n e r o R e t i r a r ) ;
} while ( ( d i n e r o R e t i r a r > saldo ) | | ( d i n e r o R e t i r a r < 0) ) ;
saldo = saldo dineroRetirar ;
p r i n t f ( Su nuevo s a l d o e s : $ %i \n , s a l d o ) ;
}

void s o l i c i t a r P r e s t a m o ( i n t saldo , i n t dni ) {


i f ( d n i % 2 == 0 ) {
p r i n t f ( Prestamo aprobado ! \ n ) ;
saldo = saldo 1000;
p r i n t f ( Su nuevo s a l d o e s : $ %i \n , s a l d o ) ;
} else {
p r i n t f ( Prestamo r e c h a z a d o ! \ n ) ;
p r i n t f ( Su s a l d o e s : $ %i \n , s a l d o ) ;
}
}

i n t main ( ) {
// Esto e s n e c e s a r i o para g e n e r a r numeros a l e a t o r i o s
s r a n d ( time (NULL) ) ;

int saldo = consultarSaldo () ;


i f ( saldo > 100) {
r e t i r a r D i n e r o (& s a l d o ) ;
} else {
i n t dni ;
p r i n t f ( I n g r e s e su DNI : ) ;
s c a n f ( %i , &d n i ) ;

2
s o l i c i t a r P r e s t a m o (& s a l d o , d n i ) ;
}
}

4. Ejercicios
1. El Comandante fue un personaje muy inspirador para todos los integrantes de esta catedra. Escribir un
procedimiento que muestre por pantalla la frase celebre Yo no manejo el rating, yo manejo un rolls
royce.
2. Truco 1 - Escribir una funcion que reciba los datos de 3 cartas de una baraja espanola y devuelva 1 si
en la mano se tiene flor o 0 si no se tiene.
3. Truco 2 - Escribir una funcion que reciba los datos de 3 cartas de una baraja espanola y devuelva el
tanto para envido que se tiene.
4. La cerveza de mercado esta bajando su calidad, por lo que muchas personas decidieron empezar a realizarla
artesanalmente. Pablo es uno de ellos y las envasa en botellas de 750 cm3 (desde ese momento se lo conoce
como El Baron De La Cerveza). Crear una funcion que reciba la cantidad de litros que realizo y devuelva la
cantidad de botellas que tiene que comprar. Ademas se debe devolver en un parametro los cm3 sobrantes.
(1 litro=1000 cm3 )
5. Pan y Queso 1 - Damian y Capurro no se ponan de acuerdo sobre quien le tena mas miedo a The Evil
Man, por lo que decidieron averiguarlo jugando al Pan y Queso, el que pisara al otro es el que mas miedo
le tiene. Crear una funcion que devuelva D si el que le tiene mas miedo es Damian o C si es Capurro. La
funcion recibe como parametro el largo del pie de cada uno y la distancia que los separa (no se permiten
saltitos ni nada de esos trucos).
6. Piletas 1 - The Evil Man aprovecho el verano y puso un negocio de piletas circulares, sin embargo, todos
los clientes poseen patios rectangulares.
Crear una funcion que reciba ancho y largo del patio, el radio de la pileta que se quiere realizar y
devuelva si la pileta entra o no.
Las piletas deben tener un mnimo de 50 cm entre la pared y la pileta propiamente dicha. Que
cambiara del algoritmo anterior para resolver este inconveniente?
The Evil Man necesita un procedimiento que si el valor de radio es demasiado grande para ese patio,
devuelva en esa variable el valor maximo soportado por el patio.
7. Piedra, Papel o Tijeras 1 - Disconforme con el resultado del Pan y Queso, Capurro desafa a Adriano
a que no puede ganarle al Piedra, Papel o Tijeras.
Crear un procedimiento que reciba una letra y muestre por pantalla un texto dependiendo de la letra
recibida (E = Empate, A = Gano Adriano, C = Gano Capurro).
Crear una funcion que reciba una jugada de cada jugador y devuelva el resultado de la partida (E
= Si empataron, A = si gano Adriano, C si gana Capurro).
Crear una funcion que reciba tres jugadas de cada jugador y devuelva el resultado de la partida (E
= Si empataron, A = si gano Adriano, C si gana Capurro).
Crear un programa que le pida a los jugadores sus jugadas y utilice los puntos anteriores para
determinar el ganador.
Luego de una ardua batalla deciden ver la serie The Big Bang Theory en la cual ven que existe una
extension del juego llamada Piedra, Papel, Tijeras, Lagarto o Spock. Analizar los cambios que
implica programar esta extension del juego.
8. Letras 1 - Para cada caso, escribir un algoritmo que resuelva lo pedido, contemplando que el usuario
puede ingresar cualquier caracter en todos los casos.
a) Transforme una letra a mayuscula.
b) Transforme a mayuscula la letra si es minuscula o a minuscula si es mayuscula.

3
c) Informe si una letra es vocal.
d ) Informe si una letra es consonante.

9. Botonera 1 - Es de publico conocimiento la existencia de una botonera que contiene las frases expresadas
por El Comandante en una aireada discusion con su madre sobre un corte de looz. Se pide desarrollar un
menu en el cual el usuario pueda ingresar un numero y se muestre por pantalla la frase del comandante
asociada a ese numero, tantas veces como quiera. El menu debe contar con una opcion para salir.

10. Paradoja de Zenon - Si uno se encuentra a cierta distancia de un punto y se acerca a el con pasos de
la mitad de la distancia que los separa en el momento de dar el paso, nunca llegara a ese punto, pero se
puede acercar tanto como uno quiera.
a) Escribir una funcion que reciba por parametro la distancia y la cantidad de pasos a realizar y devuelva
la distancia a la que nos encontraremos del punto luego de realizar los pasos.
b) Escribir una funcion que reciba la distancia inicial y cuan cerca se quiere estar del punto y devuelva
la cantidad de pasos que hay que realizar.
11. Se cuenta con un auto cuya autonoma, con el tanque lleno, es de 200 km. Escribir un procedimiento que
reciba la distancia a recorrer y determine la cantidad de veces que se debera cargar el tanque.
12. Cuenta la leyenda que The Evil Man se volvo al lado oscuro debido a la cantidad de tomatazos que recibio
en su intento de ser un rockstar. De cada 100 personas que lo escuchaban cantar, 30 de ellas le tiraban 4
tomates cada uno. Escribir una funcion que reciba la cantidad de gente que lo escucho cantar y devuelva
la cantidad de tomatazos recibidos por The Evil Man.
13. Damian usa una lista acotada de emoticones. Crear una funcion que dados 2 caracteres, determine si son
un emoticon de los usados por Damian.
Emoticones usados: :) :( :S :P ;) B)
14. Ley de Gravedad - Escribir un algoritmo que determine con que velocidad tocara el suelo un objeto
dada la altura a la que se lo deja caer.
15. Calculadora - Disenar un algoritmo que permita sumar, restar, dividir o multiplicar (segun el usuario
desee) dos numeros.
Extenderlo para que se pueda usar tantas veces como uno quiera, incluyendo la opcion de Salir.
16. Manuel quiere llevar facturas a sus alumnos de la facultad. Tiene un total de 60 alumnos inscriptos. Quiere
llevar una factura para cada uno, pero como no le gusta que sobren quiere que hagamos un programa
que le diga que cantidad de facturas tiene que llevar cada semana. Los detalles a tener en cuenta son los
siguientes:

Si el da esta soleado, no hay alteracion en la cantidad de alumnos, pero si esta lluvioso, la tasa de
asistencia disminuye un 30 %.
Si la temperatura esta entre 10 y 28 grados, no hay alteracion en la cantidad de alumnos. Si hay mas
de 28 grados, tampoco hay alteracion en la cantidad de alumnos. Pero hace mucho calor como para
comer facturas, as que no lleva. Si hace menos de 10 grados, la asistencia disminuye un 15 %.
Si no hay subtes, no afecta la asistencia. Si no hay tren, la asistencia disminuye un 20 %. Si Paseo
Colon esta cortada, la asistencia disminuye un 5 %.

Hacer una funcion que reciba el clima, la temperatura y el estado del transito y devuelva la cantidad de
facturas que hay que llevar.

17. Boxeo 1 - Las peleas de boxeo pueden terminar reglamentariamente por 2 motivos, o bien se llega al final
de la cantidad de rounds pactado entre ambos participantes o bien uno de los dos boxeadores gana por
knock out. A su vez cada uno de los boxeadores, al finalizar cada round recibe puntos por su desempeno,
este puntaje va entre 1 y 10. Desarrollar un programa que simule una pelea entre dos boxeadores.

4
18. En una carpintera se realizan sillas, mesas y bibliotecas. Cada silla insume 10 clavos y 100 ml de pegamento
y se cobra $200, cada mesa 25 clavos y 200 ml de pegamento y se cobra $500 y cada biblioteca 50 clavos
y 350 ml de pegamento y se cobra $700. La carpintera empieza el da con una cantidad determinada de
clavos y pegamento, y trabaja hasta quedarse sin recursos. Los clientes pueden solicitar cualquier cantidad
de sillas, mesas y bibliotecas. Crear un algoritmo que simule el trabajo diario de la carpintera e informe
al finalizar el da cuantas sillas, mesas y bibliotecas se vendieron y cuanto fue lo recaudado.
19. Charly tiene la esperanza de ser famoso, as que fue a un casting de un reality show de talentos a bailar
reggaeton y demostrar lo que sabe. Lamentablemente no quedo, pero los jueces se enteraron de sus ha-
bilidades en programacion y le pidieron una mano. Necesitan un programa que les facilite la seleccion de
gente. La cantidad de gente que se postula por da vara enormemente. Por da, solo pueden aceptar a 20
hombres (13 adultos y 7 menores) y 20 mujeres (13 adultas y 7 menores) para que pasen a la siguiente
fase. Y suelen ser los primeros 20 que superen el puntaje de 35. Cuando consiguen las 40 personas, cierran
el casting hasta el da siguiente.

Charly ya hizo el main del programa, y nos encargo que hagamos un procedimiento que reciba la cantidad
de gente postuladas en ese da. Y que por cada postulado pregunte las siguientes caracteristicas: talento,
carisma, presentacion, innovacion, estilo, sexo y edad. Y si el promedio es mayor a 35, muestre por pantalla
un mensaje que indique que pasa a la siguiente fase, sino que muestre un mensaje que no paso.
El talento, carisma, presentacion, innovacion y estilo es un puntaje entre 1 y 10. Si completan la cantidad
de hombres y no de mujeres (o viceversa) siguen entrevistando gente hasta alcanzar el tope en ambos.
20. La fabricacion de cervezas de Pablo fue un exito. Las consumio casi todas en pocos das, pero se olvido
de darles una muestra a sus amigos. Por suerte le quedo una, pero no sabe si darsela a DarthMendez o a
The Evil Man. Por eso ideo el siguiente complejo sistema de eleccion:
Recibe un numero de DarthMendez y otro de The Evil Man:
Si el numero de DarthMendez es perfecto. DarthMendez gana, sin importar el resultado de The Evil
Man.
Si el numero de The Evil Man es apocalptico, lo gana The Evil Man.
Si el numero de DarthMendez es deficiente, lo gana The Evil Man.
Si el numero de The Evil Man es bondadoso, lo gana DarthMendez. Sin importar si el numero de
Darth Mendez es deficiente.
Si ambos numeros son amigos, es un empate. Sin importar los resultados individuales.
Perfecto: Todo numero natural que sea igual a la suma de sus divisores. 6 es igual a 1+2+3. Tambien
estan el 28 y 498.

Apocaliptico: Todo numero natural tal que la suma de sus digitos, divida al 666. Por ejemplo 11. La
suma es 2 y divide a 666. Otro ejemplo es el 20 y el 51.

Deficiente: Todo numero natural que cumple que la suma de sus divisores propios es menor que el propio
numero. Por ejemplo 16. Sus divisores son 1, 2, 4 y 8. Y la suma da 15.

Bondadoso Todo numero tal que la suma de sus dgitos sea primo. Por ejemplo 430. La suma da 7, y es
un numero primo. Otros: 21, 776984981.

Amigos: Dos nmeros naturales que cumplen que la suma de los divisores propios de cada uno de ellos da
como resultado el otro numero.Por ejemplo 220 y 284 son amigos. 17 296 y 18 416 tambien.
Hacer una funcion que reciba dos numeros y decida quien es el ganador.

También podría gustarte