Вы находитесь на странице: 1из 5

Ctedra: INFORMTICA (C.C.A.) 1cuat.

Ao 2015
Entregado Com1-4, 5: 29/05/15, 18/05/2015
Fecha Presentacin Com1-4, 5: 05/06/14, 01/06/2015
Presentacin: impresa, Grupal
Univ.Nac.de Salta Fac.de Ingeniera

TP.N7: Funciones en C++


Parmetros por Valor y Referencia.
Desarrolle el TP grupalmente, entrguelo impreso en computadora (en su defecto, manuscrito,
previamente justificado ante el JTP). Presentar en la fecha indicada, pasado 15 del inicio de la clase,
se descontar el 25%, pasada 1 semana se descontar -50% y luego de ello -100%; pero su
presentacin es obligatoria bajo apercibimiento de quedar libres Res.HCD 414/03.

Consignas Generales: redactar los programas en C++ y realizar la AutoComprobacin que se solicita. Obligatorio: utilizar comentarios indicando para
qu utilizar c/u de las variables y para rotular bloques.
Ejercicios Bsicos: Se sugiere que TODOS los desarrollen, estn destinados a principiantes en la
temtica y refuerzan conceptos bsicos. NO es obligatoria su presentacin (cada JTP indicar a los
alumnos que crea necesario su desarrollo).
Ejercicios asignados a los docentes: TENTATIVAMENTE los docentes tienen asignados ejercicios y
EVENTUALMENTE les brindarn sus resoluciones. En esos casos su presentacin NO es obligatoria, en
caso contrario alumno dispone del material para desarrollar los ejercicios (bibliografa, apuntes de
ctedra, cdigo pre desarrollado, presentaciones, etc.).

OBJETIVOS ESPECFICOS TP Funciones en C++:

Entender que las funciones son subprogramas => presentan todas las
caractersticas de estos (enumrelas).

Fijar, entonces, la mecnica de declaracin / redaccin de funciones para su


posterior uso / invocacin.

Parmetros: entender que las instanciaciones de valores en los argumentos


pasados por valor, se hace para salvaguardar los valores originales de las
variables del programa principal.

Entender que las estructuras de datos compuestas (vectores y matrices,


inclusive de registros) pasan siempre como argumentos por referencia; ergo,
las funciones pueden modificar o alterar su contenido.

Entender que la diferencia entre funciones con parmetros/argumentos,


copiados el valor o pasadas las referencias de memoria, es para que las
funciones tengan la potencialidad de modificar dichos parmetros/argumentos.

Que usaremos: parmetros por valor con variables simples cuando NO


queramos que la funcin tenga la potestad de alterar los valores de las
variables del programa. Por el contrario: los argumentos con variables simples
sern por referencia cuando queramos que la funcin pueda alterar los valores
de las variables del programa principal.

Funciones con Parmetros por Valor


Ejercicios Bsicos:
Ej.A: (desarrollado Ter/Prct). Dados los nmeros enteros X e Y, calcule y muestre la potencia de X
elevado a la Y, para ello utilice una funcin que calcule la potencia de X^Y pasando el valor de X
e Y como parmetros.
Ejemplo: X = 2, Y = 4 => X^Y = 2^4 = 16
Ej.B: Dado un nmero entero N calcular y mostrar la cantidad de sus dgitos. Utilice una funcin que
cuente la cantidad de sus dgitos pasando el valor de N como parmetro.
Ej.C: Dado el intervalo [V, W], calcular y mostrar la sumatoria de los nmeros enteros que pertenecen
al intervalo y son divisibles de un nmero entero Z ingresado por el usuario. Utilice una funcin
que calcule la sumatoria de divisibles de Z pertenecientes al intervalo [V, W] pasando los valores
V, W y Z como parmetros.
AC: Qu deb entender con los Ejercicios Bsicos?
1. Entendi cmo y dnde (en qu zona) se redacta (declara) una funcin (subprograma)?.

1/5

Ctedra: INFORMTICA (C.C.A.) 1cuat. Ao 2015


Entregado Com1-4, 5: 29/05/15, 18/05/2015
Fecha Presentacin Com1-4, 5: 05/06/14, 01/06/2015
Presentacin: impresa, Grupal
Univ.Nac.de Salta Fac.de Ingeniera
2.
3.

Entendi cmo (y dnde) se usa/llama/invoca a una funcin previamente declarada?


Entendi cmo se definen y usan las variables locales de una funcin? por qu solo la funcin puede usar
sus propias variables locales?
4. Entendi cmo se definen los parmetros/argumentos de una funcin? y cmo se le cargan valores (pasan
valores) al momento de su invocacin? Por qu no se ven afectadas las variables del programa principal
luego de la ejecucin de la misma si los parmetros de ella le son pasados por valor?
Por qu toda funcin debe devolver un resultado? De qu tipo de dato debe ser la variable que recibe el
resultado de una funcin en el programa principal?

2/5

Ctedra: INFORMTICA (C.C.A.) 1cuat. Ao 2015


Entregado Com1-4, 5: 29/05/15, 18/05/2015
Fecha Presentacin Com1-4, 5: 05/06/14, 01/06/2015
Presentacin: impresa, Grupal
Univ.Nac.de Salta Fac.de Ingeniera
Ej.1: (desarrollado x JTP). Dada una lista, de tamao desconocido de nmeros enteros (que termina
con un cero), mostrar el promedio de los DIGITOS de cada nmero ingresado. Utilizar una funcin que
retorne el promedio de dgitos de un entero Q de la lista pasado por valor.
int promDigitos(int q) // Devuelve el promedio de dgitos del nmero q
Modifique el programa redactado previamente para que informe al final cuntas veces fue usada la funcin.
AC: Entendi con este ejercicio que una funcin es ideal para ser utilizada un innumerable nmero de veces
dentro del programa principal? ; (Incluso cuando ese nmero de veces es desconocido de antemano).

Ej.2: Realizar un algoritmo para realizar la siguiente aproximacin:

f ( x) 1

( x 1)1 ( x 1) 2 ( x 1) 3
( x 1) n

...
1!
2!
3!
n!

Ingresar x y n ambas enteras, calcular f(x) definiendo las siguientes funciones:


float potencia(float base, int exponente)
// Devuelve el valor de la base elevada al exponente indicado.
// No utilice la funcin pow() de la librera matemtica.
int factorial(int denominador)
// Devuelve el factorial del denominador del cociente.
float aproxima(float x, int N)
// Calcula la sumatoria de trminos mostrada ms arriba
AC: Aprend con este ejercicio a invocar a ms de una funcin dentro de cada ciclo de clculo de una estructura
de control for?
Cmo se interrelacionan las funciones en base a sus argumentos o parmetros?
Qu variable del programa principal utiliza para relacionar las dos funciones?; explique.

Ej.3: Un ingeniero responsable de recursos humanos de una plata industrial desea saber el monto
total necesario para abonar a N obreros sabiendo solamente el valor por hora trabajada (VH) y
la cantidad de horas mensuales que trabaj cada obrero (HMT). Si el obrero trabaj ms de 192
horas mensuales, recibir por hora un 50% adicional.
Utilizar las siguientes funciones:
float salario(float VH, int HMT)// Devuelve el salario de un obrero
AC: En qu momento se debo invocar la funcin?Dnde debo calcular el adicional del Obrero?Debera declarar
otra funcin para calcularlo?

Ej.4: (desarrollado x JTP). Dada una lista de nmeros enteros que termina con un cero, generar un
vector con los nmeros CAPICUAS. Ej: X =35253 => ES CAPICUA
X =2323 => NO ES
CAPICUA
Utilizar las siguientes funciones:
bool esCapicua(int x)// Devuelve si un nmero x es capica
void mostrarVect(int vec[], int N)// Muestra vector de N nmeros capicas
AC: Carg el vector con un ciclo mientras al no poderlo hacer con un ciclo desde? Cmo deber utilizar la funcin
esCapicua() para determinar si un nmero es capica?

Ej.5: Dada una matriz de NxN de enteros y otro entero X; mostrar un men con las siguientes
opciones:
a) Mostrar la triangular superior que sean divisibles por X
b) Mostrar la triangular inferior que sean mltiplos X

c) Mostrar cada valor de la diagonal principal sumada X


d) Mostrar la diagonal secundaria restada X

Utilizar las siguientes funciones:


void
void
void
void

mostrarTriangSup(int Mat[][], int N, int X)// Muestra Triang Sup divisibles por X
mostrarTriangInf(int Mat[][], int N, int X)// Muestra Triang Inf mltiplos por X
mostrarDiagPrin(int Mat[][], int N, int X)// Muestra Diagonal Principal sumado X
mostrarDiagSec(int Mat[][], int N, int X)// Muestra Diagonal Secundaria restado X

AC: Con este ejercicio desebamos que solidifique los diferentes recorridos que se pueden aplicar sobre una
matriz, como se deben manipular los subndices de los elementos para los distintos recorridos, utilizando
funciones.

3/5

Ctedra: INFORMTICA (C.C.A.) 1cuat. Ao 2015


Entregado Com1-4, 5: 29/05/15, 18/05/2015
Fecha Presentacin Com1-4, 5: 05/06/14, 01/06/2015
Presentacin: impresa, Grupal
Univ.Nac.de Salta Fac.de Ingeniera

Funciones con Parmetros por Referencia


Ejercicios Bsicos:
Ej.D: (desarrollado Ter/Prct). Dado un vector V de N nmeros enteros, elimine el ltimo de sus
componentes utilizando la siguiente funcin:
void eliminaUltimo(int v[], int &N)//Elimina el ultimo componente del vector
AC: Observa que se pasa &N (argumento por referencia) para que la funcin modifique la cantidad de
compartimentos ocupados del vector dentro de la funcin y el programa principal vea modificado N luego de
ejecutar la funcin? En lo fctico ser quizs para lo nico q utilice parmetros por referencia.

Ej.E: Dado un vector V de N nmeros enteros, inserte al principio el producto de los componentes del
mismo utilizando las siguientes funciones:
int calproducto(int v[], int N)//Calcula productora de componentes del vector
void insPrimero(int v[], int &N, int prod)//Inserta al principio del vector el param prod

AC: Observa la diferencia entre los argumentos N (argumento por valor) y &N (argumento por referencia). En qu
caso se actualiza el valor de N, luego de que funcin?

Ej.6: (desarrollado x JTP). Dado un vector V de N nmeros enteros, ELIMINE todos los nmeros
primos. Muestre el vector actualizado. NOTA: un nmero es pesado si posee una cantidad de dgitos
>= a 5, superior a la cantidad de dgitos < a 5.

Utilice las siguientes funciones:


void
bool
void
void

cargarVect(int v[], int &N) //Carga datos en el vector V


esPesado(int valor) //Determina si x es pesado
eliminaPesado(int v[], int &N, int X) //Elimina valor pesado del vector V
mostrarVect(int v[], int N) //Muestra el vector.

AC.: Entendi con este ejercicio que las estructuras de datos compuestas pasan por defecto como parmetros por
valor? RECURDELO!
Cmo pas la variable N en la funcin cargarVect() (por valor o por referencia)? Argumente su respuesta.
Por qu la variable simple N no pasa por referencia en la funcin eliminaPesado() y mostrarVect()?
El vector debe pasarse a la funcin eliminaPesado() por valor o por referencia? (qu deba recordar?)

Ej.7: Dado un vector W de M enteros, insertar a la derecha de cada nmero par cantidad de sus
dgitos mltiplos de 4. Mostrar el vector resultante.
int cantDigitos(int valor) //Cantidad de dgitos mltiplos de 4 del vector V
void insXenVect(int V[], int &N, int pos, int X) //Inserta cant dgitos en vector V
AC.: Una funcin puede realizar varias tareas?, es conveniente? Una funcin puede devolver ms de un valor?

Ej.8: Dada una matriz de M x N de nmeros enteros, elimine la fila cuya cantidad de los elementos
impares pertenecientes a la misma es la mayor de todas las otras cantidades de impares,
calculadas por fila, implemente las siguientes funciones:
void cargarMat(int a[20][20], int m, int n) //Cargar matriz
int contFil(int a[20][20], int m, int n) //Cuenta cant impares por fila
void eliminarFil(int a[20][20], int F, int &m, int n)//Elimina fil F con mayor cant impares
void mostrarMat(int a[20][20], int m, int n)//Muestra la matriz
AC: Qu tiene que ver la capacidad mxima de filas [20] y columnas [20] de una matriz con la cantidad mxima
m de filas y n de columnas que el usuario ocupar de ella? Por qu se pasa &m en eliminarFil() por referencia?,
puedo pasar el tamao de la fila x valor? Qu es ms conveniente?

Ej.9: (desarrollado x JTP). Igual consigna que el ejercicio anterior pero esta vez las cantidades de
impares por filas generaran a una nueva columna insertada al final:
void cargarMat(int a[20][20], int m, int n) //Cargar matriz
int contFil(int a[20][20], int m, int n) // Cuenta cant impares por fila
void insertarCol(int a[20][20], int m, int &n)//Inserta col al final con cant impares x fil
void mostrarMat(int a[20][20], int m, int n)//Muestra la matriz
AC: Por qu se pasa &n en insertarCol() por referencia?, puedo pasar el tamao de la fila x valor? Qu es
ms conveniente? La matriz se pasa por valor o por referencia a las funciones cargarMat() y insertarCol(),
puede ser de otra manera?

4/5

Ctedra: INFORMTICA (C.C.A.) 1cuat. Ao 2015


Entregado Com1-4, 5: 29/05/15, 18/05/2015
Fecha Presentacin Com1-4, 5: 05/06/14, 01/06/2015
Presentacin: impresa, Grupal
Univ.Nac.de Salta Fac.de Ingeniera
Ej.10: Una compaa representa a 3 Refineras de Petrleo. Cada refinera produce 3 productos
basados en el crudo: Alquitrn (419), Gasoil (645) y Nafta (347). De un barril de petrleo, se
sabe que:

La
La
La
La

Refinera 1 produce: 4 lts de 419, 2 lts de 645 y 1 lts 347


Refinera 2 produce: 2 lts de 419, 5 lts de 645 y 3 lts 347
Refinera 3 produce: 2 lts de 419, 2 lts de 645 y 4 lts 347
demanda de estos productos es la siguiente: 600 lts de 419, 800 lts de 645 y 1000 lts de 347.

El ingeniero encargado de la mencionada compaa requiere implementar lo siguiente:


1) Insertar al final una nueva columna
denominada (Produccin) correspondiente a
las producciones totales de cada producto
segn una cantidad X de barriles ingresada
2) Mostrar el producto que tiene menor
produccin total segn lo calculado en la
columna Produccin para un X ingresados
3) Debido a que ya no se fabricar, eliminar un
determinado producto ingresado y toda la
informacin de produccin asociada
4) Ordenar la matriz comenzando con la mayor
hasta la menor produccin total de cada uno
de los productos
5) Mostrar la matriz modificada.

Prod
419
645
347

Ref1
4
2
1

Ref2
2
5
3

Ref3 Produccin
2
1000
2
900
4
800
X = 100 barriles

Es necesario implementar las siguientes Funciones:


void cargarMat(float a[10][5], int m, int n)//Carga la matriz
float calProduc(float a[10][5], int m, int n, int cod)//Devuelve la produc total de un prod
void insertarCol(float a[10][5], int m, int &n, int x)//Inserta col Produc seg X ingresado
int mostrarMen(float a[10][5], int m, int n, int cod)//Devuelve prod con menor producc
void eliminarFil(float a[10][5], int &m, int n, int prod)//Elimina fila seg prod ingresado
void ordenarMat(float a[10][5], int m, int n)//Ordena matriz de mayor a menor produccin
void mostrarMat(float a[10][5], int m, int n)//Muestra la matriz
AC: con este ejercicio desebamos que solidifique: (compruebe Ud. mismo).
Cuando se inserta una columna, Qu ndice se mantiene fijo (el de las filas o el de las columnas) y cual vara?
Hacia dnde se realiza el corrimiento (derecha o izquierda); qu ndice se incrementa?
Si se insertara una fila. Cmo contestara preguntas anlogas al tem anterior?
Cuando se elimina una fila, Qu ndice se mantiene fijo (el de las filas o el de las columnas) y cul vara? Hacia
dnde se realiza el corrimiento (arriba o abajo)? Qu ndice sufre decremento?

5/5

Вам также может понравиться