Unidad Didáctica 24 Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0
Índice Consideraciones sobre funciones Estructura de una función Estructura de un programa en C Paso de parámetros: C vs. Java Parámetros de entrada Parámetros de entrada/salida Ejemplo Ejercicio
Consideraciones sobre funciones Todo programa C está construido en base a funciones. Las funciones permiten estructurar la codificación de los programas reduciendo su complejidad y como consecuencia, mejorando la eficiencia de su desarrollo. Las funciones permiten la reutilización de código. La subdivisión de un programa en varias funciones dependerá, en general, del número de tareas independientes y/o del número de veces que se repita o pueda repetirse una tarea.
Estructura de un programa en C Estructura general de un programa con funciones definiciones y declaraciones void main(void) { declaración de variables instrucciones tipo1 nombre_función1 (tipo11, tipo12,...); tipo1 nombre_función1 (tipo11 arg11, tipo12 arg12,...){... tipon nombre_funciónn (tipon1 argn1, tipon2 argn2,...) { declaración de variables instrucciones tipo2 nombre_función2 (tipo21, tipo22,...); declaración de variables... instrucciones tipon nombre_funciónn (tipon1, tipon2,...); Una única función main Las llamadas a funciones son igual que en Java
Estructura de una función Funciones C Tr nombre (T1 e1,..., Tn en) { Tr r; declaración de variables instrucciones return r; Estructura igual que en Java. Pero las declaraciones de variables siempre al inicio de la función
Funciones Llamada a una función En una asignación: variable = nombre_función (lista de parámetros); Dentro de una expresión: E (x, nombre_función (lista de parámetros))
Paso de parámetros: C vs. Java El paso de parámetros en C es como en Java: se copia el valor de los parámetros reales en los parámetros formales y se ejecuta el cuerpo del método invocado. Parámetros de entrada: es el caso de parámetros de tipos básicos (int, char, ) y struct. Parámetros de entrada salida o salida: son los de tipo puntero. Cuando el parámetro es de tipo puntero a un tipo T entonces el valor apuntado por el parámetro es de entrada salida.
Parámetros de entrada double mediaaritmética (int a, int b, int c) { a = a + b + c; return (a / 3.0);
Parámetros de entrada salida Parámetros de entrada salida. A este tipo de paso de parámetros se le suele denominar paso de parámetros por referencia. void intercambio (int *p1, int *p2) { int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; int a = 7,b = 8; intercambio(&a,&b);
Parámetros de entrada salida La función de lectura scanf es un caso particular de paso de parámetros por referencia. Igualmente ocurre con sscanf y fscanf. #include <stdio.h> float media_aritmética (int, int, int); void main (void) { int x = 0, y = 0, z = 0; float media = 0.0; printf ( \n Teclee tres números: ); scanf ( %d%d%d, &x, &y,&z); media = media_aritmetica (x, y, z); printf( %d,media);
Ejemplo Llamada a la función C int a, b, f, anyo, ndias; En una asignación: f = factorial (5); f = factorial (a) / factorial (a-b); Dentro de una expresión: if (esbisiesto(anyo)) ndias = 366;
Ejercicios Realice una función que dado un array de enteros y la longitud del mismo, permita mediante parámetros de entrada/salida el cálculo a la vez de la suma, el máximo, el mínimo y la media de los valores de un array de enteros dado. El prototipo de la función es: void calculasummaxminmed(constvector, int, IntP, IntP, IntP, IntP, DoubleP) donde #define DIM 20 typedef int Vector[DIM ]; typedef int* IntP; typedef double* DoubleP;
Ejercicios Realice la función con prototipo void leerdatos(int atam, IntP alength, Vector a){ donde atam es el tamaño máximo del array, alength es el número real de valores que tiene el array y a es el array a inicializar. Realice un programa donde se utilice la función anterior para leer los valores del array desde la entrada estándar.