Company
LOGO
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.
Mdulos propuestos
Mdulo
Principal
Leer frase
Contar
vocales
Calcular
frecuencia
Mostrar
frecuencia
Parmetros y argumentos
Resultado
esperado
Definiendo
el mdulo
Invocando
al mdulo
Parmetros y argumentos
Nombres de
variables
Invocar un
subprograma
Por eso
Parmetros y argumentos
mostrar_frecuencia
(mi_vocal, mi_frecuencia);
mostrar_frecuencia
(mi_frecuencia, mi_vocal);
Sintaxis
Subproceso calcular_frecuencia(vocal,
frase, frecuencia)
Mdulo: Calcular
frecuencia
Proceso principal
//Declarar variables
mi_vocal <- "a";
mi_frecuencia <- 100;
mi_frase <- "Somos libres, seamoslo siempre";
calcular_frecuencia(mi_vocal, mi_frase, mi_frecuencia);
mostrar_frecuencia(mi_vocal, mi_frecuencia);
FinProceso
Sintaxis
Subproceso calcular_frecuencia(vocal,
frase, frecuencia por Referencia)
Mdulo: Calcular
frecuencia
Subproceso calcular_frecuencia(vocal, frase, frecuencia por Referencia)
Definir total_caracteres, contador_caracteres, resultado como Entero;
Definir caracter_actual como Caracter;
total_caracteres <- Longitud(frase);
resultado <- 0;
Para contador_caracteres <- 0 Hasta total_caracteres - 1 Hacer
caracter_actual <- SubCadena(frase, contador_caracteres, contador_caracteres);
Si caracter_actual = vocal Entonces
resultado <- resultado + 1;
FinSi
FinPara
frecuencia <- resultado;
FinSubProceso
Funciones
Un Subprograma
cuyo nombre
puede generar
un valor
Podemos usar el
nombre de la
funcin en una
expresin
Como
Donde
Longitud(x)
SubCadena(x)
X <- Longitud(a);
La variable X toma
el valor de 1
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
Sintaxis
Mdulo: Calcular
frecuencia
Proceso principal
Definir mi_vocal como Caracter;
Definir mi_frecuencia como Entero;
Definir mi_frase como Cadena;
mi_vocal <- "e";
El Problema
Mdulo Principal
Invoca al mdulo Leer frase y el enva la frase al mdulo
Contar Vocales.
La solucin
Proceso principal
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 <- 4;
Escribir "La suma de los primeros ", mi_limite, " numeros es ", Sumar(mi_limite);
FinProceso
Flujo de ejecucin
Si la ejecucin est aqu
limite
resultado
Indefinido
Indefinido
Indefinido
Indefinido
10
Un problema
Elaborar un algoritmo principal que lea un valor de X
(0<X< 1) y utilic una funcin coseno que reciba como
parmetro dicho valor y calcule el coseno de X, el cual
debe devolver al programa principal. Con el mismo valor
de X utilizar la funcin exponencial que calcule lo propio
y devuelva al programa principal, hasta que la
diferencia entre dos valores sea menor que 0.001.
2
2!
4
4!
Exponencial X = 1 + +
6
6!
2
2!
3
3!
4
4!
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
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_factorial(un_numero)
Definir resultado como Entero;
Si un_numero = 1 Entonces
resultado <- 1;
Sino
resultado <- un_numero *
calcular_factorial(un_numero - 1);
FinSi
FinFuncion
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!
= 1 + + X^(n-1)/(n-1)!
Exp(x,n)
Funcin Exponencial
Funcion resultado <- calcular_exponencial(un_numero, numero_terminos)
como Real;
FinSi
FinFuncion
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)
= Cos(x,3) - X^6/6!
Cos(x,n)
=1++?
= Cos(X -1) + ?
Funcin Coseno
Funcion resultado <- calcular_coseno(un_numero, numero_terminos)
Definir resultado, ultimo_termino como Real;
Definir signo, exponente como Entero;
Si numero_terminos = 1 Entonces
resultado <- 1;
Sino
exponente <- 2 * (numero_terminos - 1);