Modularización en lenguaje C...

39
F. de la Informática- Int.a la Computación - Int.a la Programación 1 Modularización en lenguaje C Funciones Primer Cuatrimestre 2018

Transcript of Modularización en lenguaje C...

Page 1: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

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

Modularización en lenguaje C

Funciones

Primer Cuatrimestre 2018

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

2

Ejercicio: Dado el siguiente algoritmo incompleto codificado en Lenguaje de Diseño, complételo y modifíquelo de manera tal que el nuevo algoritmo cumpla con todas las siguientes condiciones:

a) Defina el subalgoritmo Ingreso que permita ingresar datos en UN arreglo de enteros. El ingreso de los datos a los arreglos NUM1 y NUM2, deberá hacerse mediate las correspondientes invocaciones del subalgoritmo Ingreso.

b) Defina, además, el subalgoritmo Multiplos que permita determinar la cantidad de números que no sean múltiplos de un determinado número.

c) Utilice el subalgoritmo Multiplos para desarrollar las tareas 3 y 4 ALGORITMO "ALGO" COMENZAR NUM1: arreglo [1 a 30] entero NUM2: arreglo [1 a 20] entero

I: entero PARA I DESDE 1 HASTA 30 CON PASO 1 HACER

LEER NUM1[I] FINPARA PARA I DESDE 20 HASTA 1 CON PASO -1 HACER

LEER NUM2[I] FINPARA Determinar cantidad de números que no sean múltiplos de siete del arreglo NUM1

Determinar cantidad de números que no sean múltiplos de 4 del arreglo NUM2

FIN

1

2

3

4

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

Page 3: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

Subalgoritmo “Ingreso” (inout NUM1: arreglo entero ,in inicio, final, FE: entero inout NUM2: arreglo entero ,in inicio2, final2, FE2: entero)

Comenzar I: entero Escribir: “ingrese datos enteros al primer arreglo ” Para I desde inicio hasta final con paso FE hacer Leer NUM1[I] Fin para Escribir: “ingrese datos enteros al segundo arreglo ” Para I desde inicio2 hasta final2 con paso FE2 hacer Leer NUM2[I] Fin para

Fin

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, NUM2, 20,1,-1) . . . Fin

Solución 1

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

Page 4: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

4

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

Solución 2

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

Page 5: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

5

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 - 2018

Page 6: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

¿Cómoinvocarlo?

6

Subalgoritmo “Multiplo” (inout NUM1: arreglo de entero, in Li: entero, in Lo, in P, in Mul, out Cant)

Comenzar I: entero Cant <-0 Para I desde Li hasta Lo con paso P hacer

Si NUM1 [I]//Mul <>0 entonces Cant<-Cant +1 Finsi

Fin para Fin

Modularización

¿Es posible determinar con el subalgoritmo Multiplo la cantidad de valores que son múltiplos de 6?

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

Page 7: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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 - 2018

Page 8: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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 que invoca (puede ser el M. Principal o cualquier otro módulo) 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 - 2018

Page 9: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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 - 2018

Page 10: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

10

Ejemplo:Dado un número n entero positivo, se desea calcular eimprimir el factorial den,n2y den3. Definir unmódulo(función)paraelcálculodelfactorial.(EjemplovistoenLenguajedeDiseño)

FUNCIONES Lenguaje “C”

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

Page 11: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

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

11

ALGORITMO“CalculoFactoriales”COMENZARFACTORIALFACTORIALFACTORIALFIN

SUBALGORITMO“FACTORIAL”COMENZARN,FACT,I:enteroLEERNFACT 1PARAIDESDE1HASTANCONPASO1HACER

FACT FACT*IFINPARAESCRIBIRFACTFIN

Programa Principal

main

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 - 2018

Page 12: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

12

FUNCIONES

Factorial

invocación retorno

Programa Principal

Gráficamente

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

Page 13: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

13

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 - 2018

Page 14: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

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

14

#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 - 2018

Page 15: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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

15

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 - 2018

Page 16: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

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

16

F U N C I O N E S

#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. de la Informática - Int.a la Computación - Int.a la Programación - 2018

Page 17: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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);

}

17

Á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 - 2018

Page 18: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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); } 18

Á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 - 2018

Page 19: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

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

19

Problema:

LavariablenNOEXISTEdentrodelcuerpodelafunciónFactorial.

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 - 2018

Page 20: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

20

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 - 2018

Page 21: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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); }

21

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 - 2018

Page 22: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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(); } 22

FUNCIONES

Parámetro Formal

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

Page 23: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

23

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 - 2018

Page 24: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

24

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 - 2018

Page 25: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

25

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 - 2018

Page 26: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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); }

26

#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 - 2018

Page 27: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

27

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 - 2018

Page 28: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

28

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 - 2018

Page 29: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

29

#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:variableGlobal,comúnaambasfunciones.

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

Page 30: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

30

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 - 2018

Page 31: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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. 31

return <expresión>

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

Page 32: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

32

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

void Factorial(){ int i; int n; int fact = 1; for (i =1; i <= n; 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 - 2018

Page 33: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

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

33

<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 - 2018

Page 34: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

34

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 - 2018

Page 35: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

35

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 - 2018

Page 36: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

36

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)

?

Copia de contenido FUNCIONES

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

Page 37: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

37

Memoria

Cuenta(a, largo);

void Cuenta(int arr[], int lgt)

Copia de contenido FUNCIONES

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

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

... 0x8000 0x9200

a

0x9400 arr

0x9200 ...

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

Page 38: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programació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 - 2018

Page 39: Modularización en lenguaje C Funcionesdirinfo.unsl.edu.ar/servicios/abm/assets/uploads/materiales/ceba7-tr… · F. de la Informática- Int.a la Computación - Int.a la Programación

39

Finalmente FUNCIONES

¿En qué consiste un programa en C

En principio: Un programa en C consiste de un conjunto defunciones(incluidalafunciónmain),ydeclaracionesdevariablescontenidos en un archivo. Cualquier función invoca a cualquierfunción.

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