Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... ·...

38
F. de la Informática- Int.a la Computación - Int.a la Programación 1 Modularización en lenguaje C Funciones PrimerCuatrimestre 2015

Transcript of Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... ·...

Page 1: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

F. de la Informática- Int.a la Computación - Int.a la Programación

1

Modularización en lenguaje C

Funciones

PrimerCuatrimestre 2015

Page 2: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

2

Modularización

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 3: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

3

Modularización

Algoritmo "ALGO” Comenzar NUM1: arreglo [1…30] de entero NUM2: arreglo [1…20] de entero I: entero Ingreso (NUM1 ,1,30,1) Ingreso (NUM2 ,20,1,-1) . . . Fin

Subalgoritmo “Ingreso” (inout NUM: arreglo entero ,in inicio, final, FE: entero) Comenzar

I: entero Escribir: “ingrese datos enteros” Para I desde inicio hasta final con paso FE hacer Leer NUM[I] Fin para

Fin

Page 4: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

4

Subalgoritmo “Multiplo” (inout NUM1: arreglo entero, inout NUM2: arreglo entero) Comenzar I: entero Cant: entero Cant2: entero Cant <-0 Para I desde 1 hasta 30 con paso 1 hacer Si NUM1 [I]//7 <>0 entonces Cant<-cant +1 Fin si Fin para Cant2<-0 Para I desde 20 hasta 1 con paso -1 hacer Si NUM2 [I] //4 <>0 entonces Cant 2 <- cant2 +1 Fin si Fin para Fin

Modularización

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 5: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

5

Introducción

#include  <stdio.h>  int  main(){  int  resultado=1;  /*  valor  fibonacci  */  int  numero;  /*  numero  a  introducir  por  el  usuario  */  int  p;      printf(  "Introduzca  un  entero:  "  );  scanf(  "%d",  &numero);  /*  obtiene  un  entero  del  usuario  */  getchar();    /*  calcula  el  valor  fibonacci  del  numero  ingresado*/  if  (  numero  ==  0  ||  numero  ==  1  )  {  

resultado  =  numero;}  /*  fin  de  if  */  else  {      

for  (p=1;  p<numero;  p++){    resultado  =  resultado+  (p+1);}    }  

printf(  "Fibonacci(  %d  )  =  %d",  numero,  resultado  );  /*  muestra  el  resultado  */    return  (0);  /*  indica  terminacion  exitosa  */    }  /*  fin  de  main  */  

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 6: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

printf(  "Introduzca  un  entero:  "  );  scanf(  "%d",  &numero);  /*  obtiene  un  entero  del  usuario  */  getchar();    /*  calcula  el  valor  fibonacci  del  numero  ingresado*/  if  (  numero  ==  0  ||  numero  ==  1  )  {  

resultado  =  numero;}  /*  fin  de  if  */  else  {      

for  (p=1;  p<numero;  p++){    resultado  =  resultado+  (p+1);}    }    

printf(  "Fibonacci(  %d  )  =  %d",  numero,  resultado  );  /*  muestra  el  resultado  */  printf(  "Introduzca  otro  entero:  "  );  scanf(  "%d",  &numero);  /*  obtiene  segundo  entero  del  usuario  */  getchar();    /*  calcula  el  valor  fibonacci  del  numero  ingresado*/  if  (  numero  ==  0  ||  numero  ==  1  )  {  

resultado  =  numero;}  /*  fin  de  if  */  else  {      

for  (p=1;  p<numero;  p++){    resultado  =  resultado+  (p+1);}    }  

printf(  "Fibonacci(  %d  )  =  %d",  numero,  resultado  );  /*  muestra  el  resultado  */   6

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 7: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

7

Una vez que definimos un método que resuelva un problema

concreto, se pretende ser capaces de usarlo tantas veces como sea necesario

sin tener que reescribirlo.

Objetivo:

Modularización

L. de Diseño

Subalgoritmos Funciones

C

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 8: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

8

FUNCIONES

Programa Principal Función de Tarea Específica

La modularización determina como mínimo dos módulos bien definidos de la solución: el Módulo Principal y el Módulo que realiza la Tarea Específica. El módulo principal es el algoritmo que soluciona el problema general planteado y que invoca a la/s función/es. Usualmente es el ‘Programa Principal’.

Una función (subalgoritmo) es un conjunto de instrucciones que realizan una tarea en particular.

Módulo que Invoca Módulo Invocado

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 9: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

9

FUNCIONES

La modularización determina como mínimo dos módulos bien definidos de la solución: el Módulo que Invoca y el Módulo Invocado.

Una función (subalgoritmo) es un conjunto de instrucciones que realizan una tarea en particular.

Módulo que Invoca Módulo Invocado

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 10: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

F. de la Informática - Int.a la Computación - Int.a la Programación

10

FUNCIONES

La modularización determina como mínimo dos módulos bien definidos de la solución: el Módulo que Invoca y el Módulo Invocado.

Una función (subalgoritmo) es un conjunto de instrucciones que realizan una tarea en particular.

Módulo que Invoca Módulo Invocado

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 11: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

11

Ejemplo:      Dado   un   número   n   entero   posi0vo,   se   desea   calcular   e  imprimir   el   factorial   de  n,  n2   y   de  n3.   Definir   un  módulo  (función)  para  el  cálculo  del  factorial.    (Ejemplo  visto  en  Lenguaje  de  Diseño)  

FUNCIONES Lenguaje “C”

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 12: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

F. de la Informática - Int.a la Computación - Int.a la Programación

12

ALGORITMO  “Calculo  Factoriales”  COMENZAR          FACTORIAL          FACTORIAL          FACTORIAL  FIN  

SUBALGORITMO  “Factorial”  COMENZAR        N,  FACT,  I:  entero        LEER  N        FACT                1        PARA  I  DESDE  1  HASTA  N  CON  PASO  1  HACER  

 FACT                FACT  *  I        FINPARA        ESCRIBIR  FACT  FIN  

Programa Principal

Función

F U N C I O N E S

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 13: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

13

FUNCIONES

Factorial

invocación retorno

Programa Principal

Gráficamente

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 14: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

14

Solución General (en Leng. de Diseño)

Cuerpo del Programa Ppal. SUBALGORITMO “Factorial”

COMENZAR FACT, I: entero FACT 1 PARA I DESDE 1 HASTA N CON PASO 1 HACER

FACT FACT * I FINPARA ESCRIBIR FACT FIN

?

Queda por resolver

Cuerpo de la Función.

ALGORITMO “Calculo Factoriales” COMENZAR N, AUX: entero LEER AUX N AUX FACTORIAL N AUX^2 FACTORIAL N AUX^3 FACTORIAL FIN

N

N

N

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 15: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

F. de la Informática - Int.a la Computación - Int.a la Programación

15

#include <stdio.h> int main() { int n; int aux; printf(“Ingrese el número”); scanf(“%d”, &aux); getchar(); n = aux; Factorial(); /* 1er Fact. */ n = aux * aux; Factorial(); /* 2do Fact. */ n = aux * aux * aux; Factorial(); /* 3er Fact. */ return(0); }

Solución General (en Leng. “C”)

El programa principal conserva el nombre main

Cuerpo del Programa Ppal.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 16: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

int Factorial(){ int i; int fact; fact = 1; for (i =1; i <= n; i=i+1 ){ fact = fact * i; } printf(“El factorial es: %d\n”, fact); return(0); }

F. de la Informática - Int.a la Computación - Int.a la Programación

16

Que valores toma ?

Cuerpo de la Función.

La función adquiere nombre propio.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 17: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

F. de la Informática - Int.a la Computación - Int.a la Programación

17

#include <stdio.h> int Factorial(){ int i; int fact; fact = 1; for (i =1; i <= n; i=i+1 ){ fact = fact * i; } printf(“El factorial es: %d\n”, fact); return(0);} int main() { int n; int aux; printf(“Ingrese el número”); scanf(“%d”, &aux); getchar(); n = aux; Factorial(); /* 1er Fact. */ n = aux * aux; Factorial(); /* 2do Fact. */ n = aux * aux * aux; Factorial(); /* 3er Fact. */ return(0);}

F U N C I O N E S

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 18: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

#include <stdio.h>

int main() { int n; int aux; printf(“Ingrese el número”); scanf(“%d”, &aux); getchar(); n = aux; Factorial(); /* 1er Fact. */ n = aux * aux; Factorial(); /* 2do Fact. */ n = aux * aux * aux; Factorial(); /* 3er Fact. */ return(0);

}

F. de la Informática - Int.a la Computación - Int.a la Programación

18

Ámbito de una variable / constante

El ámbito de una variable es el bloque de código en el cual una variable existe y puede ser utilizada para procesar.

Ámbito para n, aux

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 19: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

int Factorial(){ int i; int fact; fact = 1; for (i =1; i <= n; i=i+1 ){ fact = fact * i; } printf(“El fact. es: %d\n”, fact); return(0); } 19

Ámbito de una variable / constante FUNCIONES

?

Ámbito para i, fact

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 20: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

F. de la Informática - Int.a la Computación - Int.a la Programación

20

Problema:

La  variable  n  NO  EXISTE  dentro  del  cuerpo  de  la  función  Factorial.  

Toda variable definida dentro del cuerpo del Prog. Ppal. o de una función se denomina LOCAL al Prog. Ppal. o función.

Programa Ppal. (main) n, aux

‘n, aux’ son LOCALES al Prog. Ppal.

‘i, fact’ son LOCALES a Factorial.

Función (Factorial) i, fact

F U N C I O N E S

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 21: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

21

Solución 1 Mediante el uso de PARÁMETROS

Programa Ppal. (main) n, aux

Invocación n

Función (Factorial) i, fact

Retorno

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 22: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

#include <stdio.h> int main() { int n; int aux; printf(“Ingrese el número”); scanf(“%d”, &aux); getchar(); n = aux; Factorial(n); /* 1er Fact. */ n = aux * aux; Factorial(n); /* 2do Fact. */ n = aux * aux * aux; Factorial(n); /* 3er Fact. */ return(0); }

22

Ejemplo

Parámetro Actual

F U N C I O N E S

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 23: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

int Factorial(int nu){ int i; int fact; fact = 1; for (i =1; i <= nu; i=i+1 ){ fact = fact * i; } printf(“El factorial es: %d\n”, fact); return(); } 23

FUNCIONES

Parámetro Formal

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 24: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

24

El Parámetro Actual y el Parámetro Formal son dos variables diferentes. La manera en que ‘C’ transfiere la información es mediante la COPIA del contenido del parámetro actual en el parámetro formal.

int main ()

n, aux

Invocación 20

Factorial (nu) nu, i, fact

Retorno

n =20; Factorial(n);

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 25: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

25

Memoria 20 1230

0x3000

n

... 0x4231 0x4232

...

Memoria

0x8650 nu

... 0x9100 0x9001

... 30

Se copia el valor 20

La variable ‘nu’ es local a la función Factorial. Cuando la ejecución de la función es finalizada, la variable ‘nu‘ desaparece y con ella su contenido.

Problema:

¿Cómo se debe trabajar si se desea que los cambios producidos en los valores en el cuerpo de la función se reflejen afuera?.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 26: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

26

Intento de Solución: Colocar la variable ‘fact’ como local a main(). Pasarla como parámetro.

Invocación 20, 0

Factorial (nu, fa) nu, i, fa

Retorno

int main () n, aux, fact

n =20; Factorial(n, fact);

fact =0;

Ejemplo: Se desea almacenar el resultado del cálculo del factorial para cada uno de los números entregados a la función.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 27: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

int main() { int n, fact; int aux, res1, res2, res3; printf(“Ingrese el número”); scanf(“%d”, &aux); getchar(); fact = 0; n = aux; Factorial(n, fact); res1 = fact; n = aux * aux; Factorial(n, fact); res2 = fact; n = aux * aux * aux; Factorial(n, fact); res3 = fact; return(0); }

27

#include <stdio.h> int Factorial(int nu, int fa){ int i; fa = 1; for (i =1; i <= nu; i=i+1 ){ fa = fa * i; } printf(“El factorial es: %d\n”, fa); return(); }

Ejemplo:

Se desea almacenar el resultado del cálculo del factorial para cada uno de los números entregados a la función.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 28: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

28

Memoria 0 1230

0x3000

fact ...

0x4231 0x4232 ...

Memoria

0x8650 fa

... 0x9100 0x9001

... 30

Se copian los valores

0x2999

n

0x8649 nu

20

20 0

Factorial(n, fact);

int Factorial(int nu, int fa)

Problema: • Toda modificación hecha sobre la variable ‘fa’ se pierde cuando la ejecución de la función finaliza. El contenido de ‘fact’ no varía. • En el lenguaje C el valor contenido en los parámetros actuales o reales es copiado como contenido de los respectivos parámetros formales. Es decir realiza el pasaje por valor.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 29: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

29

Solución

Se define a la variable fuera del cuerpo del Prog. Ppal. y la función. En este caso se dice que la variable es GLOBAL y es común a ambos.

Programa Ppal. (main) n, aux, res1, res2, res3

Función (Factorial) nu

‘n, aux, res1, res2, res3’ son LOCALES al Prog. Ppal.

‘nu’ es LOCAL a Factorial.

fact ‘fact’ es GLOBAL al Prog. Total.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 30: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

30

#include <stdio.h> int fact; int main() { int n; int aux, res1, res2, res3; printf(“Ingrese el número”); scanf(“%d”, &aux); getchar(); n = aux; Factorial(n); /* 1er Fact. */ res1 = fact; n = aux * aux; Factorial(n); /* 2do Fact. */ res2 = fact; n = aux * aux * aux; Factorial(n); /* 3er Fact. */ res3 = fact; return(0); }

int Factorial(int nu){ int i; fact = 1; for (i =1; i <= nu; i=i+1 ){ fact = fact * i; } printf(“El factorial es: %d\n”, fact); return(); }

fact  :  variable  Global,  común  a  ambas  funciones.  

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 31: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

31

Otra Solución

Devolución de un valor desde una función y a través de variables externas. La proposición return es el mecanismo por medio del cual desde una función invocada se puede enviar información hacia la función invocante.

#include <stdio.h> int main() { int mal1, mal2, min; int Control = 1; scanf (“%d”, &mal1); getchar(); scanf (“%d”, &mal2); getchar(); while (Control != 0) { min = imin(mal1, mal2); printf( “El menor entre %d y %d es %d \n”, mal1, mal2, min); Control = 0; if (min == mal1) {Control = 1; scanf (“%d”, &mal1); scanf (“%d”, &mal2); }} return 0; }

int imin( int n, int m) { int minimo; if (n < m) {

minimo = n; else

minimo = m; } return(minimo); }

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 32: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

• La palabra clave return hace que el valor de la siguiente expresión se transmita como valor de retorno de la función. • La sentencia return termina la ejecución de la función y devuelve el control a la sentencia siguiente a la sentencia de invocación.

int main() { int min; … min = imin (mal1, mal2); … } int imin( int n, int m) … int mini; … return(mini);

• El tipo del valor de retorno debe coincidir con el tipo de la función. • La declaración de tipo forma parte de la definición de la función. Tener presente que se refiere a su valor de retorno y no a sus parámetros.

• Las funciones que carecen de valor de retorno deben declararse de tipo void. 32

return <expresión>

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 33: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

33

#include <stdio.h> int fact; int main() { int n; int aux, res1, res2, res3; printf(“Ingrese el número”); scanf(“%d”, &aux); getchar(); n = aux; Factorial(n); res1 = fact; n = aux * aux; Factorial(n); res2 = fact; n = aux * aux * aux; Factorial(n); res3 = fact; return(0); }

void Factorial(int nu){ int i; fact = 1; for (i =1; i <= nu; i=i+1 ){ fact = fact * i; } return(); }

F U N C I O N E S

Por ejemplo

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 34: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

Para la creación de una función, el formato general a seguir es el siguiente:

34

<especificador-de-tipo> <nombre-de-funcion> (lista-de-parametros) {

<variables locales a la función> <código de la función> return ( );

}

•  El especificador-de-tipo indica el tipo de la función y puede ser de cualquier tipo válido. • Si no se especifica el tipo, entonces el procesador asume por defecto entero. • La sentencia return termina la ejecución de la función y devuelve el control a la sentencia siguiente en el módulo invocante

• La función puede devolver un valor mediante el uso de la sentencia return.

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 35: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

35

Ejemplo: a) Realizar un programa que, dado un arreglo de enteros con un cero como elemento, cuente cuantos elementos se encuentran antes del cero y los convierta a su respectivo valor opuesto. Para ello se debe utilizar una función.

#include <stdio.h> int contador; /* cuenta posiciones */ int main() { int a[10] = {4, 5, 8, 9, 8, 1, 0, 1, 9, 3}; int largo = 10; /* long. del arreglo */ Cuenta(a, largo); printf(“El nro. de elem. es: %d\n”, contador); return(0); }

Arreglos Como Parámetros

Nombre del arreglo

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 36: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

36

void Cuenta(int arr[], int lgt) { int pos; contador = 0; pos = 0; while ((arr[pos] != 0) && (pos < lgt)) {

contador = contador + 1; arr[pos] = arr[pos]* (-1); pos = pos + 1;

} return(); }

Arreglos Como Parámetros

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 37: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

37

lgt

Memoria

0 1230 0x3000

contador ...

0x4231 0x4232 ...

0x8650 ...

0x9100 0x9001 ...

Se copian los valores correspondientes

0x2999

largo

0x8649

20

20

0x9200 0x9201 0x9203 0x9204 0x9202 5 4 8 8 ... ... 9

a[0] a[1] a[2] a[3] a[4]

... 0x9806

Cuenta(a, largo);

void Cuenta(int arr[], int lgt)

?

El pasar arreglos como parámetros es equivalente a colocarlos como variables globales.

Copia de contenido FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015

Page 38: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/... · PrimerCuatrimestre 2015 . 2 Modularización F. de la Informática - Int.a la Computación

38

Ejemplo #include <stdio.h> int a[10] = {4, 5, 8, 9, 8, 1, 0, 1, 9, 3}; int largo = 10; /* long. del arreglo */ int contador; /* cuenta posiciones */ int main() { Cuenta(); printf(“El nro. de elem. es: %d\n”, contador); return(0); }

int Cuenta() { int pos; contador = 0; pos = 0; while ((a[pos] != 0) && (pos < largo)) {

contador = contador + 1; a[pos] = a[pos]* (-1); pos = pos + 1;

} return(0); }

FUNCIONES

F. de la Informática - Int.a la Computación - Int.a la Programación - 2015