Vous êtes sur la page 1sur 56

Tema 1.

Programacin Estructurada
1.1 Objetivo de la programacin
El objetivo principal de la programacin es utilizar la computadora como una herramienta para la resolucin de problemas.
Computadora (ordenador, en la jerga informtica usual en Espaa): Dispositivo que acepta datos, que permite
procesarlos de acuerdo con un programa almacenado y que genera unos resultados.
Datos: Representacin formalizada de hechos, conceptos, caractersticas, etc., que son susceptibles de ser
comunicados, interpretados o procesados por medios humanos o automticos.
Informacin: Significado que el hombre asigna a los datos por medio de las convenciones utilizadas en su
representacin. Informacin = datos procesados y organizados.
Procesamiento de datos (de informacin): Realizacin sistemtica de operaciones (clculos, ordenaciones, etc.)
sobre los datos con el fin de obtener informacin organizada, significativa y til.
Sistema (de procesamiento de datos, SPD): Conjunto organizado de recursos humanos, de equipamiento, etc., que
interaccionan con el fin de cumplir un conjunto de funciones especficas (procesamiento de datos).
Programa (de computadora): Secuencia de instrucciones, cada una de las cuales especifica las operaciones que
debe realizar la computadora para la resolucin de un problema.
Lenguaje de programacin: Lenguaje artificial que se utiliza para expresar programas de computadora. Cada
computadora, segn su diseo, "entiende" un cierto conjunto de instrucciones elementales (lenguaje mquina). No
obstante, para facilitar la tarea del programador, se dispone tambin de lenguajes de alto nivel ms fciles de
manejar y que no dependen del diseo especfico de cada computadora. Los programas escritos en un lenguaje de
alto nivel no podrn ser ejecutados por una computadora mientras no sean traducidos al lenguaje propio de sta.
Pg. 1

La resolucin de un problema (mediante una computadora) se refiere al proceso consistente en partir de la descripcin de
un problema (habitualmente en lenguaje natural, y expresada en trminos propios del dominio del problema) y desarrollar un
programa de computadora que resuelva dicho problema. Este proceso exige los siguientes pasos:

Anlisis del problema.


Diseo o desarrollo de un algoritmo.
Transformacin del algoritmo en un programa (codificacin).
Ejecucin y validacin del programa.

Nos centraremos en los dos primeros pasos, que son los ms difciles del proceso. Una vez analizado el problema y obtenido
un algoritmo que lo resuelve, su transformacin a un programa de computadora es una tarea de mera traduccin.

1.2 Concepto de algoritmo


Algoritmo: Conjunto de instrucciones que especifican la secuencia ordenada de operaciones a realizar para
resolver un problema. En otras palabras, un algoritmo es un mtodo o frmula para la resolucin de un problema.
Conviene destacar que un algoritmo es independiente tanto del lenguaje de programacin en que se exprese como de la
computadora en la que se ejecute. De hecho, el trmino algoritmo es muy anterior a la era informtica: proviene de
Mohammed al-Khowrizm (su apellido se tradujo al latn en la palabra algoritmus), matemtico persa del siglo IX que
enunci paso a paso las reglas para sumar, restar, multiplicar y dividir nmeros decimales.
Ejemplo: Una receta de cocina (especificada de forma precisa y sin decisiones subjetivas) puede ser considerada un
algoritmo: indica los pasos a realizar para resolver el problema (cocinar un plato) y es independiente tanto del idioma en que
se escriba como del cocinero que la ejecute. Lo mismo ocurre con una partitura y un pianista.

Pg. 2

Las principales caractersticas que debe tener un algoritmo son:


Debe ser comprensible y preciso (sin ambigedades), e indicar el orden de realizacin de cada paso.
Debe ser predecible. Si se aplica partiendo de la misma situacin inicial, debe obtenerse siempre el mismo resultado.
Debe ser finito. El algoritmo debe terminar en algn momento (debe tener un nmero finito de pasos).

1.3 Procesos, acciones y estados


Proceso: Conjunto de acontecimientos organizados en el tiempo y concebido como activo.
En nuestro contexto informtico, descubrir un proceso es interpretar un acontecimiento como un conjunto de acciones ms
elementales cuyo efecto acumulativo es el mismo que el producido por el acontecimiento completo.
Accin: Acontecimiento producido por un "actor". Nos interesarn solamente aquellos acontecimientos que tienen
lugar durante un perodo de tiempo finito y producen un resultado bien definido y previsible.
El hecho de que una accin dure un tiempo finito significa que es posible hallar un instante de inicio de la accin (t0) y un
instante de finalizacin de la accin (t1). Para que sea posible reconocer el resultado es preciso observar en el sistema una
serie de atributos o caractersticas (en definitiva informacin, ya que tienen asociado un significado) que cambien su valor
en ese intervalo de tiempo.
Estado (de un sistema para un proceso determinado) en un instante dado t: Conjunto de los valores de los distintos
atributos o caractersticas de inters en el instante t del desarrollo del proceso.
El estado en el instante t0 de una accin define los datos de la accin, mientras que el estado en el instante t1 define los
resultados de la accin (o tambin datos de entrada y datos de salida, respectivamente).

Pg. 3

Por otra parte, el hecho de que el resultado de la accin sea previsible significa que si se conoce el estado del sistema en el
instante t0 entonces se puede decir con total precisin cual ser el estado en el instante t1, incluso antes de que la accin en
cuestin se produzca.
Ejemplo: Mquina capaz de trazar rectas con un lapicero.
Se dispone de una mquina que traza rectas con un lapicero. Una vez que la mquina comienza a funcionar se est en las
siguientes condiciones:
El lapicero se sita en la esquina inferior izquierda del papel. Se supone que el papel es una cuadrcula de 200x200 puntos
que se pueden referenciar mediante un par de valores (x, y), donde x es la coordenada horizontal e y la coordenada vertical.
El origen de coordenadas (0,0) se sita en la esquina inferior izquierda del papel.
El lapicero inicialmente no toca el papel (por lo que al desplazar el mismo no dibuja).
La direccin de desplazamiento inicial es la horizontal y en sentido creciente. La direccin y el sentido vienen definidas por un
ngulo, por ejemplo: 0 indica direccin x con sentido +, 90 (-270) indica direccin y con sentido +, 180 (-180) direccin x
con sentido -, 270 (-90) direccin y con sentido -. El signo del ngulo determina el sentido de giro: + si es en sentido
antihorario y si es en sentido horario.
El estado de un sistema puede representarse mediante un conjunto de atributos o indicadores (conjunto de datos/informaciones).
Por ejemplo, el estado inicial de este sistema puede representarse as:
DATOS

INFORMACIN

[ N, (0,0), 0 ]
Direccin y sentido de desplazamiento
Posicin del lapicero.
El lapicero toca o no el papel (Puede ser S o N)

Pg. 4

Por otra parte el estado puede modificarse con un conjunto de acciones bsicas, descritas a continuacin en lenguaje natural:

Hacer que la mquina vuelva al estado inicial.


Colocar el lapicero de forma que toque el papel y por lo tanto pueda dibujar.
Levantar el lapicero de forma que no toque el papel y por lo tanto no dibuje.
Cambiar la direccin y/o sentido de trazado actual en un ngulo cualquiera.
Desplazar el lapicero en la direccin y sentido actual en un nmero de unidades cualquiera.

Problema 1: Dibujar con este dispositivo un cuadrado de lado 20 puntos.


ACCIN

ESTADO
[ N, (0,0), 0 ]

1. Colocar el lapicero de forma que toque el papel y pueda dibujarse.


[ S, (0,0), 0 ]
2. Desplazar el lapicero 20 unidades.
[ S, (20,0), 0 ]
3. Cambiar la direccin de trazado en un ngulo de 90.
[ S, (20,0), 90 ]
4. Desplazar el lapicero 20 unidades.
[ S, (20,20), 90 ]
5. Cambiar la direccin de trazado en un ngulo de 90.
[ S, (20,20), 180 ]
6. Desplazar el lapicero 20 unidades.
[ S, (0,20), 180 ]
7. Cambiar la direccin de trazado en un ngulo de 90.
[ S, (0,20), 270 ]
8. Desplazar el lapicero 20 unidades.
[ S, (0,0), 270 ]

Pg. 5

Volviendo a la definicin de proceso dada anteriormente, podemos hacer dos observaciones:


Si las acciones realizadas en dos procesos son distintas entonces parece evidente que los procesos sern distintos.
Ahora bien, qu ocurre cuando los procesos tienen las mismas acciones organizadas en el tiempo y la nica diferencia
reside en el nmero de ejecuciones de cada accin (cada accin puede realizarse 0, 1 o ms veces)? Desde el punto de
vista de la programacin ste es el caso ms interesante, ya que en ello consiste el objetivo de la programacin: la
descripcin de estos procesos en un nico texto. Esto ser posible mediante la notacin algortmica, que permite
expresar el nmero de ejecuciones de una accin en funcin de los datos observados.
En la prctica no nos interesar unificar procesos que resuelven diferentes problemas. Dado un problema concreto y una vez
establecido un planteamiento de resolucin del mismo, lo que nos interesa es unificar los procesos que resuelven los
distintos casos.
El concepto de proceso es as esencial en la realizacin de algoritmos, ya que nos permitir organizar el trabajo de
programacin (descripcin de procesos diferentes en un nico texto) en dos fases bien diferenciadas:
1) Una primera de descomposicin de un proceso en trminos de acciones ms elementales.
2) Una segunda de composicin de acciones de forma que expresen en un nico texto procesos aparentemente
distintos o procesos en los que las acciones puestas en juego sean las mismas y la diferencia radique en el nmero de
veces en que se realiza cada accin.

Pg. 6

Problema 2: Dibujar un cuadrado de lado 20 puntos de forma que su esquina inferior izquierda est en la posicin (90,90).
ACCION

ESTADO
[ N, (0,0), 0 ]

1. Desplazar el lapicero 90 unidades.


[ N, (90,0), 0]
2. Cambiar la direccin de trazado en un ngulo de 90.
[ N, (90,0), 90]
3. Desplazar el lapicero 90 unidades.
[ N, (90,90), 90]
4. Cambiar la direccin de trazado en un ngulo de 90.
[ N, (90,90), 0]
5. Colocar el lapicero de forma que toque el papel y pueda dibujarse.
[ S, (90,90), 0 ]
6. Desplazar el lapicero 20 unidades.
[ S, (110,90), 0 ]
7. Cambiar la direccin de trazado en un ngulo de 90.
[ S, (110,90), 90 ]
8. Desplazar el lapicero 20 unidades.
[ S, (110,110), 90 ]
9. Cambiar la direccin de trazado en un ngulo de 90.
[ S, (110,110), 180 ]
10. Desplazar el lapicero 20 unidades.
[ S, (90,110), 180 ]
11. Cambiar la direccin de trazado en un ngulo de 90.
[ S, (90,110), 270 ]
12. Desplazar el lapicero 20 unidades.
[ S, (90,90), 270 ]

Pg. 7

Si comparamos los procesos descritos en los problemas 1 y 2 considerando que las acciones pueden realizarse 0, 1 o ms veces
se tiene:
PROCESO 1

PROCESO 2

- Cambiar la direccin de trazado en un


ngulo de 90.

- Cambiar la direccin de trazado en un


ngulo de 90.

- Desplazar el lapicero 90 unidades.

- Desplazar el lapicero 90 unidades.

- Cambiar la direccin de trazado en un


ngulo de 90.

- Cambiar la direccin de trazado en un


ngulo de 90.

- Colocar el lapicero de forma que toque


el papel y pueda dibujarse.

- Colocar el lapicero de forma que toque el


papel y pueda dibujarse.

- Desplazar el lapicero 20 unidades.

- Desplazar el lapicero 20 unidades.

- Cambiar la direccin de trazado en un


ngulo de 90.

- Cambiar la direccin de trazado en un


ngulo de 90.
- Desplazar el lapicero 20 unidades.
- Cambiar la direccin de trazado en un
ngulo de 90.

- Desplazar el lapicero 20 unidades.

- Desplazar el lapicero 20 unidades.

- Cambiar la direccin de trazado en un


ngulo de 90.

- Cambiar la direccin de trazado en un


ngulo de 90.

- Desplazar el lapicero 20 unidades.

- Desplazar el lapicero 20 unidades.

1 vez

- Cambiar la direccin de trazado en un


ngulo de 90.

1 vez

- Desplazar el lapicero 20 unidades.

1 vez

- Desplazar el lapicero 90 unidades.


0 veces

- Desplazar el lapicero 90 unidades.

Pg. 8

Si adems se dispone de una notacin que permite controlar el nmero de ejecuciones de una accin, procesos aparentemente
distintos se pueden escribir en un nico texto ms general (aplicable a ms procesos). Por ejemplo, un problema ms general
sera dibujar un cuadrado de lado 20 bien en la posicin (0,0) bien en la posicin (90,90). El nmero de ejecuciones de una accin
depender de algn indicador o dato. En los ejemplos anteriores se puede suponer la existencia de una informacin adicional
denominada posicionar que puede tomar valores S o N, de forma que las acciones que tienen que ver con el posicionamiento
se realicen si el valor que toma es S y no se realicen si el valor que toma es N.
PROCESO
- Cambiar la direccin de trazado en un
ngulo de 90.
- Desplazar el lapicero 90 unidades.
-

Cambiar la direccin de trazado en un


ngulo de 90.

0-1 vez
dependiendo de
posicionar

- Desplazar el lapicero 90 unidades.

- Colocar el lapicero de forma que toque


el papel y pueda dibujarse.
- Desplazar el lapicero 20 unidades.
- Cambiar la direccin de trazado en un
ngulo de 90.
- Cambiar la direccin de trazado en un
ngulo de 90.

1 vez

- Desplazar el lapicero 20 unidades.

- Desplazar el lapicero 20 unidades.


- Cambiar la direccin de trazado en un
ngulo de 90.
- Desplazar el lapicero 20 unidades.

Pg. 9

Si adems la notacin permite manipular informaciones, pueden representarse todava procesos ms generales. Podramos
describir el proceso de dibujar un cuadrado de cualquier lado L, pudindose posicionar la esquina inferior izquierda del mismo, si
as se pidiera, en una posicin (X, Y) de la hoja. En este caso, L, "posicionar", X e Y seran datos de entrada.
PROCESO
- Cambiar la direccin de trazado en un
ngulo de 90.
- Desplazar el lapicero Y unidades.
- Cambiar la direccin de trazado en un
ngulo de 90.

0-1 vez
dependiendo de
posicionar

- Desplazar el lapicero X unidades.

- Colocar el lapicero de forma que toque


el papel y pueda dibujarse.
- Desplazar el lapicero L unidades.
- Cambiar la direccin de trazado en un
ngulo de 90.
- Cambiar la direccin de trazado en un
ngulo de 90.

1 vez

- Desplazar el lapicero L unidades.

- Desplazar el lapicero L unidades.


- Cambiar la direccin de trazado en un
ngulo de 90.
- Desplazar el lapicero L unidades.

Pg. 10

Por ltimo, si aadimos la accin Cambiar la direccin de trazado en un ngulo de 90. al final del proceso se conseguira el
mismo resultado que en los casos anteriores con la salvedad de finalizar en un estado diferente: en lugar de ser la direccin final de
trazado 270, ahora se finalizara en una direccin igual a 360 (=0). Con este cambio se puede obtener una descripcin an ms
breve que las anteriores:
PROCESO
- Cambiar la direccin de trazado en un
ngulo de 90.
- Desplazar el lapicero Y unidades.
- Cambiar la direccin de trazado en un
ngulo de 90.

0-1 vez
dependiendo de
posicionar

- Desplazar el lapicero X unidades.

- Colocar el lapicero de forma que toque


el papel y pueda dibujarse.

1 vez

- Desplazar el lapicero L unidades.

4 veces

- Cambiar la direccin de trazado en un


ngulo de 90.

Pg. 11

A la vista de este ejemplo, se identifican varios tipos de datos en un proceso:


Datos que deben ser aportados desde el exterior o datos de entrada. En el ejemplo la longitud del cuadrado.
Datos que son internos en el desarrollo del proceso pero que lo condicionan. En el ejemplo la posicin del lapicero, si
el lapicero toca o no el papel y la direccin de trazado son datos importantes para el desarrollo del proceso, pero no son
establecidos desde el exterior.
Datos que deben darse a conocer hacia el exterior: resultados o datos de salida. En el ejemplo no hay ningn dato de
salida, pero un posible ejemplo sera el rea del cuadrado si en el enunciado se pidiera calcular el rea del mismo.
Por qu es difcil programar? Porque requiere de la capacidad del programador de reconocer esquemas (representaciones
mentales reducidas a los rasgos esenciales de una entidad, por ejemplo atributos de un objeto, acciones de un proceso, etc.).
A la hora de programar ser pues esencial la capacidad de reconocer entre un conjunto de procesos o de informaciones las
grandes lneas comunes. Se deber hacer abstraccin, a un cierto nivel, de un conjunto de detalles que parecen diferenciar
dos procesos para poder descubrir de qu modo se parecen entre s.

1.4 Primitivas de control o composicin


Cmo es posible programar? Porque se dispone de una notacin algortmica que permite:
Describir las operaciones puestas en juego (acciones).
Describir los objetos manipulados por el algoritmo (datos/informaciones).
Controlar la realizacin de las acciones, indicando el modo de organizacin de estas acciones en el tiempo (mediante
las primitivas de composicin o de control).

Pg. 12

Debe subrayarse que la notacin algortmica no es en ningn caso un lenguaje de programacin. Lo esencial de la notacin
algortmica es que las acciones elegidas sean las necesarias y suficientes para expresar todo algoritmo. En este sentido,
autores como E. Dijkstra, C.A.R. Hoare y otros consolidaron a finales de los aos 60 los fundamentos de la Programacin
Estructurada, mediante la proposicin del uso de un conjunto de construcciones lgicas (secuencia, decisin e iteracin) con
las que se podra escribir cualquier programa.
A continuacin se introducen las acciones disponibles en la notacin algortmica, indicndose tanto una posible forma de
escribirlas como una interpretacin informal1 de las mismas.

1.4.1 Accin elemental: ejecucin de un acontecimiento elemental


Considerando que en ltima instancia es un ordenador la mquina que ejecutar las instrucciones de un programa, las
acciones elementales vendrn determinadas por las tareas que puede realizar una computadora. Bsicamente estas tareas son
las siguientes: realizar una serie de operaciones (aritmticas o lgicas) sobre unos operandos, posibilidad de obtener dichos
operandos a travs de un dispositivo de entrada o de la memoria de la computadora, y posibilidad de almacenar los
resultados de dichas operaciones en memoria o enviarlos hacia un dispositivo de salida.

1.4.2 Composicin secuencial: ejecucin incondicional de una secuencia de acciones


Cuando se deben ejecutar sucesivamente distintas acciones, se escribir la lista de dichas acciones en el orden en el que
deban ser ejecutadas. Las acciones se separarn por un punto y coma.
<ACCIN1>;
<ACCIN2>;
...
<ACCINN>;
1

La interpretacin de cada accin tiene por objetivo definir de forma precisa el efecto de una accin, y se denomina especificacin de la accin.
La segunda parte de este tema abordar la especificacin de acciones introduciendo el formalismo adecuado.
Pg. 13

1.4.3 Composicin condicional: ejecucin condicional de una accin


La composicin condicional permite expresar que una cierta accin slo debe realizarse bajo una cierta condicin. La
escribiremos como sigue:
SI <CONDICIN >
ENTONCES <ACCIN>
FINSI
La ejecucin de esta accin provoca en primer lugar la observacin del estado del sistema para detectar si la condicin
indicada se satisface o no. Si se satisface, es decir, si la condicin tiene como resultado el valor verdadero (cierto), la accin
indicada se ejecuta a continuacin. Si por el contrario la condicin tiene por resultado el valor falso, la ejecucin de la
accin termina tras la evaluacin de dicha condicin.

1.4.4 Composicin alternativa: ejecucin alternativa de una entre dos acciones


La composicin alternativa permite expresar que debe ejecutarse una accin bajo cierta condicin u otra accin bajo la
condicin contraria. La escribiremos como sigue:
SI <CONDICIN >
ENTONCES <ACCIN1>
SINO <ACCIN 2>
FINSI
La ejecucin de esta accin provoca en primer lugar la evaluacin de la condicin indicada (es decir, la observacin del
estado del proceso). A la evaluacin de la condicin sigue la ejecucin de <ACCIN1> si se satisface la condicin (el
resultado de evaluar la condicin es verdadero) o bien la ejecucin de <ACCIN 2> si no se satisface la condicin (el
resultado de evaluar la condicin es falso).

Pg. 14

1.4.5 Composicin selectiva (exclusiva): ejecucin condicional de una entre varias acciones
La composicin selectiva permite, como las composiciones condicional y alternativa, vincular la ejecucin de una accin a
la observacin de una condicin. En el primer caso se vinculaba una condicin con una accin. En el segundo se asociaban
dos condiciones complementarias con dos acciones. En la composicin selectiva, se asocia un conjunto de acciones con un
conjunto de condiciones que se excluyen mutuamente. Esta accin la escribiremos en la notacin algortmica como sigue:
CASO <INDICADOR> SEA
<VALOR1>: <ACCIN 1>;
<VALOR2>: <ACCIN 2>;
...
<VALORN>: <ACCINN>;
[ENOTROCASO <ACCINX>]
FINCASO
Esta estructura se introduce para expresar de una forma cmoda las diversas condiciones y su relacin con cada una de las
acciones. La ejecucin de esta primitiva de control consiste en la ejecucin de aquella accin cuyo valor asociado coincida
con el valor observado del indicador que aparece en la primitiva. Debe subrayarse tambin que para que est bien construida
esta estructura debe ejecutarse una y slo una accin de entre todas las que se enumeran.
Observaciones:
Se requiere que el indicador tenga, en el momento de su evaluacin, un valor del conjunto enumerado en la
composicin.
Opcionalmente, se puede indicar una accin por defecto que se realizar en el caso de que el indicador tome un valor
distinto de los N valores explcitamente enumerados en la composicin.

Pg. 15

1.4.6 Composicin iterativa: ejecucin mltiple de una sola accin2


La composicin iterativa (en la forma MIENTRAS) permite expresar que se debe ejecutar una misma accin cero, una o ms
veces consecutivamente. La escribiremos as:
MIENTRAS <CONDICIN> HACER
<ACCIN>
FINMIENTRAS
El nmero de ejecuciones de la accin no se expresa directamente. De hecho, la condicin que aparece en la composicin
indica la observacin que debe hacerse para que contine la iteracin (condicin de permanencia).
La ejecucin de esta primitiva de control provoca la evaluacin de dicha condicin, que en caso de satisfacerse (dar como
resultado el valor verdadero) es seguida por la ejecucin de la accin, y as sucesivamente hasta que el resultado de la
evaluacin de la condicin de permanencia sea falso.
Existe una segunda forma de composicin iterativa, la forma REPETIR, que permite expresar la ejecucin de una accin una o
ms veces consecutivamente.
REPETIR
<ACCIN>
HASTA <CONDICIN>
Al igual que en la estructura MIENTRAS, el nmero de ejecuciones de la accin no se expresa directamente, pero a diferencia
de aqulla, la condicin que aparece en la composicin REPETIR indica la observacin que debe hacerse para que termine la
iteracin (condicin de salida).

Conviene aclarar que en la notacin algortmica cualquier composicin de acciones es a su vez una accin. As, por ejemplo, una composicin
secuencial de tres acciones (elementales) puede interpretarse como una sola accin (no elemental).
Pg. 16

La ejecucin de esta primitiva de control provoca la ejecucin de la accin, para a continuacin evaluar la condicin de
salida, y as sucesivamente hasta que el resultado de la condicin sea verdadero. Conviene recalcar que la accin indicada se
ejecuta como mnimo una vez.
Por ltimo, existe una tercera forma de composicin iterativa, la forma DESDE, que permite expresar la ejecucin de una
accin un nmero determinado de veces. Esta estructura se ver ms adelante.

1.4.7 Accin con nombre


La notacin algortmica nos permite incorporar nuevas acciones al repertorio. Para ello debemos proporcionar:
1) Un nuevo nombre para la accin.
2) Una especificacin de la accin (qu hace).
3) El cuerpo de la accin, es decir, el conjunto de acciones ms elementales que constituyen la accin.
De esta forma la notacin algortmica permite agrupar un conjunto de acciones e identificarlas mediante un nombre, de
manera que la aparicin de dicho nombre en un algoritmo provoca la ejecucin de todas las acciones contenidas en el cuerpo
de la accin con nombre. Este tipo de acciones se estudiarn en detalle en sucesivos temas.

1.5 Notaciones algortmicas


1.5.1 Diagrama de Flujo
Es una herramienta grfica de descripcin de algoritmos. Se caracteriza por utilizar un conjunto de smbolos grficos
normalizados y expresar de forma clara los posibles caminos de ejecucin de las acciones (secuencia, decisin e iteracin).
La representacin de un algoritmo mediante un diagrama de flujo se denomina ordinograma. En vez de caminos de
ejecucin se habla, con ms propiedad, del flujo de control u orden lgico en el que se realizan las acciones de un algoritmo.
El principal inconveniente que plantea el diagrama de flujo es que permite realizar cualquier tipo de construccin
algortmica, independientemente de que sta sea correcta o no desde el punto de vista de la programacin estructurada.
Pg. 17

1.5.2 Diagrama Nassi-Schneiderman


Los diagramas N-S son tambin un mtodo grfico para la descripcin de algoritmos. El smbolo bsico utilizado es el
rectngulo, por lo que tambin se los conoce como diagramas de cajas.
Presentan una serie de ventajas:
Dada su forma de construccin es imposible representar algoritmos incorrectos desde el punto de vista de la
programacin estructurada.
El mbito de cada estructura est perfectamente definido.
Y tambin una serie de inconvenientes:
Cada diagrama slo refleja la estructura de un nico mdulo.
No pueden modificarse fcilmente. Es necesario construirlos de nuevo, aunque sea para realizar pequeos cambios.

1.5.3 Pseudocdigo
El pseudocdigo es una notacin algortmica textual caracterizada por:
Permitir la declaracin de los datos (constantes y/o variables) manipulados por el algoritmo.
Disponer de un conjunto pequeo y completo 3 de palabras reservadas4 que permitan expresar: las acciones elementales,
las primitivas de composicin de acciones y la definicin de acciones con nombre.
3
4

La completitud se refiere a que debe ser suficiente para describir cualquier proceso que se quiera implementar sobre una computadora.
En pseudocdigo se dispone de un conjunto de palabras cuyo uso est RESERVADO, en el sentido de que no pueden utilizarse para otro fin
distinto para el que se indica (por ejemplo, un identificador no puede ser una palabra reservada).
Pg. 18

Un algoritmo descrito en pseudocdigo deber tener siempre la siguiente estructura (las palabras reservadas aparecen en
negrilla):
ALGORITMO <nombre_algoritmo>;
CONSTANTES
{ Seccin reservada para la declaracin de datos constantes utilizados por el algoritmo }
...
VARIABLES
{ Seccin reservada para la declaracin de datos variables utilizados por el algoritmo }
...
{ Se puede incluir tambin la definicin de acciones con nombre }
INICIO

{ Comienzo del cuerpo principal de acciones del algoritmo }

<ACCIN1>;
<ACCIN2>;
...
<ACCINN>;
FIN

{ Fin del cuerpo principal de acciones del algoritmo }

Pg. 19

1.5.4 Representacin de las estructuras de control en las distintas notaciones algortmicas.


Composicin secuencial

<ACCIN1>
<ACCIN1>
<ACCIN1>;
<ACCIN2>;
...
<ACCINN>;

<ACCIN2>

<ACCIN2>
...
<ACCINN>

<ACCINN>

PSEUDOCDIGO

DIAGRAMA DE FLUJO

DIAGRAMA N-S

Observacin: N debe ser un valor prefijado y finito, es decir, no se puede expresar un sinfn de acciones compuestas en
secuencia.

Pg. 20

Composicin condicional

V
SI <CONDICIN >
ENTONCES <ACCIN>
FINSI

PSEUDOCDIGO

<CONDICIN>
V

<ACCIN>

DIAGRAMA DE FLUJO

<CONDICIN>
F

<ACCIN> SEGUIR

DIAGRAMA N-S

Pg. 21

Composicin alternativa

V
SI <CONDICIN >
ENTONCES <ACCIN1>
SINO <ACCIN 2>
FINSI

PSEUDOCDIGO

<CONDICIN>

F
V

<ACCIN1>

<ACCIN2>

DIAGRAMA DE FLUJO

<CONDICIN>
F

<ACCIN1> <ACCIN 2>

DIAGRAMA N-S

Pg. 22

Composicin selectiva

CASO <INDICADOR > SEA


<VALOR 1>: <ACCIN 1>;
<VALOR 2>: <ACCIN 2>;
...
<VALOR N>: <ACCINN>;
[EN OTRO CASO <ACCIN X>]
FIN CASO
<VALOR1>

<ACCIN1>

PSEUDOCDIGO

<INDICADOR>
<VALOR1>

<A
1
<ACCIN
CCIN1>
>

<INDICADOR>
<VALOR2>

<ACCIN2>

<VALORN>

...

<VALORN>
...

<ACCINN>

ENOTRO CASO
<ACCINX>

ENOTRO CASO

<ACCINN> <ACCIN X>

DIAGRAMA DE FLUJO

DIAGRAMA N-S

Pg. 23

Composicin iterativa (MIENTRAS)

F
<CONDICIN>

MIENTRAS <CONDICIN> HACER


<ACCIN >
FIN MIENTRAS

MIENTRAS <CONDICIN > HACER

<ACCIN>

<ACCIN>

PSEUDOCDIGO

DIAGRAMA DE FLUJO

DIAGRAMA N-S

Observacin: La condicin expresada en el bucle MIENTRAS se denomina condicin de permanencia, ya que mientras se
satisface dicha condicin (su evaluacin produce el valor verdadero) se ejecuta el cuerpo del bucle.

Pg. 24

Composicin iterativa (REPETIR)

<ACCIN>
REPETIR
<ACCIN >
HASTA <CONDICIN >

<ACCIN>
<CONDICIN>

REPETIR HASTA <CONDICIN>

PSEUDOCDIGO

DIAGRAMA DE FLUJO

DIAGRAMA N-S

Observacin: La condicin expresada en el bucle REPETIR se denomina condicin de salida, ya que el cuerpo del bucle se
ejecuta hasta que dicha condicin NO se cumple (se sale del bucle cuando se cumple).

Pg. 25

1.6 Especificacin de algoritmos


Especificacin de un algoritmo/proceso/accin: Definicin precisa del efecto del algoritmo/proceso/accin.
Una posibilidad para especificar el significado de un objeto (proceso, algoritmo o accin) sera utilizar el lenguaje natural,
pero las definiciones de este tipo suelen incorporar ambigedades. Cuando se busca precisin es preferible utilizar
especificaciones formales, para lo cual existen mltiples mtodos. Uno de ellos es el de la semntica axiomtica.
Hemos visto que la ejecucin de una accin (no trivial) supone un cambio en el estado del sistema. Es natural, pues,
especificar un proceso describiendo la relacin entre el estado inicial y el estado final del mismo. La semntica axiomtica
consiste en formalizar esta relacin mediante el uso de predicados.

1.6.1 Proposiciones
Nuestra tarea consistir en describir el estado (conjunto de variables/atributos de inters) de un proceso. Comenzamos
considerando solamente variables (y expresiones) de tipo booleano: cada variable contiene uno de los valores V y F, que
representan nuestra nocin de "Verdadero" y "Falso", respectivamente.
Proposicin: Cualquier expresin a la que se le puede atribuir uno y slo uno de los valores en el conjunto {V,F}.
Por ejemplo, consideremos las siguientes expresiones (en forma de frases en lenguaje natural):
1)
2)
3)
4)
5)

El nmero 3 es mayor que el nmero 1.


Nunca llueve en Galicia.
La Tierra es plana.
Se debe conducir por la derecha.
El cubo de un nmero N es positivo.

Las tres primeras frases son proposiciones, mientras que las dos ltimas no, pues a veces son ciertas (verdaderas) y a veces
son falsas.
Pg. 26

Las proposiciones son similares a las expresiones aritmticas, en el sentido de que tambin hay operandos (V y F, en lugar
de nmeros), operadores (operadores lgicos en lugar de operadores aritmticos como la +, , , etc.) y parntesis para
ayudar a determinar el orden de evaluacin.

Operadores Lgicos
Se definen 5 operadores (conectores) lgicos sobre valores de tipo booleano:

Negacin: not, o bien .


Conjuncin: and, o bien .
Disyuncin: or, o bien .
Implicacin: implica, o bien .
Igualdad: igual, o bien = .

Estos operadores nos permitirn componer proposiciones de acuerdo con las siguientes reglas:
1) V y F son proposiciones.
2) Si b es una proposicin, entonces tambin lo es (b).
3) Si b y c son proposiciones, entonces tambin lo son (bc), (bc), (bc) y (b=c).
Se han utilizado parntesis alrededor de cada proposicin que incluye una operacin. Esto no es obligatorio, pero de esta
manera no tenemos que preocuparnos de las prioridades de los distintos operadores (que veremos ms adelante).

Evaluacin de Proposiciones Constantes


Proposicin constante: Proposicin que contiene solamente constantes (V y F) y operadores.
Para conocer el valor V o F tomado por una proposicin constante distinguimos tres casos: cuando la proposicin no tiene
operadores, cuando tiene un solo operador y cuando tiene ms de un operador.

Pg. 27

Caso 1. El valor de la proposicin V es V, y el de la proposicin F es F.


Caso 2. Los valores de (b), (bc), (bc), (bc) y (b=c), donde b y c son cada una de las constantes V y F, vienen
dados por la siguiente tabla (llamada tabla de verdad).
b

(b)

(bc)

(bc)

(bc)

(b=c)

Caso 3. El valor de una proposicin constante p con ms de un operador se calcula mediante la aplicacin reiterada del
caso 2 a una subproposicin de p, reemplazando la subproposicin por su valor, hasta que la proposicin queda
reducida a V o a F.
Ejercicio : Evaluar la proposicin ((VV)F).
Mediante una tabla de verdad podemos calcular el valor de una proposicin para todos los posibles valores de sus
operandos. Comenzamos la tabla representando cada identificador en una columna, y entonces vamos calculando los valores
de las subproposiciones ms pequeas y as sucesivamente hasta construir la proposicin completa.
Ejercicio : Construir la tabla de verdad para la proposicin ((bc)=((b)c)). Observar que el valor de las dos
subproposiciones (bc) y ((b)c) es el mismo en cada estado, y que por lo tanto son equivalentes y pueden ser
intercambiadas en cualquier proposicin.

Pg. 28

Como puede verse, el comportamiento de las distintas operaciones se ajustan bastante bien al significado de traducir su
nombre al castellano, pero teniendo en cuenta que:
1) La operacin or () se refiere a un o inclusivo, y no exclusivo. Por ejemplo, en la frase el barco partir maana si
hay al menos 20 pasajeros o hace buen tiempo aparece un o inclusivo, indicando que si se cumple alguna de las dos
condiciones o las dos entonces el barco partir. La frase este cuadro es un Velzquez o un Goya es un caso
diferente: se trata de un o exclusivo.
2) La operacin implica () no conlleva implcitamente ninguna causalidad. A partir de la frase en castellano si no
llueve, iremos a la playa deducimos que en caso de que llueva no iremos a la playa. Esta deduccin no es posible a
partir de una proposicin con la operacin .
Ejemplo: Traduccin de frases en castellano a proposiciones:
Castellano: Llueve, Se cancela la merienda, Mojarse y Quedarse en casa.
Proposiciones: llover, cancelar_merienda, mojarse, quedarse_en_casa.
C: Si llueve, se cancelar la merienda.
P: llover cancelar_merienda (no debe deducirse que el hecho de que no llueva significa que habr merienda)
C: Si llueve, pero estoy en casa, no me mojar.
P: llover quedarse_en_casa mojarse

Evaluacin de una proposicin en un estado


Ahora veremos una proposicin no como algo constante, sino como algo cuyo valor puede cambiar en el tiempo (el tiempo
de ejecucin de un proceso/programa). As hablaremos de evaluar la proposicin en un instante dado, o lo que es lo mismo,
en un determinado estado del proceso (programa).

Pg. 29

Describiremos un estado como un conjunto de pares (identificador, valor), donde todos los identificadores son distintos (en
otras palabras, cada identificador slo aparece una vez) y cada valor es o bien V o bien F. Cada par del conjunto indica el
valor del identificador correspondiente en el estado.
Ejemplo: En el estado {(a,V),(id,F),(x1,V)} el identificador a tiene el valor V, id tiene el valor F y x1 tiene el valor V.
Diremos que una proposicin p est bien definida en un estado si cada identificador en p est asociado bien con V o bien con
F en dicho estado.
Ejemplo: En el estado {(b,V),(c,F)} la proposicin (bc) est bien definida, mientras que (bd) no lo est.
Valor de una proposicin en un estado: Dado un estado s y una proposicin p que est bien definida en s,
denotaremos con s(p) al valor de p en el estado s, es decir, valor que calcularemos reemplazando cada uno de los
identificadores en p por su valor en el estado s y evaluando la proposicin resultante de acuerdo con las reglas
dadas en el apartado anterior (evaluacin de proposiciones constantes).
Ejercicio : Dado el estado s={(b,V),(c,F)} calcular s(((b)c)).

Reglas de precedencia para operadores


Hasta ahora hemos incluido siempre los parntesis alrededor de cualquier proposicin. Esto es una simplificacin, pues en
realidad los parntesis pueden ser omitidos o incluidos a voluntad. Por ejemplo, la proposicin ((bc)d) puede ser escrita
como bcd. En estos casos, unas reglas adicionales definen el orden de evaluacin de las subproposiciones. Estas reglas,
similares a las de las expresiones aritmticas, son:
1) Los operadores son asociativos a la izquierda, es decir, las secuencias del mismo operador son evaluadas de izquierda
a derecha. Ejemplo: bcd equivale a ((bc)d).
2) El orden de evaluacin (de mayor a menor prioridad) viene dado por la lista: , , , , =.

Pg. 30

Ejemplo: b=bc equivale a ((b)=(bc)).


Ejercicio : Colocar parntesis a la proposicin bcd. Lo mismo para la proposicin bcde.
De todas formas es conveniente, al igual que en las expresiones aritmticas, seguir la costumbre de colocar parntesis que
hagan ms claro al lector el orden de evaluacin.

Leyes de equivalencia
A menudo desearemos manipular las proposiciones de manera que obtengamos otras equivalentes pero ms simples.
Equivalencia de proposiciones: Dos proposiciones (o, en general, dos expresiones) son equivalentes si tienen el
mismo valor en todos los estados.
A continuacin se proporciona una lista de equivalencias bsicas. Estas leyes son la base para muchas de las manipulaciones
que haremos con las proposiciones, y adems son muy importantes para el trabajo posterior en el diseo de algoritmos. Los
identificadores E1, E2 y E3 dentro de las leyes pueden sustituirse por cualquier proposicin para obtener una equivalencia:
1) Leyes Conmutativas

(E1E2) = (E2E1)
(E1E2) = (E2E1)
(E1=E2) = (E2=E1)

2) Leyes Asociativas

E1(E2E3) = (E1E2)E3
E1(E2E3) = (E1E2)E3

3) Leyes Distributivas

E1(E2E3) = (E1E2)(E1E3)
E1(E2E3) = (E1E2)(E2E3)

4) Leyes de De Morgan

(E1E2) = E1 E2
(E1E2) = E1 E2
Pg. 31

5) Ley de Negacin

(E1) = E1

6) Ley del Medio Excluido

E1 E1 = V

7) Ley de Contradiccin

E1 E1 = F

8) Leyes de Simplificacin de OR

E1 E1 = E1
E1 V = V
E1 F = E1
E1 (E1E2) = E1

9) Leyes de Simplificacin de AND

E1 E1 = E1
E1 V = E1
E1 F = F
E1 (E1E2) = E1

10) Ley de Implicacin

E1E2 = E1 E2

11) Ley de Igualdad

(E1=E2) = (E1E2) (E2E1)

12) Ley de Identidad

E1=E1

Pg. 32

1.6.2 Predicados
En una proposicin slo pueden aparecen las constantes booleanas V y F e identificadores que tengan asociado uno de esos
valores, con la posibilidad de utilizar conectores lgicos para formar proposiciones compuestas. Ahora extendemos esta idea
para trabajar tambin con identificadores que estn asociados con otros valores (por ejemplo, enteros). Extendemos la
nocin de proposicin de dos formas:
1) En una proposicin podemos reemplazar un identificador por cualquier expresin que al ser evaluada produzca un
valor booleano (V o F).
2) Podremos utilizar tres tipos de cuantificadores: el existencial (
), el universal (
), y el de recuento (N
N ). Esto requiere
una explicacin de los conceptos de identificador libre e identificador ligado, que sern estudiados ms adelante.
Las expresiones resultantes de esta generalizacin se denominan predicados.
Ejemplo: La expresin x<y, donde x e y son valores enteros, al ser evaluada produce o bien el valor V o bien F, as que
podemos reemplazar cualquier identificador en una proposicin por dicha expresin. Por ejemplo, al reemplazar b en la
proposicin (bc)d obtenemos el predicado ((x<y)c)d.
Los predicados cumplen las mismas leyes de equivalencia que las proposiciones, as que no las volveremos a repetir.

Extensin del rango de estados


Ahora debemos extender tambin el concepto de estado. Describiremos un estado como un conjunto de pares (identificador,
valor), donde todos los identificadores son distintos (en otras palabras, cada identificador slo aparece una vez) y los valores
ahora pueden ser otros adems de V y F.

Pg. 33

Hablaremos as de que un identificador tiene un tipo, el cual define el conjunto de valores con los que puede estar asociado.
Algunos tipos que usaremos ms adelante son:

Booleano: el identificador puede estar asociado con V o F.


Natural: el identificador puede estar asociado con un nmero natural.
Entero: el identificador puede estar asociado con un nmero entero.
Real: el identificador puede estar asociado con un nmero real.

Evaluacin de predicados
La evaluacin de un predicado en un estado es similar a la evaluacin de una proposicin. Todos los identificadores son
reemplazados por sus valores en el estado, las subexpresiones son evaluadas y reemplazadas por sus valores (V o F), y se
evala la expresin constante resultante.
Ejemplo: El predicado (x<y)b en el estado {(x,2),(y,3),(b,F)} tiene el valor (2<3)F, que es equivalente a VF, que es V.
Ejemplo: El predicado ((xy y<z) (x+y<z)) en el estado {(x,5),(y,1),(z,3)} es F.

Cuantificadores
Un cuantificador es una abreviatura de una secuencia de operaciones anlogas; requiere ir asociado a un identificador ligado
y a un dominio. Este ltimo indica el conjunto de valores (normalmente un intervalo de nmeros naturales) que toma el
identificador ligado. La expresin as obtenida indica la repeticin de una operacin sobre todos los valores del dominio.
Sea E(i) una expresin de tipo booleano que depende del identificador i. Escribiremos el cuantificador existencial as:
i : dominio : E(i)

"Existe al menos un i en el dominio dominio para el que se satisface E(i)."

como una abreviatura de la disyuncin (operacin ) de todos los valores que toma la expresin E cuando i recorre todos los
valores indicados en el dominio.
Pg. 34

Ejemplo: El predicado (x>0) (x+1>0) (x+2>0) (x+3>0) (x+4>0) (x+5>0) puede ser sustituido por el predicado
ms breve ( i : 0i5 : x+i>0), equivalente al anterior.
El cuantificador universal lo escribiremos as:
i : dominio : E(i)

"Para todo i en el dominio dominio se satisface E(i)."

como una abreviatura de la conjuncin (operacin ) de todos los valores que toma la expresin E cuando i recorre todos los
valores indicados en el dominio.
Y por ltimo, el cuantificador de recuento:
N i : dominio : E(i)

"Nmero de valores de i en el dominio dominio que satisfacen E(i)."

Es posible aplicar cualquier cuantificador sobre un dominio vaco (o nulo). En ese caso el resultado de un cuantificador de
recuento ser 0, el de un cuantificador universal ser V y el de uno existencial ser F (elementos neutros de la +, y ).

Identificadores libres y ligados


Siendo x e i nmeros enteros, supongamos el predicado (i : min : xi>0), que significa "para todo i entre m y n,
inclusive, se cumple que x multiplicado por i es mayor que 0". Esto ser verdad si (el dominio es no vaco y) ambos x y m
son mayores que 0 o bien ambos x y n son menores que 0. Podramos pues sustituir el predicado original por el equivalente
(x>0 m>0) (x<0 n<0).
Es decir, el valor del predicado (i : min : xi>0) en un estado cualquiera depende de los valores de x, m y n en ese
estado, pero no del valor de i. De hecho, ni siquiera es necesario que el identificador i aparezca en el estado. Redundando en
esta idea, tambin podemos decir que el significado del predicado no cambia si sustituimos todas las apariciones de i por j.
Es evidente que el identificador i en el predicado anterior juega un papel diferente que m, n y x. As, diremos que m, n y x
son identificadores libres del predicado, mientras que diremos que i es un identificador ligado (al cuantificador ).
Pg. 35

Supongamos ahora el predicado (i>0) (i : min : xi>0). Se trata de un predicado confuso, ya que la ocurrencia de i en
(i>0) est libre, y durante la evaluacin ser sustituido por el valor de i en el estado, mientras que las otras ocurrencias de i
estn ligadas al cuantificador . Esta confusin puede ser evitada simplemente escogiendo otro identificador ligado, por
ejemplo j, obtenindose el predicado (i>0) (j : mjn : xj>0).
Para evitar confusiones como la del prrafo anterior seguiremos dos restricciones:
1) Un identificador no puede ser libre y ligado en dos subexpresiones de una misma expresin.
2) Un identificador no puede estar ligado con ms de un cuantificador (salvo en casos particulares, en los que es
conveniente permitir esto).

Propiedades de los cuantificadores


Una de las operaciones ms frecuentes que realizaremos con cuantificadores ser, cuando el dominio no es nulo, separar uno
de sus elementos y reducir en uno el dominio del cuantificador. El elemento separado se combina con el cuantificador
reducido mediante la correspondiente operacin. Por ejemplo, si N1,
(i : 1iN : E(i)) = E(1) (i : 2iN : E(i))
(i : 1iN : E(i)) = E(1) (i : 2iN : E(i))
1 + (N i : 2iN : E(i))

si E(1)=V

0 + (N i : 2iN : E(i))

si E(1)=F

(N i : 1iN : E(i)) =

Pg. 36

Formalmente, lo que estamos haciendo es aplicar la propiedad de concatenacin de los cuantificadores: dados dos dominios
disjuntos D1 y D2, se tiene que
(i : D1 : E(i)) (i : D2 : E(i)) = (i : D1 D2 : E(i))
Los cuantificadores universal y de recuento tienen la propiedad anloga (para abreviar omitimos su escritura).
Otras propiedades interesantes son la relacin entre los distintos cuantificadores:
(i : dominio : E(i)) = (i : dominio : E(i))
(i : dominio : E(i)) = (i : dominio : E(i))
(i : dominio : E(i)) = (N i : dominio : E(i)) > 0
(i : dominio : E(i)) = ((N i : dominio : E(i)) = dominio)

(dominio = cardinal de dominio)

1.6.3 Elementos de una especificacin


Cul es la diferencia entre la especificacin de un algoritmo y un algoritmo? Un algoritmo describe cmo solucionar un
problema, ya que el algoritmo no es ms que la expresin (en una notacin algortmica) de una sucesin de acciones (no
ambiguas, predecibles y que se realizan en un tiempo finito) para resolverlo. Por el contrario, la especificacin de un
algoritmo (o en general, de una accin) describe qu hace el algoritmo (o accin). Esta descripcin se realiza indicando la
relacin existente entre los datos de la accin (o situacin inicial previa a la realizacin de la accin) y los resultados de la
misma (o situacin final alcanzada tras la realizacin de la accin).
Es importante resaltar que vamos a utilizar un predicado para describir la situacin (inicial y final) de un algoritmo. Esto es
as porque podemos ver un predicado como un conjunto de estados (situacin), y viceversa.

Pg. 37

Ms formalmente: un predicado representa, o describe, el conjunto de estados en los cuales es verdad. A la inversa, dado
cualquier conjunto de estados podemos derivar un predicado que represente ese conjunto de estados.
Ejemplo: El conjunto formado por los dos estados {(b,V),(x,0)} y {(b,V),(x,1)} puede ser representado mediante el
predicado ((b x=0) (b x=1)), o ms abreviadamente (b (x=0 x=1)), aplicando la ley distributiva.
Se deduce fcilmente que el conjunto de estados vaco, es decir, el conjunto que no tiene ningn estado, se representa con el
predicado F, mientras que el conjunto de todos los estados se representa con el predicado V.
Hechas estas aclaraciones, consideramos que la especificacin de un algoritmo (o accin) consta de los siguientes
elementos:
1)
2)
3)
4)

Declaracin de variables.
Precondicin.
Nombre del algoritmo (o accin).
Postcondicin.

donde la precondicin y la postcondicin son predicados, que reflejan, respectivamente, la situacin inicial y final
pretendida del algoritmo. Escribiremos dichos predicados entre llaves.

Declaracin de variables
A la hora de especificar una accin es necesario declarar los datos de la misma (es decir, aquellos datos que tienen que tener
un valor antes de la realizacin de la accin), as como, los resultados de la misma (es decir, aquellos datos que se calculan
como resultado de la realizacin de la accin). Considerando que estos datos no toman un valor concreto, sino que pueden
tomar un valor de entre varios posibles, stos se declararn como variables. El concepto de variable en Programacin es
muy similar al concepto de variable utilizado en Matemticas. Desde el punto de vista de la Programacin, una variable no
slo permite expresar que un dato puede tomar un valor de entre varios posibles, sino que adems este valor puede ser
almacenado (o memorizado).

Pg. 38

En otras palabras, una variable se puede entender como una caja donde almacenar un dato. El valor de una variable es el del
ltimo dato almacenado.
Una variable, adems de un valor, tendr asociado un nombre (que la identifica sin ambigedad) y un tipo (conjunto de
valores que puede tomar).
Una declaracin de variables en una especificacin informa sobre las variables que son relevantes para la definicin precisa
del efecto de la accin, indicando su nombre y tipo de la siguiente manera:
<nombre1> : <tipo1>
...
<nombren> : <tipon >
Por ahora consideraremos solamente los siguientes tipos de datos:

BOOLEANO : la variable puede tomar como valor V o F.


NATURAL : la variable puede tomar como valor un nmero natural.
ENTERO: la variable puede tomar como valor un nmero entero.
REAL: la variable puede tomar como valor un nmero real.

Ejemplo:
da, mes, ao : ENTERO
error : BOOLEANO
x, y : REAL
Observacin: Para facilitar la legibilidad y comprensin es conveniente utilizar nombres de variables que sean significativos.

Pg. 39

Precondicin y Postcondicin
Una vez informados de las variables que son relevantes para la accin, la especificacin consiste en escribir el nombre de la
accin precedida por un predicado denominado precondicin, y seguida por un predicado denominado postcondicin. En la
precondicin se expresan las condiciones que deben cumplir los datos de la accin para garantizar un funcionamiento
correcto de la misma, y la postcondicin expresa la relacin que debe existir entre los datos y los resultados de la accin.
Informalmente, el significado de que una accin S cumple la especificacin dada por la precondicin P y la postcondicin Q,
es el siguiente: si los datos de la accin S cumplen la precondicin P, la accin ha de calcular unos resultados que cumplan
la postcondicin Q.
Observacin: Si no se cumple la precondicin no se puede garantizar nada acerca de los resultados de la accin. Adems,
este hecho no influye en la correccin de la accin. Un ejemplo para aclarar este comentario: Imagnese la especificacin de
un equipo de msica, donde el fabricante indica que el equipo funciona correctamente en un rango de temperaturas
comprendido entre 0C y 40C. Si en algn momento el equipo se pone a funcionar fuera de este rango de temperaturas no
se puede garantizar nada sobre si el mismo funciona o no correctamente. Adems, bajo estas circunstancias, si el equipo no
funciona correctamente no podremos responsabilizar al fabricante del mal funcionamiento del mismo.
Un algoritmo S satisface una especificacin con precondicin P y postcondicin Q, denotada {P}S{Q}, si al ser
ejecutado sobre unas variables que cumplen P, el algoritmo acaba, y lo hace de forma que dichas variables
cumplen Q.
Grficamente, representaremos la especificacin {P} S {Q} de la siguiente forma. Representamos los estados (dados por los
predicados P y Q) mediante crculos, entre los cuales dibujaremos una flecha dirigida desde el conjunto de estados inicial
hasta el conjunto de estados final, etiquetada con el nombre de la accin S. (La intencin es mostrar grficamente, que si
partimos de un estado que cumpla P, realizando la accin S est garantizado que se llega a un estado que cumple Q).
P

Pg. 40

Ejemplo: La especificacin,
r, x: REAL
{ x=X X 0 }
raz exacta
2
{r = X r 0}

{P}
S
{Q}

puede interpretarse como: considerando una variable x que contiene un valor positivo X, tras realizar el algoritmo o accin
denominado raz exacta, se obtiene en la variable r, el valor de la raz cuadrada positiva del valor inicial x.
Ejemplo: Dadas las siguientes especificaciones,
x, y: ENTERO
{ x=X y= Y}
intercambiar
{x= Yy=X }

x, y: ENTERO
{ x=X y= Y}
copiar
{x=X y=X }

se puede concluir que no se trata de la misma accin. Una diferencia esencial entre ellas es la siguiente: en la primera no se
destruye informacin, es decir, conociendo la situacin final se puede deducir el estado inicial (conviene recordar que una
variable permite memorizar un valor, de forma que si al final x = 2 e y = 3, es porque al principio se tena x = 3 e y = 2).
No ocurre as en el segundo caso, donde la variable y termina memorizando el valor inicial de x, y olvidando, por tanto,
el valor inicial que tuviera).

Pg. 41

Ejemplo: La especificacin de un algoritmo que determinase si un entero es potencia de 2 podra ser la siguiente:
x: ENTERO
es_potencia: BOOLEANO
{x=X }
potencia?
{ x = X es_potencia = n:

: x = 2n }

En esta especificacin aparece tanto en la precondicin como en la postcondicin que x = X con lo que se quiere indicar que
el valor de la variable x es el mismo al principio y al final del proceso.
Ejemplo: Pueden presentarse especificaciones que no admitan ningn algoritmo que las satisfaga, es decir, que sean
irrealizables. Por ejemplo, a continuacin se escriben dos especificaciones distintas de un algoritmo que reemplaza el valor
de una cierta variable entera x por el de su raz cuadrada,
x : ENTERO
{x=X}
raz
{ x= X }

x : ENTERO
{ x=X 2 X 0 }
raz
{x=X}

La primera de ellas es incorrecta, ya que hay situaciones iniciales para las que lo que se pide es imposible de hacer,
concretamente aquellas donde X no es un cuadrado perfecto. La mejor manera de superar esta dificultad es hacer que la
precondicin sea ms restrictiva (ms fuerte) y por s mismo implique la validez de la especificacin, como ocurre en el
segundo caso (donde se indica, que para reemplazar correctamente el valor inicial de x por su raz cuadrada, es necesario que
dicho valor inicial sea un cuadrado perfecto).

Pg. 42

Reglas de consecuencia de una especificacin


1 Regla de consecuencia. Suponiendo correcta la especificacin {P}S{Q} y que RP, entonces se concluye que
tambin es correcta la especificacin {R}S{Q}
La prueba es sencilla: Si se cumple la especificacin {P}S{Q} se puede afirmar que partiendo de un estado que cumple la
precondicin P, el algoritmo S termina alcanzando un estado que cumple la postcondicin Q. Adems, si se supone que
RP, estamos indicando que todo estado que cumple el predicado R cumple tambin el predicado P. Hechas estas
suposiciones, es inmediato concluir que partiendo de un estado que satisfaga el predicado R, el algoritmo S termina
alcanzando un estado que cumple la postcondicin Q.
Ejemplo: Suponiendo que se satisface la siguiente especificacin,
x : ENTERO
{ x=X 2 X 0 }
raz
{x=X}
y teniendo en cuenta que { x = X 2 X 10 } { x = X 2 X 0 }, se puede concluir que tambin es correcta
x : ENTERO
{ x = X 2 X 10 }
raz
{x=X}

Pg. 43

Observacin: La 1 regla de consecuencia permite reforzar la precondicin de una especificacin (en el sentido de
restringir el conjunto de estados iniciales). En este ejemplo, se observa que el conjunto de estados que satisfacen el
predicado {x = X 2 X 10}, (x = 16, 25, 36, ...) es un subconjunto del conjunto de estados que cumplen {x = X 2 X 0},
(x = 1, 2, 4, 16, 25, ...). En este sentido, se puede deducir que un algoritmo con una precondicin R ms fuerte que otro con
una precondicin P es menos til en el sentido de no ser aplicable a tantos casos como el segundo.
De forma similar se puede probar la 2 regla de consecuencia, y que en contraposicin con la regla anterior, permite
debilitar la postcondicin de una especificacin. El enunciado de esta regla es el siguiente:
2 Regla de consecuencia. Suponiendo correcta la especificacin {P}S{Q} y que Q R, entonces se concluye
que tambin es correcta la especificacin {P}S{R}

1.7 La instruccin nula


Intuitivamente, esta instruccin corresponde a continuar la ejecucin sin hacer nada, es decir, sin modificar el estado de
las variables. Para denotar esta instruccin utilizaremos la palabra reservada SEGUIR, y su significado viene dado por la
siguiente regla: dado cualquier predicado P, la especificacin {P} SEGUIR {P} siempre es correcta, es decir, todo lo que se
cumple antes se sigue cumpliendo despus.
Axioma: La especificacin {P} SEGUIR {P} siempre es correcta, siendo P un predicado cualquiera.
A continuacin se indica como comprobar que la instruccin SEGUIR cumple una especificacin cualquiera dada por una
precondicin P y una postcondicin Q. Considerando que, por definicin, la especificacin {Q} SEGUIR {Q} es correcta, si
se demuestra que P Q, en virtud de la 1 regla de consecuencia se concluye que {P} SEGUIR {Q} es correcta.
Observacin: Una representacin grfica como la siguiente,
P

SEGUIR

se dir que es correcta cuando se demuestre que P Q.


Pg. 44

1.8 La instruccin de asignacin


La asignacin es la instruccin ms bsica que permite dar valor a una variable. La sintaxis utilizada para expresarla es la
siguiente:
xE
que informalmente se interpretar como que la variable x toma el valor que resulte de la evaluacin de la expresin E. La
expresin E debe ser una expresin vlida del mismo tipo que la variable x que se pueda evaluar sin error. Hay que tener en
cuenta que primero se evala la expresin E y a continuacin se almacena en la variable x el valor obtenido.
Ejemplo: Las siguientes especificaciones siguen el mismo patrn, es decir,
x, y: ENTERO
{P}
xE
{Q}
donde E es una expresin del mismo tipo que x, y donde una vez ejecutada la asignacin el nuevo valor de la variable x pasa
a ser el de E.
x, y: ENTERO
{V}
x 47
{ x = 47 }

x, y: ENTERO
{ x=X y= Y}
xy
{x= Yy=Y}

x, y: ENTERO
{ x=X y= Y}
xx*y
{x=X*Yy=Y}

Pg. 45

El significado de la asignacin viene determinado por el siguiente postulado:


Axioma: La especificacin {QEx } x E {Q} es correcta por definicin, y donde QEx representa la sustitucin
literal de la variable x por la expresin E en el predicado Q.
Ejemplo. Algunos ejemplos de sustituciones literales son las siguientes,
(i n)ii +1 i + 1 n
(( XY = xy + p) x2 * x ) yy div 2 ( XY = 2xy + p) yy div 2 XY = 2 x( y div 2) + p
(k :1 k m : x mod k 0)m
m + 1 k :1 k m + 1 : x mod k 0
A continuacin, se indica como comprobar que la instruccin x E cumple una especificacin cualquiera dada por una
precondicin P y una postcondicin Q. Considerando que, por definicin, la especificacin { QEx } x E {Q} es correcta. Si
se demuestra que P { QEx }, en virtud, de la 1 regla de consecuencia se concluye que la especificacin {P} x E {Q} es
correcta.
Observacin: Una representacin grfica como la siguiente,
P

x E

se dir que es correcta cuando se demuestre que P { QEx }.

Pg. 46

Ejemplo: La siguiente especificacin es correcta,


x, y, m: ENTERO
{x 0 y0}
mx+y
{ m max (x, y) }

{P}
mE
{Q}

ya que considerando que QEm (m max ( x, y)) m


x + y x + y max ( x, y ) , basta comprobar que se cumple la siguiente
implicacin ( x 0 y 0 ) ( x + y max (x, y) ).

1.9 La composicin secuencial


Como se mencion con anterioridad, la composicin secuencial (denotada por el smbolo ;) permite la ejecucin
incondicional de una serie de acciones en el orden en el que aparecen. Una secuencia de dos acciones (S 1;S2), especificada
por una precondicin P y una postcondicin Q, y que podemos representarla como {P}S 1;S2{Q} o grficamente
S1;S2
P
Q
debe interpretarse como sigue
S1
P

S2
R

es decir, se puede suponer la existencia de un conjunto de estados intermedios, definidos por el predicado R, que acta
simultneamente como postcondicin de la accin S1 y como precondicin de la accin S2.
Adems, la especificacin {P}S 1;S2{Q} ser correcta cuando exista un predicado R tal que las especificaciones {P}S 1 {R} y
{R}S 2 {Q} son correctas.
Pg. 47

Ejemplo: Determinar la precondicin P ms dbil que satisfaga las siguientes especificaciones.


{P}
S;
SEGUIR
{Q}

seg, min: ENTERO


{P}
min seg div 60;
seg seg mod 60
{ S = min*60 + seg 0 seg < 60 }

x, y, temp: ENTERO
{P}
temp x;
x y;
y temp
{x= Ay=B }

x, y: ENTERO
{P}
x x - y;
y x + y;
xy-x
{x= Ay=B }

1.10 La composicin alternativa (exclusiva)


Una composicin alternativa (exclusiva) se introdujo como la estructura que permite expresar (en la notacin algortmica) la
ejecucin condicional de una accin entre dos posibles. Si ahora se considera que esta primitiva se especifica mediante una
precondicin P y una postcondicin Q, es decir,
{P}
SI <B>
ENTONCES <S1>
SINO <S2>
FINSI
{Q}
dicha estructura debe interpretarse, en trminos de sucesin de estados, como sigue,
{B} S1
P

{B} S2
Pg. 48

donde la notacin {B} S1 indica que la realizacin S1 esta salvaguardada o protegida por la condicin B, es decir, que S1
se realiza slo cuando la condicin B se evala a verdad.
Ejemplo: Esta interpretacin puede generalizarse. Si se considera el siguiente caso, se puede asociar a cada una de las
asignaciones que aparecen una condicin que la salvaguarda, es decir, la asignacin slo se realiza en el caso de que se
cumpla su condicin asociada.
{x> yx>z} mx
x, y, z, m: ENTERO
{x = A y = B z = C } {P}
SI ( x > y )
{ x> yxz} m z
ENTONCES SI ( x > z )
ENTONCES m x
P
Q
SINO
mz
FINSI
{ xyy> z} m y
SINO SI ( y > z )
ENTONCES m y
SINO
mz
{xyyz} mz
FINSI
FINSI
{ m = max (A,B,C)} {Q}
En trminos de correccin, una composicin alternativa (exclusiva) con n alternativas, donde cada alternativa Si (1 i n)
est salvaguardada por una condicin Bi, se considera que es correcta cuando:
1) Est bien construida, es decir, cuando partiendo de un estado que verifique el predicado P, se activa una y slo una
de las transiciones disponibles (de ah el nombre de exclusiva), y
2) Cuando cada transicin es correcta, es decir, se cumple la especificacin {P Bi} Si {Q} para todos los caminos.

Pg. 49

Ejercicio : Comprobar la siguiente especificacin:


x, y, m: ENTERO
{x = A y = B }
SI (x y)
ENTONCES m x
SINO
my
FINSI
{ m = max (A,B) }

1.11 La composicin iterativa


Se considera ahora una composicin iterativa (en la forma MIENTRAS), especificada por una precondicin P y una
postcondicin Q, escrita de la siguiente forma
{P}
MIENTRAS <B> HACER
<S>
FINMIENTRAS
{Q}
donde S es constituye el cuerpo del bucle (o accin que se repite) y B es la condicin de permanencia del bucle MIENTRAS.
Dicha primitiva se debe interpretar, en trminos de sucesin de estados, como sigue
{B} S

I
{V} SEGUIR

Q
{B} SEGUIR
Pg. 50

Es decir, se puede suponer la existencia de un predicado I, que denominaremos invariante del bucle, que se caracteriza
porque:
1) Se satisface directamente a partir de la precondicin.
2) Se satisface despus de cada iteracin del bucle (es decir, despus de cada realizacin de la accin S).
3) Una vez termina el bucle (es decir, se satisface B), la postcondicin Q se deriva directamente a partir del invariante.
Observaciones:
La accin S puede ejecutarse 0 veces (esto ocurre si se satisface B inicialmente).
La condicin B acta como una salvaguarda de la accin S, de forma que dicha accin slo se realizar (quizs en
varias ocasiones) cuando dicha condicin se satisfaga.
El bucle puede no terminar, es decir, puede ocurrir que en ningn instante se satisfaga B, con lo que la ejecucin de la
accin S se repetira indefinidamente en el tiempo.
Por lo tanto, para garantizar la correccin de un bucle MIENTRAS, adems de comprobar que el invariante del bucle cumpla
las caractersticas anteriores, es necesario comprobar que el bucle termina. Esta prueba se basa en considerar una funcin,
que se denominar funcin de cota, con las siguientes propiedades:
1) Est definida positiva siempre y cuando se satisfaga la condicin de permanencia B.
2) Es una funcin decreciente, es decir, su valor disminuye tras cada iteracin.

Pg. 51

Ejercicio : Comprobar la siguiente especificacin:


x, y, prod: ENTERO
{x = A y = B A 0 B 0 }
prod 0;
MIENTRAS (y 0) HACER
prod prod + x;
yy1
FINMIENTRAS
{ prod = AB }

Invariante { (AB = prod + xy) y 0 }


Funcin cota y

BIBLIOGRAFA BSICA
Castro, J., Cucker, F. Messeguer, X., Rubio, A., Solano, L., Valles, B. (1993). Curso de Programacin. McGraw-Hill.
Lucas, M., Peyrin, J.P. y Scholl, P.C. (1990). Algortmica y Representacin de Datos. Vol. 1. Secuencias, Autmatas de
Estados Finitos. Masson.

BIBLIOGRAFA COMPLEMENTARIA
Balczar, J.L. (1993). Programacin Metdica. McGraw-Hill
Joyanes, L. y Zahonero, I. (1998). Estructuras de Datos. Algoritmos, abstraccin y objetos, McGraw-Hill.
Pea, R. (1993). Diseo de Programas: Formalismo y Abstraccin. Prentice Hall.

Pg. 52

EJERCICIOS
1. Encontrar precondiciones que garanticen el comportamiento correcto, respecto a las
postcondiciones dadas, de las asignaciones siguientes. Todas las variables son de tipo natural, salvo
b que es booleana.
{ P } n m { n 100 }
{ P } n 2 * n { n 100 }
{P} nn+1 {n=n+1}
{ P } n n + 1 { i : 1 i n : i j }
{ P } n i n { j : 1 j 10 : j n }
{ P } b b (k = 0) {b}
2. Disear un algoritmo que satisfaga la siguiente especificacin:
x, y, z: ENTERO ;
{ x = Ay = B z=C }
desplazamiento
{ x = C y = Az= B }
3. Disear un algoritmo que satisfaga la siguiente especificacin:
x, y, z, p, s, t: ENTERO ;
{ x = A y= B z= C }
ordenar
{ (p, s, t) perm (A, B, C) p s t }
donde perm (A, B, C) denota el conjunto de las permutaciones de los elementos A, B y C.
4. Especificar y disear un algoritmo para determinar las races reales de una ecuacin de segundo

grado de la forma ax2 + bx + c = 0.


5. Divisin entera: dados A y B enteros positivos, disear un algoritmo que determine el cociente y el
resto.
x, y, q, r: ENTERO ;
{ x = A y = B A, B > 0 }
division
{ A = qB + r 0 r < B }
6. Mximo comn divisor: dados A y B enteros positivos, disear un algoritmo que determine su
mximo comn divisor.
x, y: ENTERO ;
{ x = A y = B A, B > 0 T = m.c.d. (A, B) }
mximo comn divisor
{x=T}
Aclaracin: Considrese la siguiente propiedad del mximo comn divisor
si A = B
A

m.c.d. ( A, B) = m.c.d. ( A B, B ) si A > B


m.c.d. ( A, B A) si A < B

Pg. 53

7. Disear un algoritmo que satisfaga la siguiente especificacin,


fact, n: ENTERO ;
{ n = A A> 0 }
factorial
{ fact = A! }
8. Disear un algoritmo que satisfaga la siguiente especificacin,
sum, n: ENTERO ;
{ n = A A> 0 }
suma cuadrados
{ suma =

n
k=0

2k n = A }

9. Disear un algoritmo que satisfaga la siguiente especificacin,


x, k: ENTERO ;
{ x = A A 1 }
S
{ 2k A < 2k+1 }
10. Disear un algoritmo que determine el n-simo trmino de la sucesin de Fibonacci.
Aclaracin: La serie de Fibonacci se define como sigue:
0

f n = 1
f + f
n 1
n 2

si n = 0
si n = 1
si n 2

Pg. 54

Cosas sueltas:
Smbolos: =<> N +

Pg. 55

BIBLIOGRAFA BSICA
Castro, J., Cucker, F. Messeguer, X., Rubio, A., Solano, L., Valles, B. (1993).
Curso de Programacin. McGraw-Hill.
Lucas, M., Peyrin, J.P. y Scholl, P.C. (1990). Algortmica y Representacin de
Datos. Vol. 1. Secuencias, Autmatas de Estados Finitos. Masson.

BIBLIOGRAFA COMPLEMENTARIA
Balczar, J.L. (1993). Programacin Metdica. McGraw-Hill
Joyanes, L. y Zahonero, I. (1998). Estructuras de Datos. Algoritmos, abstraccin
y objetos, McGraw-Hill.
Pea, R. (1993). Diseo de Programas: Formalismo y Abstraccin. Prentice Hall.

Pg. 56

Vous aimerez peut-être aussi