universidad don bosco facultad de estudios tecnológicos

Anuncio
Guía # 10: Funciones definidas por el programador, Parte II
UNIVERSIDAD DON BOSCO
FACULTAD DE ESTUDIOS TECNOLÓGICOS
COORDINACION DE COMPUTACION
CICLO: 01/ 2015
Nombre de la Practica:
Lugar de Ejecución:
Estimado:
MATERIA:
GUIA DE LABORATORIO #10
Funciones definidas por el programador, Parte II
Centro de Computo Tiempo
2 horas y 30 minutos
Introducción a la Programación
I. OBJETIVOS
Que el alumno sea capaz de:

Determinar correctamente cuando utilizar un parámetro por valor o un parámetro por referencia.

Seleccionar el listado apropiado de parámetros que utilizara una nueva función al ser invocada.

Transferir correctamente arreglos y matrices entre funciones por medio de parámetros.

Desarrollar diferentes definiciones para una misma funcion (sobrecarga de funciones)
II. INTRODUCCION TEORICA
Tipo de dato de retorno de una función
Las funciones en C++ las podemos dividir en varios tipos:
Procedimiento
Es una función que realiza una tarea específica pero que no devuelve valores al programa principal o a la
función que la llamó. El tipo de dato de retorno se indica con void.
void funcion()
Función
Función que realiza operaciones con los argumentos o manipulan datos y devuelven un valor
(TipoDatoRetorno) con la sentencia return(expresión).
TipoDatoRetorno funcion(ListaParametros){
...
return(expresión);
…
}
Una vez que se ejecuta una sentencia return(), termina la ejecución de la función.
1
Guía # 10: Funciones definidas por el programador, Parte II
Una función puede tener cualquier número de sentencias return en su cuerpo de instrucciones, pero al menos
debe haber una.
El valor a retornar puede ser el resultado de alguna operaciones ó un indicador de si la manipulación de los
datos ha sido exitosa o no. El tipo de dato a devolver (TipoDatoRetorno) puede ser:
+ Tipo dato simple (int, char, etc.)
+ Tipos compuestos (struct)
+ Matrices
+ Cualquier objeto/puntero de C++
Cuando se llama a este tipo de funciones, puede haber una variable que guarde el valor que devolverá la
función, es decir, la función se escribe en una sentencia de asignación, por ej.
TipoDatoRetorno variable;
variable = funcion(ListaParametros);
Lista de parámetros de una función
C++ proporciona dos métodos para realizar ésta transferencia de datos hacia o desde una función.
• Paso de parámetros por valor
• Cuando se llama a la función, se pasa solo el valor de la variable argumento.
• Este método también se llama paso por copia.
• El compilador hace una copia de los parámetros. Esto implica que cualquier modificación en el valor
de los parámetros no se mantiene cuando termina la función.
• Este método se utiliza cuando no se necesita que se modifiquen los argumentos con los que se llama
a la función
Para pasar un parámetro por referencia, hay que poner el operador de dirección & detrás del tipo del
parámetro, ej.:
void inversa (int &a){
}
Los arrays como parámetros
No hace falta añadir el operador de dirección & cuando el parámetro que se pasa en un array.
Sobrecarga de funciones
Lenguaje C++ permite definir varias funciones diferentes y que cuente cada una de ellas con el mismo
identificador. A este listado de varias funciones llamadas igual se le conoce como “Sobrecarga de funciones”.
En otras palabras, sobrecargar una función significa incluir más de una definición de la misma función
C++ tiene muchas funciones sobrecargadas, por ej.
Cuando usted invoca a la función pow(x,y) incluida en la biblioteca de funciones matemáticas math.h, la
función viene sobrecargada, para que dependiendo del tipo de datos que le pasemos (argumentos) al
invocarla, el compilador seleccione a una u otra definición de función.
Se puede implementar sobrecarga para cualquier función, pero con la única condición que en el encabezado de
cada una de ellas, el número y/o el tipo de los parámetros sean distintos.
2
Guía # 10: Funciones definidas por el programador, Parte II
Esta combinación diferente de parámetros y de tipo de retorno, permite al compilador elegir ¿Cuál de las de las
definiciones de funciones ejecutara?
Resolución de sobrecarga
Cuando se realiza la invocación de una función sobrecargada, es decir que existen otras del mismo nombre en
el mismo ámbito, el compilador decide cuál de ellas se utilizará mediante un proceso denominado resolución
de sobrecarga ("Overload resolution").
Cada prototipo de una función sobrecargada, se considera una función “candidata” a ser elegida para
ejecutarse.
El compilador hace esta elección de la función mediante un proceso que analiza el número y el tipo de los
argumentos usados en la invocación de la función, para así verificar cual de las declaraciones (prototipos de
funciones) se ajusta mejor al número y tipo de los argumentos utilizados al ser invocada.
Si ninguna de las funciones se adapta a los parámetros indicados, se aplicarán las reglas implícitas de
conversión de tipos.
En caso que 2 o más prototipos tengan una misma concordancia entre argumentos y el tipo de dato retornado,
el compilador detectara un “error de ambigüedad”.
III. MATERIALES Y EQUIPO
Para la realización de la guía de práctica se requerirá lo siguiente:
No.
Requerimiento
Cantidad
1
Guía de Laboratorio #10 de IP
1
2
Disquete ó Memoria USB
1
3
PC con el programa DEV-C++
1
IV. PROCEDIMIENTO
1. Cree una carpeta denominada IPguia10proc_CARNET, en el cual se guardara los códigos fuente (cpp) de
los ejemplos del procedimiento a continuación.
Parte 1: Transferencia de datos entre funciones (Uso de Parámetros y Argumentos)
2. Redacte, compile, ejecute y analice cada uno de los códigos fuentes siguientes.
Guia10ejemplo1.cpp
Una función que retorna más de un valor: Parámetros por referencia!!
Crear una función que reciba en parámetros a la información necesaria para calcular el monto final a pagar
por un préstamo con una tasa de interés compuesto anual, así como el monto de interés a pagar al final por el
mismo.
3
Guía # 10: Funciones definidas por el programador, Parte II
Las formulas a tomar en cuenta son: S = Px(1+i)^n I= S - P
En donde:
S= Monto final, P = Monto inicial, i = tasa interés compuesta anual,
n= cantidad años del préstamo. I= Monto en concepto de interés.
3. Compile el código fuente anterior. Observar uso de los últimos 2 parámetros, que son por referencia (de
salida).
4. Ejecutar la aplicación para comprobar que la función altera las variables (montoFinal y montoInteres),
enviadas como argumentos para sus variable parámetros (S y luego I, respectivamente).
4
Guía # 10: Funciones definidas por el programador, Parte II
PARTE 2: Uso parámetros por referencia y también sentencia return( )
Guia10ejemplo2.cpp
Una función que retorna más de un valor: Parámetros por referencia!!
Crear una función que reciba 2 valores enteros en parámetros por valor, para que esta retorne en otros 4
parámetros por referencia el resultado de las 4 operaciones matemáticas básicas. Y además, esta función
retornara true si la división fue posible.
5
Guía # 10: Funciones definidas por el programador, Parte II
Parte 3: Transferencia de arreglos entre funciones
Guia10ejemplo3.cpp
Desarrollar una función que reciba en un parámetro a un arreglo de 10 valores decimales.
Luego, la función ordena el listado de valores recibidos de forma ascendente.
6
Guía # 10: Funciones definidas por el programador, Parte II
5. Ejecutar la aplicación anterior. Ingrese el listado de valores solicitado de manera aleatoria, para luego
comprobar si función ordena el arreglo (recibido como parámetro).
Evalúe lo que sucede al arreglo a[] de main() cuando finaliza función OrdenarLista().
¿Altero la función OrdenarLista el valor de las posiciones del arreglo a[ ] perteneciente a main?
Lo anterior, significa que en C++, los arreglos en los argumentos son pasados como parámetros por referencia
hacia otras funciones.
Parte 4: Sobrecarga de funciones
Guia10ejemplo4.cpp
Desarrollar una función llamada nummayor( ), que determine y retorne el numero mayor entre:
A. Dos números
B. 3 numeros
C. Un listado de N números almacenados en un vector
Para que C++ diferencie a cada caso anterior, deberá definir una función sobrecargada
7
Guía # 10: Funciones definidas por el programador, Parte II
8
Guía # 10: Funciones definidas por el programador, Parte II
6. Compile y ejecute el cod. fuente anterior.
Observe como el compilador diferencia a cada definición de la misma función nummayor( ), gracias al listado
de argumentos enviados en cada invocación dentro de main.
7. modifique el código anterior, reactivando el 1er cout documentado
cout<<"Entre 9, 6, 14 y 2, el mayor valor es "<<nummayor(9,6,14,2);
Compile el código y analice los mensajes de error generados.
¿Por qué el compilador no logra crear el archivo .exe final?
8. Comente nuevamente el cout del paso anterior y quite el comentario (//) a la línea del 2do cout.
Intente compilar nuevamente. ¿Qué hace el compilador cuando se envía argumentos que no coinciden con los
tipos de datos de los parámetros de ninguno de los prototipos de esta función sobrecargada?
9. Intercambie los argumentos de esta llamada de función: nummayor(6,a), de esta forma
nummayor(a, 6), Vuelva a compilar, ¿Cuál es el motivo del error ahora?
10. Restaure el cambio hecho en el paso anterior. Finalmente, reemplace el argumento
a
de la llamada
nummayor(6,a) por el siguiente: nummayor(6,e2)
¿Que hace el compilador de C++ ante este cambio?
9
Guía # 10: Funciones definidas por el programador, Parte II
PROBLEMAS A RESOLVER
PROBLEMA 1:
Del ejemplo de la Parte 3, modifique la función OrdenarLista(), de tal forma que el arreglo N[ ] de su parámetro
sea recibido exclusivamente “por valor”, y no “por referencia” como se hace actualmente.
El cambio solicitado debe realizarse solamente en el interior del cuerpo de la función OrdenarLista( ). No debe
modificarse ningún otro codigo.
La modificación realizada se podrá comprobar fácilmente si la lista que muestra main antes de finalizar, se
presentan en el mismo orden como se ingreso cada dato.
PROBLEMA 2:
Cree una función que permita calcular la nota final de cualquier materia en la Universidad Don Bosco, a partir
de las notas de periodo del estudiante.
La función debe recibir la información que necesita (como el nombre de la materia, la nota de cada periodo,
etc) exclusivamente en forma de parámetros. Y finalmente, debe mostrar en pantalla el listado de notas de
periodo recibidas y la nota final del curso.
Tome en cuenta que las materias se diferencian académicamente por ser solo de teoría o llevar practica de
laboratorio. Y también, puede ser de la facultad de ingeniería o de la facultad de tecnológico.
Por cada aclaración del párrafo anterior, deberá sobrecargar esta función, para incluir en cada definición a un
caso diferente.
10
Descargar