Publicado el 23 de Julio del 2018
1.251 visualizaciones desde el 23 de Julio del 2018
582,8 KB
36 paginas
5. Subprogramas(subalgoritmos ):procedimientos y
funciones
En este capitulo se describen las funciones y procedimientos, con los conceptos de variables
locales y globales. Se introduce el concepto de recursividad como una nueva herramienta para
resolver problemas.
5.1 Introducción a los subalgoritmos o subprogramas
Soluciona problemas complejos al dividirlos en subprogramas y luego dividirlos estos en otros mas
simples, hasta que estos sean mas fáciles de resolver. Esta técnica se llama “divide y vencerás” .
El problema principal denominado controlador o conductor (drive) y la solución de los
subproblemas conocidos como procedimientos (subrutinas) o funciones.
Problema
Principal
Algoritmo
Principal
Subproble
ma 1
Subproble
ma 2
Subproble
ma 3
Subalgorit
mo 1
Subalgorit
mo 2
Subalgorit
mo 3
Se dice que el programa principal invoca al subprograma, el subprograma ejecuta la tarea y luego
devuelve el control al programa.
Programa Subprograma
Llamada 1
Retorno 1
Llamada 2
Retorno 2
Algoritmo Subalgoritmo
Un programa puede llamar a su ves a sus propios subprogramas .
Programa subprograma 1 subprograma1.1
Subprograma 2
5.2 Funciones:
Es una que toma una o mas valores llamados argumentos y produce un valor llamado resultado
Ejemplo:
F(x) =x/i+x*x
Para evaluar f debemos darle un valor a x.
5.2.1 Declaración de funciones
Requiere de una serie de pasos que la definen .
Consta de una cabecera , seguido de la palabra (función) y del nombre del argumento de la
función después ira el cuerpo que es una serie de acciones cuya ejecución hará que se asigne un
valor al nombre de la función , esto determina el resultado que ha de devolver al programa.
La declaración de la función será :
<tipo_de_resultado>función <nombre_fun>(lista de parámetro
[declaración locales]
inicio
<acciones> //cuerpo de la función
devolver (<exposición>)
fin_funcion
Ejemplo:
F(x,y)=x/1+x*x
Se define como :
Real función f(x)
Inicio
Devolver (x/(1+x*x))
Fin_funcion
5.2.2 Invocación de las funciones.
Una función puede ser llamada de la siguiente forma:
Nombre_funcion: función que llama
Lista de parámetros actuales: constantes variables , expresiones.
Cada vez que se llama a una función desde el algoritmo principal se establece una
correspondencia entre los parámetros formales y los parámetros actuales .
Una llamada a la función implica los siguientes pasos:
1._A cada parámetro formal se le asigna el valor real de su correspondiente parámetro actual .
2._Se ejecuta el cuero de acciones de la función .
3._Se devuelve el valor de la función y se retorna al punto de llamada.
Ejemplo:
Función potencia para el calculo de N elevada a A .El numero N deberá ser positivo aunque podrá
tener parte fraccionaria , A es un real .
Algoritmo elevar_a_potencia
Var
Real:a.n
Inicio
Escribir(N elevado a =potencia(n.a))
Fin
Real función potencia (E real :n,a)
Inicio
Devolver(exp(a*1n(n))
Fin_funcion.
Nombre_funcion(lista de parámetros actuales)
Ejemplo 2
Algoritmo que contiene y utiliza unas funciones(sen y cos) a las que les podemos pasar el Angulo
en grados.
Algoritmo sen_cos_en_grados
Ver real :g
Inicio
Escribir(deme ángulo en grados)
Leer (g)
Escribir(sen(g))
Escribir(cos(g))
Fin
Real función coseno(E real:g)
Inicio
Devolver(cos(g*2*3.141592/360))
Fin_funcion
Real_funcion seno(real:g)
Inicio
Devolver(sen(g*2*3.141592/360))
Fin_funcion
La salida del algoritmo sería:
2 al cubo es 8
3 al cubo es 27
Las funciones pueden tener muchos argumentos, pero solamente un resultado: el valor de la
función. Esto limita su uso, aunque se encuentran con frecuencia en cálculos científicos. Un
concepto más potente es el proporcionado por el subprograma procedimiento que se examina en
el siguiente apartado.
Ejercicio 5.5
Algoritmo que contiene y utiliza unas funciones (seno y coseno) a las que les podemos pasar el
ángulo en grados.
algoritmo Sen_cos_en_grados
var real : g
inicio
escribir(´Deme angulo en grados´)
leer(g)
escribir(seno(g))
escribir(coseno(g))
fin
real funcion coseno (E real : g)
inicio
devolver(cos(g * 2 * 3.141592/360))
fin_funcion
real funcion seno (E real g)
inicio
devolver( sen(g * 2 * 3.141592/360))
fin_funcion
Ejercicio 5.6
Algoritmo que simplifique un quebrado, dividiendo numerador y denominador por su máximo
común divisor.
algoritmo Simplificar_quebrado
var
entero : n, d
inicio
escribir(´Deme numerador´)
leer(n)
escribir(´Deme denominador´)
leer(d)
escribir(n, ‘/’, d, ‘=’, n div mod(n,d), ‘/’, d div mod(n,d)))
fin
entero funcion mcd (E entero: n,d)
var
entero : n, d
inicio
r ‹ n mod d
mientras r <> 0 hacer
n ‹ d
d ‹ r
r ‹ n MOD d
fin_mientras
devolver(d)
fin_funcion
Ejercicio 5.7
Supuesto que nuestro compilador no tiene la función seno. Podríamos calcular el seno de x
mediante la siguiente serie:
sen(x)= x - r
x (ángulo en radianes)
El programa nos tiene que permitir el cálculo del seno de ángulos en grados, mediante el
diseño de una función seno (x), que utilizará, a su vez, las funciones potencia (x, n) y factorial (n),
que también deberán ser implementadas en el algoritmo.
Se terminará cuando respondamos N (no) a la petición de otro ángulo.
algoritmo Calcular_seno
var real : gr
carácter : resp
inicio
repetir
escribir(´Deme angulo en grados´)
leer(gr)
escribir(seno(‘, gr, ’)=’, seno(gr))
escribir(‘¿Otro angulo?’)
leer(resp)
hasta_que resp = ‘N’
fin
real funcion factorial (E entero:n)
var
real : f
entero : i
inicio
f ‹ 1
desde i ‹ 1 hasta n hacer
f ‹ f * i
fin_desde
devolver(f)
fin_funcion
real funcion potencia (E real: x; E entero:n)
var real : pot
entero : i
inicio
pot ‹ 1
desde i ‹ 1 hasta n hacer
pot ‹ pot * x
fin_desde
devolver(pot)
fin_funcion
real funcion seno (E real:gr)
var real : x, s
entero : i, n
inicio
x ‹ gr * 3.141592 / 180
s ‹ x
desde i ‹ 2 hasta 17 hacer
n ‹ 2 * i – 1
si i mod 2 <> 0 entonces
s ‹ s – potencia(x, n) / factorial(n)
si_no
s ‹ s + potencia(x, n) / factorial(n)
fin_si
fin_desde
devolver(s)
fin_funcion
5.3. PROCEDIMIENTOS (subrutinas)
Aunque las funciones son herramientas de programación muy útiles para la resolución de
problemas, su alcance está muy limitado. Con frecuencia, se requieren subprogramas que calculen
varios resultados en vez de uno solo, o que realicen la ordenación de una serie de números, etc.
En estas situaciones la función no es apropiada y se necesita disponer del otro tipo de
subprograma: el procedimiento o subrutina.
Un procedimiento o subrutina es un subprograma que ejecuta un proceso específico. Ningún
valor está asociado con el nombre del procedimiento; por consiguiente, no puede ocurrir en una
expresión. Un procedimiento se llama escribiendo su nombre, por ejemplo, SORT, para indicar que
un procedimiento denominado SORT se va a usar. Cuando se invoca el procedimiento, los pasos
que lo definen se ejecutan y a continuación se devuelve el control al programa que le llamó.
Procedimiento versus función
Los procedimientos y funciones son subprogramas cuyo diseño y misión son similares, sin
embargo, existen unas diferencias esenciales entre ellos:
1. Un procedimiento es llamado desde el algoritmo o programa principal mediante su
nombre y una lista de parámetros actuales, o bien con la instrucción llamar_a
(call). Al llamar al procedimiento se detiene momentáneamente el programa que se
estuviera realizando y el control pasa al procedimiento llamado. Después de que las
acciones del procedimiento se ejecutan, se regresa a la acción inmediatamente siguiente
a la que se llamó.
2. Las funciones devuelven un valor, los procedimientos pueden devolver 0,1 o n valores y
3. El procedimiento se declara igual que la función, pero su nombre no está asociado a
en forma de lista de parámetros.
ninguno de los resultados que obtiene.
La declaración de un procedimiento es similar a la de funciones.
Los parámetros formales tienen el mismo significado que en las funciones; los parámetros
variable – en aquellos lenguajes que los soporta, por ejemplo, Pascal – están precedidos cada uno
de ellos por la palabra var para designar que ellos obtendrán resultados del procedimiento en
lugar de los valores actuales asociados a ellos.
El procedimiento se llama mediante la instrucción
La palabra llamar_a(call) es opcional y su existencia depende del lenguaje de
programación. El ejemplo siguiente ilustra la definición y uso de un procedimiento para realizar la
división de dos números y obtener el cociente y el resto.
Variables enteras: DIVIDE
Comentarios de: 5. Subprogramas(subalgoritmos ):procedimientos y funciones (0)
No hay comentarios