• No se han encontrado resultados

Introducción a los subalgoritmos o subprogramas

N/A
N/A
Protected

Academic year: 2021

Share "Introducción a los subalgoritmos o subprogramas"

Copied!
31
0
0

Texto completo

(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” .

(2)

Introducción a los subalgoritmos o subprogramas

Se dice que el programa principal invoca al subprograma, el

subprograma ejecuta la tarea y luego devuelve el control al

programa.

(3)

Introducción a los subalgoritmos o subprogramas

• Un programa puede llamar a su ves a sus

propios subprogramas

(4)

Funciones y Procedimientos: Subprogramas

Pascal ofrece dos herramientas básicas

Los procedimientos (procedure)

Las funciones (function)

Turbo pascal incorpora además el concepto

de unidad (unit), que permite aprovechar

(5)

COMUNICACIÓN CON SUBPROGRAMAS: Parámetros

La lista de parámetros esta compuesta de los nombres de

los mismos y del tipo de datos que representan, los del

mismo tipo se separan con comas "

," y cada tipo diferente

se separa con punto y coma "

;".

Procedure Ejemplo(a, b : Integer; c, d : String);

Para llamar a un procedimiento que utiliza parámetros se

pueden utilizar como tales otras variables o constantes,

siempre y cuando sean del mismo tipo que los declarados.

(6)

Funciones y Procedimientos: Subprogramas

Los parámetros

• Son canales de comunicación para pasar datos ente programas y subprogramas en ambos sentidos.

• Estan asociados a variables. constantes, expresiones, etc., y por tanto, se indican mediante los correspondientes identificadores o expresiones.

• Se utilizan en la llamada o invocación al subprograma se denominan parámetros actuales, reales o argumentos, y son los que entregan la información al subprograma.

• Los parámetros que la reciben en el subprograma se denominan parámetros formales o ficticios y se declaran en la cabecera del subprograma.

• Los parámetros son opcionales y si no se necesitan no se deben usar. Para utilizarlos es necesario declararlos: PROCEDURE nombre (lista de parámetros);

• En una llamada a un subprograma tiene que verificarse que: – El número de parámetros formales debe ser igual al de actuales.

– Los parámetros que ocupen el mismo orden en cada una de las Listas deben ser compatibles en tipo.

(7)

Ej. Programa que use parametros ..

PROGRAM Parametros;

VAR

Saludo : String;

PROCEDURE Imprime_5 (a : String); VAR

Contador : Integer; BEGIN

FOR contador := 1 to 5 DO

{Imprime 5 veces la cadena almacenada } WriteLn(a);

{en la variable "a", que es la información} END;

{que llega como parámetro } BEGIN

Saludo := 'Bienvenidos al programa'; Imprime_5 (Saludo);

{llama al procedimiento Imprime_5, usando como} {parámetro la variable Saludo }

Imprime_5 ('Fin');

{Utiliza la cadena "fin" como parámetro } END.

(8)

Creación de los procedimientos

1.- Que debe hacer el procedimiento

2.- Declaramos el procedimiento, despues de haber declarado variables y constantes, antes del cuerpo del programa principal.

PROCEDURE Titulo;

BEGIN

WriteLn ('Programa de Turbo Pascal');

END;

(9)

Uso de los procedimientos

Una vez declarado el procedimiento es posible utilizarlo como una instrucción de Turbo Pascal. Al uso de un procedimiento se le conoce como llamada al procedimiento.

PROGRAM Procedimientos; PROCEDURE Titulo; BEGIN

WriteLn ('Programa de Turbo Pascal'); END;

BEGIN

WriteLn ('Programa ejemplo del uso de procedimientos'); Titulo;

{Llama al procedimiento} WriteLn;

Titulo;

{Vuelve a llamar al procedimiento} END;

(10)

Variables locales y globales

En Pascal cada

identificador tiene un campo de acción, solo dentro de éste campo es posible utilizarlo. Ej.: Las

variables, que pueden ser globales o locales.

PROGRAM Variables; VAR Hola : String; PROCEDURE prueba; VAR Adios : String; BEGIN

{En esta sección si es posible usar la variable Hola} Adios := 'Adios, que les vaya bien';

WriteLn (Adios); END;

BEGIN

{En esta sección no se reconoce a la variable Adios} Hola := 'Hola, bienvenidos al programa';

WriteLn (Hola); WriteLn (Adios);

{Al compilar el programa se generará un error ya} prueba;

(11)

ÁMBITO: VARIABLES LOCALES Y GLOBALES

Las variables utilizadas en los principales y subprogramas se clasifican en dos tipos:

· Variables locales. · Variables globales.

Una variable local es aquella que está declarada y definida dentro de un subprograma, en el sentido de que está dentro de ese subprograma y es distinta de las variables con el mismo nombre declaradas en cualquier parte del programa principal. El significado de una variable se confina al

procedimiento en el que está declarada.

Una variable global es aquellas que está declarada para el programa o algoritmo principal, del que dependen todos los subprogramas.

La parte del programa/algoritmo en que una variable se define se conoce como

ámbito (scope, en inglés)

Ventajas de variables locales: Hace a los subprogramas independientes, con la comunicación entre el programa principal y los subprogramas manipulados estructuralmente a través de la lista de parámetros.

(12)
(13)
(14)

Variables locales y globales

Es posible darle el mismo nombre a una variable local y a una global en el mismo programa, pero entonces el procedimiento no podrá utilizar la

variable global ya que le da preferencia a las locales sobre las globales. PROGRAM Variables_2; VAR Saludo : String; PROCEDURE Mensaje; VAR Saludo : String; BEGIN

Saludo := 'Este mensaje solo es válido para el procedimiento "Mensaje"';

WriteLn('Saludo'); END;

BEGIN

Saludo := 'Primer saludo (Global)'; WriteLn (Saludo);

Mensaje;

WriteLn (Saludo); {Se escribirá el mensaje "Primer saludo"}

(15)

Definición de las funciones

Las funciones son, al igual que los procedimientos, un conjunto de sentencias que se ejecutan constantemente, la diferencia entre éstas y los

procedimientos es que las funciones regresan un valor.

FUNCTION nombre(parámetros) : tipo_de_datos;

FUNCTION Promedio (a, b : Real) : Real; {Promedio de dos números reales} BEGIN

Promedio := (a + b) / 2; END;

(16)

Uso de las funciones

Como las funciones devuelven un valor específico la forma más usual de utilizarlas es por medio de asignaciones de una variable a la

función.

PROGRAM Funciones; VAR

X, Y, Z : Real;

FUNCTION Promedio (a, b : Real) : Real; {Promedio de dos números reales}

BEGIN Promedio := (a + b) / 2; END; BEGIN X := 5.89; Y := 9.23; Z := Promedio (X, Y);

{Iguala Z al valor devuelto por la función Promedio}

WriteLn('El promedio de ',X,' y ',Y,' es: ',Z);

(17)

Procedimieto HALT

El procedimiento HALT ya se habia revisado anteriormente, pero se tomó como una instrucción, siendo que es realmente un procedimiento

predefinido de Turbo Pascal que nos permite terminar nuestro programa en cualquier punto del mismo.

El procedimiento EXIT provoca la salida del procedimiento que se está ejecutando y nos regresa al lugar de donde fue llamado.

Procedimientos INC y DEC

El procedimiento INC incrementa en 1 el contenido de cualquier variable de tipo entero, es lo mismo en un programa teclear:

Variable := Variable + 1;

o telcear:

Inc(Variable);

El procedimiento DEC decrementa en 1 el valor de cualquier variable de tipo entero que se le indique, se usa igual que INC:

(18)

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 en forma de lista de parámetros.

3. El procedimiento se declara igual que la función, pero su nombre no está asociado a ninguno de los resultados que obtiene.

(19)

Programacion Estructurada

• Los avances tecnológicos no necesariamente están acompañados por

una evolución en las técnicas de

construcción de programas.

• Se requieren programas mas complejos y de gran tamaño.

Diseño Descendente o Diseño Top-Down

• Las técnicas de desarrollo y diseño de programas, que se utilizan en la

programación convencional o lineal, tienen inconvenientes, sobre todo a

la hora de verificar y modificar programas.

• Técnicas que facilitan la la comprensión del programa:

Programación

estructurada

• Pioneros de esta metodología: Dijkstra, Warnier, Jackson, Chapin y

Bertini; y de los Lenguajes de Programación Estructurada Niklaus Wirth,

Dennis Ritchie y Kenneth Thompson.

Estructura: Es la descomposición ordenada de las partes de un todo.

Conjunto de elementos interrelacionados que forman un todo.

Programación Estructurada: Consiste en el diseño, escritura y prueba

de un programa, construido con estructura, o sea con una organización

ordenada del todo en partes interdependientes.

(20)

Herramientas. Estructuras Básicas. Figuras Lógicas.

Teorema de la Estructura

Aporte de BOHN y JACOPINI (1966). Matemáticamente todo problema puede resolverse con tres figuras lógicas (secuencia, alternativa y repetitiva o iterativa).

La programación estructurada se consigue mediante la descomposición en partes, segmentos, rutinas o subproblemas interdependientes; que pueden ser considerados como las unidades razonablemente pequeñas, que deben representar por si mismas un contenido lógico, coherente y completo.

Esta segmentación debe realizarse de lo general a lo particular, organizando por niveles con grado de detalle creciente, hasta lograr que todos los

tratamientos hayan sido explícitamente considerados.

Esto se puede esquematizar de distintas maneras (conjuntos, segmentos, llaves).

Este procedimiento recibe el nombre de refinamiento paso a paso, el lema didáctico es: “divide y será fácil”.

(21)

Figuras lógicas

Secuencia: Entre dos funciones cualesquiera debe haber conexión y continuidad. Las acciones se ejecutan una a continuación de otra, sin posibilidad de omitir ni repetir ningún paso.

F1 F2

Alternativa o Decisión: Las acciones se ejecutan en función de una determinada condición que nos determina cual de los caminos de ejecución hay que seguir

P Verdadero Falso F1 F2 P Verdadero F1 Falso E s t r u c t u r a condicional simple. Se evalúa la condición P , y solo si es cier ta, se ejecuta el conjunto de acciones F1. E s t r u c t u r a condicional doble. Se evalúa la condición P , y d e p e n d i e n d o d e l a c e r t e z a o f a l s e d a d d e l a m i s m a s e e j e c u t a n e l c o n j u n t o de acciones F1 o F2.

Repetición o Iteración: Representará acciones que se repiten un número de veces. Es la estructura de bucle, que finaliza cuando se cumple una determinada condición, o cuando hemos ejecutado el bloque de acciones tantas veces como nos pedía el

problema. Existen dos posibles estructuras repetitivas: hacer hasta y hacer mientras.

P F1 Falso Verdadero Falso P F1 Verdadero

(22)

Teorema de la Estructura

Se basa en el concepto de diagrama o programa

propio, el mismo consiste en que toda estructura

tenga un solo punto de entrada y un solo punto

de salida.

Un diagrama es estructurado si tiene únicamente

como figuras lógicas: secuencia, capacidad de

decisión y capacidad de repetición; y si además

está construido con estructura.

(23)

Recursos abstractos. Idear un programa en estos términos supone descomponer una

tarea compleja en acciones mas simples y supone que las partes resultantes ya están resueltas, debiendo postergarse su realización para la etapa siguiente de

refinamiento. Dicho de otra manera se debe abstraer del como se va a resolver una determinada rutina (se supone ya resuelto), debiendo concretarse en el próximo paso.

Diseño Descendente (top-down). Este diseño supone un razonamiento en la forma de

enfocar la resolución de un problema, el cual consiste en la descomposición o particiones del problema de arriba hacia abajo en forma analítico deductivo,

avanzando de lo general a lo particular, organizando por niveles con grado de detalle creciente, hasta lograr que todos los tratamientos hayan sido explícitamente

considerados.

• Ej.: Descuentos en un factura

DESCUENTO DESCUENTO ES MAYORISTA? SI NO DESCUENTO 15% DESCUENTO 5%

(24)

Métodos

Con la filosofía de la programación estructurada distintos autores han desarrollados trabajos que varían unos de otros en el método, pero todos tienen como bases los conceptos teóricos de Dijkstra.

Método Jackson. La filosofía del mismo tiene características comunes con la programación

estructurada. Las estructuras básicas se llaman diagramas de bloques y se representan con los símbolo. La representación de la secuencia de acciones se hace en forma de árbol, leyéndose de izquierda a derecha a un mismo nivel.

º *

SECUENCIAL ALTERNATIVA REPETITIVA

PROGRAMA PROCESO INICIO FIN * FIN DE ARCHIVO TOTALES IMPRIME TOTALES CALCULO CARGAS FAMILIARES CALCULO HORAS EXTRAS

(25)

Método Bertini

En esta metodología las estructuras básicas se representan con los siguientes símbolos. Estas estructuras forman los que se denominan árboles programáticos, donde cada nivel es, como en otros modelos, los refinamientos que se van realizando.

SECUENCIAL ALTERNATIVA REPETITIVA

PROGRAMA INICIO PROGRAMA PARA CADA EMPLEADO FIN

HORAS EXTRAS CARGA FAMILIA

(26)

Método Warnier

Una de las características de esta manera de hacer programas estructurados consiste en la representación por medio de lo que se denomina cuadro de descomposición en secuencias, forma gráfica que utiliza llaves para representar los niveles de

descomposición del problema.

Las estructuras básicas de esta metodología son las siguientes:

Secuencia: acciones especificadas que no son ni repeticiones ni alternativas. La

secuencia de acciones es de arriba hacia abajo en el cuadro de descomposición de secuencia

Repetitiva: En esta estructura, entre paréntesis se escribe el número de veces que

se repite PRINCIPIO (1 vez) TRATAMIENTO (t veces) FINAL (1 vez) REPETITIVA PRINCIPIO (1 vez) TRATAMIENTO A (0, 1 vez) TRATAMIENTO B (1, 0 vez) FINAL (1 vez) ALTERNATIVA

(27)

Método Warnier

INICIO

(1 vez)

PROCESO EMPLEADO

(E veces)

FIN

(1 vez)

PROGRAMA

CARGA FAMILIA

(1 vez)

HORAS EXTRAS

(1 vez)

IMPRIME TOTAL EMPLEADOS

(1 vez)

(28)

Comparación con programación tradicional

(29)

Ventajas

Mejor comprensión del problema: se avanza de lo general a lo particular, segmentando en partes interrelacionadas. Todo programa estructurado puede ser leído desde el principio al fin, sin

interrupciones, en la secuencia normal de lectura. Mejor clarificación del problema.

Amortigua la lógica individual: tiende a la construcción lógica normalizada, amortiguando la lógica individual que en principiantes alcanza altos niveles, y después se arraigan en los programadores provocando dificultades en la transferencia del mantenimiento de programas.

Facilita el trabajo en equipo: Las distintas partes o subprogramas pueden encomendarse a distintas personas. Un programa puede hacerse entre varias personas.

Propende a la formación de la biblioteca propia: Puesto que muchas de estas rutinas pueden constituir procesos comunes a otras aplicaciones, con lo que se ahorra tiempo de programación. • Facilita la prueba: Ya que ésta se realiza sobre partes razonablemente pequeñas, lo que hace mas

fácil identificar los errores. Se realiza un claro seguimiento del problema.

Facilita la legibilidad de la documentación: Por ende permite una fácil transferencia de la

aplicación entre distintos programadores, evitando así los dueños de programas, solo lo entienden los que lo hicieron. El mismo diagrama sirve para documentar.

Facilita la optimización, el mantenimiento y las modificaciones: Como está compuesto por partes razonablemente pequeñas, rápidamente individualizables, es más fácil depurar, mantener o modificar las mismas. Las modificaciones afectan solamente algunas partes.

(30)

Ventajas

Se cometen menos errores: Por la misma naturaleza del método, que divide en partes al problema, y cada

una de esas partes tienen menos instrucciones que el diagrama hecho en forma convencional. La demostración teórica es la siguiente : e = k * n2 (1)

Donde :

e: cantidad de errores que se cometen en un programa

k: factor de proporcionalidad que depende de la experiencia del programador n: número de instrucciones del programa

O sea la cantidad de errores es directamente proporcional al cuadrado del número de instrucciones y a la experiencia del programador.

Supongamos que el programa de n instrucciones lo dividimos en dos subprogramas de n1 y n2 instrucciones respectivamente, donde n ≅ n1 + n2 y en el que la cantidad de errores de cada subprograma es:

e1 = k * n12; e2 = k * n22

Si sumamos: et = e1 + e2 = k (n12 + n22) (2) Si en la fórmula (1) reemplazamos n por su equivalente n1 + n2, se obtiene:

e = k (n1 + n2)2 = k (n12 + n22 + 2 n1 n2) = k (n12 + n22) + k 2 n1 n2 (3) Si restamos al error del programa e (3), el error de los subprogramas et (2), se tiene:

  

 = e - et = k 2 n1 n2

Donde  es la cantidad mayor de errores que se cometen en la programación tradicional respecto de la estructurada.

Esta deducción nos dice que cuando mayor sea la cantidad de subprogramas en que se divide un programa tradicional, mayor será la diferencia .

(31)

Inconvenientes

• El inconveniente que presenta el método es que

necesita mayor tiempo de ejecución en máquina

que uno realizado en forma convencional ( por

las idas y venidas a las subrutinas) y

probablemente mas instrucciones.

• Pero esta desventaja se relativiza actualmente

debido a la gran capacidad de memoria y

Referencias

Documento similar

"No porque las dos, que vinieron de Valencia, no merecieran ese favor, pues eran entrambas de tan grande espíritu […] La razón porque no vió Coronas para ellas, sería

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

Tras establecer un programa de trabajo (en el que se fijaban pre- visiones para las reuniones que se pretendían celebrar los posteriores 10 de julio —actual papel de los

En cuarto lugar, se establecen unos medios para la actuación de re- fuerzo de la Cohesión (conducción y coordinación de las políticas eco- nómicas nacionales, políticas y acciones

En el capítulo de desventajas o posibles inconvenientes que ofrece la forma del Organismo autónomo figura la rigidez de su régimen jurídico, absorbentemente de Derecho público por

D) El equipamiento constitucional para la recepción de las Comisiones Reguladoras: a) La estructura de la administración nacional, b) La su- prema autoridad administrativa

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación