SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaAgustin Ramos
 
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 difusajcbp_peru
 
Convolucion Tiempo Discreto
Convolucion Tiempo DiscretoConvolucion Tiempo Discreto
Convolucion Tiempo Discretoguest1e528d
 
Logica-difusa-simulink-casos
Logica-difusa-simulink-casosLogica-difusa-simulink-casos
Logica-difusa-simulink-casosDave R Rdez
 
Utp sirn_2015-2 lab1
 Utp sirn_2015-2 lab1 Utp sirn_2015-2 lab1
Utp sirn_2015-2 lab1jcbp_peru
 
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(...SANTIAGO PABLO ALBERTO
 
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.José A. Alonso
 
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 usuarioLaura Folgado Galache
 
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 perceptronjcbp_peru
 
Pila dinamica y pila estatica
Pila dinamica y pila estaticaPila dinamica y pila estatica
Pila dinamica y pila estaticaJoeCorp
 

Was ist angesagt? (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
 

Andere mochten auch

Arreglos bidimensionales o matrices
Arreglos bidimensionales o matricesArreglos bidimensionales o matrices
Arreglos bidimensionales o matricesAriannaYadiraT
 
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 CCarlos Pes
 
Arrays Bidimensionales y Multidimensionales - Carlos Correa
Arrays Bidimensionales y Multidimensionales - Carlos CorreaArrays Bidimensionales y Multidimensionales - Carlos Correa
Arrays Bidimensionales y Multidimensionales - Carlos CorreaCarlitos Correa Jr.
 

Andere mochten auch (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
 

Ähnlich wie Clase2 c

Ähnlich wie 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 LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
Funciones en C
Funciones en CFunciones en C
Funciones en 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
 

Kürzlich hochgeladen

IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docxLuisAndersonPachasto
 
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOEveliaHernandez8
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORGonella
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsxJuanpm27
 
Presentacion minimalista aesthetic simple beige_20240415_224856_0000.pdf
Presentacion minimalista aesthetic simple beige_20240415_224856_0000.pdfPresentacion minimalista aesthetic simple beige_20240415_224856_0000.pdf
Presentacion minimalista aesthetic simple beige_20240415_224856_0000.pdfSarayLuciaSnchezFigu
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxFabianValenciaJabo
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxLudy Ventocilla Napanga
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxEribertoPerezRamirez
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfpatriciavsquezbecerr
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Rosabel UA
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAELIASPELAEZSARMIENTO1
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTESaraNolasco4
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfssuser50d1252
 

Kürzlich hochgeladen (20)

IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
Sesión La luz brilla en la oscuridad.pdf
Sesión  La luz brilla en la oscuridad.pdfSesión  La luz brilla en la oscuridad.pdf
Sesión La luz brilla en la oscuridad.pdf
 
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docxEDUCACION FISICA 1°  PROGRAMACIÓN ANUAL 2023.docx
EDUCACION FISICA 1° PROGRAMACIÓN ANUAL 2023.docx
 
PPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptxPPTX: La luz brilla en la oscuridad.pptx
PPTX: La luz brilla en la oscuridad.pptx
 
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADOCUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
CUADERNILLO DE EJERCICIOS PARA EL TERCER TRIMESTRE, SEXTO GRADO
 
DETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIORDETALLES EN EL DISEÑO DE INTERIOR
DETALLES EN EL DISEÑO DE INTERIOR
 
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
3. Pedagogía de la Educación: Como objeto de la didáctica.ppsx
 
Presentacion minimalista aesthetic simple beige_20240415_224856_0000.pdf
Presentacion minimalista aesthetic simple beige_20240415_224856_0000.pdfPresentacion minimalista aesthetic simple beige_20240415_224856_0000.pdf
Presentacion minimalista aesthetic simple beige_20240415_224856_0000.pdf
 
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docxEJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
EJEMPLO MODELO DE PLAN DE REFUERZO ESCOLAR.docx
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docxSIMULACROS Y SIMULACIONES DE SISMO 2024.docx
SIMULACROS Y SIMULACIONES DE SISMO 2024.docx
 
La luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luzLa luz brilla en la oscuridad. Necesitamos luz
La luz brilla en la oscuridad. Necesitamos luz
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docxPROGRAMACION ANUAL DE MATEMATICA 2024.docx
PROGRAMACION ANUAL DE MATEMATICA 2024.docx
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
sesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdfsesión de aprendizaje 4 E1 Exposición oral.pdf
sesión de aprendizaje 4 E1 Exposición oral.pdf
 
Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024Actividad transversal 2-bloque 2. Actualización 2024
Actividad transversal 2-bloque 2. Actualización 2024
 
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIAGUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
 
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE4º SOY LECTOR PART2- MD  EDUCATIVO.p df PARTE
4º SOY LECTOR PART2- MD EDUCATIVO.p df PARTE
 
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdfFichas de MatemáticA QUINTO DE SECUNDARIA).pdf
Fichas de MatemáticA QUINTO DE SECUNDARIA).pdf
 

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