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

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica


AO 1 Nm. 3 28 de mayo de 2003

Funciones A. Snchez Vaca, V, Fuentes Gea


Se pude decir, que la mayora de los programas de cmputo que se escriben y resuelven problemas de la vida real, son programas muy grandes con una gran cantidad de lneas de cdigo. La experiencia ha demostrado que la mejor forma de llevar a cabo el desarrollo y mantenimiento de un programa extenso es construirlo a partir de piezas menores o mdulos, siendo cada una de ellas ms fcil de manipular que si se trabajara con el programa original. Al dividir un programa complejo en pequeos mdulos se le conoce como la tcnica de divide y vencers. C fue diseado como un lenguaje de programacin estructurado, tambin llamado programacin modular. Por esta razn, para escribir un programa en C, este puede ser dividido en varios mdulos en lugar de uno solo muy extenso y complejo. Al dividir un programa en diferentes mdulos (pequeas rutinas denominadas funciones), se puede hacer una programacin ms clara, rpida y producir programas fciles de entender y mantener. As un programa en C, puede contener ms de una funcin, cada una de ellas realiza una tarea especfica.

Estructura de una funcin Una funcin en C es sencillamente un conjunto de sentencias, con un nombre nico y creada con un propsito especfico; la tarea que deba realizar debe ser coherente y completa. Las funciones en C no se pueden anidar; esto significa que una funcin no se puede definir dentro de otra funcin. En C todas las funciones son externas o globales, es decir, pueden ser llamadas desde cualquier punto del programa. La estructura de una funcin es: tipo_de_retorno nombreFuncin (lista de parmetros) { cuerpo de la funcin return expresin }

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica


AO 1 Nm. 3 28 de mayo de 2003

tipo_de_retorno: Tipo de dato que devuelve la funcin o en su caso la palabra reservada void si la funcin no devuelve ningn valor, el tipo de dato aparece antes del nombre de la funcin. nombreFuncin: Identificador o nombre de la funcin. Debe comenzar con una letra o un subrayado (_) y puede contener tantas letras, nmeros o subrayados que se desee. (lista de parmetros): Lista de declaracin de parmetros de la funcin separados por comas. Es una lista de parmetros tipificados; necesarios para llevar informacin a la funcin. cuerpo de la funcin: Se encierra entre llaves de apertura ({) y cierre (}). No hay punto y coma despus de la llave de cierre. expresin: Valor que devuelve la funcin una vez que fue ejecutada. El valor devuelto puede ser cualquier tipo de dato excepto una funcin o un arreglo. El valor de retorno debe de seguir las mismas reglas que se aplica a un operador de asignacin. Las constantes, tipos de datos y variables declaradas dentro de la funcin son locales a la misma y no pueden ser utilizadas fuera de ella.

Llamada de funciones: por valor y por referencia Las funciones para que puedan ser ejecutadas, han de ser llamadas o invocadas. Cualquier expresin puede contener una llamada a una funcin que redirigir el control del programa a la funcin nombrada. Normalmente la llamada de una funcin se realiza desde la funcin principal main(), aunque es factible que puede ser llamada desde otra funcin. La funcin que llama a otra funcin se denomina funcin llamadora y la funcin controlada se denomina funcin llamada. Llamada por valor: Cuando los argumentos son pasados por valor, se efecta una copia del valor del argumento y esta se pasa a la funcin llamada. Las modificaciones a la copia no afectan al valor original de la variable del llamador. Llamada por referencia: Cuando los argumentos de una funcin son pasados por referencia, la funcin que llama permite que la funcin invocada modifique el valor original de la variable. Esto se utiliza en funciones llamadas confiables, que necesitan modificar el valor de la variable original.

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica


AO 1 Nm. 3 28 de mayo de 2003

Programa Ejemplo:

A continuacin se presenta un programa que utiliza dos funciones para interpolar valores en una serie de intervalos generados al azar. Tanto la funcin InterpolaLineal como InterpolaCoseno interpolan valores en un intervalo y son llamadas consecutivamente para efectuar esta labor en una serie de ellos. Los resultados que entrega el programa en forma tabular, se presentan de manera grfica con objeto de mostrar los efectos que generan las funciones aludidas. Como se aprecia en las grficas mencionadas, la interpolacin coseno logra alisar la curva y al mismo tiempo pasar por los datos originales.
/* Programa que interpola valores de y de una serie de intervalos generados al azar. Con fines de comparacin, se utilizan dos funciones de interpolacin: La interpolacin lineal y la interpolacin coseno. Esta ltima permita lograr un alisamiento de la grfica y vs x. */ #include <time.h> #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 double InterpolaLineal(double xmu, double y1, double y2) { /* Regresa el valor de y en xmu. 0 <= xmu <= 1; xmu = 0 en y1, xmu = 1 en y2 */ return (y1 * (1. - xmu) + y2 * xmu); } double InterpolaCoseno(double xmu, double y1, double y2) { /* Regresa el valor de y en xmu. 0 <= xmu <= 1; xmu = 0 en y1, xmu = 1 en y2 */ double xmu2; xmu2 = (1. - cos(xmu * PI)) / 2.; return (y1 * (1. - xmu2) + y2 * xmu2); } int main() { double xmu, ds, x, y1, y2, ylin, ycos; int i; clrscr(); srand(time(0)); /* inicializamos la generacin de nmeros aleatorias */ x = 0.; ds = .1;

/* Vamos a dividir cada intervalo en 10 sub intervalos */

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica


AO 1 Nm. 3 28 de mayo de 2003

/* Generamos un valor inicial entre 0 - 100 al azar */ y1 = rand() % 101; for(i = 1; i <= 7; i++) /* Formamos 7 intervalos para interpolar */ { y2 = rand() % 101; /* Generamos otro valor entre 0 - 100 al azar */ /* Ahora interpolamos entre y1 - y2 cada ds */ for(xmu = ds; xmu < 1.; xmu += ds) { x += ds; ylin = InterpolaLineal(xmu, y1, y2); ycos = InterpolaCoseno(xmu, y1, y2); printf("%f %f %f\n", x, ylin, ycos); } y1 = y2; /* y1 es siempre el valor anterior */ } return 0; }

En las siguientes imgenes se observan las grficas que se obtienen de la tabulacin de los datos generados por el programa.

Interpolacin lineal

Interpolacin coseno

FACULTAD DE INGENIERA-UNAM

Boletn de Computacin, Programacin e Informtica


AO 1 Nm. 3 28 de mayo de 2003

Nota: El programa en C que realiza las grficas del ejemplo anterior, se encuentra en la pgina del boletn: http://.lcp02.fi-b.unam.mx/boletin, para su consulta.

Sugerencias al programador: Una buena regla para determinar la longitud mxima de una funcin (nmero de lneas que contiene) es que no ocupe ms longitud que el equivalente a una pantalla.

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