lunes, 10 de junio de 2013

7. Subprogramas.


Se llama 
Subalgoritmo a cada una de las partes de un Algoritmo más general que resuelve cada una de las tareas particulares necesarias para que dicho algoritmo general alcance el objetivo para el que fue diseñado, es decir resolver un problema. Este concepto está vinculado al Diseño estructurado de algoritmos, en el cual un problema se divide en partes que posteriormente son resueltas por un módulo. Cada módulo coincidirá pon un subalgoritmo.

     Cuando hablamos de algoritmos complejos estamos hablando de problemas complejos es decir, problemas que se dividen en problemas mas pequeños (subproblemas). La solucion de estos subproblemas se realiza mediante los subalgoritmos.


     Está demostrado que ante un problema complejo, este se resuelve mejor cuando el mismo se divide en pequeños problemas. Este concepto es aplicable con los algoritmos, dividiéndolos en subalgoritmos, que en su conjunto logran resolver el algoritmo.

     La programación modular consiste en dividir un programa en partes bien diferenciadas, llamadas módulos (o subprogramas, o subalgoritmos o subrutinas), que pueden ser analizadas y programadas por separado. Existe un algoritmo o programa principal, que cede el control a los módulos, y una vez éstos se han ejecutado, vuelve a tomar el control, continuando la ejecución del programa por dónde los llamó

     El objetivo del uso de subalgoritmos es modularizar un algoritmo, es decir dividir al problema en subpromlemas, resolver el problema con un algoritmo y a los sobproblemas con subalgoritmos. De esta forma cuando resuelvo un problema me abstraigo de los pequeños detalles que no hacen en sí al problema llamando a acciones (Subalgoritmos) que una vez resuelto el problema principal tendré que solucionar.
La ventaja más importante de modularizar es que los subprogramas se pueden reutilizar en el mismo algoritmo o en otros.


Veamos el ejemplo planteado al principio

     El algoritmo, con el uso de subalgoritmos quedaría escrito de la siguiente forma.

Algoritmo Ejercicio_1
               Leer_Y_Validar
               X<-Numero
Escribir(‘Ingrese la cantidad de número que quiere ingresar’)
Leer(N)
Para i<-1 hasta N
               Lee_y_Validar
Ver_Cooprimos
Si Son_Coopromos entonces
                              Escribir(‘Los número son cooprimos’)
                              Si no
                              Escribir(‘Los número no son cooprimos’)
                              Fin si
               Fin Para
Fin Algoritmo Ejercicio_1


Subalgoritmo Leer_y_Validar
               Repetir
                              Escribir(‘Ingrese un número entre 1 y 10’)
                              Leer(Numero)
               Hasta   (Numero<=10)  ^ (Numero>=1)
Fin Subalgoritmo Leer_y_Validar
  
Subalgoritmo Ver_Cooprimos
               Son_Cooprimos<-V
               Si X<Numero entonces
                              Min<-X
               Si no

                              Min<-Numero

               Fin si
               i<-2
Mientras  i<Min ^ Son_Cooprimos Hacer
               Si  Min mod i = 0  Entonces
                              Son_Cooprimos<-F
               Si no
                              i<-i+1
               fin si

Fin Subalgoritmo Ver_Cooprimos


¿Qué es un procedimiento?

     Teniendo en cuenta lo anterior, se definiría como un módulo. Concretamente, como un módulo que no retorna ningún valor, ejecuta lo que tenga que ejecutar y devuelve el control al programa que lo llamó.
Supongamos que queremos ordenar tres valores numéricos.
En ese caso, el algoritmo sería:
Algoritmo ordenar
Var
a,b,c, aux : entero
Comienzo
Leer a, b, c
si a > b
aux= a
a=b
b= aux
Tres veces se repite el intercambio, con diferentes variables.
     Obsérvese que las líneas de código son similares, por lo que se podría escribir un fragmento de código aparte, y utilizarlo con los PARAMETROS adecuados en cada caso
finsi
si b>c
aux= c
c=b
b= aux
si a > b
aux= a
a=b
b= aux
finsi
finsi
mostrar a,b,c
fin
Amerita, entonces, utilizar un procedimiento «intercambio » que me permita intercambiar dos variables cada vez que lo necesite y sin necesidad de reescribir el código cada vez.

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.

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.

Ejemplo:

F(x,y)=x/1+x*x
Se define como :
Real función f(x)
Inicio
Devolver (x/(1+x*x))
Fin_funcion




Cada subprograma es en realidad un algoritmo más pequeño que aporta parte de la solución al problema principal. En estos subprogramas podemos definir variables, realizar asignaciones, realizar lectura de datos, imprimir expresiones, variables y literales, usar ciclos, vectores, decisiones, incluso invocar o llamar  a otros subprogramas.
Modelo gráfico de un programa que esta construido con: 
sub-programa.
A Pesar de usar todos los subprogramas que se deseen siempre habrá de existir uno denominado principal, el cual es el encargado de organizar el uso de los elementos y subprogramas disponibles. Un programa siempre inicia en su parte principal y es desde allí de donde se articulan los elementos a ser usados.

Como funciona un programa que esta estructurado por subprogramas?

El programa inicia en su parte principal, es desde allí donde se ejecuta linea a linea, cuando el programa desea utilizar un subprograma, realiza un llamado,al cual se le conoce con el nombre de invocación. 
En este llamado,es vital conocer el nombre del subprograma que se desea invocar y los elementos que se deben enviar para que éste funcione adecuadamente, el programa ejecuta cada instrucción del subprograma que fue llamado, y cuando termina, regresa retornando el resultado y permitiendo que el programa siga la ejecución en la parte donde había sido llamado. 


Los subprogramas tienen dos aspectos claves.

1. Un subprograma se crea una sola vez.
Esto implica hacer el algoritmo que se encuentra en el interior del subprograma de forma que cumpla un fin específico.

2. Un subprograma se usa n veces en un subprograma
Desde cualquier parte del programa se puede llamar a un subprograma creado con el fín de ser usado, solo se necesita enviar los parámetros necesarios para su correcto funcionamiento.

Forma general para definir un subprograma en el lenguaje python.


Para utilizar un subprograma se aplica la misma técnica que trabajamos para las funciones definidas por el sistema.

Para construir un subprograma se necesita:

1. Asignarle un nombre que sea acorde a lo que se espera realice el subprograma
2. Definir el número de parámetros que se necesitarán para su funcionamiento. En este punto la idea es que en un comienzo desde el enunciado se sugiera el número de parámetros que necesitará el subprograma y que más adelante se desarrolle esa habilidad.
3. Crear el algoritmo que se encuentra en el interior del subprograma. Utilizando los parámetros como datos de entrada y aplicando cualquiera de las instrucciones que se venían  aplicando en los algoritmos realizados hasta ahora.
4. Si el programa debe retornar un resultado, este se logra mediante el uso de la instrucción return seguida de lo que se desea retornar. 

Forma general de un programa construido con subprogramas.



1. ¿Para crear un programa con subprogramas siempre hay que importar las bibliotecas?
No. Eso solo depende si se necesitan funciones definidas por el sistema en lo que deseamos construir.

2. ¿Dos subprogramas pueden llamarse igual?
No. Cada subprograma debe tener un único nombre que lo identifique de los demás.

3. ¿Los parámetros pueden llamarse igual?
En un mismo subprograma cada parámetro debe ser diferente de los otros, cada parámetro se separa de los demás por el uso de comas. Pero dos subprogramas si pueden tener el mismo nombre de los parámetros, dado que cada uno es independiente de los demás.

4. ¿Qué instrucciones pueden ir dentro de un subprograma?
Todas las que se han trabajo.
- Definición de variables
- Realización de operaciones lógicas, matemáticas...
- Toma de decisiones if, else, elif ...
- Realización de ciclos, simples y anidados.
- Aplicación de vectores 
- Utilización de funciones definidas por el sistema
- Utilización de subprogramas.

5.¿Puede ejecutarse un subprograma solo?
No. Todo subprograma debe ser llamado desde otra parte del programa y ningún subprograma se ejecutará sin que exista un programa principal que desencadene su utilización.

6. ¿Cuántas veces puedo utilizar un subprograma?
Un subprograma puede ser utilizado las veces que se desee, no hay limites. Pero si se aplica una llamada recursiva, es decir, un programa que se llama a si mismo n veces puede saturar la memoria del computador y bloquear el programa que se esta ejecutando.

7. ¿Que pasa cuando en dos subprogramas se definen variables con el mismo nombre?
Al estar en subprogramas diferentes, no les sucede nada, dado que cada subprograma genera una capsula que la convierte en independiente de los demás e incluso independiente del programa principal.


Ejemplo 1Construir un subprograma que genera una información y es invocado desde el programa principal. 


Ejemplo 2 Construir un subprograma que dados dos catetos, calcule el valor de la hipotenusa a la cual pertenecen. Utilizar dicho subprograma para calcular la hipotenusa de unos catetos leídos por el teclado. 


Ejemplo 3 Crear un sistema que realiza las operaciones básicas entre dos valores decimales aplicando el concepto de subprograma para cada una de las operaciones y del menú principal. 

Algunos gráficos :
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” .









Explicación de Subprogramas en estos vídeos :



Mira éste otro vídeo :

No hay comentarios:

Publicar un comentario