Está en la página 1de 17

Algorítmica III – Formalismo, Abstracción 2019 - II

GUIA I Formalismo y abstracción


Tres clases hay de ignorancia: no saber lo que debiera
saberse, saber mal lo que se sabe, y saber lo que no
debiera saberse.

Faccois de la Rochefoucald
(1613-1680) Escritor francés

Donald Ervin Knuth Nacido el 10 de enero de


1938, es uno de los más renombrados científicos
de la computación, profesor emerito de la
Universidad de Stanford. Es conocido como autor
de múltiples volúmenes: El arte de la
programación de computadoras, considerado
como una referencia en el área de ciencias de la
computación, prácticamente fue el creador del
análisis de algoritmos y contribuyo
significativamente a varias ramas de teoría de las
ciencias de la computación

Objetivos de aprendizaje

1. Conocer las técnicas de formalización de algoritmos


2. Especificar e implementar algoritmos

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

Augusto Cortez Vásquez Pag. 1/17


Algorítmica III – Formalismo, Abstracción 2019 - II

similar es necesario que exista una estructura general para el programa de


computadora.

Resolución de problemas

La acción de programación comienza con la resolución de problema en cuestión en donde


se priman las actividades de diseño y de razonamiento frente a la depuración mediante
ejecución. De la misma manera que el ingeniero civil necesita especificar las
características de un puente que luego construira, el ingeniero de sistemas debe
especificsar la solución de un problema

La resolución de problemas sigue los siguientes pasos :

MUNDO REAL MUNDO INFORMATICO

Problema Algoritmo Pseudocodigo Programa

MUNDO INFORMATICO

Programa compilador programa enlace programa


Fuente objeto ejecutable

Tiempo de ejecucion de un programa

Existen dos aspectos a tener en consideración cuando se resuelve un problema:

1 Que el algoritmo sea facil de entender, codificar y depurar.


2 Que el algoritmo use eficientemente los recursos del computador y, en especial
que se ejecute con la mayor rapidez posible.

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

Augusto Cortez Vásquez Pag. 2/17


Algorítmica III – Formalismo, Abstracción 2019 - II

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

Después de que la especificación ha sido realizada, el siguiente paso consiste en


responder ¿cómo se consigue la función pretendida?, a este paso se le denomina
implementación [6]

La especificación de un algoritmo tiene un doble destinatario:


Los usuarios del algoritmo.- La especificación debe incluir todo lo necesario para
el uso correcto de los programas, así como las obligaciones del usuario cuando
invoque al algoritmo
El implementador del algoritmo(programador) .- La especificación debe incluir
las restricciones que el implementador debe considerar en el programa.

Augusto Cortez Vásquez Pag. 3/17


Algorítmica III – Formalismo, Abstracción 2019 - II

Una solución mal especificada producirá un programa que no satisface el requerimiento


del problema planteado.

Consideremos un lenguaje hipotético como un conjunto que contiene:

1 Todos los operadores aritméticos y funciones de biblioteca


2 Bloques de sentencias que comienzan con una llave { y termina con un }.
3 La estructura de decisión Si..Entonces.. Fin_si
La estructura repetitiva Mientras hacer .. Fin_Hacer

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}

Si P es una parte de un código, entonces:

Una precondición de P, es cualquier aserción {A} que solo implica el estado


inicial.

Una postcondición de P, es cualquier aserción {B} que solo implica el estado


final.
Si P tiene como precondición a {A} y postcondición a {B}, escribimos la terna :
{A} P {B} , llamada la terna de Hoare.

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

es obvio que x, y son modificados por el codigo.


Supongamos que B: { x = X; y = Y} resultados de x , y despues de ejecutar el
codigo.
Puede verse que el codigo realiza el intercambio de los valores de x , y, es decir
X= x ; Y = y.

Augusto Cortez Vásquez Pag. 4/17


Algorítmica III – Formalismo, Abstracción 2019 - II

Ejemplo 2

Considere el código:
a := 1/b precondición {b ‡ 0}
postcondición {a = 1/b}

terna de Hoare : {b ‡ 0}a:=1/b {a = 1/b}

Ejemplo 3
Queremos especificar un algoritmo que verifique si en una matriz existen dos
columnas con igual suma de sus elementos

Definimos TIPO MAT = MATRIZ [1..MAX, 1..MAX] de enteros

A : { 1 M,N  MAX , M=N, es decir A es cuadrada}


P : FUN VERIFCACOLU(A:MAT, M,N:entero) DEV (b : booleano)
M M
B : { b  p, q  {1..n} tal que
}  A[i ,p] =  A[j ,q]
i=1 j=1

Ejemplo 4
Queremos especificar un algoritmo que halla la recta L que pase por dos puntos
PyQ

Sea el tipo struct punto{ x: real,


y: real}

Sea el tipo struct recta{ m: real,


b: real}

Sea P = (X1,Y1) Q = (X2,Y2) La recta L se define y = m x + b


Donde m es La pendiente de L

A : { P,Q son de tipo punto , P Q}


P : FUN HallarRecta(P,Q: punto) DEV (L : recta)
B : { L : m= (Y2-Y1)/( X2-X1) b = Y1- m X1 }

Ejemplo 5
Se quiere especificar un algoritmo para ordenar en forma ascendente la fila K de la
matriz A de orden MxN.

Definimos TIPO MAT = MATRIZ [1..MAX, 1..MAX] de enteros


A : { 1 M,N  MAX , 1 K  M }

Augusto Cortez Vásquez Pag. 5/17


Algorítmica III – Formalismo, Abstracción 2019 - II

P : FUN ORDENARFILA(A:MAT, M,N:entero, K : ENTERO) DEV (a:


MAT)
B : {  i  {1..N-1} , A[K , i]  A[K , i+1]

Como la fila K es fija, podemos considerarla como si fuera un vector. Entonces


nos encargaremos de ordenar el vector. Para ello fijamos K y comparamos el
elemento A[K , i] con A[K , i+1]

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

REGLAS DE LAS PRECONDICIONES Y POSTCONDICIONES

- Si A y B son aserciones y A ⎯⎯➢ B, entonces se dice que A es mas fuerte que


B.

- Si A es mas fuerte que B, entonces se dice que B es mas débil que A

REFORZAMIENTO DE PRECONDICIONES

Si una parte de un código P es correcta bajo una precondición {A}, entonces


permanece correcta si se refuerza{A}.

Si {A} P {B} es correcto. Y se demuestra que


A1 ⎯⎯➢A , entonces, {A1} P {B} es correcto,

es decir
A1 ⎯⎯➢ A
{A} P {B}

{A1} P {B}

El programa P que tenga la precondicion mas debil es el programa mas


general.

Augusto Cortez Vásquez Pag. 6/17


Algorítmica III – Formalismo, Abstracción 2019 - II

Ejemplo 7

{x‡0} y:=1/x {y=1/x}


x = 5 ⎯⎯➢ x ‡ 0
{x=5} y:=1/x {y=1/x}

{x  0} y := raíz(x) {x = y2}
x  1 ⎯⎯➢ x  0
{ x  1} y := raíz(x) {x = y2}

{x<5} x:= x -1 {x <4}


x = 4 ⎯⎯➢ x < 5
{x=4} x:=x - 1 {y<4}

Ejemplo 8
Queremos especificar un algoritmo que calcule el cociente por defecto y el resto de
la division entera de dos enteros

A:{b0}
P : FUN DIVIDE (a,b : entero) DEV (q,r:entero)
B : { a =b*q + r }
Una implementacion de divide puede ser

P : q = 0 ; r = a ,pues satisface la postcondicion B


Sin embargo eso no es lo que se pretende implementar

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

Queremos especificar un algoritmo que calcule el valor máximo en un vector de


enteros tipo VECT
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() }

B resulta muy debil y aceptaria una implementacion


P : x = K donde K > maximo{V()}
Pero no calcula realmente el maximo de V[1..100]

Augusto Cortez Vásquez Pag. 7/17


Algorítmica III – Formalismo, Abstracción 2019 - II

Reforzamos la precondicion

B :{   {1..n} . x  V()}{    {1..n} . x = V()}

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}.

Si {A} P {B} es correcto. Y se demuestra que


B B1 , entonces, {A} P { B1} es correcto
Es decir
{A} P {B}
B ⎯⎯➢B1
{A} P {B1}

Si el estado final de P saatisface B, siempre que el estado inicial satisface A,


y ademas B ⎯⎯➢B1, entonces el estado final de P debe satisfacer tambien
B1.

Ejemplo 10
Consideremos los ssiguientes ejemplos

· {} mayor = a {mayor =a}


(mayor = a) ⎯⎯➢ (mayor  a)
{} mayor = a {mayor  a}

· {x>6} y= x+2 {x>6 ,y>8}


{y>8} ÿ {x>6} ⎯⎯➢ {y>8}
{x>6} y= x+2 {y>8}

REGLA DE CONJUNCION

Si P es un código, y {A1} P {B1} y {A2} P {B2} son correctos, se puede


afirmar que {A1  A2} P {B1  B2} tambien lo es. Es decir

{A1} P {B1}

Augusto Cortez Vásquez Pag. 8/17


Algorítmica III – Formalismo, Abstracción 2019 - II

{A2} P {B2}

{A1  A2} P {B1  B2}.

Ejemplo 11

premisa {} a:=a+2 { af:=ai+2}


premisa {ai >0} a:=a+2 { ai >0}

conclusion {ai >0} a:=a+2 {(ai >0)( af:=ai+2)}

ai : estado actual af : estado final

podemos verificar que la postcondicion se debilita, produciendo una


nueva postcondicion

1 ( ai >0)  ( af:=ai+2) postcondicion


2 ( ai >0)  ( ai:=af-2) aritmetica
3 (af-2 >0)  ( ai:=af-2) reemplazo
4 ( af-2 > 0) simplificacion
5 ( af > 2)

el debilitamiento de la postcondicion produce que:


conclusion {ai > 0} a:=a+2 {ai > 0}

Ejemplo 12

Queremos especificar un algoritmo que calcule el área de un triangulo

Diagrama de entrada y salida

base area

altura

Augusto Cortez Vásquez Pag. 9/17


Algorítmica III – Formalismo, Abstracción 2019 - II

A: { base, altura >0 }


P: FUN AREATRIANGULO(base, altura : entero) DEV (área: real)
B: { área = (base*altura)/2 }

Accion AREATRIANGULO ( )
Inicio
Leer base, altura
área = (base*altura)/2
escribir area
Fin

Ejemplo 13

Queremos especificar un algoritmo que calcule el volumen de un cilindro

Diagrama de entrada y salida

r V

A: { r, h € R+ }
P: FUN VOLUMENCILINDRO (r, h :real) DEV (V: real)
B: { V = (3.14 r2 h }

Augusto Cortez Vásquez Pag. 10/17


Algorítmica III – Formalismo, Abstracción 2019 - II

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

Diagrama deentrada y salida

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() }

B resulta muy débil y aceptaría una implementación


P : x = K donde K > máximo{V()}
Pero no calcula realmente el máximo de V[1..100]

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.

Entrada : a,b : enteros


Salida : m: entero

Diagrama de entrada y salida


a m

A : { a , b  + }
P : MCD(a: entero, b: entero ) Dev ( m: entero)
B:{ m   + / m = máximo{ A}; A ={ x   + / x / a  x / b} }

Nota: x / a quiere decir que: a contiene un número entero de x; es decir :

Augusto Cortez Vásquez Pag. 11/17


Algorítmica III – Formalismo, Abstracción 2019 - II

a  x=m+r→ a=m*x
es por esto que ya no hace falta restringir el valor de X

Ejemplo 16

Hallar el Mínimo Común Múltiplo de dos números.


Entrada : a,b : Entero
Salida : m: Entero

Diagrama de entrada y salida


a m

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)

Diagrama de entrada y salida

h Dist

Augusto Cortez Vásquez Pag. 12/17


Algorítmica III – Formalismo, Abstracción 2019 - II

Precondición: h, ɤ : reales positivos


FUN DISTANCIA(h, ɤ : real ) Dev ( Dist : real)
Poscondición: Dist = h Cot ɤ

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

Las distancias halladas son: dista(3, 8) = 5


dista(8, -1) = 9
| dista(-1,12) = 13
dista(12, 13) = 1
dista(13, 2) = 11
dista(2, -1) = 3
por tanto dM = 13 dm = 1

Entrada : N : Cantidad de números S : secuencia de N números


Salida : dM : distancia mayor
dm : distancia menor
Terna de Hoare
A : { N : entero positivo}
P : FUN Distancia Menor (N:entero , S : secuencia de N números) DEV (dM, dm :
números)
B : { dM = Max{Abs(ai+1 – ai ) .  i  {1..N-1}
dm = Min {Abs(ai+1 – ai ) .  i  {1..N-1} }

N dM
S dm

Augusto Cortez Vásquez Pag. 13/17


Algorítmica III – Formalismo, Abstracción 2019 - II

Accion Distancia Menor( ) Implementacion en C


Inicio void main()
Leer N { int n,x,dm,dM,d,y,i;
Leer x cout<< "Ingrese los numeros deseados";
y=x cin>> n;
Leer x cin>> x;
d=ABS(x-y) y=x;
dM = d cin>> x;
dm = d d=Math.abs(x-y);
Para i desde 3 hasta N dM=d;
Y=x dm=d;
Leer x for(i=3;i<=n;i++)
d=ABS(x-y) { y=x;
Si ( d > dM) cin>>x;
dM = d d=Math.abs(x-y);
FinSi if(d<dm)
Si ( d < dm) dm=d;
dm = d if(d>dM)
FinSi dM=d;
FinPara }
Escribir dM, dM cout<< "la distancia mayor es " + dM ;
Fin cout<<”la distancia menor es ” +dm";
}
}
Ejemplo 19

Queremos especificar un algoritmo que a partir de un vector de N enteros encuentre la


subsecuencia de valor máximo (la suma es cero si todos los números son negativos)
Este problema resulta interesante sobretodo porque existen muchos algoritmos para
resolverlo, y su rendimiento varía drásticamente. Estudiaremos cuatro algoritmos para
resolver este problema.

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

Augusto Cortez Vásquez Pag. 14/17


Algorítmica III – Formalismo, Abstracción 2019 - II

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

Augusto Cortez Vásquez Pag. 15/17


Algorítmica III – Formalismo, Abstracción 2019 - II

Ejercicios propuestos
I Proporcione una especificación para

1. Verificar si una matriz tienen dos columnas iguales


2. Verificar si una matriz tiene dos columnas con los mismos elementos
3. Verificar si una matriz tiene dos filas con los mismos elementos
4. Hallar un el volumen de un CONO
5. Hallar el volumen de una ESFERA
6. Hallar el mayor elemento de un vector
7. Comparar si dos matrices son iguales o no
8. Verificar si un vector esta ordenado o no
9. Especificar una función que dado un natural n, decida si es o no un numero
GUAY.
10. Quien domina entre las dos funciones 2n y 3n
11. Hallar la media cuadrática de una sucesión de números tomados de una fila
secuencial (la media cuadrática es igual a la raíz del cociente entre la suma
de los cuadrados de los números entre la cantidad de números)
12. Construya un algoritmo para determinar el numero de permutaciones que se
puede hallar con n objetos diferentes tomados de r en r
13. Construya un algoritmo para determinar el numero de combinaciones que
se puede hallar con n objetos diferentes tomados de r en r
14. Verificar si un árbol binario es un árbol de búsqueda ( u ordenado)
15. Hallar la media armónica H de los números (x) tomados de una fila
secuencial (1/H = 1/N * 1/x)
16. Considere las comunidades C1,C2…Cn, Dij es la distancia de la comunidad
i a la comunidad j. pi es la población de la comunidad i. Se quiere construir
un centro comunal de alfabetización para todas las comunidades, para ello
deberá elegirse un lugar físico en la comunidad con menor costo de
desplazamiento. Especifique e implemente una solución.
17. Los alumnos de la facultad reciben una asignación mensual que les envía
sus padres para sufragar gastos de medicina, estudios, movilidad, vestido
entre otras. Especifique e implemente una solución que permita atender los
siguientes requerimientos:
a. Cuanto gasto el alumno x en el mes mi
b. Cuanto gasto el alumno x en el rubro ri
c. En que mes gasto mas el alumno x
d. En que rubro gasto mas el alumno x

18. Los alumnos regulares de la facultad de medicina tienen edades entre 16 y


24 años. Se quiere hallar el promedio de las edades y la variancia respecto
de la media. No deberá considerarse los alumnos con edad fuera del rango
regular.
19. Construya un algoritmo para reducir una fracción determinada a sus
términos mas elementales (ejem: 4/6 o 200/300 se reduce a la expresión
elemental 2/3)
20. Hallar el elemento mayoría de un vector. Un elemento es mayoría si se
repite mas de n/2 veces, donde n es la longitud del vector

Responda Solo los ejercicios pares o los impares

Augusto Cortez Vásquez Pag. 16/17


Algorítmica III – Formalismo, Abstracción 2019 - II

II Estimase la complejidad espacial, complejidad temporal y orden asintótico de


los ejercicios de pregunta 1

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.

Augusto Cortez Vásquez Pag. 17/17

También podría gustarte