Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
2. PRECONDICIONES Y POSCONDICIONES
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.
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.
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.
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
con , ,..., ;
var , ,..., ;
{Pre Q: ...}
{Pos R: ...}
donde:
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.
Especificación formal:
con , ;
var ;
{Pre Q: }
{Pos R: }
Enunciado informal:
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:
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 ;
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:
–
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 , – ;
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.