SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
FUNCIONES




         Realizado por Mariela Curiel
         Universidad Simón Bolívar
         Junio, 2011

Programación en C (II Parte)
                       •05/06/2011
 La mejor forma de desarrollar y
  mantener un programa grande es
  construirlo a partir de piezas menores
  o módulos (divide y vencerás)
 Reutilización: uso de funciones
  existentes, como bloques de
  construcción, para crear nuevos
  programas.
 Al programar modularmente se facilita
  el mantenimiento de los programas.


                Funciones
   Como la mayoría de los lenguajes, C
    ofrece la posibilidad de programar con
    funciones.


Sintaxis de una función:
 tiporetorno nombre_func(par1, par2,...){
                variables locales

                  código de la función
    }


Funciones
Ejemplo de Definición de una Función

Tipo del valor de retorno
                   Nombre de la función
 float promedio(float a, float b){
 float prom;
     prom=(a+b)/2;
     return(prom);       Argumentos o parámetros
 }

      Variable Local
                                Valor de retorno
En C los programas se escriben
 combinando las funciones que el
 programador escribe, con funciones
 “pre-definidas” disponibles en la
 librería estándar de C.




Funciones
Ejemplo: calcular el promedio de dos
 enteros
 float promedio(float a, float b){
 float prom;
                                       Definición
     prom=(a+b)/2;
     return(prom);
 }

 main(){
   float a=5,b=15,result;

     result=promedio(a,b);        Llamada a la
     printf(”promedio=%f",result);función
 }
void cuadrados(){
    int ciclo;
    for(ciclo=1;ciclo<10;ciclo++)
       printf("%dn",ciclo*ciclo);
}


main() {            Si la función no retorna
  cuadrados();
}                   ningún valor se debe usar
                    como tipo de retorno el
                    void y omitir de la función
                    la instrucción return.


Funciones VOID
 Una   función pudiera no tener
  argumentos. En este caso también se
  utiliza la palabra reservada void en
  lugar de los argumentos.
 Los argumentos pueden ser
  constantes, variables o expresiones.




Funciones: Argumentos
Ejemplos:
int main(){
  float a=5,b=15,result, c=1, d=2, x;
                                    Los argumentos son
    result=promedio(a,b);                variables

    printf(”promedio=%f",result);

    …                               Los argumentos son
                                        expresiones
    x = promedio(a+b, c*d);

}
Funciones: Parámetros o
Argumentos Formales y Actuales
   float promedio(float x, float y){
   float prom;
       prom=(x+y)/2;      x,y son
       return(prom);     Parámetros
                          formales
   }

 main(){
   float a=5,b=15,result, c=1, t=3;
   result=promedio(a,b);         Parámetros
   result=promedio(c+t,40);      Reales o
   result=promedio(a+b,c*t);
 }
                                 Actuales
float promedio(float, float);

Un prototipo de función le indica al compilador
el tipo de dato regresado por la función, el número
de parámetros que la función espera recibir, los tipos
de dichos parámetros y el orden en el cuál se esperan.

Los prototipos de las funciones se suelen incluir
En los archivos .h (archivos de cabecera)

Prototipo de una función
Los archivos de cabecera (con
  extensión .h) contienen los
  prototipos de función de todas las
  funciones utilizadas en el programa
  y las definiciones de varios tipos de
  datos y constantes.



Funciones
/* Ejemplo de un archivo de cabecera (.h) */
#define MAXEMP 20
#define MAXLIN 80
#define MAXNOMBRE 20

typedef struct reg {
  int edad;
  int ttrabajo;
  char nombre[MAXNOMBRE];
} emple;
// prototipos de las funciones
extern int getline(char *, int, FILE *);
void asignar(emple *, int, int, char *, int);
Cuando los argumentos se pasan por
 valor se efectúa una copia del valor
 del parámetro y ésta se pasa a la
 función (a través de la pila). Las
 modificaciones que realice la función
 a la copia no afectan los valores
 originales de la variable.



Funciones: parámetros por valor
y referencia.
Cuando un argumento se pasa
 por referencia, el llamador
 permite que la función llamada
 modifique el valor de la
 variable.



Funciones: parámetros por valor
y referencia.
   Ejemplos donde el pasaje de
    parámetros por valor es suficiente:
    ◦ sqrt(x), promedio(a,b), exp(x) …. La
      función trabaja con los valores, no necesita
      cambiar los argumentos.
   Ejemplo donde se necesita modificar la
    variable:
    ◦ strcat(str1, str2) // concatena la cadena de
      caracteres str2 al final de str1




Funciones: parámetros por valor
y referencia.
Funciones (Pasaje de Parámetros)
 Por. defecto, en C el pasaje de
  parámetros es por valor, es decir
  los argumentos que se les pasan a
  las funciones son copias de los
  VALORES de las variables.
Funciones (Pasaje de
Parámetros)
void swap(int i,int j){
  int temp;
    .
                int x=3, y=4;
  temp = i;
                ...
  i = j;
                swap(x,y);
  j = temp;     printf(“%d, %d”,x,y);
}               /* después de invocar
                a la función:
                x es 3
                y es 4 */
En las siguientes láminas vamos a
 ilustrar qué pasa con las
 variables en la zona de memoria
 del llamador (función main) y en
 la pila utilizada por la función en
 un pasaje de parámetros por
 valor y referencia.


Pasaje de Parámetros
                    •05/06/2011
Memoria Principal (área de las variables del main)
       1000            4     X
       1004            5     Y
       1008           - 15




Posiciones de la
                             main() {
Memoria
                        78     int x=4,y=5
                               …
          Por valor          swap(x,y) //swap (4,5)
                             swap(&x,&y) // swap (1000, 1004)
                             }
Memoria Principal
       1000             4       X
       1004             5       Y
       1008           - 15




Posiciones de la
                                main() {
Memoria
                        78        int x=4,y=5
                                  …
                                swap(x,y) //swap (4,5)
     Por referencia             swap(&x,&y) // swap (1000, 1004)
                                }
La función swap intercambia el valor de dos
variables, usando una tercera (temp)
como temporal.

    void swap(int i,int j){
      int temp;
      temp = i;
      i = j;
      j = temp;
    }

                           •05/06/2011
Memoria del programa
       ppal (main).
1000         4                Pila de la función
             5                al momento de la llamada swap(x,y)
1004
1008       - 15
                               8004
                               8008         4            Parámetros

                               8012          5           empilados
                                                         y espacio
                               temp                      para la
                                                         variable local




 Pasaje de parámetros
 por valor
Memoria del programa ppal (main)
       después de la llamada
                                      pila de la función
                                       después del swap
1000          4
1004          5
                                      8004
1008        - 15
                                      8008          5
                                      8012          4

                                     temp          4



 Pasaje de parámetros
 Por valor
Memoria del programa ppal (main)
       después de la llamada

                                      pila de la función
1000           4
                                      después del swap
1004           5

1008         - 15
                                     8004
                                     8008           5
                                     8012          4

                                     temp          4


 Los valores se intercambian en la
 pila de la función pero las
 variables x, y permanecen
 intactas
Memoria del programa ppal.

1000         4
1004         5

1008       - 15
                          pila de la función
                          al momento de la llamada
                          swap (&x, &y)

                            8004
                            8008         1000
                            8012         1004

                           temp
Pasaje de
Parámetros por referencia
Memoria del programa ppal (main)
       después de la llamada.

1000        5
1004        4

1008       - 15         Pila de la función después de la
                        llamada


                         8004
                         8008            1000
                         8012           1004

                        temp             4
Pasaje de
Parámetros por referencia
Funciones y Arreglos

Los arreglos de una dimensión pueden pasarse
 a las funciones como parámetros:
float promedio(int size,float list[])
{
     int i;
    float suma=0.0;                    No es necesario
     for (i=0;i<size;i++)                especificar
          suma+=list[i];                  el tamaño
    return(sum/size);
}
La declaración float list[] le dice a C que list es
 un vector de floats. En este caso el
 parámetro size indica el tamaño del
 arreglo.
Funciones y Arreglos


Ejemplo de una llamada a la función
 promedio:
int main() {

float numeros = {3.0, 4.5, 2.1}, x;

…
x = promedio(3,numeros);
…
}
Funciones y Arreglos
Arreglos Multi-dimensionales:
void printtable(int xsize,int ysize,
                 float tabla[][5]){
 int x,y;

  for (x=0;x<xsize;x++){
   for (y=0;y<ysize;y++)
       printf("t%f",table[x][y]);
   printf("n");
 }
}
float tabla[][5] le dice a C que la tabla es
  un arreglo de dimensión Nx5.
Ejemplo de una función que recibe como parámetro
Un arreglos de dos dimensiones y la llamada a la misma.

  main(){
            int array1[2][3]={{1,2,3},{4,5,6}};
            printf(“Los valores del array1 sonn”);
            printArray(2,3, array1); // llamada
  }

  void printArray(int dx, int dy, int a[][3]) // definición
  { int i,j
    for (i= 0;i<dx; i++) {
            for(j=0; j < dy; j++)
            print(“%d”, a[i][j];
     print(“n”);
  }
Funciones (Tipos de Variables)
VARIABLES GLOBALES
 Están definidas FUERA de cualquier
  función (incluyendo el main() )
 Existirán todo el tiempo que esté
  ejecutándose el programa.
 Se inicializan automáticamente en
  CERO cuando el programa comienza a
  ejecutarse.
 Son accesibles desde todas las
  funciones.
#include <STDIO.H>
double una_funcion(void);
double variable_global;

main(){
  double i ;
  printf("%f", variable_global );   /* 0 */
  i = una_funcion() ;
  printf("%f", i );                 /* 1 */
  printf("%f", variable_global );    /* 1 */
  variable_global += 1 ;
  printf("%f", variable_global );    /* 2 */
  return 0 ;
}
double una_funcion(void){
  return(variable_global += 1) ;
}
Funciones (Tipos de Variables)

               VARIABLES LOCALES
   Las variables definidas DENTRO de una
    función, se denominan VARIABLES
    LOCALES o AUTOMATICAS.
   Se crean y destruyen automaticamente por
    la llamada y el retorno de una función
    respectivamente.
   Se ubican en la pila dinámica (stack) de
    memoria.
   Su visibilidad está limitada a la función
    donde son declaradas. No guardan
    relación con variables globales del mismo
    nombre.
   No se les pueda inicializar previamente,
    en consecuencia su valor inicial será
    indeterminado (basura).




Funciones (Tipos de Variables)
double potencia(double val,unsigned exp){
   double ret_val = 1.0; //var. locales
   int i;
   for(i = 0; i < exp; i++)ret_val *= val;
   return(ret_val);
}
float promedio(int size,float list[])
{
    int i;
    float suma=0.0;
    for (i=0;i<size;i++) suma+=list[i];
    return(sum/size);
}
Funciones (Tipos de Variables)
     VARIABLES LOCALES ESTATICAS
   Son variables que mantienen su
   valor, entre una y otra llamada a
   la función sin por ello perder su
   ámbito de existencia.
   Sedeclaran con la palabra clave
   static.
Funciones (Tipos de
   Variables)
main() {              void func(void){
  void func(void);      static int i=0;
  int n;                i++;
  for(n=1;n<=4;n++)    printf(“llamada
     func();          Nro. %d”, i)
}                     }


Al ejecutar el          Llamada   Nro.   1
                        Llamada   Nro.   2
main, se imprime.
                        Llamada   Nro.   3
                        Llamada   Nro.   4
Funciones (Tipos de Variables)
VARIABLES GLOBALES ESTATICAS
 Son variables inaccesibles al exterior
  del archivo fuente donde se
  encuentran definidas.

          static int a;
          main(){
          }
Funciones (Tipos de Variables)

             VARIABLES DE REGISTRO
    Son variables que se almacenan en los
     registros internos del CPU.
    Se suelen usar registros para almacenar
     los contadores de los bucles (FOR,
     WHILE, etc).
      register int x;
      register char c;
VARIABLES EXTERNAS
   Son variables globales definidas en otro
    archivo.
   Para usarlas bastará con que se la
    DECLARE especificando que es EXTERNA
    a dicho módulo.




Funciones (Tipos de Variables)
Archivo 1
extern int sp;
                             Archivo 2
extern double val[];
void push(double f) {    int sp;
... }                    double val[MAX]

double pop(void){ ...}



 Funciones (Tipos de Variables)
Declaración: expone      Definición: aparte
 las propiedades de        de exponer las
 una variable              propiedades de una
 (principalmente su        variable, también
 tipo)                     provoca que se le
extern int sp;             reserve:
extern double val[];       int sp;
                           double val[MAX]




Funciones (Tipos de Variables)
A continuación un
ejemplo donde se usan
    todos los tipos de
            variables




           •05/06/2011
#include <stdio.h> void a(void) {
void a(void);             int x=25;
void b(void);             printf(“%d ”, x);
                          printf(“%d ”, ++x);
void c(void);           }
int x = 1;              void b(void) {
int main() {              static int x=50;
                          printf(“%d ”, x);
  Int x = 5;              printf(“%d ”, ++x);
  printf(“%d ”,x)//5}
  a();                  void c(void) {
                           printf(“%d ”, x);
  b();                     printf(“%d ”,x*10);
  c();                  }
  a(); b();
}
       Salida: 5 25 26 50 51 1 10 25 26 51 52

Mais conteúdo relacionado

Mais procurados

Utp sirn_s12_sistemas de control basados en logic difusa
 Utp sirn_s12_sistemas de control basados en logic difusa Utp sirn_s12_sistemas de control basados en logic difusa
Utp sirn_s12_sistemas de control basados en logic difusa
jcbp_peru
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discreto
guest1e528d
 
Logica-difusa-simulink-casos
Logica-difusa-simulink-casosLogica-difusa-simulink-casos
Logica-difusa-simulink-casos
Dave R Rdez
 
Utp sirn_2015-2 lab1
 Utp sirn_2015-2 lab1 Utp sirn_2015-2 lab1
Utp sirn_2015-2 lab1
jcbp_peru
 
Utp 2015-2_sirn_s4_red perceptron
 Utp 2015-2_sirn_s4_red perceptron Utp 2015-2_sirn_s4_red perceptron
Utp 2015-2_sirn_s4_red perceptron
jcbp_peru
 

Mais procurados (20)

Recursión
RecursiónRecursión
Recursión
 
Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrencia
 
Package operaciones
Package operacionesPackage operaciones
Package operaciones
 
Utp sirn_s12_sistemas de control basados en logic difusa
 Utp sirn_s12_sistemas de control basados en logic difusa Utp sirn_s12_sistemas de control basados en logic difusa
Utp sirn_s12_sistemas de control basados en logic difusa
 
C# calculadora
C# calculadoraC# calculadora
C# calculadora
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discreto
 
Logica-difusa-simulink-casos
Logica-difusa-simulink-casosLogica-difusa-simulink-casos
Logica-difusa-simulink-casos
 
Logica Fuzzy
Logica FuzzyLogica Fuzzy
Logica Fuzzy
 
Utp sirn_2015-2 lab1
 Utp sirn_2015-2 lab1 Utp sirn_2015-2 lab1
Utp sirn_2015-2 lab1
 
Modulo4
Modulo4Modulo4
Modulo4
 
Recursividad
RecursividadRecursividad
Recursividad
 
Compilacion parcial
Compilacion parcialCompilacion parcial
Compilacion parcial
 
Practica 7(1) de ingeniería de control: Laboratorio de ingeniería de control(...
Practica 7(1) de ingeniería de control: Laboratorio de ingeniería de control(...Practica 7(1) de ingeniería de control: Laboratorio de ingeniería de control(...
Practica 7(1) de ingeniería de control: Laboratorio de ingeniería de control(...
 
Java 8
Java 8Java 8
Java 8
 
Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.Tema 1: Introducción a la programación funcional.
Tema 1: Introducción a la programación funcional.
 
Pilas
PilasPilas
Pilas
 
4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario4. Programación con arrays, funciones, y objetos definidos por el usuario
4. Programación con arrays, funciones, y objetos definidos por el usuario
 
Utp 2015-2_sirn_s4_red perceptron
 Utp 2015-2_sirn_s4_red perceptron Utp 2015-2_sirn_s4_red perceptron
Utp 2015-2_sirn_s4_red perceptron
 
Listas Pilas Colas
Listas Pilas ColasListas Pilas Colas
Listas Pilas Colas
 
Pila dinamica y pila estatica
Pila dinamica y pila estaticaPila dinamica y pila estatica
Pila dinamica y pila estatica
 

Destaque (10)

Arreglos, Procedimientos y Funciones
Arreglos, Procedimientos y FuncionesArreglos, Procedimientos y Funciones
Arreglos, Procedimientos y Funciones
 
Tipo de Arreglos
Tipo de ArreglosTipo de Arreglos
Tipo de Arreglos
 
16 Curso de POO en java - arreglos unidimensionales
16 Curso de POO en java - arreglos unidimensionales16 Curso de POO en java - arreglos unidimensionales
16 Curso de POO en java - arreglos unidimensionales
 
Arreglos en C
Arreglos en CArreglos en C
Arreglos en C
 
Arreglos bidimensionales o matrices
Arreglos bidimensionales o matricesArreglos bidimensionales o matrices
Arreglos bidimensionales o matrices
 
Ejercicios de vectores o arrays
Ejercicios de vectores o arraysEjercicios de vectores o arrays
Ejercicios de vectores o arrays
 
Arreglos c++
Arreglos c++Arreglos c++
Arreglos c++
 
17 arreglos bidimensionales java
17 arreglos bidimensionales java17 arreglos bidimensionales java
17 arreglos bidimensionales java
 
Introducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje CIntroducción a la codificación en lenguaje C
Introducción a la codificación en lenguaje C
 
Arrays Bidimensionales y Multidimensionales - Carlos Correa
Arrays Bidimensionales y Multidimensionales - Carlos CorreaArrays Bidimensionales y Multidimensionales - Carlos Correa
Arrays Bidimensionales y Multidimensionales - Carlos Correa
 

Semelhante a Clase2 c

Presen iii 26 funciones
Presen iii  26 funcionesPresen iii  26 funciones
Presen iii 26 funciones
RafaeloRivas
 
Operadores y Expresiones en C++
Operadores y Expresiones en C++Operadores y Expresiones en C++
Operadores y Expresiones en C++
die_dex
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación c
victdiazm
 
Utp lpi_s6y7_funciones y variables 2012-2
 Utp lpi_s6y7_funciones y variables 2012-2 Utp lpi_s6y7_funciones y variables 2012-2
Utp lpi_s6y7_funciones y variables 2012-2
jcbenitezp
 
Funciones
FuncionesFunciones
Funciones
adark
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
Ysaac Ruiz
 
04 - Módulos. Funciones.doc
04 - Módulos. Funciones.doc04 - Módulos. Funciones.doc
04 - Módulos. Funciones.doc
AdrianaLuna80
 
Utp pti_s6y7_funciones y variables
 Utp pti_s6y7_funciones y variables Utp pti_s6y7_funciones y variables
Utp pti_s6y7_funciones y variables
jcbenitezp
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimiento
EnAutomático
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funciones
eulo10
 
Comenzando a programar
Comenzando a programarComenzando a programar
Comenzando a programar
Rubén Loredo
 

Semelhante a Clase2 c (20)

Funcionesenlenguaje c
Funcionesenlenguaje cFuncionesenlenguaje c
Funcionesenlenguaje c
 
Presen iii 26 funciones
Presen iii  26 funcionesPresen iii  26 funciones
Presen iii 26 funciones
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
11funciones 1231096290787715-2
11funciones 1231096290787715-211funciones 1231096290787715-2
11funciones 1231096290787715-2
 
11 Funciones
11 Funciones11 Funciones
11 Funciones
 
Operadores y Expresiones en C++
Operadores y Expresiones en C++Operadores y Expresiones en C++
Operadores y Expresiones en C++
 
Clase 5
Clase 5Clase 5
Clase 5
 
Lenguaje de programación c
Lenguaje de programación cLenguaje de programación c
Lenguaje de programación c
 
Utp lpi_s6y7_funciones y variables 2012-2
 Utp lpi_s6y7_funciones y variables 2012-2 Utp lpi_s6y7_funciones y variables 2012-2
Utp lpi_s6y7_funciones y variables 2012-2
 
Funciones
FuncionesFunciones
Funciones
 
05 - Funciones en lenguaje C
05 - Funciones en lenguaje C05 - Funciones en lenguaje C
05 - Funciones en lenguaje C
 
Funciones
FuncionesFunciones
Funciones
 
4 memoria dinamica
4 memoria dinamica4 memoria dinamica
4 memoria dinamica
 
Algoritmos y lenjuage de programacion
Algoritmos y  lenjuage de programacionAlgoritmos y  lenjuage de programacion
Algoritmos y lenjuage de programacion
 
04 - Módulos. Funciones.doc
04 - Módulos. Funciones.doc04 - Módulos. Funciones.doc
04 - Módulos. Funciones.doc
 
Utp pti_s6y7_funciones y variables
 Utp pti_s6y7_funciones y variables Utp pti_s6y7_funciones y variables
Utp pti_s6y7_funciones y variables
 
Capítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimientoCapítulo 6 funciones y procedimiento
Capítulo 6 funciones y procedimiento
 
Metodos funciones
Metodos funcionesMetodos funciones
Metodos funciones
 
Comenzando a programar
Comenzando a programarComenzando a programar
Comenzando a programar
 

Último

SISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docx
SISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docxSISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docx
SISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docx
gesicavillanuevaqf
 

Último (20)

Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos EscolaresResumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
Resumen Acuerdo 05 04 24.pdf por el que se rigen los Consejos Técnicos Escolares
 
RESPONSABILIDAD SOCIAL EN LAS ORGANIZACIONES (4).pdf
RESPONSABILIDAD SOCIAL EN LAS ORGANIZACIONES (4).pdfRESPONSABILIDAD SOCIAL EN LAS ORGANIZACIONES (4).pdf
RESPONSABILIDAD SOCIAL EN LAS ORGANIZACIONES (4).pdf
 
11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
11.NEOLIBERALISMO: que es, ventajas, desventajas, consecuenciaspptx
 
PROBLEMAS DE GENÉTICA CON ÁRBOLES GENEALÓGICOS.pdf
PROBLEMAS DE GENÉTICA  CON ÁRBOLES GENEALÓGICOS.pdfPROBLEMAS DE GENÉTICA  CON ÁRBOLES GENEALÓGICOS.pdf
PROBLEMAS DE GENÉTICA CON ÁRBOLES GENEALÓGICOS.pdf
 
La historia de la vida estudiantil a 102 años de la fundación de las Normales...
La historia de la vida estudiantil a 102 años de la fundación de las Normales...La historia de la vida estudiantil a 102 años de la fundación de las Normales...
La historia de la vida estudiantil a 102 años de la fundación de las Normales...
 
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
IMPLICACIONES BIOÉTICAS ANTE EL TRANSHUMANISMO A PARTIR DEL PENSAMIENTO FILOS...
 
Lección 1: Los complementos del Verbo ...
Lección 1: Los complementos del Verbo ...Lección 1: Los complementos del Verbo ...
Lección 1: Los complementos del Verbo ...
 
PLAN DE GESTION DEL RIESGO 2023 - 2024.docx
PLAN DE GESTION DEL RIESGO  2023 - 2024.docxPLAN DE GESTION DEL RIESGO  2023 - 2024.docx
PLAN DE GESTION DEL RIESGO 2023 - 2024.docx
 
Época colonial: vestimenta, costumbres y juegos de la época
Época colonial: vestimenta, costumbres y juegos de la épocaÉpoca colonial: vestimenta, costumbres y juegos de la época
Época colonial: vestimenta, costumbres y juegos de la época
 
a propósito del estado su relevancia y definiciones
a propósito del estado su relevancia y definicionesa propósito del estado su relevancia y definiciones
a propósito del estado su relevancia y definiciones
 
ENUNCIADOS CUESTIONARIO S9 GEOLOGIA Y MINERALOGIA - GENERAL.docx
ENUNCIADOS CUESTIONARIO S9 GEOLOGIA Y MINERALOGIA - GENERAL.docxENUNCIADOS CUESTIONARIO S9 GEOLOGIA Y MINERALOGIA - GENERAL.docx
ENUNCIADOS CUESTIONARIO S9 GEOLOGIA Y MINERALOGIA - GENERAL.docx
 
DESCRIPCIÓN-LOS-DILEMAS-DEL-CONOCIMIENTO.pptx
DESCRIPCIÓN-LOS-DILEMAS-DEL-CONOCIMIENTO.pptxDESCRIPCIÓN-LOS-DILEMAS-DEL-CONOCIMIENTO.pptx
DESCRIPCIÓN-LOS-DILEMAS-DEL-CONOCIMIENTO.pptx
 
2.15. Calendario Civico Escolar 2024.docx
2.15. Calendario Civico Escolar 2024.docx2.15. Calendario Civico Escolar 2024.docx
2.15. Calendario Civico Escolar 2024.docx
 
Tipologías de vínculos afectivos (grupo)
Tipologías de vínculos afectivos (grupo)Tipologías de vínculos afectivos (grupo)
Tipologías de vínculos afectivos (grupo)
 
LA ILIADA Y LA ODISEA.LITERATURA UNIVERSAL
LA ILIADA Y LA ODISEA.LITERATURA UNIVERSALLA ILIADA Y LA ODISEA.LITERATURA UNIVERSAL
LA ILIADA Y LA ODISEA.LITERATURA UNIVERSAL
 
METODOS DE EXTRACCIÓN E IDENTIFICACIÓN - 2024.pdf
METODOS DE EXTRACCIÓN E IDENTIFICACIÓN - 2024.pdfMETODOS DE EXTRACCIÓN E IDENTIFICACIÓN - 2024.pdf
METODOS DE EXTRACCIÓN E IDENTIFICACIÓN - 2024.pdf
 
Power Point: Luz desde el santuario.pptx
Power Point: Luz desde el santuario.pptxPower Point: Luz desde el santuario.pptx
Power Point: Luz desde el santuario.pptx
 
Tema 8 Estructura y composición de la Tierra 2024
Tema 8 Estructura y composición de la Tierra 2024Tema 8 Estructura y composición de la Tierra 2024
Tema 8 Estructura y composición de la Tierra 2024
 
SISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docx
SISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docxSISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docx
SISTEMA RESPIRATORIO DEL CUERPO HUMANO triptico.docx
 
proyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
proyecto semana de los Jardines, actividades a realizar para resaltar esta fechaproyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
proyecto semana de los Jardines, actividades a realizar para resaltar esta fecha
 

Clase2 c

  • 1. FUNCIONES Realizado por Mariela Curiel Universidad Simón Bolívar Junio, 2011 Programación en C (II Parte) •05/06/2011
  • 2.  La mejor forma de desarrollar y mantener un programa grande es construirlo a partir de piezas menores o módulos (divide y vencerás)  Reutilización: uso de funciones existentes, como bloques de construcción, para crear nuevos programas.  Al programar modularmente se facilita el mantenimiento de los programas. Funciones
  • 3. Como la mayoría de los lenguajes, C ofrece la posibilidad de programar con funciones. Sintaxis de una función: tiporetorno nombre_func(par1, par2,...){ variables locales código de la función } Funciones
  • 4. Ejemplo de Definición de una Función Tipo del valor de retorno Nombre de la función float promedio(float a, float b){ float prom; prom=(a+b)/2; return(prom); Argumentos o parámetros } Variable Local Valor de retorno
  • 5. En C los programas se escriben combinando las funciones que el programador escribe, con funciones “pre-definidas” disponibles en la librería estándar de C. Funciones
  • 6. Ejemplo: calcular el promedio de dos enteros float promedio(float a, float b){ float prom; Definición prom=(a+b)/2; return(prom); } main(){ float a=5,b=15,result; result=promedio(a,b); Llamada a la printf(”promedio=%f",result);función }
  • 7. void cuadrados(){ int ciclo; for(ciclo=1;ciclo<10;ciclo++) printf("%dn",ciclo*ciclo); } main() { Si la función no retorna cuadrados(); } ningún valor se debe usar como tipo de retorno el void y omitir de la función la instrucción return. Funciones VOID
  • 8.  Una función pudiera no tener argumentos. En este caso también se utiliza la palabra reservada void en lugar de los argumentos.  Los argumentos pueden ser constantes, variables o expresiones. Funciones: Argumentos
  • 9. Ejemplos: int main(){ float a=5,b=15,result, c=1, d=2, x; Los argumentos son result=promedio(a,b); variables printf(”promedio=%f",result); … Los argumentos son expresiones x = promedio(a+b, c*d); }
  • 10. Funciones: Parámetros o Argumentos Formales y Actuales float promedio(float x, float y){ float prom; prom=(x+y)/2; x,y son return(prom); Parámetros formales } main(){ float a=5,b=15,result, c=1, t=3; result=promedio(a,b); Parámetros result=promedio(c+t,40); Reales o result=promedio(a+b,c*t); } Actuales
  • 11. float promedio(float, float); Un prototipo de función le indica al compilador el tipo de dato regresado por la función, el número de parámetros que la función espera recibir, los tipos de dichos parámetros y el orden en el cuál se esperan. Los prototipos de las funciones se suelen incluir En los archivos .h (archivos de cabecera) Prototipo de una función
  • 12. Los archivos de cabecera (con extensión .h) contienen los prototipos de función de todas las funciones utilizadas en el programa y las definiciones de varios tipos de datos y constantes. Funciones
  • 13. /* Ejemplo de un archivo de cabecera (.h) */ #define MAXEMP 20 #define MAXLIN 80 #define MAXNOMBRE 20 typedef struct reg { int edad; int ttrabajo; char nombre[MAXNOMBRE]; } emple; // prototipos de las funciones extern int getline(char *, int, FILE *); void asignar(emple *, int, int, char *, int);
  • 14. Cuando los argumentos se pasan por valor se efectúa una copia del valor del parámetro y ésta se pasa a la función (a través de la pila). Las modificaciones que realice la función a la copia no afectan los valores originales de la variable. Funciones: parámetros por valor y referencia.
  • 15. Cuando un argumento se pasa por referencia, el llamador permite que la función llamada modifique el valor de la variable. Funciones: parámetros por valor y referencia.
  • 16. Ejemplos donde el pasaje de parámetros por valor es suficiente: ◦ sqrt(x), promedio(a,b), exp(x) …. La función trabaja con los valores, no necesita cambiar los argumentos.  Ejemplo donde se necesita modificar la variable: ◦ strcat(str1, str2) // concatena la cadena de caracteres str2 al final de str1 Funciones: parámetros por valor y referencia.
  • 17. Funciones (Pasaje de Parámetros) Por. defecto, en C el pasaje de parámetros es por valor, es decir los argumentos que se les pasan a las funciones son copias de los VALORES de las variables.
  • 18. Funciones (Pasaje de Parámetros) void swap(int i,int j){ int temp; . int x=3, y=4; temp = i; ... i = j; swap(x,y); j = temp; printf(“%d, %d”,x,y); } /* después de invocar a la función: x es 3 y es 4 */
  • 19. En las siguientes láminas vamos a ilustrar qué pasa con las variables en la zona de memoria del llamador (función main) y en la pila utilizada por la función en un pasaje de parámetros por valor y referencia. Pasaje de Parámetros •05/06/2011
  • 20. Memoria Principal (área de las variables del main) 1000 4 X 1004 5 Y 1008 - 15 Posiciones de la main() { Memoria 78 int x=4,y=5 … Por valor swap(x,y) //swap (4,5) swap(&x,&y) // swap (1000, 1004) }
  • 21. Memoria Principal 1000 4 X 1004 5 Y 1008 - 15 Posiciones de la main() { Memoria 78 int x=4,y=5 … swap(x,y) //swap (4,5) Por referencia swap(&x,&y) // swap (1000, 1004) }
  • 22. La función swap intercambia el valor de dos variables, usando una tercera (temp) como temporal. void swap(int i,int j){ int temp; temp = i; i = j; j = temp; } •05/06/2011
  • 23. Memoria del programa ppal (main). 1000 4 Pila de la función 5 al momento de la llamada swap(x,y) 1004 1008 - 15 8004 8008 4 Parámetros 8012 5 empilados y espacio temp para la variable local Pasaje de parámetros por valor
  • 24. Memoria del programa ppal (main) después de la llamada pila de la función después del swap 1000 4 1004 5 8004 1008 - 15 8008 5 8012 4 temp 4 Pasaje de parámetros Por valor
  • 25. Memoria del programa ppal (main) después de la llamada pila de la función 1000 4 después del swap 1004 5 1008 - 15 8004 8008 5 8012 4 temp 4 Los valores se intercambian en la pila de la función pero las variables x, y permanecen intactas
  • 26. Memoria del programa ppal. 1000 4 1004 5 1008 - 15 pila de la función al momento de la llamada swap (&x, &y) 8004 8008 1000 8012 1004 temp Pasaje de Parámetros por referencia
  • 27. Memoria del programa ppal (main) después de la llamada. 1000 5 1004 4 1008 - 15 Pila de la función después de la llamada 8004 8008 1000 8012 1004 temp 4 Pasaje de Parámetros por referencia
  • 28. Funciones y Arreglos Los arreglos de una dimensión pueden pasarse a las funciones como parámetros: float promedio(int size,float list[]) { int i; float suma=0.0; No es necesario for (i=0;i<size;i++) especificar suma+=list[i]; el tamaño return(sum/size); } La declaración float list[] le dice a C que list es un vector de floats. En este caso el parámetro size indica el tamaño del arreglo.
  • 29. Funciones y Arreglos Ejemplo de una llamada a la función promedio: int main() { float numeros = {3.0, 4.5, 2.1}, x; … x = promedio(3,numeros); … }
  • 30. Funciones y Arreglos Arreglos Multi-dimensionales: void printtable(int xsize,int ysize, float tabla[][5]){ int x,y; for (x=0;x<xsize;x++){ for (y=0;y<ysize;y++) printf("t%f",table[x][y]); printf("n"); } } float tabla[][5] le dice a C que la tabla es un arreglo de dimensión Nx5.
  • 31. Ejemplo de una función que recibe como parámetro Un arreglos de dos dimensiones y la llamada a la misma. main(){ int array1[2][3]={{1,2,3},{4,5,6}}; printf(“Los valores del array1 sonn”); printArray(2,3, array1); // llamada } void printArray(int dx, int dy, int a[][3]) // definición { int i,j for (i= 0;i<dx; i++) { for(j=0; j < dy; j++) print(“%d”, a[i][j]; print(“n”); }
  • 32. Funciones (Tipos de Variables) VARIABLES GLOBALES  Están definidas FUERA de cualquier función (incluyendo el main() )  Existirán todo el tiempo que esté ejecutándose el programa.  Se inicializan automáticamente en CERO cuando el programa comienza a ejecutarse.  Son accesibles desde todas las funciones.
  • 33. #include <STDIO.H> double una_funcion(void); double variable_global; main(){ double i ; printf("%f", variable_global ); /* 0 */ i = una_funcion() ; printf("%f", i ); /* 1 */ printf("%f", variable_global ); /* 1 */ variable_global += 1 ; printf("%f", variable_global ); /* 2 */ return 0 ; } double una_funcion(void){ return(variable_global += 1) ; }
  • 34. Funciones (Tipos de Variables) VARIABLES LOCALES  Las variables definidas DENTRO de una función, se denominan VARIABLES LOCALES o AUTOMATICAS.  Se crean y destruyen automaticamente por la llamada y el retorno de una función respectivamente.  Se ubican en la pila dinámica (stack) de memoria.
  • 35. Su visibilidad está limitada a la función donde son declaradas. No guardan relación con variables globales del mismo nombre.  No se les pueda inicializar previamente, en consecuencia su valor inicial será indeterminado (basura). Funciones (Tipos de Variables)
  • 36. double potencia(double val,unsigned exp){ double ret_val = 1.0; //var. locales int i; for(i = 0; i < exp; i++)ret_val *= val; return(ret_val); } float promedio(int size,float list[]) { int i; float suma=0.0; for (i=0;i<size;i++) suma+=list[i]; return(sum/size); }
  • 37. Funciones (Tipos de Variables) VARIABLES LOCALES ESTATICAS  Son variables que mantienen su valor, entre una y otra llamada a la función sin por ello perder su ámbito de existencia.  Sedeclaran con la palabra clave static.
  • 38. Funciones (Tipos de Variables) main() { void func(void){ void func(void); static int i=0; int n; i++; for(n=1;n<=4;n++) printf(“llamada func(); Nro. %d”, i) } } Al ejecutar el Llamada Nro. 1 Llamada Nro. 2 main, se imprime. Llamada Nro. 3 Llamada Nro. 4
  • 39. Funciones (Tipos de Variables) VARIABLES GLOBALES ESTATICAS  Son variables inaccesibles al exterior del archivo fuente donde se encuentran definidas. static int a; main(){ }
  • 40. Funciones (Tipos de Variables) VARIABLES DE REGISTRO  Son variables que se almacenan en los registros internos del CPU.  Se suelen usar registros para almacenar los contadores de los bucles (FOR, WHILE, etc). register int x; register char c;
  • 41. VARIABLES EXTERNAS  Son variables globales definidas en otro archivo.  Para usarlas bastará con que se la DECLARE especificando que es EXTERNA a dicho módulo. Funciones (Tipos de Variables)
  • 42. Archivo 1 extern int sp; Archivo 2 extern double val[]; void push(double f) { int sp; ... } double val[MAX] double pop(void){ ...} Funciones (Tipos de Variables)
  • 43. Declaración: expone  Definición: aparte las propiedades de de exponer las una variable propiedades de una (principalmente su variable, también tipo) provoca que se le extern int sp; reserve: extern double val[]; int sp; double val[MAX] Funciones (Tipos de Variables)
  • 44. A continuación un ejemplo donde se usan todos los tipos de variables •05/06/2011
  • 45. #include <stdio.h> void a(void) { void a(void); int x=25; void b(void); printf(“%d ”, x); printf(“%d ”, ++x); void c(void); } int x = 1; void b(void) { int main() { static int x=50; printf(“%d ”, x); Int x = 5; printf(“%d ”, ++x); printf(“%d ”,x)//5} a(); void c(void) { printf(“%d ”, x); b(); printf(“%d ”,x*10); c(); } a(); b(); } Salida: 5 25 26 50 51 1 10 25 26 51 52