Ing. Paulo Guerra 22-Marzo-2010
Objetivos de la Clase Estudiar los conceptos básicos entorno a las funciones en lenguaje C. Revisar la estructura y sintaxis de las funciones.  Analizar la diferencia entre paso de parámetros por valor y dirección. Aplicar todos los conocimientos y capacidades desarrolladas en la solución de problemas
Introducción Una función es un conjunto de líneas de código, diseñada para  realizar una tarea específica . Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para evitar tediosas repeticiones de programación.
Ventajas Permite una mejor estructuración mediante código modular. Reduce el tamaño del código Facilita la escritura y depuración de código Genera código reutilizable
Cuando una función es invocada se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada.
Forma general de una función Donde: tipo,  especifica el tipo de dato del valor devuelto por la función. nombre_función:  es un identificador o nombre válido. lista de parámetros,  es la lista de nombres de variables, reciben los valores de los argumentos cuando se llama a la función.  cuerpo:  bloque de código de la función.
Prototipos de Funciones Antes de escribir una función es necesario informarle al Compilador los tamaños de los valores que se le enviarán al “stack” y el tamaño de los valores que ella retornará al programa invocante. Ejemplo float mi_funcion(int i, char ch ) ;  Observación:  La declaración termina en  ";"
Implementación o definición La definición debe comenzar con un encabezamiento, que debe coincidir totalmente con el prototipo declarado para la misma, y a continuación del mismo, encerradas por llaves se escribirán las sentencias que la componen.
Ejemplo #include <stdio.h>  int suma (int i, int j ); /* PROTOTIPO */  void main( ) { /*Sentencias del Cuerpo de la función.*/  }  int suma (int i, int j ) /* DEFINICIÓN O IMPLEMENTACIÓN  */  { int total; total=i+j; return total; /* RETORNO devolviendo un valor int */  }
Argumentos y Parámetros Argumentos  :   son los valores que se envían a la función en el momento que se realiza su llamada, estos valores pueden ser constantes, variables o expresiones . int cantidad=5; calculo(cantidad , ’A’ , cantidad *2);
Parámetros:  Es la lista de variables que reciben los valores de los argumentos que se pasan a la función. Por lo que deben ser declarados y se comportan como variables locales dentro de la función, creándose al entrar en la función y destruyéndose al salir.  void calculo(int num, char ch, int producto) { /*Sentencias*/ } Los parámetros de esta función toman los valores  num=5, ch=‘A’ y producto=10.
Llamada por valor Este método, también llamado por  paso por valor , copia el valor del argumento en el parámetro de la función en el momento de la llamada. De esta forma los cambios en los parámetros de la función no afectan a las variables (argumentos).
Ejemplo void suma(int x, int y); void main() { int u=12; Suma(u,3); } void suma(int x, int y) { printf(“Suma =%d \n”,x+y); } El resultado será:  15 12 3 3 12 MEMORIA PILA VARIABLE u x y Dirección de Memoria FEE 2 FEE 0 EF 02 EF 00
Llama por dirección Este tipo de llamada usa la dirección real del argumento por lo que los cambios hechos en los parámetros  correspondientes afecta a dichas variables.
Ejemplo. /* función que intercambia el contenido de sus dos argumentos*/ void intercambio(int *x, int* y) { int  aux; aux= *x; *x=*y; *y=aux; } Llamada : Intercambio(&u , &v);
La sentencia return Esta instrucción tiene como objetivo el definir el punto en que se devuelve el control de ejecución al punto de llamada y devolver un valor. Sintaxis return [<valor-devuelto>] ; <valor-devuelto> es opcional; puede ser cualquier expresión que pueda reducirse a un valor del mismo tipo que devuelve la función. Una función puede tener más de un punto de retorno (situación que debe ser evitada en la medida de lo posible), pero se debe tener en cuenta que la ejecución de la función finaliza con la primera ejecución de una sentencia return.
Vida de una variable Cuando definimos una variable dentro de una función, esa variable sólo es válida dentro de la función. Si definimos una variable dentro de main sólo podremos usarla dentro de main. Si por el contrario la definimos como variable global, antes de las funciones, se puede usar en todas las funciones.
Biblioteca estándar de funciones Cada compilador viene con una serie de funciones predefinidas disponibles para su uso, estas son en su mayoría funciones de entrada/salida, de manipulación de cadenas y caracteres y funciones matemáticas. Los prototipos están definidas para Usted por el escritor de su compilador para todas las funciones incluidas en su compilador. La mayoría de los compiladores tienen funciones adicionales predefinidas que no son estándar pero que permiten al programador sacar mayor provecho de su computadora .
Ejercicio 1  Descubre los errores #include <stdio.h>  #include <conio.h>  int main() {  int num1, num2;  int resultado,  printf( &quot;Introduzca dos números: &quot; );  scanf( &quot;%i %i&quot;, &num1, &num2 );  resultado = compara( num1, num2 );  printf( &quot;El mayor de los dos es %i\n&quot;, resultado );  return 0;  } int compara( int a, int b );  {  int mayor;  if ( a>b ) mayor = a;  else  mayor = b;  return mayor;  }
Busca los errores. #include <stdio.h>  int resultado( int parametro )  int main() { int a, b;  a = 2;  b = 3;  printf( &quot;%i&quot;, resultado( a );  return 0;  }  char resultado( int parametro )  {  return parámetro+b;  }
Fuentes Consultadas Luís Joyanes Aguilar, Ignacio Zahonero Martínez  “ Programación en C”. Evelio Granizo Montalvo, “ Lenguaje C Teoría y Ejercicios.” Andrés Marzal, Isabel Gracia,  “Introducción al lenguaje C.”   http://sopa.dis.ulpgc.es/so/cpp/intro_c/introc01.htm http://www.elrincondelc.com/cursoc/cursoc8.html http://www.modelo.edu.mx/univ/virtech/prograc/cfuncion.htm

Funciones

  • 1.
    Ing. Paulo Guerra22-Marzo-2010
  • 2.
    Objetivos de laClase Estudiar los conceptos básicos entorno a las funciones en lenguaje C. Revisar la estructura y sintaxis de las funciones. Analizar la diferencia entre paso de parámetros por valor y dirección. Aplicar todos los conocimientos y capacidades desarrolladas en la solución de problemas
  • 3.
    Introducción Una funciónes un conjunto de líneas de código, diseñada para realizar una tarea específica . Las funciones son utilizadas para descomponer grandes problemas en tareas simples y para evitar tediosas repeticiones de programación.
  • 4.
    Ventajas Permite unamejor estructuración mediante código modular. Reduce el tamaño del código Facilita la escritura y depuración de código Genera código reutilizable
  • 5.
    Cuando una funciónes invocada se le pasa el control a la misma, una vez que esta finalizó con su tarea el control es devuelto al punto desde el cual la función fue llamada.
  • 6.
    Forma general deuna función Donde: tipo, especifica el tipo de dato del valor devuelto por la función. nombre_función: es un identificador o nombre válido. lista de parámetros, es la lista de nombres de variables, reciben los valores de los argumentos cuando se llama a la función. cuerpo: bloque de código de la función.
  • 7.
    Prototipos de FuncionesAntes de escribir una función es necesario informarle al Compilador los tamaños de los valores que se le enviarán al “stack” y el tamaño de los valores que ella retornará al programa invocante. Ejemplo float mi_funcion(int i, char ch ) ; Observación: La declaración termina en &quot;;&quot;
  • 8.
    Implementación o definiciónLa definición debe comenzar con un encabezamiento, que debe coincidir totalmente con el prototipo declarado para la misma, y a continuación del mismo, encerradas por llaves se escribirán las sentencias que la componen.
  • 9.
    Ejemplo #include <stdio.h> int suma (int i, int j ); /* PROTOTIPO */ void main( ) { /*Sentencias del Cuerpo de la función.*/ } int suma (int i, int j ) /* DEFINICIÓN O IMPLEMENTACIÓN */ { int total; total=i+j; return total; /* RETORNO devolviendo un valor int */ }
  • 10.
    Argumentos y ParámetrosArgumentos : son los valores que se envían a la función en el momento que se realiza su llamada, estos valores pueden ser constantes, variables o expresiones . int cantidad=5; calculo(cantidad , ’A’ , cantidad *2);
  • 11.
    Parámetros: Esla lista de variables que reciben los valores de los argumentos que se pasan a la función. Por lo que deben ser declarados y se comportan como variables locales dentro de la función, creándose al entrar en la función y destruyéndose al salir. void calculo(int num, char ch, int producto) { /*Sentencias*/ } Los parámetros de esta función toman los valores num=5, ch=‘A’ y producto=10.
  • 12.
    Llamada por valorEste método, también llamado por paso por valor , copia el valor del argumento en el parámetro de la función en el momento de la llamada. De esta forma los cambios en los parámetros de la función no afectan a las variables (argumentos).
  • 13.
    Ejemplo void suma(intx, int y); void main() { int u=12; Suma(u,3); } void suma(int x, int y) { printf(“Suma =%d \n”,x+y); } El resultado será: 15 12 3 3 12 MEMORIA PILA VARIABLE u x y Dirección de Memoria FEE 2 FEE 0 EF 02 EF 00
  • 14.
    Llama por direcciónEste tipo de llamada usa la dirección real del argumento por lo que los cambios hechos en los parámetros correspondientes afecta a dichas variables.
  • 15.
    Ejemplo. /* funciónque intercambia el contenido de sus dos argumentos*/ void intercambio(int *x, int* y) { int aux; aux= *x; *x=*y; *y=aux; } Llamada : Intercambio(&u , &v);
  • 16.
    La sentencia returnEsta instrucción tiene como objetivo el definir el punto en que se devuelve el control de ejecución al punto de llamada y devolver un valor. Sintaxis return [<valor-devuelto>] ; <valor-devuelto> es opcional; puede ser cualquier expresión que pueda reducirse a un valor del mismo tipo que devuelve la función. Una función puede tener más de un punto de retorno (situación que debe ser evitada en la medida de lo posible), pero se debe tener en cuenta que la ejecución de la función finaliza con la primera ejecución de una sentencia return.
  • 17.
    Vida de unavariable Cuando definimos una variable dentro de una función, esa variable sólo es válida dentro de la función. Si definimos una variable dentro de main sólo podremos usarla dentro de main. Si por el contrario la definimos como variable global, antes de las funciones, se puede usar en todas las funciones.
  • 18.
    Biblioteca estándar defunciones Cada compilador viene con una serie de funciones predefinidas disponibles para su uso, estas son en su mayoría funciones de entrada/salida, de manipulación de cadenas y caracteres y funciones matemáticas. Los prototipos están definidas para Usted por el escritor de su compilador para todas las funciones incluidas en su compilador. La mayoría de los compiladores tienen funciones adicionales predefinidas que no son estándar pero que permiten al programador sacar mayor provecho de su computadora .
  • 19.
    Ejercicio 1 Descubre los errores #include <stdio.h> #include <conio.h> int main() { int num1, num2; int resultado, printf( &quot;Introduzca dos números: &quot; ); scanf( &quot;%i %i&quot;, &num1, &num2 ); resultado = compara( num1, num2 ); printf( &quot;El mayor de los dos es %i\n&quot;, resultado ); return 0; } int compara( int a, int b ); { int mayor; if ( a>b ) mayor = a; else mayor = b; return mayor; }
  • 20.
    Busca los errores.#include <stdio.h> int resultado( int parametro ) int main() { int a, b; a = 2; b = 3; printf( &quot;%i&quot;, resultado( a ); return 0; } char resultado( int parametro ) { return parámetro+b; }
  • 21.
    Fuentes Consultadas LuísJoyanes Aguilar, Ignacio Zahonero Martínez “ Programación en C”. Evelio Granizo Montalvo, “ Lenguaje C Teoría y Ejercicios.” Andrés Marzal, Isabel Gracia, “Introducción al lenguaje C.” http://sopa.dis.ulpgc.es/so/cpp/intro_c/introc01.htm http://www.elrincondelc.com/cursoc/cursoc8.html http://www.modelo.edu.mx/univ/virtech/prograc/cfuncion.htm