Vous êtes sur la page 1sur 5

Funciones

Un problema grande se divide en problemas ms pequeos y fciles de resolver desde el punto de vista de la modularizacin. Esta es la forma Divide y Vencers, que se basa en dividir el problema en problemas ms pequeos y simples para resovler. Resolviendo cada uno de estos subproblemas, se resuelve el problema entero. En programacin esta tcnica se la conoce como modularizacin, ya que una tarea la divido en mdulos (o subtareas). En los distintos lenguajes de programacin estos mdulos reciben el nombre de: procesos, funciones, rutinas, sub-rutinas, etc. En C a estos mdulos se los llama funcin, y un programa en C est compuesto por 1 o ms funciones: la funcin main y ms funciones (recordar que la funcin main debe estar, todo programa comienza su ejecucin por la primer instruccin de dicha funcin).. Cada funcin definida responde a un propsito nico e identificable, pudiendo adems utilizarse en distintos puntos del programa. Esto facilita la escritura, evita repetir cdigo, facilidad de mantenimiento, etc. Una funcin es una porcin de programa, identificable mediante un nombre, que realiza determinadas tareas bien definidas por un grupo de sentencias sobre un conjunto de datos. Las operaciones que realiza la funcin son siempre las mismas, pero los datos pueden variar cada vez que se llame a la funcin. Generalmente, al llamar a una funcin se le proporciona un conjunto de datos (parmetros o argumentos) que se procesan ejecutando las instrucciones que componen a la funcin. La funcin devuelve un solo valor mediante la sentencia return. Algunas funciones reciben parmetros, pero no devuelven nada (como la funcin printf), mientras que otras no reciben parmetros pero s devuelven un valor (como la funcin rand). Definicin de una funcin Su forma ms genrica consta bsicamente de dos partes: una lnea llamada cabecera donde se especifica el nombre de la funcin, el tipo del resultado que devuelve y los parmetros que recibe y un conjunto de sentencias encerrado entre llaves que forman el cuerpo de la funcin. tipo nombre funcion(tipo1 param1, ..., tipoN paramN) { cuerpo }
f

Donde: tipo: es el tipo de datos del valor que devuelve la funcin. Si no se especifica ninguno, C asume que la funcin devuelve un valor de tipo entero.

nombre funcion: identificador que se usar posteriormente para llamar a la funcin. tipo_i param_i: tipo y nombre de cada uno de los parmetros que recibe la funcin. Se especifican entre parntesis y separados por comas. Algunas funciones pueden no tener parmetros. Los parmetros de la declaracin se denominan parmetros formales, ya que representan los nombres con que referirse dentro de la funcin a los datos que se transfieren a sta desde la parte del programa que hace la llamada. cuerpo: declaracion de variables locales e instrucciones que son necesarias para la realizacin de la tarea especificada por la funcin. Debe incluir una o ms sentencias return para devolver un valor al punto de llamada. Entonces, desde la funcin main (y desde cualquier otra funcin) se puede invocar o llamar a las funciones definidas. La invocacin se realiza utilizando el nombre de la funcin y sus parmetros. Ejemplo: implementar un programa que lea 2 nmeros y calcule el factorial del primero y el cuadrado del segundo. Aunque este ejemplo es muy simple, conviene estudiar el diseo top-down donde se especifican los mdulos en que el problema se divide. Luego, estos mdulos se traducen en distintas funciones del programa.

Ejemplo Uno

Calcular factorial

Calcular cuadrad o

Entonces la implementacin es la siguiente: #include <stdio.h> int factorial(int x) { int i, aux=1; for (i=2; i<=x; i++) { aux = aux * i; } return(aux); } int cuadrado(int x) { return(x * x);

int main() { int a, b, aux1, aux2; scanf("%d %d", &a, &b); aux1 = factorial(a); aux2 = cuadrado(b); printf(" %d %d \n", aux1, aux2); return(0); } Entonces, cuando se ejecuta la invocacin a la funcin factorial(), se ejecutan todas las instrucciones de dicha funcin, y cuando se finaliza, se sigue la ejecucin de la funcin invocadora (en este caso funcin main) por la prxima lnea que le sigue al llamado de la funcin factorial(). Prototipos Si en el punto del programa donde se va a realizar una llamada a una funcin, dicha funcin ya ha sido definida previamente, entonces ya se conocen sus caractersticas (tipo del resultado, nmero y tipo de los parmetros, etc.), por lo que la llamada puede realizarse sin problemas (como en el caso del ejemplo uno). Sin embargo, si la funcin que se va a llamar se halla definida posteriormente al punto desde donde se realiza la llamada, entonces debe crearse un prototipo de la funcin a la cual se desea llamar. Dicho prototipo deber colocarse antes del punto donde se haga la primera llamada a la funcin, y consta nicamente de la cabecera de dicha funcin. El prototipo de una funcin puede interpretarse como un aviso al compilador, para que cuando encuentre una llamada a dicha funcin pueda conocer el tipo del resultado que devuelve y la informacin sobre los parmetros que recibe. A continuacin se muestra el formato general de un prototipo, que corresponde a la cabecera de la funcin seguida de un punto y coma: tipo nombre funcion(tipo1 param1, ..., tipoN paramN); Ejemplo 2: implementar un programa que inicialice y muestre 2 matrices de 3x3. El problema se modularizar de la siguiente forma:
Ejemplo Dos Llamado o invocacin a la funcin factorial Cuando finaliza la funcin factorial se sigue la ejecucin en este punto.

Inicializ ar matriz

Mostrar matriz

El cdigo (utilizando prototipos) es: #include <stdio.h> #define N 3 int inicializarMatriz(int matriz[N][N]); int mostrarMatriz(int matriz[N][N]); int main() { int matriz1[N][N]; int matriz2[N][N]; inicializarMatriz(matriz1); inicializarMatriz(matriz2); mostrarMatriz(matriz1); mostrarMatriz(matriz2); return(0); } // implementacin de las funciones int inicializarMatriz(int matriz[N][N]) { int i, j; srand(time(NULL)); for (i=0; i<N; i++) for (j=0; j<N; j++) matriz[i][j] = rand() % 100; return(0); } int mostrarMatriz(int matriz[N][N]) { int i, j; for (i=0; i<N; i++) { for (j=0; j<N; j++) printf(" %d ", matriz[i][j]); printf("\n"); } printf("\n"); return(0); }

Variables locales y variables globales Una variable es local a una funcin cuando se la declara dentro de la funcin. En este caso, las variables son accesibles slo desde dentro de la funcin donde se la declara. Esto es, se las puede acceder para leer o escribir slo desde dentro de la funcin (alcance). Por otro lado, durante la ejecucin del programa estas variables son creadas en su declaracin y se destruyen al terminar la ejecucin de la funcin donde se las declara (tiempo de vida). En el ejemplo 2, las variables i y j son locales a cada funcin. Notar que ambas funciones los nombres de las variables son las mismas. En C esto lleva a error ya que durante la ejecucin de cada funcin, los nombres las variables iguales se solapan: se consideran las variables declaradas la funcin en ejecucin. en no de en

En el ejemplo 2, desde la funcin main no se puede hacer uso de las variables i y j ya que son locales a cada una de las funciones implementadas. Variables globales Las variables globales son variables declaradas antes de la funcin main. Estas variables son accesibles desde todas las funciones del programa (incluida la funcin main). Estas variables pueden ser ledas y modificadas por todas las funciones del programa (alcance). Son creadas al ser declaradas y se destruyen al terminar la ejecucin del programa (tiempo de vida). Aunque parezce ms simple la utilizacin de este tipo de variables, su utilizacin no es recomendada ya que pueden llevar a errores de programacin: Al ser accesibles desde cualquier funcin, se pueden modificar y alterar desde cualquier punto del programa, es necesario ser muy prolijos enl a programacin para no alterar errneamente sus valores: una funcin puede asignar un valor especfico a una variable global. Posteriormente, en otra funcin, y por olvido, se pueden hacer cambios en la misma variable. Estos cambios dificultarn la localizacin de errores. Como su tiempo de vida es toda la ejecucin del programa, se est alocando memoria para estas variables cuando tal vez se utilicen en determinados puntos del programa.

Por estas razones se recomienda evitar la utilizacin de variables globales. Parmetros

Vous aimerez peut-être aussi