Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Faccois de la Rochefoucald
(1613-1680) Escritor francés
Objetivos de aprendizaje
Introducción
Antes de planear el programa, debe realizarse una revisión de la necesidad para la
existencia del programa y definirse de alguna forma los objetivos que desean lograrse
a través del programa (requerimientos). El proceso de plantación de un programa tiene
como finalidad lograr el diseño de un programa que cumpla con los requerimientos.
Generalmente es conveniente diseñar primero la estructura general del programa y
trabajar luego la lógica detallada.
La plantación de un programa es semejante a la planeación de un edificio o una casa.
Primero, se realiza un diagrama general en el que se muestran las diferentes
habitaciones (las diferentes funciones que deberán realizarse), y la relación entre
ellos. A continuación se realiza el diseño detallado de cada habitación. De manera
Resolución de problemas
MUNDO INFORMATICO
Cuando se escribe un programa que se va a usar una o pocas veces, el primer objetivo es
mas importante. En cambio cuando se presenta un problema cuya solución se va a utilizar
muchas veces, es conveniente desde el punto de vista económico realizar un algoritmo mas
complejo.
PROGRAMAS Y CODIGOS
La especificación de un problema
Programar una solución no solo es codificar el programa, sino hallar una solución
(algoritmo), especificar la solución y luego implementar la solución. Especificar
consiste en esencia, responder a la pregunta ¿que hace el programa?, no interesa los
detalles de cómo sería el programa. [6]
La implementación de un problema
Los programas en este lenguaje trabajan con estados de programas y estos estados
se modifican por acción de las partes del código. Las partes del código son
funciones que proyecta el estado inicial, que es el estado al comienzo, sobre el
estado final, que es el estado al finalizar la parte del código. Para convertirse en una
función, las sentencias que comprenden la parte de un código deben ser
independientes.
Varias partes del código pueden estar concatenadas, lo que significa simplemente
que se ejecutan secuencialmente.
ASERCION
Una aserción es cualquier sentencia referente a un estado del programa, y se denota
como {A}
Ejemplo 1
Considere el código:
{A} x = x+y,y=x-y,x=x-y {B}
{A} es la precondicion
{B} es la postcondicion
Ejemplo 2
Considere el código:
a := 1/b precondición {b ‡ 0}
postcondición {a = 1/b}
Ejemplo 3
Queremos especificar un algoritmo que verifique si en una matriz existen dos
columnas con igual suma de sus elementos
Ejemplo 4
Queremos especificar un algoritmo que halla la recta L que pase por dos puntos
PyQ
Ejemplo 5
Se quiere especificar un algoritmo para ordenar en forma ascendente la fila K de la
matriz A de orden MxN.
Ejemplo 6
Un número natural es GUAY si es igual a la suma de cierto número de naturales
consecutivos comenzando con 1. Los tres primeros números GUAY son 1, 3= 1+2,
6=1+2+3. Especificar una función que dado un natural n, decida si es o no un
numero GUAY.
DEBILITAMIENTO DE POSTCONDICIONES
REFORZAMIENTO DE PRECONDICIONES
es decir
A1 ⎯⎯➢ A
{A} P {B}
{A1} P {B}
Ejemplo 7
{x 0} y := raíz(x) {x = y2}
x 1 ⎯⎯➢ x 0
{ x 1} y := raíz(x) {x = y2}
Ejemplo 8
Queremos especificar un algoritmo que calcule el cociente por defecto y el resto de
la division entera de dos enteros
A:{b0}
P : FUN DIVIDE (a,b : entero) DEV (q,r:entero)
B : { a =b*q + r }
Una implementacion de divide puede ser
Reforzamos la precondicion
A : {a 0 , b 0 }
P : FUN DIVIDE (a,b : entero) DEV (q,r:entero)
B : { a = b*q + r r 0 r < b}
Solo existen dos enteros a, b que satisfacen {B}
Ejemplo 9
A : { n 1 n 100 }
P : FUN MAXIMO (V : VEC) DEV (x:entero)
B : { {1..n} . x V() }
Reforzamos la precondicion
DEBILITAMIENTO DE POSTCONDICIONES
Si una parte de un código P es correcta bajo una postcondición {B}, entonces permanece
correcta si se debilita {B}.
Ejemplo 10
Consideremos los ssiguientes ejemplos
REGLA DE CONJUNCION
{A1} P {B1}
{A2} P {B2}
Ejemplo 11
Ejemplo 12
base area
altura
Accion AREATRIANGULO ( )
Inicio
Leer base, altura
área = (base*altura)/2
escribir area
Fin
Ejemplo 13
r V
A: { r, h € R+ }
P: FUN VOLUMENCILINDRO (r, h :real) DEV (V: real)
B: { V = (3.14 r2 h }
Accion VOLUMENCILINDRO ( )
Inicio
Leer r, h
V = (3.14 r2 h
escribirV
Fin
Ejemplo 14
Queremos especificar un algoritmo que calcule el valor máximo en un Vector de
enteros tipo VECT
V x
n
Definimos TIPO VEC = VECTOR [1..100] de enteros
A : { n 1 n 100 }
P : FUN MAXIMO (V : VEC) DEV (x:entero)
B : { {1..n} . x V() }
Reforzamos la precondición
B :{ {1..n} . x V()}{ {1..n} . x = V()}
Ejemplo 15
Hallar e Máximo Común Divisor de dos números a y b.
A : { a , b + }
P : MCD(a: entero, b: entero ) Dev ( m: entero)
B:{ m + / m = máximo{ A}; A ={ x + / x / a x / b} }
a x=m+r→ a=m*x
es por esto que ya no hace falta restringir el valor de X
Ejemplo 16
b
Precondición: a, b +
FUN MCM(a: entero, b: entero ) Dev ( m: entero)
Poscondición: m + / m = mínimo{ A}; A ={ x + / a / x b / x}
Nota: x / a quiere decir que : a contiene un número entero de x; es decir:
a x=m+r→ a=m*x
es por esto que ya no hace falta restringir el valor de X
Ejemplo 17
Desde lo alto de un faro, cuya altura sobre el nivel del mar es de 120 pies, el angulo de depresión
de un barco es de 15°, ¿A que distancia del faro esta la embarcacion?
B
B
C
Angulo de depresión =15°
120’ 75° A
15°
15° O
A
C
B
En el triangulo ABC de la fig, A=15° CB = 120; entonces Cot A = AC/CB y
AC = CB Cot A = 120 cot 15° = 120(3.7) =444 pies
Entrada : h : entero (altura) , ɤ : entero (angulo de depresión)
Salida : Dist: (entero)
h Dist
Ejemplo 18
Queremos especificar un algoritmo que lea desde teclado N números, y halle la distancia
mayor y la distancia menor entre dos números consecutivos
Ejemplo N=7 S: 3, 8, -1, 12, 13, 2, -1
N dM
S dm
Ejemplo N=7
A: -2, 11, -4, 13, -5, -2, 1
Las respuesta es 20 desde a2 hasta a4
Entrada : A : vector de N enteros
Salida : Inicio, Fin : inicio y fin de la secuencia
SumaVdm : suma de la subsecuencia
Terna de Hoare
A : { A : Vector de N enteros}
P : FUN SubSecMax (A:vector ; N:entero ) DEV (ini, fin :enteros;suma:entero)
B : { suma = Max{Sumatoria(de ai hasta ai ) . i,,j {1..N} . i<j }
N Inicio, fin
A suma
Accion SubSecMax ( A, N )
Inicio
SumaMax=0
Inicio=0
Fin=0
Para i desde 1 hasta N
Para j desde i hasta N
SumaTemp=0
Para k desde i hasta j
SumaTemp=SumaTemp + a[k]
FinPara
Si ( SumaTemp > SumaMax)
SumaMax =SumaTemp
Inicio = i
Fin = j
FinSi
FinPara
FinPara
Escribir Inicio, Fin, SumaMax
Fin
Ejercicios propuestos
I Proporcione una especificación para
REFERENCIAS BIBLIOGRAFICAS
1. [HERNANDEZ 2001] Hernandez, R.; Lazaro, J.C.; Dormido, R.; Ros, S. “Estructura
de Datos y Algoritmos”; Prentice Hall 2001, Madrid España.
2. [BRASSARD 1998] Brassard,G. Bratley,P. ”Fundamentos de Algoritmia”, Prentice
Hall 1998 Madrid
3. [CORTEZ 2013] Cortez Vasquez,Augusto. ”Matematica Discreta”, UNMSM FISI
Lima Peru.
4 [CORTEZ 2010] Augusto Cortez Vasquez, ”Algoritmia”, Edit EsVega Lima
Peru 2010
5 [CORTEZ 2012] Augusto Cortez Vasquez, ”Algoritmia, Tecnicas algorítmicas”
CEPREDIM Lima Peru 2012.
6 [GRASSMANN 1996] Grasssmann W. ,Tremblay J. ”Matematica Discreta y
Logica”; Prentice Hall 1996.
7 [GRIMALDI 1994] Grimaldi Ralph ”Matematicas Discreta y Combinatoria”;
Addison-Wesley 1994
8 [GUTIERREZ 1993] Gutierrez Xavier Franch ”Estructuras de datos, Especificacion,
diseño e implementacion”; Edición UPC Barcelona España 19934
9 [JAIME 2002] Jaime, Alberto. ”Estructuras de datos y Algoritmos”; Prentice Hall
2002 Bogota D.C.
10 [JOHNSONBAUGH 1999] Johnsonbaugh Richard ”Mateamticas Discretas”;
Prentice Hall 1999.