Procedimientos. Parámetros por Referencia

Anuncio
Fundamentos de la Informática.
Primero de Industriales.
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
PRACTICA 9. PROCEDIMIENTOS. PARÁMETROS POR VARIABLE O POR
REFERENCIA.
1) Introducción.
Como ya hemos visto en la práctica anterior la única forma posible de pasarle
información a una función cuando la llamamos es mediante los parámetros, que no son
más que variables locales a la función que se inicializan con los valores que existen en
la llamada. Existen dos tipos de parámetros, según la forma en la que los pasemos:
parámetros pasados por valor (vistos en la Práctica 9) y parámetros pasados por
variable o por referencia, que se verán en la presente práctica.
2) Conceptos nuevos.
Los conceptos nuevos introducidos son:
1) Parámetros por referencia.
2) Creación y utilización de variables tipo puntero.
3) Lenguaje C.
Las nuevas características de C que ha aprendido y que necesita saber para la
realización de las prácticas.
1) Declaración y utilización de variables tipo puntero.
2) Paso de parámetros por referencia.
4) Entorno Turbo C.
El EID de Dev-C++, nos ofrece una nueva funcionalidad a la hora de depurar un
programa que contiene funciones. Es la opción Depurar --> Siguiente Paso.
Proponemos al alumno que averigüe la diferencia que hay entre ejecutar un programa
Avanzando paso a paso y usando esta nueva opción de siguiente paso, para ello utilice
cualquier programa que contenga al menos dos funciones definidas por el usuario y que
sean llamadas desde la función principal
5) Ejercicios propuestos.
A continuación se propone el enunciado de una serie de ejercicios que el alumno tiene
que realizar antes de asistir a la sesión de prácticas, con el fin de presentar las dudas
que hayan aparecido en la realización de los mismos durante la sesión de prácticas.
1) Realizar un programa que lea tres valores enteros por teclado y calcule el
máximo. Para realizar el programa es imprescindible utilizar las siguientes
funciones:
o void leer_datos (int * n1, int * n2, int *n3);
Fundamentos de la Informática.
Primero de Industriales.
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
- Valores de entrada: tres variables vacías donde guardar los tres
valores que se lean por teclado.
- Valores de salida: ninguno;
o int maximo (int n1, int n2, int n3);
- Valores de entrada: tres valores enteros.
- Valores de salida: el máximo de los tres valores.
2) Realizar un programa que pida por teclado un array de números.
El array se declará de la forma: int num[50]. El usuario deberá introducir por
teclado cuántos números quiere escribir en el array. La carga o introducción de
números en el array se realizará a través de la función:
void leer_numeros(int n,int num[50]), donde n indica cuántos números se van
a leer.
A través de otra función calcula_max_min (int n,int num[50],int *max, int
*min) calcula el máximo y mínimo de los elementos introducidos en el array.
3) Realizar un programa que pida dos números enteros por teclado y muestre por
pantalla el siguiente menú:
MENU
+ --> Sumar
- --> Restar
* --> Multiplicar
/ --> Dividir
^ --> Potencia
! --> Factorial
s --> Salir
Elija opción:
El usuario deberá elegir introducir dos valores y a continuación elegir una
opción (pulsando el carácter correspondiente), el programa deberá mostrar el
resultado por pantalla.
En este caso para calcular el resultado habrá que llamar a una función con el
siguiente prototipo:
void operacion (int n1, int n2, char oper, float* resul, int *error);
siendo:
•
•
•
n1, n2: dos parámetros pasados por valor que representan los
dos números sobre los que se quiere operar.
oper: un parámetro pasado por valor que indica el tipo de
operación que se debe realizar sobre n1 y n2. Así si queremos
realizar una suma este parámetro deberá tener el valor ‘+’,
siendo para el resto de los casos: resta ‘-‘, multiplicación: ‘*’,
división ‘/’, potencia ’^’, factorial ‘!’.
result: es un parámetro pasado por referencia donde se
almacenará el resultado de la operación.
Fundamentos de la Informática.
Primero de Industriales.
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
•
error: es un parámetro pasado por referencia donde se
almacenará si la operación se ha resuelto o no con éxito. Los
posibles valores que puede tomar son:
o -1: si ha habido problemas al realizar la operación,
como por ejemplo una división entre cero o el factorial
de un número negativo.
o 1: si la operación concluyó con éxito.
4) Mejorar el programa anterior añadiendo una función menu que muestre el
menú por pantalla. Dicha función deberá tener el siguiente prototipo:
o
int menu (void) --> La opción elegida por el usuario se devuelve
4) Realizar una función a la que se le pase un carácter y determine si éste es una
letra, un número u otro carácter que no sea ni letra ni número.
5) Realizar un procedimiento que reciba como entrada una frase acabada en
punto, y devuelva el número de vocales y el número total de caracteres leídos
sin incluir los espacios en blanco.
6) Realizar un procedimiento que reciba un array de caracteres y devuelva en una
variable por referencia el número de palabras que hay en el array.
7) Realizar un procedimiento que recibe una cadena de caracteres, y cambia todas
las vocales por punto.
8) Realizar un programa que pida por teclado un array de 10 números, y un
procedimiento toma este array y devuelve en una variable por referencia el
resultado de multiplicarlos todos, y en otra variable el resultado de sumarlos
todos. Realizar otro procedimiento que reciba el array, y una variable por
referencia la cual actualizará con el número de pares encontrados en el array.
9) Realizar un procedimiento que reciba como entrada una tabla de 5x5
elementos, y devuelva la suma de las filas pares, y la suma de las filas impares.
10) Realizar un procedimiento que reciba como entrada una tabla de 4x5
elementos, y un valor entero, de modo que devuelva la fila y la columna en la
que dicho elemento se encuentra en la tabla. Los valores devueltos serán fila=1 y columna=-1 en el caso de no haber encontrado el valor que se estaba
buscando.
6) Ejercicios propuestos de un nivel de dificultad mayor.
11) Realizar un procedimiento que reciba como entradas un día, un mes y un año, y
devuelva la fecha del día siguiente a través de los mismos parámetros, además
de un código de error (0 si todo ha ido bien, y 1 si no se ha podido calcular).
Habrá que tener en cuenta que un año es bisiesto si es múltiplo de 4, excepto
Fundamentos de la Informática.
Primero de Industriales.
Mecánica, Química, Electricidad y Electrónica
Departamento de Tecnologías de la Información
cuando es múltiplo de 100 y no lo es de 400 (por ejemplo, 1984 y 2000 son
bisiestos, pero 1800 no lo es). Este procedimiento se apoyará en una función que
también deberá realizar el alumno, la cual comprobará si la fecha que se le pasa
por parámetro es correcta o no (siguiendo los mismos criterios para el año
bisiesto).
12) Realizar un procedimiento que reciba como entrada las concentraciones de
CO2 en el ambiente, medidas a lo largo del mes de Enero, a razón de una toma
cada hora, y devuelva en qué momento (día y hora), entre las 10h del día 12
hasta las 15h del día 20, se alcanzó la mayor concentración.
13) Realizar un programa que lea un nombre con apellidos por teclado y a
continuación muestre el siguiente menú:
MENU
1. Convertir en mayúsculas.
2. Convertir en minúsculas.
3. Convertir en mayúsculas las primeras letras de cada palabra.
4. Contar vocal.
5. Salir.
Elija opción:
Para realizar cada opción será necesario definir funciones. El alumno deberá
considerar cual es el prototipo más adecuado para cada opción. La opción 4
deberá pedir una vocal por teclado y a continuación llamar a una función
para contar el número de veces que aparece esa vocal en el nombre recogido
por teclado.
5) La Frase.
"Aquel que duda y no investiga, se torna no sólo infeliz, sino también injusto."
Blaise Pascal
Descargar