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
23
Embed
PROGRAMACION MODULAR FUNCIONES - Tesla · PROGRAMACION MODULAR FUNCIONES Ventajas de la programación modular: Aumentar la legibilidad y comprensión del programa Reducir el …
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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
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
#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
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);
Ejemplo:
int main(){.......func1 ( );……….func2 ( );......return 0;}
void Suma(int a, int b) Definición{printf(“la suma es %d\n”,a + b);return;}
Á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( ){..........}
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
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
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 ( ){ {…………… ……..} }
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 ( ){ {……………} ……..……}
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.
Ejemplo Paso Por Valor:void Decremento(int x){x = x - 1;printf(“%d\n”,x);return;}
Los arreglos se pasan a las funciones por referencia
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: Programa para el cálculo de las combinaciones de m elementos tomados de a n mediante módulos
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
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”
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
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
Ejemplo: Programa que muestra en pantalla los argumentos entrados por linea de comandos.