8_Subprogramas

Embed Size (px)

DESCRIPTION

subprogramas

Citation preview

  • Company

    LOGO

    Subprogramas

    Algoritmos y Estructuras de Datos

  • Agenda

    1. Programacin Modular

    2. Procedimientos

    3. Funciones

    4. Recursividad

  • Parmetros

    Ya hemos hablado de Mdulos antes.

    Los Mdulos de un programa no tienen

    acceso a las variables de otros

    mdulos.

    Sin embargo, necesitamos

    intercambiar datos entre mdulos.

    El intercambio de datos entre mdulos se realiza a travs

    de parmetros.

  • Un Problema

    Disee un algoritmo que nos muestre la frecuencia de aparicin de cada una de

    las vocales presentes en una frase

    ingresada por el usuario.

    Omitir maysculas y tildes por ahora.

    La frase debe enviarse como parmetro

  • Mdulos propuestos

    Mdulo Principal

    Leer fraseContar vocales

    Calcular frecuencia

    Mostrar frecuencia

  • Parmetros y argumentos

    Resultadoesperado

    La vocal a se utiliz 2 veces

    Definiendo el mdulo

    SubProceso mostrar_frecuencia(vocal, frecuencia)

    Escribir "La vocal ", vocal, " se utiliz ", frecuencia, " veces";

    FinSubProceso

    Invocando al mdulo

    mi_vocal

  • Parmetros y argumentos

    Nombres de variables

    No es necesario que los nombres de variables de los argumentos y parmetros coincidan.

    Invocar un subprograma

    Los valores de los argumentos son asignados a los parmetros correspondientes.

    Basados en el orden de aparicin.

    Por eso Tener cuidado en pasar los valores en el orden correcto.

  • Parmetros y argumentos

    mostrar_frecuencia

    (mi_vocal, mi_frecuencia);

    mostrar_frecuencia

    (mi_frecuencia, mi_vocal);

  • Para qu usar mdulos

    Los podemos usar mltiples veces.

    Son fciles de disear y construir.

    Nos asla de los detalles externos al

    mdulo.

    Las pruebas a nivel de mdulo son importantes en el mantenimiento de Software grande.

  • Parmetros por Valor

    Definicin Los cambios en el Subprograma no afectan a la variable en el mdulo que lo invoca.

    Slo envan datos al subprograma

    Mecanismo El subprograma slo recibe una copia de la variable.

    Se reserva un espacio en memoria para esta copia.

    Sintaxis Subproceso calcular_frecuencia(vocal, frase, frecuencia)

  • Mdulo: Calcular

    frecuenciaProceso principal

    //Declarar variables

    mi_vocal

  • Parmetros por Referencia

    Definicin Los cambios en su valor afectan al valor de los argumentos en el mdulo que invoca.

    Slo envan y reciben datos del subprograma

    Mecanismo El subprograma tiene acceso a la ubicacin del argumento en memoria.

    Todo cambio se ve reflejado en la variable original.

    Sintaxis Subproceso calcular_frecuencia(vocal, frase, frecuencia por Referencia)

  • Mdulo: Calcular

    frecuenciaSubproceso calcular_frecuencia(vocal, frase, frecuencia por Referencia)

    Definir total_caracteres, contador_caracteres, resultado como Entero;

    Definir caracter_actual como Caracter;

    total_caracteres

  • Funciones

    Un Subprograma cuyo nombre

    puede generar un valor

    Podemos usar el nombre de la

    funcin en una expresin

    Como

    Longitud(x) SubCadena(x)

    Donde

    X

  • Funciones incorporadas

    Definicin Funciones ya provedas por los Lenguajes de Programacin.

    El cdigo fuente de estas funcione est en mdulos externos, y a disposicin de los programadores.

    En PSeInt RC(X) Raz cuadrada

    TRUNC(X) Parte entera

    AZAR(X) Entero aleatorio

    ABS(X) Valor absoluto

    EXP(X) Funcin exponencial

  • Funciones definidas por el

    Usuario

    Definicin Funciones creadas por el Programador.

    Debe incluir el tipo de dato devuelto por la funcin

    Sintaxis Funcion frecuencia

  • Mdulo: Calcular

    frecuenciaProceso principal

    Definir mi_vocal como Caracter;

    Definir mi_frecuencia como Entero;

    Definir mi_frase como Cadena;

    mi_vocal

  • El Problema

    Mdulo Principal

    Invoca al mdulo Leer frase y el enva la frase al mdulo Contar Vocales.

    Mdulo Leer Frase

    Almacena la frase ingresada por el usuario en una variable.

    Mdulo Calcular Frecuencia

    Retorna el nmero de apariciones de una letra en una frase.

    Mdulo Mostrar Frecuencia

    Muestra en pantalla el nmero de apariciones de una vocal.

  • Mdulo Contar Vocales

    Verifico el nmero de veces que aparece la vocal en minsculas.

    Verifico el nmero de veces que aparece la vocal en maysculas.

    Verifico el nmero de veces que aparece la vocal en minsculas con tilde.

    Verifico el nmero de veces que aparece la vocal en maysculas con tilde.

    Sumo las apariciones y muestro el resultado.

  • La solucin

    Proceso principal

    Definir mi_frase como Cadena;

    leer_frase(mi_frase); //Este parmetro es por referencia

    contar_vocales(mi_frase);

    FinProceso

    SubProceso contar_vocales(frase)

    Dimension patrones_por_vocal[5];

    Definir patrones_por_vocal como Cadena;

    patrones_por_vocal[0]

  • Recursividad

    Un subprograma recursivo es uno

    que se invoca a s mismo.

    En un tiempo, haba lenguajes

    que no soportaban recursividad.

    Proveen soluciones eficientes para

    problemas especficos.

    Por ejemplo, calcular la suma de

    los primeros N enteros.

  • Un ejemplo

    Proceso principal

    Definir mi_limite como Entero;

    mi_limite

  • Flujo de ejecucin

    Si la ejecucin est aqu limite resultado

    Inicio de la primera invocacin a Sumar

    4 Indefinido

    Inicio de la segunda invocacin a Sumar

    3 Indefinido

    Inicio de la tercera invocacin a Sumar

    2 Indefinido

    Inicio de la cuarta invocacin a Sumar

    1 Indefinido

    Fin de la cuarta invocacin a Sumar 1 1

    Fin de la tercera invocacin a Sumar 2 3

    Fin de la segunda invocacin a Sumar

    3 6

    Fin de la primera invocacin a Sumar

    4 10

  • Un problema

    Elaborar un algoritmo principal que lea un valor de X (0

  • Plan de Accin

    Obtenemos un nmero del usuario que cumpla las reglas de validacin.

    Necesitamos una funcin de clculo de factorial tanto para el clculo del Coseno y el Exponencial

    Calculamos el Coseno y el Exponencial

    Verificamos si su diferencia cumple las condiciones de trmino del programa.

  • Calcular Factorial

    Fact(1) = 1

    Fact(2) = 1 * 2 = Fact(1) * 2

    Fact(3) = 1 * 2 * 3 = Fact(2) * 3

    Fact(x) = 1 * 2 * X = Fact(X -1) * X

  • Funcin Factorial

    Funcion resultado

  • Calcular Exponencial

    Exp(x,1) = 1

    Exp(x,2) = 1 + X = Exp(x,1) + X

    Exp(x,3) = 1 + X + X^2/2! = Exp(x,2) + X^2/2!

    Exp(x,4) = 1 + X + X^2/2! + X^3/3! = Exp(x,3) + X^3/3!

    Exp(x,n) = 1 + + X^(n-1)/(n-1)! = Exp(X -1) + X^(n-1)/(n-1)!

  • Funcin Exponencial

    Funcion resultado

  • Calcular Coseno

    Cos(x,1) = 1

    Cos(x,2) = 1 - X^2/2! = Cos(x,1) - X^2/2!

    Cos(x,3) = 1 - X^2/2! + X^4/4! = Cos(x,2) + X^4/4!

    Cos(x,4) = 1 - X^2/2! + X^4/4! -X^6/6!

    = Cos(x,3) - X^6/6!

    Cos(x,n) = 1 + + ? = Cos(X -1) + ?

  • Funcin Coseno

    Funcion resultado