Está en la página 1de 11

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS

UNIDAD UNO - SEMANA UNO


ESPECIFICACIÓN DE PROGRAMAS
AUTOR: ALEJANDRO SOTELO ARÉVALO

TABLA DE CONTENIDO

1. CONCEPTOS BÁSICOS 2
1.1. ESTADO 2
1.2. ASERCIÓN 2
1.3. PROGRAMA 2
2. PRECONDICIONES Y POSCONDICIONES 2
3. ESPECIFICACIÓN DE PROGRAMAS 3
4. EJEMPLOS PRÁCTICOS SOBRE ESPECIFICACIÓN DE PROGRAMAS 4
EN RESUMEN 11
PARA TENER EN CUENTA 11

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
1
1. CONCEPTOS BÁSICOS

1.1. ESTADO

Un estado es una lista de variables con valores asociados, lo que permite describir qué
valores tienen las variables en cualquier momento.

1.2. ASERCIÓN

Una aserción es una afirmación sobre el estado de las variables declaradas. Escribiremos
todas nuestras aserciones en el formato {Id:E} donde Id es el identificador de la aserción y E
es una expresión que describe la aserción. Podemos omitir el identificador, en cuyo caso, la
aserción se escribe {E}.

1.3. PROGRAMA

Un programa, descrito mediante una secuencia de instrucciones, es un proceso capaz de


cambiar de estado a las variables.

2. PRECONDICIONES Y POSCONDICIONES

La precondición de un programa (abreviada pre) es el conjunto de estados iniciales donde


puede comenzar la ejecución de éste. La poscondición de un programa (abreviada pos) es el
conjunto de estados finales donde debe terminar toda posible ejecución de éste.

Gráfica 1: Posibles ejecuciones de un programa. Los puntos representan


estados y las flechas representan transiciones entre estados.

La idea es que, si el programa está bien hecho, debe suceder que para todo estado que
satisfaga la precondición, después de ejecutar el programa, se debe terminar en un estado
que satisfaga la poscondición.

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
2
Gráfica 2: Ejemplo de precondición, programa y poscondición para el problema de preparar
*
una Bandeja Paisa, plato Típico de la zona cafetera de Colombia .

La precondición de un programa (pre) es una expresión booleana que describe el conjunto de


estados iniciales sobre los que la ejecución del programa está siendo definida (¿qué recibe el
programa?), y que sirve para:

1. Describir los parámetros que recibe el programa (también llamados variables de entrada o
variables semánticas).
2. Enunciar las restricciones o condiciones que cumplen los parámetros antes de la ejecución
del programa.

Una precondición no establecería restricciones sobre el conjunto de estados iniciales


del programa, permitiendo así que éste pueda comenzar su ejecución en cualquier estado.

Declararemos las variables de entrada usando la palabra clave con, y el resto de variables
usando la palabra clave var. Las variables de entrada pueden ser consultadas pero no
modificadas durante la ejecución del programa, para poder hacer referencia a éstas en la
poscondición con plena certeza de que van a tener el mismo valor inicial.

La poscondición de un programa (pos) es una expresión booleana que describe el conjunto


de estados finales (¿qué entrega el programa?), y que sirve para:

1. Describir los retornos que entrega el programa (también llamados variables de salida o
resultados).
2. Describir las condiciones que cumplen los retornos.
3. Enunciar las relaciones que hay entre los retornos y los parámetros del programa.

3. ESPECIFICACIÓN DE PROGRAMAS

La especificación de un programa describe su precondición y su poscondición,


preocupándose de establecer las condiciones de entrada y de salida que se deben cumplir
*
La imagen de la bandeja paisa fue tomada de http://www.lopaisa.com/ (recuperado en noviembre de 2010).

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
3
antes y después de ejecutar el algoritmo, detallando qué problema se desea solucionar y no
cómo. Antes de programar cualquier problema es necesario especificarlo para entenderlo,
para saber que recibimos como entrada, y qué debemos retornar como salida.

Para escribir una especificación se seguirá el formato:

con , ,..., ;
var , ,..., ;
{Pre Q: ...}
{Pos R: ...}

donde:

 , ,..., es la declaración de las variables de entrada (cuyo valor no se puede


modificar durante la ejecución del programa).
 , ,..., es la declaración de las variables de salida y de las variables auxiliares
del programa (por simplicidad, aquellas variables auxiliares o de salida cuyo tipo se pueda
inferir del contexto pueden dejarse sin declaración).
Q es la precondición del programa.
R es la poscondición del programa.

4. EJEMPLOS PRÁCTICOS SOBRE ESPECIFICACIÓN DE


PROGRAMAS

Al momento de especificar formalmente un problema, se deben introducir restricciones


necesarias y razonables que no están enunciadas explícitamente en el enunciado, y se deben
resolver convenientemente las ambigüedades que se encuentren. Vale la pena enfatizar que
no hay una única manera de especificar, pues depende de la experiencia y del estilo que se
esté manejando.

A medida que se desarrollen los ejemplos, se irán declarando funciones útiles que se podrán
utilizar para especificar problemas posteriores. Usaremos la letra para representar un tipo
genérico de datos en la especificación de problemas cuyas entradas puedan ser de cualquier
tipo.

Tabla 3: Ejemplos sobre traducción de especificaciones en lenguaje natural a lenguaje formal.


Enunciado informal:
Retornar un número real entre cinco y ocho.
Especificación formal:
var ;
{Pre Q: }
{Pos R: }

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
4
Enunciado informal:
Sumarle a un número.
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Calcular el valor absoluto de un número.
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Calcular la suma de dos números.
Especificación formal:
con , ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Intercambiar el valor de dos variables.
Especificación formal:
con , ;
var , ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Decidir si un número está entre cinco y ocho.
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Dados dos números enteros y , decidir si es divisor de .
Definición de funciones auxiliares:
 Dados dos números enteros :

Especificación formal:
con , ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
5
Decidir si un número es par.
Definición de funciones auxiliares:
 Dado un número entero :

Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Decidir si un número es impar.
Definición de funciones auxiliares:
 Dado un número entero :

Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Calcular el máximo común divisor entre dos números.
Definición de funciones auxiliares:
 Dados dos números enteros :

Especificación formal:
con , ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Calcular el mínimo común múltiplo entre dos números.
Definición de funciones auxiliares:
 Dados dos números enteros :

Especificación formal:
con , ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Decidir si dos números enteros son primos relativos.
(dos números enteros son primos relativos si y sólo si su máximo común divisor es uno)
Definición de funciones auxiliares:

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
6
 Dados dos números enteros :

Especificación formal:
con , ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Decidir si un número entero es un cuadrado perfecto.
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Dado un número entero , calcular la suma de sus divisores que están entre y – .
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Decidir si un número entero es perfecto.
( es un número perfecto si y sólo si la suma de sus divisores entre y – es igual a )
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Decidir si un número entero es primo.
(un número entero es primo si y sólo si es mayor o igual que dos y no tiene divisores entre y
– )
Definición de funciones auxiliares:
 Dado un número entero :


Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Retornar un primo cualquiera.
Especificación formal:
var ;

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
7
{Pre Q: }
{Pos R: }
Enunciado informal:
Dado un número natural mayor o igual que , hallar todos los primos desde hasta .
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Hallar el factorial de un número.
Especificación formal:
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Dado un número natural , calcular la máxima potencia de que es menor o igual que .
Especificación formal (variante #1):
con ;
var ;
{Pre Q: }
{Pos R: }
Especificación formal (variante #2):
con ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
Hallar la suma de los elementos de un arreglo.
Especificación formal:
con , – ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Hallar el máximo valor de un arreglo no vacío de números reales.
Especificación formal:
con , – ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Hallar una posición donde se encuentre el máximo valor de un arreglo no vacío de números
reales.
Especificación formal (variante #1):
con , – ;
var ;

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
8
{Pre Q: }
{Pos R: – – }
Especificación formal (variante #2):
con , – ;
var ;
{Pre Q: }
{Pos R: – – }
Enunciado informal:
Decidir si un valor está o no dentro de un arreglo (retornar si está y si no está).
Definición de funciones auxiliares:
 Dado un arreglo y un valor :

Especificación formal:
con , – , ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Dado un arreglo y un valor, determinar cuántas veces aparece el valor dentro del arreglo (el
número de ocurrencias del valor en el arreglo).
Definición de funciones auxiliares:
 Dado un arreglo y un valor :

Especificación formal:
con , – , ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Dado un arreglo y un valor que aparece en éste, retornar una posición donde ocurra el valor
dentro del arreglo.
Especificación formal:
con , – , ;
var ;
{Pre Q: – }
{Pos R: – }
Enunciado informal:
Dado un arreglo y un valor que aparece en éste, retornar la mínima posición donde ocurre el
valor dentro del arreglo (el índice de la primera ocurrencia del valor en el arreglo).
Especificación formal:
con , – , ;
var ;
{Pre Q: – }
{Pos R: – – }
Enunciado informal:

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
9
Decidir si un arreglo está ordenado.
Definición de funciones auxiliares:
 Dado un arreglo :


Especificación formal:
con , – ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Decidir si un arreglo tiene valores repetidos.
Especificación formal:
con , – ;
var ;
{Pre Q: }
{Pos R: – }
Enunciado informal:
Decidir si un arreglo es permutación de otro.
Definición de funciones auxiliares:
 Dados dos arreglos y :

Especificación formal:
con , – , – ;
var ;
{Pre Q: }
{Pos R: – – }
Enunciado informal:
Decidir si un arreglo es el reverso de otro.
Especificación formal:
con , – , – ;
var ;
{Pre Q: }
{Pos R: – – – }
Enunciado informal:
Retornar el reverso de un arreglo.
Especificación formal:
con , – ;
var – ;
{Pre Q: }
{Pos R: – – – }
Enunciado informal:
Ordenar un arreglo.
Especificación formal:
con , – ;

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
10
var – ;
{Pre Q: – }
{Pos R: – – – }

EN RESUMEN
Un estado es una lista de variables con valores asociados.
Una aserción es una afirmación sobre el estado de las variables declaradas.
Un programa, descrito mediante una secuencia de instrucciones, es un proceso capaz de cambiar de
estado a las variables.
La precondición de un programa (pre) es una expresión booleana que describe el conjunto de estados
iniciales sobre los que la ejecución del programa está siendo definida (¿qué recibe el programa?), y
que sirve para:
1. Describir los parámetros que recibe el programa (también llamados variables de entrada o
variables semánticas).
2. Enunciar las restricciones o condiciones que cumplen los parámetros antes de la ejecución del
programa.
La poscondición de un programa (pos) es una expresión booleana que describe el conjunto de estados
finales (¿qué entrega el programa?), y que sirve para:
1. Describir los retornos que entrega el programa (también llamados variables de salida o resultados).
2. Describir las condiciones que cumplen los retornos.
3. Enunciar las relaciones que hay entre los retornos y los parámetros del programa.
La especificación de un programa describe su precondición y su poscondición.

PARA TENER EN CUENTA


Al momento de especificar formalmente un problema, se deben introducir restricciones necesarias y
razonables que no están enunciadas explícitamente en el enunciado, y se deben resolver
convenientemente las ambigüedades que se encuentren.

ANÁLISIS Y VERIFICACIÓN DE ALGORITMOS


ALEJANDRO SOTELO ARÉVALO
11

También podría gustarte