funciones.ppt

Upload: ricardo-jesus-vazquez-bacadare

Post on 29-Oct-2015

42 views

Category:

Documents


0 download

TRANSCRIPT

  • Programacin 1 (01 )Unidad V: Subprogramas: FuncionesProf. Departamento de ComputacinEscuela de Ingeniera de SistemasFacultad de IngenieraUniversidad de Los Andes

    Programacin 1Semestre A-2010

  • Programacin Modular Construir programas en forma modular (dividir un programa grande en un cierto nmero de componentes mas pequeos)

    Re-utilizar los mdulos

    Comprender los mecanismos utilizados para pasar informacin entre mdulos*Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin ModularDiseo descendente (de arriba hacia abajo), metodologa del divide y vencers o programacin top-down:

    En la solucin de problemas grandes, es conveniente dividirlo en problemas mas pequeos (sub-problemas), los cuales a su vez pueden dividirse en sub-problemas mas pequeos

    Este proceso de divisin contina hasta que los sub-problemas son tan sencillos que pueden ser resueltos mediante un programa simple llamado mduloLas soluciones (mdulos) de un diseo descendente pueden codificarse en lenguajes de programacin tales como C, C++, Pascal, Fortran o Java

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular

    Mdulos: Piezas pequeas diseadas para ejecutar una tarea especfica. Permiten desarrollar y mantener programas grandes. Pueden ser de dos tipos:

    FuncionesProcedimientos

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular: Ejemplo

    IngenieraSistemasGeologaElctricaMecnicaQumicaComputacinSistemas de ControlInvestigacin de operaciones*Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin ModularPrograma principalM1M2M3M4M1.1M1.2M4.1M1.2.1*Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular: Ejemplo

    Gestionar notas estudiantesElegir opcinInsertar notaModificar notaEliminar nota

    Ver nota*Por nombrePor notaProf. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular: Ejemplo Sistema bibliotecarioPrstamoAdquisicinCatalogacinP_LibrosP_RevistasA_RevistasC_Libros

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular: Ejemplo Calcular el rea de un rectngulo

    Sub-problemas:Entrada de datos de la altura y la baseLeer datosValidar datosCalcular el reaSalida de los resultados

    Mdulos:leerDatos(altura, base)validarDato(dato)calcularArea(altura, base, area)escribirArea(area) *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular: Ejemplo Programa PrincipalleerDatoscalcularAreaescribirArea*validarDatoDiagrama modularProf. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular: VentajasComo los mdulos son independientes, varios programadores pueden trabajar simultneamente y de manera independiente en la resolucin de un problema, repartindose las distintas partes del mismo

    Facilita la escritura y depuracin de un programa ya que cada mdulo representa una parte bien definida del problema

    Localizacin rpida de errores

    Modificacin de un mdulo sin afectar a los dems

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Programacin Modular: VentajasUn grupo de instrucciones que se repite en distintas partes de un programa se pueden incluir dentro de una sola funcin, a la que se puede utilizar siempre que sea necesario con datos de entrada adecuados para su uso en un contexto particular y desde distintas partes del programa

    Favorece la portabilidad, ya que se pueden escribir programas sin prestar atencin a las caractersticas de un sistema en particular

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Reutilizacin de un mduloLos algoritmos de cada mdulo slo se escriben y codifican una sola vez, aunque se necesiten en distintas ocasiones a lo largo del sistema de software completo e incluso de otros sistemas de software (reutilizacin) evitando la duplicacin innecesaria de cdigo

    La reutilizacin de un mdulo por otros sistemas de software es un ahorro de tiempo, ya que no es necesario volver a resolver el problema, y si el mdulo ha sido previamente probado y verificado tambin reduce la posibilidad de errores

    Fcil comprensin del programa completo

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • FuncinMatemticamente una funcin es una operacin que toma uno o mas valores llamados argumentos y produce un valor llamado resultado

    Ejemplosfuncin de un slo argumento f(4) = 4/(16 + 1) = 4/17 = 0.235

    funcin de dos argumentos

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Funcinreal funcin f(entero x)0. Inicioresultado = 4/(x*x + 1)devolver (resultado)Fin

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Funcin

    En C los mdulos se llaman funciones (unidad bsica de los programas). Realizan determinadas tareas bien definidas

    Una funcin:Tiene un nombreToma cero o mas valores, denominados argumentos o parmetros de entrada (parmetros formales)Segn el valor de los parmetros, devuelve un resultado, el cual es obtenido durante su ejecucin

    Una funcin se define una sola vez pero puede usarse (mediante llamadas) tantas veces como sea necesario

    Prof. Flor Narciso

    Programacin 1Semestre A-2010*

    Programacin 1Semestre A-2010

  • Definicin de una funcinProf. Flor Narciso

    Programacin 1Semestre A-2010* tipo_resultado funcin nombre_funcin (lista_parmetros_formales)

    Declaracin_variables_locales

    Inicio Conjunto de sentencias devolver expresin fin_funcin

    Notacin utilizada para definir funciones que devuelven UN SOLO VALOR

    La lista de parmetros formales y la declaracin de variables locales son opcionales

    Programacin 1Semestre A-2010

  • Mecanismo de llamadas entre funciones..Llamada a funcin B..Llamada a funcin B..

    A (definicin)B (definicin)Llamada 1Retorno 1Llamada 2Retorno 2Nota: Cada vez que una funcin es llamada, se ejecuta y retorna el control al lugar desde donde fue hecha la llamadaB.1 (definicin)Llamada a B.1

    *

    Programacin 1Semestre A-2010

  • Mecanismo de llamadas entre funciones..y = f(4)..y = f(-7)..

    A (definicin)f (definicin)Llamada 1 x = 4Retorno 1 (8)Llamada 2 x = -7Retorno 2 (-3)f(x) = x + 4 *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Mecanismos utilizados para pasar informacin entre funciones

    Parmetros: Proporcionan la forma de comunicar informacin entre funciones

    Y = f(4)f(x) = x + 4La funcin A llama (o invoca) a la funcin f con parmetro actual 4Af*4Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Mecanismos utilizados para pasar informacin entre funciones

    Parmetros: Proporcionan la forma de comunicar informacin entre funciones

    Y = 8f(4) = 4 + 4 = 8La funcin A llama (o invoca) a la funcin f con parmetro actual 4AfLa funcin f se ejecuta y devuelve el resultado a la funcin A, el cual es asignado a la variable Y*8Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Tipos de funciones en C

    Funciones de biblioteca (libreras) : El lenguaje C tiene sus propias funciones incorporadas que permiten realizar ciertas operaciones o clculos de uso comn

    Funciones definidas por el programador para realizar determinadas tareas*Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Librera estndar de C

    Contiene una amplia coleccin de funciones para llevar a cabo clculos matemticos comunes, manipulaciones con cadenas de caracteres, manipulaciones con caracteres, operaciones de entrada/salida y muchas otras operaciones tiles.

    Esta biblioteca de funciones comunes construida una vez, puede ser re-utilizada por diferentes programas *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Libreras ANSI C*Prof. Flor Narciso

    Programacin 1Semestre A-2010

    LibreraDirectivaDescripcinassert#include nicamente define la macro de depuracin assertctype#include Contiene los prototipos de las funciones y macros de clasificacin de caractereserrno#include Define constantes para los cdigos de errorfloat#include Contiene parmetros de entorno, informacin sobre limitaciones y rangos para tipos reales

    Programacin 1Semestre A-2010

  • Libreras ANSI CProf. Flor Narciso

    Programacin 1Semestre A-2010*

    LibreraDirectivaDescripcinlimits#include Contiene parmetros de entorno, informacin sobre limitaciones y rangos para tipos enteroslocale#include Contiene los prototipos de las funciones, macros, y tipos para manipular y controlar varias opciones pertenecientes a la localidad del sistemamath#include Contiene los prototipos de las funciones y otras definiciones para el uso y manipulacin de funciones matemticas

    Programacin 1Semestre A-2010

  • Libreras ANSI CProf. Flor Narciso

    Programacin 1Semestre A-2010*

    LibreraDirectivaDescripcinsetjmp#include Contiene los prototipos para las funciones y un tipo para crear y manipular el entorno al hacer llamadas: registros, pilas, etc..signal#include Contiene las funciones, macros, y tipos para crear y manipular seales del sistemastdarg#include Contiene las macros y tipos para crear y manipular argumentos de variables

    Programacin 1Semestre A-2010

  • Libreras ANSI CProf. Flor Narciso

    Programacin 1Semestre A-2010*

    LibreraDirectivaDescripcinstddef#include < stddef.h>Contiene las macros, y tipos comunesstdio#include Contiene los prototipos de las funciones, macros, y tipos para manipular datos de entrada y salidastdlib#include < stdlib.h>Contiene los prototipos de las funciones, macros, y tipos para utilidades de uso general

    Programacin 1Semestre A-2010

  • Libreras ANSI CProf. Flor Narciso

    Programacin 1Semestre A-2010*

    LibreraDirectivaDescripcinstring#include < string.h>Contiene los prototipos de las funciones y macros de clasificacin de caracterestime#include Contiene los prototipos de las funciones, macros, y tipos para manipular la hora y la fecha del sistema

    Programacin 1Semestre A-2010

  • Funciones de librera en C

    double sin(double x)

    Ejemplo:valor1 = sin(3.14);

    Nombre de la funcinTipo y nombre del parmetro formal, parmetro de entrada o argumentoParmetro actualLlamada a la funcin sin*Tipo de la funcinDefinicin de la funcin sinProf. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Tipos de Parmetros

    Parmetros formales (parmetros de entrada o argumentos): Declaraciones de los parmetros en la definicin de la funcin

    Parmetros actuales: Valores que toman los parmetros formales y que son proporcionados a la funcin que es llamada por la funcin que la llam

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Parmetros formalesLos PARAMETROS FORMALES son VARIABLES LOCALES. La nica diferencia es el lugar donde son declarados, es decir, en la definicin de una funcin (lista_parmetros_formales).

    Cuando se pasa un valor desde una funcin llamadora o invocadora a una funcin llamada o invocada, se crea una variable temporal dentro de la funcin invocada. Una vez que termina la ejecucin de la funcin invocada y se retorna a la funcin invocadora, esta variable deja de existir.Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Funciones de librera en C *#include #include

    int main(){ double x = 0.2345;

    printf( "acos(%f)= %f\n", x, acos(x)); return 0;}Funcin: double acos(double x);Prof. Flor Narciso

    Programacin 1Semestre A-2010

    PropsitoEjemploCalcula el valor principal del arco coseno de x. Puede producirse un error de dominio para los argumentos que no estn en el intervalo [-1, +1]

    Retorna el arco coseno en el intervalo [0, PI] radianes

    Programacin 1Semestre A-2010

  • Funciones de librera en C *Funcin: double pow(double x, double y);#include #include

    int main(){ double x = 6.54321, y = 0.56789;

    printf( "pow(%f, %f) = %f\n", x, y, pow(x,y)); return 0;}Prof. Flor Narciso

    Programacin 1Semestre A-2010

    PropsitoEjemploCalcula x elevado a la potencia de y

    Puede producirse un error de dominio si x es negativo e y no es un valor entero

    Tambin se produce un error de dominio si el resultado no se puede representar cuando x es cero e y es menor o igual que cero

    Retorna el resultado de xy

    Programacin 1Semestre A-2010

  • Funciones de librera en C *Funcin: int abs(int num); #include #include

    int main(){ int num, y;

    puts( "Escriba un numero entero:" ); scanf( "%d", &num ); y = abs(num); printf( "abs( %d ) = %d\n", num, y); return 0;}Prof. Flor Narciso

    Programacin 1Semestre A-2010

    PropsitoEjemploCalcula el valor absoluto de un entero numSi el resultado no puede ser representado, el comportamiento no est definido

    Retorna el valor absoluto

    Programacin 1Semestre A-2010

  • Funciones de librera en CEjemplos: #include valor1 = sin(3.14159);valor2 = sin(x) - cos(y);valor3 = sin(theta)/(sin(delta) - sin(delta-theta));theta = acos(1.0/sqrt(1 - x*x));if (sin(x) > 0.7) { printf(Angulo mayor que 90 grados\n); printf(Valor = %f, exp(-a*t) * sin(a*t)); } *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Funciones de librera en C: EjemploUn polinomio de x, de segundo grado como mximo, se da porax2 + bx + cSu discriminante se define comob2 4acSe desea conocer la raz cuadrada del discriminante; si eldiscriminante no es negativo, tiene la interpretacin usual, pero si el discriminante es negativo,entoncessignifica donde i es el nmero imaginario que satisfacei2 = -1 o en forma equivalente, i = Dado los valores de a, b y c, calcular el valor de la raz cuadrada del discriminante.

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Funciones de librera en C: EjemploAnlisis E-P-SEntradas: a, b, c Z

    Proceso: - Calcular discriminante = b2 4acSi discriminante > 0 RC =

    Si discriminante < 0 RC = Salidas: Raz cuadrada del discriminante RC R

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Funciones de librera en C: EjemploAlgoritmo

    0. Inicio1. Escribir (a = ?, b = ?, c = ?)2. Leer (a, b, c)3. disc= pow(b, 2) - 4ac4. Si (disc > 0) entonces RC = sqrt(disc) Escribir (Raiz del discriminante = , RC) sino RC = sqrt(-disc) Escribir (Raiz del discriminante = i, RC) fin-si5. Fin

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Funciones de librera en C: EjemploCodificacin

    #include #include

    int main () {float a, b, c, disc, RC;

    printf(Valores de a = ?, b = ?, c = ?)l;scanf(%f %f %f, &a, &b, &c);disc= pow(b, 2.0) - 4.0*a*c;if (disc >= 0.0) { RC = sqrt(disc); printf(Raiz del discriminante = %f\n, RC); } else { RC = sqrt(-disc); printf(Raiz del discriminante = i%f\n, RC); }return 0;}

    *Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Leer una letra minscula y convertirla a mayscula

    Anlisis E-P-SEntradas: Letra minscula (minuscula caracteres)

    Proceso: Convertir la letra minscula en su correspondiente mayscula

    Salidas: Letra mayscula (mayuscula caracteres)

    *Funciones de librera en C: EjemploProf. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Algoritmo

    0. Inicio1. Escribir (Introduzca una letra minscula)2. Leer (minuscula)3. mayuscula = convertirMayuscula(minuscula)4. Escribir (mayuscula)5. Fin

    *Funciones de librera en C: EjemploProf. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Codificacin

    #include #include

    int main() {

    int minuscula, mayuscula;

    printf(Introduzca una letra minscula); minuscula = getchar(); mayuscula = toupper(minuscula); putchar(mayuscula); return 0;}*Funciones de librera en C: EjemploProf. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • EjerciciosUn programa en C contiene las siguientes declaraciones y asignaciones iniciales:

    int i = 8, j = 5;double x = 0.004, y = -0.01;char c = c, d = d;

    Determinar el valor de cada una de las siguientes expresiones, que hacen uso de funciones de biblioteca.

    a) abs(i - 2 * j) b) fabs(x + y) c) ceil (x)d) ceil (x + y)e) floor (x)f) floor(x + y)g) exp(x)h) log(x)i) log(exp(x))j) sqrt(x*x + y*y)k) sqrt(sin(x) + cos(y))l) pow(x - y, 3.0)*Prof. Flor Narciso

    Programacin 1Semestre A-2010

    Programacin 1Semestre A-2010

  • Paso de parmetrosPaso de parmetros:Por valorPor referencia

    Por valor: Los parmetros formales correspondientes reciben una COPIA de los valores (constante, variable, resultado de la evaluacin de una expresin) de los parmetros actuales; por tanto, los cambios que se produzcan en ellos por efecto de la ejecucin de la funcin no podrn afectar el valor de los parmetros actuales.En C/C++ todas las llamadas, por defecto, son por valor.

    Prof. Flor Narciso

    Programacin 1Semestre A-2010*

    Programacin 1Semestre A-2010

  • Paso de parmetros por valor: EjemploProf. Flor Narciso

    Programacin 1Semestre A-2010#include

    int mayor (int x, int y, int z) {

    int max;max = x;if (y > max) max = y;if (z > max) max = z;return max;}int main() {

    int a, b, c, P, Q, R, S;

    printf (Introduzca 3 numeros) scanf(%d %d %d, &a, &b, &c); P = mayor (3, 4, 6); Q = mayor (a, b, c); R = mayor (a + 1, b, 1); S = mayor (P, Q, R); printf(mayor = %d, S); return 0;}

    *

    Programacin 1Semestre A-2010

  • Paso de parmetros por valor: EjemploEscribir una funcin que reciba los valores enteros de x y n > 0 como parmetros de entrada y devuelva el valor de xn como salida.

    entero funcin Potencia (entero x, entero n)0. Inicio1. pot = 12. Repita para (I = 1; I < n; I = I + 1)pot = pot * xfin_RP3. devolver pot4. fin_funcinProf. Flor Narciso

    Programacin 1Semestre A-2010*

    Programacin 1Semestre A-2010

  • Paso de parmetros por valor: EjemploEscribir un programa que tome un conjunto de pares de nmeros enteros a y b, y calcule la potencia ab de cada par. El fin de entrada de datos viene dado por a = -1 y b = -1.

    0. Inicio1. Q = cierto2. Repita mientras (Q = cierto) Escribir (Introduzca los valores de a y b)Leer (a, b)Si (a = -1 y b = -1) entoncesQ = falsosinoSi (b > 0) entonces resultado = Potencia (a, b) Escribir (Resultado = , resultado)sino Escribir(Error: b debe ser > 0)fin_sifin_si fin_RM3. FinCODIFICAR!!!!!!

    Prof. Flor Narciso

    Programacin 1Semestre A-2010*

    Programacin 1Semestre A-2010

  • Paso de parmetros por valor: EjemploRealizar una funcin en C que permita sumar el nmero de elementos negativos de una lista de n nmeros reales

    real funcin Suma ()0. Inicio1. Escribir (Introduzca el valor de n)2. Leer (n)3. resultado = 04. Repita para (j = 1; j < n; j = j + 1)Escribir (Introduzca un nmero real)Leer (numero)Si (numero < 0.0) entoncesresultado = resultado + numerofin_sifin_RP5. devolver(resultado)6. fin_funcionProf. Flor Narciso

    Programacin 1Semestre A-2010*

    Programacin 1Semestre A-2010

    *****************************************