Sei sulla pagina 1di 10

Algoritmos y Estructuras de Datos I

Objetivo: Aprender a programar en lenguajes imperativos.

Algoritmos y Estructuras de Datos I


I

Especificar problemas.
I

Primer cuatrimestre de 2015

Departamento de Computaci
on - FCEyN - UBA

Escribir programas.
I

Especificacion - clase 1

Introduccion a la especificacion de problemas


Logica proposicional

Describirlos en lenguaje formal.

En esta materia nos concentramos en programas para


tratamiento de secuencias.

Razonar acerca de estos programas.


I
I

Obtener una vision abstracta del computo.


Definir un manejo simbolico y herramientas para demostrar
propiedades de nuestros programas.
Probar correccion de un programa respecto de su
especificacion.

Algoritmos y Estructuras de Datos I

Algoritmos y Estructuras de Datos I

Contenidos
Regimen de aprobacion

1. Especificaci
on de problemas
I Lenguaje formal cercano a la l
ogica proposicional

2. Introducci
on a la programacion imperativa
I Sem
antica por transformacion de estados
I Correctitud para especificaci
on dada

Parciales
I
I

3. Estructuras de datos
I Especificaci
on de tipos de datos
I Implementaci
on de tipos mediante estructuras de datos

Trabajos practicos
I
I
I

4. Algoritmos sobre secuencias


I B
usqueda lineal
I B
usqueda binaria
I Algortimos de ordenamiento
I Intercalaci
on ordenada (merge) y otros con dos secuencias

2 parciales
2 recuperatorios (al final de la cursada)

2 entregas
2 recuperatorios (cada uno a continuacion)
Grupos de 4 alumnos

Examen final o un coloquio (en caso de tener dado el final de

Algebra
I al finalizar la cursada)

Calificacion final: promedio de la cursada y el nota del coloquio, donde:


cursada =

5. Noci
on de complejidad tiempo.

p1 + p2 + t1 + t2
4

6. Algoritmos y estructuras de datos dinamicas.


3

Bibliografa
I The Science of Programming
David Gries
Springer Verlag, 1981
I A Method of Programming
Edsger Dijkstra, W. H. Feijen
Addison-Wesley Longman, 1988

algo1-alu@dc.uba.ar

I Structured Programming
Edsger Dijkstra, C. A. R. Hoare, Ole-Johan Dahl
Academic Press, 1972

algo1-doc@dc.uba.ar

I A Discipline of Programming
Edsger Dijkstra
Prentice Hall , 1976
I Mathematical Logic: A Course With Exercises, Part 1
Ren
e Cori, Daniel Lascar.
Oxford University Press, 2000
I Reasoned programming
K. Broda, S. Eisenbach, H. Khoshnevisan, S. Vickers,
Prentice-Hall, 1994
5

Que es una computadora?

Que es un algoritmo?

Una computadora es una maquina que procesa informaci


on
automaticamente de acuerdo con un programa almacenado.

1. Es una maquina.
2. Su funcion es procesar informacion, y estos terminos deben
entenderse en sentido amplio.
3. El procesamiento se realiza en forma automatica.
4. El procesamiento se realiza siguiendo un programa.
5. Este programa esta almacenado en una memoria interna de la
misma computadora.

Un algoritmo es la especificacion de una sucesion de pasos


primitivos para resolver un problema a partir de datos de entrada
adecuados.
1.
2.
3.
4.

Es la especificacion de los pasos a dar.


Especifica una sucesion de pasos primitivos.
El objetivo es resolver un problema.
Un algoritmo tpicamente trabaja a partir de datos de entrada.

Que es un programa?

Especificacion, algoritmo, programa


1. Especificaci
on: descripcion del problema a resolver.
I
I

Un programa es la descripcion de un algoritmo en un lenguaje de


programacion.

1. Corresponde a la implementacion concreta del algoritmo para


ser ejecutado en una computadora.
2. Se describe en un lenguaje de programaci
on.

Que problema tenemos?


Habitualmente, dada en lenguaje formal.
Es un contrato que da las propiedades de los datos de entrada
y las propiedades de la solucion.

2. Algoritmo: descripcion de la solucion escrita para humanos.


I

Como resolvemos el problema?

3. Programa: descripcion de la solucion para ser ejecutada en una


computadora.
I
I

Tambien, como resolvemos el problema?


Escrito en un lenguaje de programacion.

Etapas en el desarrollo de programas

10

1. Especificacion

1. Especificaci
on
Definici
on formal del problema.
2. Dise
no general
Determinar las componentes de la solucion.
3. Dise
no de algoritmos
Dar algoritmos para cada componente.
4. Programaci
on y validaci
on
Implementar los algoritmos y asegurarse de que la implementaci
on
es correcta.

El planteo inicial del problema puede ser vago y ambiguo.

Al especificar damos una descripcion clara y precisa en lenguaje


formal, por ejemplo, el lenguaje de la logica matematica.

Por ejemplo, calcular de edad de una persona es una definicion


imprecisa del problema (por que?).

+Info: AED1, AED2.

5. Instrumentaci
on y mantenimiento
Puesta en practica del programa implementado. Correcci
on de
errores e introduccion de cambios para responder a nuevos
requerimientos.

11

12

2. Diseno general

Varios programas o uno muy complejo?

C
omo dividirlo en partes?

Distintas partes en distintas maquinas?

Programas ya hechos con los que interactuar?

+Info: AED2, IS1, IS2.

3. Diseno de algoritmos

Escribir un algoritmo para dar solucion a cada componente en la


que se subdividio la solucion.

El objetivo mas importante es que los algoritmos propuestos sean


correctos.

Objetivos secundarios (o no tanto!):


1.
2.
3.
4.

Tiempo de ejecucion.
Uso de memoria.
Uso de otros recursos.
etc.

+Info: AED1, AED2, AED3.

13

4. Programacion y validacion

5. Instrumentacion y mantenimiento

Traducimos el algoritmo a un lenguaje adecuado para ser ejecutado


por una computadora.
I

14

Lenguajes naturales vs lenguajes formales.

Tomamos las acciones necesarias para asegurarnos de que la


implementacion reproduce adecuadamente el algoritmo propuesto.

Poner en practica el programa en el entorno final.

Si tiempo despues encontramos errores o cambian los


requerimientos, es necesario volver a las etapas anteriores para
revisar el programa.

+Info: IS1, IS2.

+Info: TL, IS1, IS2.

15

16

Especificacion de problemas

Parametros y tipos de datos


I

La especificacion de un problema incluye un conjunto de


parametros: datos de entrada cuyos valores seran conocidos recien
al ejecutar el programa.

Cada parametro tiene un tipo de datos.

Una especificacion es un contrato que define que se debe resolver y


que propiedades debe tener la solucion.
1. Define el que y no el como.

Ademas de cumplir un rol contractual, la especificaci


on del
problema es insumo para las actividades de ...

Ejemplo 1: parametros de tipo fecha


I

1. testing,
2. verificacion formal de correccion,
3. derivacion formal (construir un programa a partir de la
especificacion).

Tipo de datos: Conjunto de valores provisto de ciertas


operaciones para trabajar con estos valores.

valores: ternas de n
umeros enteros
operaciones: comparacion, obtener el a
no, ...

Ejemplo 2: parametros de tipo dinero


I
I

valores: n
umeros reales con dos decimales
operaciones: suma, resta, ...

18

17

Contratos

Partes de una especificacion (contrato)

Una especificacion es un contrato entre el programador de una


funci
on y el usuario de esa funcion.

1. Encabezado

Ejemplo: calcular la raz cuadrada de un n


umero real.

2. Precondicion o clausula requiere

C
omo es la especificacion (informalmente, por ahora) de este
problema?

Para hacer el calculo, el programa debe recibir un n


umero no
negativo.

I
I

3. Postcondicion o clausula asegura

Obligacion del usuario: no puede proveer n


umeros negativos.
Derecho del programador: puede suponer que el argumento
recibido no es negativo.

El resultado va a ser la raz cuadrada del n


umero recibido.
I

Condicion sobre los argumentos, que el programador da por


cierta.
Especifica lo que requiere la funcion para hacer su tarea.
Por ejemplo: el valor de entrada es un real no negativo

Obligacion del programador: debe calcular la raz, siempre y


cuando haya recibido un n
umero no negativo
Derecho del usuario: puede suponer que el resultado va a ser
correcto

19

Condicion sobre el resultado, que debe ser cumplida por el


programador siempre y cuando el usuario haya cumplido la
precondicion.
Especifica lo que la funcion asegura que se va a cumplir
despues de llamarla (si se cumpla la precondicion).
Por ejemplo: la salida es la raz cuadrada del valor de
entrada
20

El contrato
I

Contrato: El programador escribe un programa P tal que si el


usuario suministra datos que hacen verdadera la precondici
on,
entonces P termina en una cantidad finita de pasos retornando un
valor que hace verdadera la postcondicion.

El programa P es correcto para la especificaci


on dada por la
precondici
on y la postcondicion exactamente cuando se cumple el
contrato.

Si el usuario no cumple la precondicion y P se cuelga o no cumple la


poscondici
on...
I
I

Lenguaje de especificacion

el usuario tiene derecho a quejarse?


Se cumple el contrato?

Si el usuario cumple la precondicion y P se cuelga o no cumple la


poscondicion...
I
I

el usuario tiene derecho a quejarse?


Se cumple el contrato?
22

21

Encabezado de un problema

Ejemplos
problema rcuad(x : Float) = result : Float {
requiere x 0;
asegura result result == x;
}

problema nombre(parametros) = nombreRes : tipoRes

problema suma(x : Int, y : Int) = result : Int {


asegura result == x + y ;
}

nombre: nombre que le damos al problema


I

sera resuelto por una funcion con ese mismo nombre

nombreRes: nombre que le damos al resultado

tipoRes: tipo de datos del resultado

parametros: lista que da el tipo y el nombre de cada uno

problema resta(x : Int, y : Int) = result : Int {


asegura result == x y ;
}
problema cualquieramayor (x : Int) = result : Int {
asegura result > x;
}
23

24

Argumentos que se modifican (modifica y usa pre())

Otro ejemplo

Problema: Incrementar en 1 el argumento de entrada.


I

Dados dos enteros dividendo y divisor, obtener el cociente entero entre


ellos.

Alternativa sin modificar la entrada (usual).

problema cociente(dividendo : Int, divisor : Int) = result : Int {


requiere divisor > 0;
asegura (result divisor dividendo)
asegura ((result + 1) divisor > dividendo)
}

problema incremento(a : Int) = res : Int{


asegura res == a + 1;
}
I

Alternativa que modifica la entrada: usamos el mismo argumento


para la entrada y para la salida.

Que sucede si ejecutamos ...

problema incremento-modificando(a : Int){


modifica a;
asegura a == pre(a) + 1;
}
I

cociente(1,0)?

cociente(-4,-2) y retorna 2?

cociente(-4,-2) y retorna 0?

cociente(4,-2) y no termina?

Observar que en este caso la funcion no tiene un resultado en su


nombre.
25

Argumentos de salida (modifica, no usa pre())

26

Dos argumentos de salida (modifica, no usa pre)

Problema: Calcular el cociente y el resto entre dos enteros.

Problema: Calcular el cociente y el resto entre dos enteros

Cociente: el resultado de la funcion.

Cociente y resto: ambos argumentos modificables

Resto: argumento modificable.

La funcion no retorna un resultado.

problema cocienteModificaResto(a, b, r : Int) = q : Int {


requiere b > 0;
modifica r ;
asegura a == q b + r 0 r < b; }

problema ModificaCocienteYModificaResto(a, b, q, r : Int){


requiere b > 0;
modifica q, r ;
asegura a == q b + r 0 r < b; }

27

28

Sobre-especificacion
I

Consiste en dar una postcondicion mas restrictiva que lo que se


necesita, o bien dar una precondicion mas laxa.

Limita excesivamente los posibles algoritmos que resuelven el


problema, porque impone mas condiciones para la salida, o ampla
los datos de entrada.

Ejemplo:

Sub-especificacion
I

Consiste en dar una una precondicion mas restrictiva que lo


realmente necesario, o bien una postcondicion mas debil que la que
se podra dar.

Deja afuera datos de entrada o ignora condiciones necesarias para la


salida (permite soluciones no deseadas).

Ejemplo:
problema distinto(x : Int) = res : Int {
requiere x > 0;
asegura not(res == x)
}

problema distinto(x : Int) = res : Int {


asegura res == x + 1;
}
... en vez de:

... en vez de:

problema distinto(x : Int) = res : Int {

problema distinto(x : Int) = res : Int {


asegura not(res == x)
}

asegura not(res == x)
}
29

Ultimo
ejemplo (por hoy)

Especificar los siguientes problemas


I

Calcular la funcion signo.


problema signo(x : Float) = r : Int {
asegura(r == 0 x == 0) (r == 1 x < 0) (r == 1 x > 0)
}

Calcular el area de un triangulo rectangulo.


problema area(x, y : Float) = r : Float {
requiere x > 0
requiere y > 0
asegura r == x y /2
}

30

Dada una hora, minutos y segundos correspondientes a una hora de la


ma
nana, dar la cantidad de segundos que faltan hasta el medioda.
problema hastamediodia(h, m, s : Int) = r : Int {
requiere 0 h < 12
requiere 0 m < 60
requiere 0 s < 60
asegura r + (h 60 + m) 60 + s == 12 60 60
}

Encontrar una raz de un polinomio de grado 2.


problema raizPolinmioGrado2(a, b, c : Float) = r : Int {
requiere a 6= 0
requiere b b 4 a c
asegura a r r + b r + c == 0
}
31

32

Logica proposicional - sintaxis


I

Smbolos:
true , false , , , , , , , ( , )

Logica proposicional

Variables proposicionales (infinitas)


p , q , r , ...

Formulas
1. true, false y son formulas
2. Cualquier variable proposicional es una formula
3. Si A es una f
ormula, A es una formula
4. Si A1 , A2 , . . . , An son formulas, (A1 A2 An ) es una
formula
5. Si A1 , A2 , . . . , An son formulas, (A1 A2 An ) es una
formula
6. Si A y B son formulas, (A B) es una formula
7. Si A y B son formulas, (A B) es una formula
34

33

Semantica clasica
I

Semantica clasica

Dos valores de verdad posibles

Conociendo el valor de las variables proposicionales de una formula,


conocemos el valor de verdad de la formula

1. verdadero (1)
2. falso (0)
I

p
1
0

El valor de verdad de una formula se obtiene a partir del valor de


verdad de sus subformulas.
I
I
I
I
I
I
I

true siempre vale 1


false siempre vale 0
A se interpreta como no, se llama negaci
on
se interpreta como y, se llama conjunci
on
se interpreta como o (no exclusivo), se llama disyunci
on
se interpreta como si... entonces, se llama implicaci
on
se interpreta como si y solo si, se llama doble implicaci
on
o equivalencia

p
1
1
0
0

35

p
1
1
0
0

p
0
1

q
1
0
1
0

(p q)
1
0
1
1

q
1
0
1
0

(p q)
1
0
0
0

p
1
1
0
0
p
1
1
0
0

q
1
0
1
0

q
1
0
1
0

(p q)
1
1
1
0

(p q)
1
0
0
1

36

Ejemplo: tabla de verdad para ((p q) r )

p
1
1
1
1
0
0
0
0

q
1
1
0
0
1
1
0
0

r
1
0
1
0
1
0
1
0

(p q)
1
1
0
0
0
0
0
0

Un ejercicio

Escribir la siguiente frase como una f


ormula de l
ogica proposicional.

((p q) r )
1
0
1
1
1
1
1
1

Si Juan est
a cursando y no conoce a nadie entonces Juan todava no tiene grupo
I Soluci
on:
p = Juan est
a cursando
q = Juan no conoce a nadie
r = Juan no tiene grupo
(p q) = r

38

37

Otro ejercicio

Otro ejercicio

Sean p = Juan est


a cursando; q= Juan no conoce a nadie; r = Juan no tiene grupo.
C
omo se formalizan las siguientes afirmaciones?
Cu
ales de las siguientes son una especificaci
on adecuada para el problema de decidir
si un n
umero entero es positivo?

1. Si Juan est
a cursando entonces no tiene grupo.
Soluci
on: (p = r )

problema esPositivo (x : Int) = r : Bool

2. Si Juan no tiene grupo entonces Juan no conoce a nadie.


1. asegura(x > 0 r == true)

Soluci
on: (r = q)

2. asegura(x > 0 r == true) (x <= 0 r == false)

3. Si Juan est
a cursando y no tiene grupo entonces Juan no conoce a nadie.
Soluci
on: (p r ) = q

3. asegura(x > 0 r == true) (x <= 0 r == false)

4. Si Juan no conoce a nadie entonces est


a cursando y no tiene grupo.

4. asegura(x > 0 = r == true)

Soluci
on: q = (p r )

5. asegura(x > 0 = r == true) (x <= 0 = r == false)

5. Si Juan no conoce a nadie entonces est


a cursando o no tiene grupo.

6. asegura(x > 0 = r == true)

Soluci
on: q = (p r )

7. asegura(x > 0 r == true)

6. Si Juan tiene grupo entonces Juan conoce a alguien.

8. asegura(x <= 0 r == false)

Soluci
on: r = q
7. Si Juan tiene grupo, es imposible que est
e cursando y no conozca a nadie
Soluci
on: r = (p q)
39

40

Potrebbero piacerti anche