PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la...

23
PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el tiempo de desarrollo, aprovechando módulos ya existentes Permitir la resolución del problema por varios programadores a la vez Facilitar la depuración del programa Facilitar el mantenimiento TÉCNICA DE DISEÑO DESCENDENTE ( Top Down Design) Problema Tarea1 Tarea2 Tarea3 Tarea4 T11 T12 T21 T31 T41 T42 T43

Transcript of PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la...

Page 1: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

PROGRAMACION MODULARFUNCIONES

Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el tiempo de desarrollo, aprovechando módulos ya existentes Permitir la resolución del problema por varios programadores a la vez Facilitar la depuración del programa Facilitar el mantenimiento

TÉCNICA DE DISEÑO DESCENDENTE ( Top Down Design)

Problema

Tarea1 Tarea2 Tarea3 Tarea4

T11 T12 T21 T31 T41 T42 T43

Page 2: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

En el tratamiento de funciones ó subprogramas hay que distinguir tres instancias fundamentales:

La declaración de la función

La definición de la función

La llamada a la función

Page 3: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

#include <stdio.h>float suma ( float a, float b);……..int main (void){ float x, y, z;x = 23.12;

y = 14.33; ……… z =suma ( x, y); ……….}float suma ( flota a, flota b) { return a+b; }

declaración

llamada

definición

Parámetros Reales

Parámetros Formales

Page 4: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Declaración de función en C:

Tipo Nombre (lista de parámetros);

Definición de funciones en C:

Tipo Nombre (lista de parámetros formales) Cabecera de la función{Declaraciones Cuerpo de la funciónInstrucciones return Valor; Valor de retorno}

Llamada de una función en C:

Nombre(lista de parámetros reales);

Page 5: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Ejemplo:

int main(){.......func1 ( );……….func2 ( );......return 0;}

void func1 ( ){.....................return;}void func2 (){......................return;}

Page 6: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Ejemplo:

float triple (float x); declaraciónint main(){float x, y;x = triple(3) + 2; /*→ x = 9 + 2*/ llamaday = triple(triple(2)); /*→ y = triple(6) → y = 18*/ llamada....}float triple(float x) definición{return (3 * x);}

Ejemplo:

void Suma(int a, int b) Definición{printf(“la suma es %d\n”,a + b);return;}

Page 7: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

ÁMBITO DE LAS VARIABLES

Variables Globales

Variables Locales

Ejemplo de variables globales:

int g1; /*g1 es global para todo el programa*/void main( void){......................}int FunA( ){.......}int g2; /*g2 es global para FunB y FunC*/int FunB( ){...................}float FunC( ){..........}

Page 8: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Ejemplo de variables locales:float Fun( ){ int loc1; /*loc1 es local a Func*/ ……

{ int loc2; /*loc2 es local al bloque de código entre llaves*/ ..........}}

Ejemplo de variables con el mismo nombre:#include <stdio.h>int z; /* Variable Global */int Sumar (int x, int y); declaración

int main( void ){int suma; /* VariableLocal a main */z = 3;suma = Sumar(2, 3);printf(“%d\n”,suma);printf(“%d\n”,z);return 0; }int Sumar(int x, int y){int z; /* z Local a Sumar. Oculta la z global*/z = x + y;return z;}

53

Page 9: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

LAS VARIABLES GLOBALES DEBEN EVITARSE !!!!!!!

Ejemplo:int z;int Sumar(int x, int y);int main(){ int suma; z = 3; suma = Sumar(2, 3); /* -> 5*/ printf(“%d”,z); /*z -> 5*/ /*Efecto lateral no deseado*/}int Sumar(int x, int y){

z = x + y;return z;

}

Función no portable Dificultad para realizar cambios en el programa Imposible trabajar en grupo

Page 10: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

TIPOS DE VARIABLES EN FUNCIÓN DEL ESPECIFICADOR DE ÁMBITO

<Especificador de Ambito> <Modificador de Tipo> <Tipo> <Identificador> ;

Las variables según el especificador de ámbito se pueden clasificar en:

automáticas externas estáticas registro

Variables automáticas: Son variables locales, palabra clave autoVariables externas:

Fichero1 Fichero2int a; extern int a;int b; extern int b;void main(void) FunB ( ){ {………. ……….} }

FunA( ) FunC ( ){ {…………… ……..} }

Page 11: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Variables estáticas locales:Ejemplo:void main(void){int i;void Fun(void);for (i=0; i<10; i++)Fun( );}void Fun (void){static int count=1;count++;printf(“ %d \n”, count);}

Variables estáticas globales:

234567891011

Fichero1 Fichero2int a; extern int a;static int b;void main(void) FunB ( ){ {………. ……….} }

FunA( ) FunC ( ){ {……………} ……..……}

Page 12: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Variables registro:

Ejemplo:void main(void){register int i;for (i=0,i<180;i++)…………..}

Paso de Parámetros a una Función

Existen dos posibilidades para pasar parámetros a un subprograma:

por valor

por referencia.

Page 13: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Ejemplo Paso Por Valor:void Decremento(int x){x = x - 1;printf(“%d\n”,x);return;}

void main(void){...n = 4;Decremento(n); → 3printf(“%d\n”,n);

‘n’ no cambia su valor

Ejemplo Paso por Referencia

34

Los arreglos se pasan a las funciones por referencia

Page 14: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Ejemplo:void Decremento(int *x){*x = *x - 1;printf(“%d\n”,*x);return;}void main(void){...int n = 4;Decremento(&n); → 3printf(“%d\n”,*x);}El valor de n cambia después de llamar a la función.

Ejemplo:void intercambio(int *x, int *y){int z;z = *x;*x = *y;*y = z;return;}

33

Page 15: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Gestión de la memoria

Ejemplo:int doble (int a);……..int main(void){int w;………..w = doble ( 2);……………}

int doble(int a){int z;z=2*a;return z;}

a z

ParámetroVariable

Pila

LLamada

a z

Retorno

Page 16: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Traza de Programas

Ejemplo:int a, b; /* variables globales */void F1(int *c);int main() Traza:{1) a = 1;2) b = 3;3) F1(&a);4) printf(“ %d %d \n”,a,b);return 0;}void F1(int *c){int b;5) b = 2;6) *c = a + b + 2;return;}

La traza se podrá verificar en el Laboratorio con el depurador del IDE.

Linea a b/G c / *c b/L1 1 ?2 1 33 1 3 &a /1 ?5 1 3 &a /1 26 5 3 &a /5 24 5 3

Page 17: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

RecursividadEjemplo clásico:long fact(int n){long f;if (n > 1){2) f = n*fact(n-1); Llamada recursiva}else3) f = 1; Caso basereturn f;}

Ejemplo: Mostrar en pantalla los dígitos de un número entero positivo en forma inversa56755765

void cifras (int num){printf(“%d”,num%10);if(num/10 !=0)

cifras(num/10);return;}

Traza:R= fact(4) 24

4 *fact(3) 4* 6

3*fact(2) 3*2

2*fact(1) 2*1

1 1

Page 18: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Compilación separada

Compilación de un programa en un sólo fichero:

Compilación de un programa en varios ficheros:

Ejemplo: Programa para el cálculo de las combinaciones de m elementos tomados de a n mediante módulos

Page 19: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

fact.h: /* Fichero de cabecera para calculo de factorial */float fact(int n); /*declaración*/

fact.c: /* Funciones para el calculo del factorial */#include "fact.h"float fact(int n) /*definicion*/{float f;int i;f = 1;for(i = 1; i <= n; i++)f = f * i;return f;}

combinatoria.cpp: /* Programa para el calculo de m sobre n */#include <stdio.h>#include "fact.h" /*el archivo está en el directorio de trabajo*/int main(){int m,n;float comb;printf("Introduce los valores de m y n");scanf(“%d %d”,&m,&n);comb = fact(m) / (fact(n) * fact(m – n) );printf("\nEl resultado es:",comb);return 0;}

Módulo1

Programa Principal

Page 20: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Argumentos de la Función main( )

main(int argc, char *argv[])

argc (argument count) Es un parámetro de tipo entero que contiene el número de argumentos que se han introducido considerando el nombre del ejecutable.

argv ( argument values) Es un arreglo de punteros a cadenas de caracteres. Contiene los argumentos que se pasan desde el SO cuando se invoca el programa. Cada argumento debe estar separado por espacio ó una tabulación

Ejemplo1:>prueba

argc vale 1argv[0] apunta a la cadena ”prueba”

Page 21: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Ejemplo2:

Programa que saluda al usuario cuyo nombre lo ingresa como argumento de main() por linea de comandos del SO.

/*prueba.c*/#include <stdio.h>

main(int argc, char *argv[]){

if(argc!=2) {printf("Adjunte su nombre al ejecutable.\n");exit(1);}printf("Hola %s", argv[1]);}

>prueba Pepe

argv[0] argv[1]

argc = 2

>Hola Pepe

>prueba Pepe Mario argc=3>Adjunte su nombre al ejecutable

>prueba “Juan Lopez”argc=2>Hola Juan Lopez

Page 22: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

NOTA:Si se ingresan cadenas de texto que deben ser convertidas en números utilizar las funciones que convierten una cadena de caracteres ASCII a float, int, long: atof( const char *cad), atol (const char *cad ), atoi (const char *cad).

Ejemplo: Pasados por referencia la base y la altura de un triángulo. Calcular el área.

/*prueba2.c*/#include <stdio.h>void main(int argc,char*argv[]){float base, altura, area;if(argc>3) {printf("Demasiados parámetros.\n");exit(1);}elseif(argc<3) {printf("Falta un parámetros.\n");exit(1);}base = atof(argv[1]);altura = atof(argv[2]);area = base * altura /2;printf("El area es: %f",area);}

>prueba2 2.3

>Falta un parámetro

>prueba2 2.0 4.0

>El area es:4.0

Page 23: PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …

Ejemplo: Programa que muestra en pantalla los argumentos entrados por linea de comandos.

#include <stdio.h>void main(int argc, char*argv[]){while (--argc)printf(“%s%c”,*++argv, argc = = 1? ‘\n’: ‘ ‘);}

> pueba3 cual es la salida

>......................................