Académique Documents
Professionnel Documents
Culture Documents
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:
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.
Pg. 2
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:
ESTADO
[ N, (0,0), 0 ]
Pg. 5
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 ]
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
1 vez
1 vez
1 vez
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.
-
0-1 vez
dependiendo de
posicionar
1 vez
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
1 vez
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
1 vez
4 veces
Pg. 11
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.
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
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
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.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
<ACCIN1>;
<ACCIN2>;
...
<ACCINN>;
FIN
Pg. 19
<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
DIAGRAMA N-S
Pg. 22
Composicin selectiva
<ACCIN1>
PSEUDOCDIGO
<INDICADOR>
<VALOR1>
<A
1
<ACCIN
CCIN1>
>
<INDICADOR>
<VALOR2>
<ACCIN2>
<VALORN>
...
<VALORN>
...
<ACCINN>
ENOTRO CASO
<ACCINX>
ENOTRO CASO
DIAGRAMA DE FLUJO
DIAGRAMA N-S
Pg. 23
F
<CONDICIN>
<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
<ACCIN>
REPETIR
<ACCIN >
HASTA <CONDICIN >
<ACCIN>
<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.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)
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:
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).
Pg. 27
(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
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)).
Pg. 30
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
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
E1 E1 = E1
E1 V = E1
E1 F = F
E1 (E1E2) = E1
E1E2 = E1 E2
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.
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:
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)
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)
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)
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 ).
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).
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)
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:
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
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}
SEGUIR
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
x E
Pg. 46
{P}
mE
{Q}
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
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 }
{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
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
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
Pg. 53
n
k=0
2k n = A }
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