• No se han encontrado resultados

Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I

N/A
N/A
Protected

Academic year: 2022

Share "Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I. Algoritmos y Estructuras de Datos I"

Copied!
10
0
0

Texto completo

(1)

Algoritmos y Estructuras de Datos I

Primer cuatrimestre de 2017

Departamento de Computaci´on - FCEyN - UBA

Especificaci´on - clase 1

Introducci´on a la especificaci´on de problemas L´ogica proposicional

1

Algoritmos y Estructuras de Datos I

Objetivo: Aprender a programar enlenguajes imperativos.

“Computadora, mata a Flanders...”

...

2

Algoritmos y Estructuras de Datos I

Objetivo: Aprender a programar enlenguajes imperativos.

I Especificar problemas.

I Describirlos en lenguaje formal.

I Escribir programas.

I En esta materia nos concentramos en programas para tratamiento de secuencias.

I Razonar acerca de estos programas.

I Obtener una visi´on abstracta del c´omputo.

I Definir un manejo simb´olico y herramientas para demostrar propiedades de nuestros programas.

I Probarcorrecci´onde un programa respecto de su especificaci´on.

Algoritmos y Estructuras de Datos I

Contenidos

1. Especificaci´on de problemas

I Lenguaje formal cercano a la l´ogica proposicional 2. Programaci´on imperativa

I Lenguaje de programaci´on imperativo

I Correctitud de un programa usando precondici´on m´as d´ebil 3. Algoritmos sobre secuencias y matrices

(2)

Algoritmos y Estructuras de Datos I

R´egimen de aprobaci´on

I Parciales (Turno Tarde - Se aprueba con 60)

I 2 parciales

I 2 recuperatorios (al final de la cursada)

I Trabajos pr´acticos

I 2 entregas (aprobado o desaprobado)

I 2 recuperatorios (cada uno a continuaci´on)

I Grupos de 4 alumnos (inscripci´on presencial+LU con Algebra Firmada)

I Examen final o un coloquio (en caso de tener dado el final de Algebra I al finalizar la cursada)´

Calificaci´on final: promedio de la cursada y la nota del coloquio, donde:

cursada =p1+ p2 2

5

[email protected] [email protected]

6

Bibliograf´ıa

I ¿C´omo pensamos y programamos?

I The Science of Programming. David Gries. Springer Verlag, 1981

I Reasoned programming. K. Broda, S. Eisenbach, H.

Khoshnevisan, S. Vickers. Prentice-Hall, 1994

I Testing de Programas

I Software Testing and Analysis: Process, Principles and Techniques. M. Pezze, M. Young, Wiley, 2007.

I Referencia del lenguaje que usaremos

I The C++ Programming Language, 4th Edition. B.

Stroustrup. Addison-Wesley Professional, 2003

¿Qu´ e es una computadora?

I Una computadora es una m´aquina que procesa informaci´on autom´aticamente de acuerdo con un programa almacenado.

1. Es unam´aquina.

2. Su funci´on esprocesar informaci´on, y estos t´erminos deben entenderse en sentido amplio.

3. El procesamiento se realiza en formaautom´atica.

4. El procesamiento se realiza siguiendo unprograma.

5. Este programa est´aalmacenadoen una memoria interna de la misma computadora.

(3)

¿Qu´ e es un algoritmo?

I Un algoritmo es la descripci´on de los pasos precisos para resolver un problema a partir de datos de entrada adecuados.

1. Es ladescripci´onde los pasos a dar.

2. Especifica una sucesi´on depasos primitivos.

3. El objetivo es resolver unproblema.

4. Un algoritmo t´ıpicamente trabaja a partir dedatos de entrada.

9

Ejemplo: Un Algoritmo

I Problema: Encontrar todos los n´umeros primos menores que un n´umero natural dado n

I Algoritmo: Criba de Erat´ostenes (276 AC - 194 AC) [1.] Escriba todos los n´umeros naturales anteriores a n [2.] Para i ∈ Z desde 2 hasta√n

[1.] Si i no ha sido marcado, entonces:

[1.] Para j ∈ Z desde i hasta [n/i] haga lo siguiente:

[1.] Ponga una marca en el n´umero i × j

10

¿Qu´ e es un programa?

I Un programa es la descripci´on de un algoritmo en un lenguaje de programaci´on.

1. Corresponde a la implementaci´on concreta del algoritmo para ser ejecutado en una computadora.

2. Se describe en unlenguaje de programaci´on.

Ejemplo: Un Programa (en Haskell)

Implementaci´on de la Criba de Erat´ostenes en el lenguaje de programaci´on Haskell

erastotenes : : Int → [ Int ]

erastotenes n = erastotenes2 [ x | x ← [ 2 . . n ] ] 0

erastotenes2 : : [ Int ] → Int → [ Int ] erastotenes2 l i s t a n

| n == length l i s t a−1 = l i s t a

| otherwise=erastotenes2

[ x | x ← l i s t a , ( x ‘mod‘ l i s t a ! ! n)/=0 | | x==l i s t a ! ! n ] (n+1)

(4)

Especificaci´ on, algoritmo, programa

1. Especificaci´on: descripci´on del problema a resolver.

I ¿Qu´eproblema tenemos?

I Habitualmente, dada en lenguaje formal.

I Es un contrato que da las propiedades de los datos de entrada y las propiedades de la soluci´on.

2. Algoritmo: descripci´on de la soluci´on escrita para humanos.

I ¿C´omoresolvemos el problema?

3. Programa: descripci´on de la soluci´on para ser ejecutada en una computadora.

I Tambi´en, ¿c´omoresolvemos el problema?

I Pero escrito en un lenguaje de programaci´on.

13

Etapas en el desarrollo de programas

1. Especificaci´on

Definici´on formal del problema.

2. Dise˜no general

Determinar las componentes de la soluci´on.

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.

5. Instrumentaci´on y mantenimiento

Puesta en pr´actica del programa implementado. Correcci´on de errores e introducci´on de cambios para responder a nuevos requerimientos.

14

1. Especificaci´ on

I El planteo inicial del problema puede ser vago y ambiguo.

I Al especificar damos una descripci´on clara y precisa en lenguaje formal, por ejemplo, el lenguaje de la l´ogica matem´atica.

I Por ejemplo, “calcular la edad de una persona” es una definici´on imprecisa del problema (¿por qu´e?).

I +Info:AED1, AED2.

2. Dise˜ no general

I ¿Varios programas o uno muy complejo?

I ¿C´omo dividirlo en partes?

I ¿Distintas partes en distintas m´aquinas?

I ¿Programas ya hechos con los que interactuar?

I +Info:AED2, IS1, IS2.

(5)

3. Dise˜ no de algoritmos

I Escribir unalgoritmopara dar soluci´on a cada componente en la que se subdividi´o la soluci´on.

I El objetivo m´as importante es que los algoritmos propuestos sean correctos.

I Objetivos secundarios (o no tanto!):

1. Tiempo de ejecuci´on.

2. Uso de memoria.

3. Uso de otros recursos.

4. etc.

I +Info:AED1, AED2, AED3.

17

4. Programaci´ on y validaci´ on

I Traducimos el algoritmo a un lenguaje adecuado para ser ejecutado por una computadora.

I Lenguajesnaturalesvs lenguajesformales.

I Tomamos las acciones necesarias para asegurarnos de que la implementaci´on reproduce adecuadamente el algoritmo propuesto.

I +Info:TL, IS1, IS2.

18

5. Instrumentaci´ on y mantenimiento

I Poner en pr´actica el programa en el entorno final.

I Si tiempo despu´es encontramos errores o cambian los

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

I +Info:IS1, IS2.

Especificaci´ on de problemas

I Unaespecificaci´ones un contrato que define qu´e se debe resolver y qu´e propiedades debe tener la soluci´on.

1. Define elqu´ey no elc´omo.

I Adem´as de cumplir un rol “contractual”, la especificaci´on del problema es insumo para las actividades de ...

1. testing,

2. verificaci´on formal de correcci´on,

3. derivaci´on formal (construir un programa a partir de la especificaci´on).

(6)

Par´ ametros y tipos de datos

I La especificaci´on de un problema incluye un conjunto de

par´ametros: datos de entrada cuyos valores ser´an conocidos reci´en al ejecutar el programa.

I Cada par´ametro tiene untipo de datos.

I Tipo de datos: Conjunto devaloresprovisto de ciertas operacionespara trabajar con estos valores.

I Ejemplo 1: par´ametros de tipo fecha

I valores: ternas de n´umeros enteros

I operaciones: comparaci´on, obtener el a˜no, ...

I Ejemplo 2: par´ametros de tipo dinero

I valores: n´umeros reales con dos decimales

I operaciones: suma, resta, ...

21

Contratos

I Una especificaci´on es uncontratoentre elprogramadorde una funci´on y elusuariode esa funci´on.

I Ejemplo: calcular la ra´ız cuadrada de un n´umero real.

I ¿C´omo es la especificaci´on (informalmente, por ahora) de este problema?

I Para hacer el c´alculo, el programa debe recibir un n´umero no negativo.

I Obligaci´on del usuario: no puede proveer n´umeros negativos.

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

I El resultado va a ser la ra´ız cuadrada del n´umero recibido.

I Obligaci´on del programador: debe calcular la ra´ız, siempre y cuando haya recibido un n´umero no negativo

I Derecho del usuario: puede suponer que el resultado va a ser correcto

22

Partes de una especificaci´ on (contrato)

1. Encabezado

2. Precondici´ono cl´ausula “requiere”

I Condici´on sobre los argumentos, que el programador da por cierta.

I Especifica lo querequierela funci´on para hacer su tarea.

I Por ejemplo: “el valor de entrada es un real no negativo”

3. Postcondici´ono cl´ausula “asegura”

I Condici´on sobre el resultado, que debe ser cumplida por el programador siempre y cuando el usuario haya cumplido la precondici´on.

I Especifica lo que la funci´onaseguraque se va a cumplir despu´es de llamarla (si se cumpl´ıa la precondici´on).

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 postcondici´on.

I El programa P escorrectopara la especificaci´on dada por la precondici´on y la postcondici´on exactamente cuando se cumple el contrato.

I Si el usuario no cumple la precondici´on y P se cuelga o no cumple la poscondici´on...

I ¿el usuario tiene derecho a quejarse?

I ¿Se cumple el contrato?

I Si el usuario cumple la precondici´on y P se cuelga o no cumple la poscondici´on...

(7)

Lenguaje de especificaci´ on

25

Definici´ on de un procedimiento

proc nombre(par´ametros){

Pre { P } Post { Q } }

I nombre: nombre que le damos al problema

I ser´a resuelto por una funci´on con ese mismo nombre

I par´ametros: lista de par´ametros separada por comas, donde cada par´ametro contiene:

I Tipo de pasaje (entrada, salida, entrada y salida)

I Nombre del par´ametro

I Tipo de datos del par´ametro

I P y Q son predicados, denominados laprecondici´ony la postcondici´ondel procedimiento.

26

Ejemplos

proc rcuad (in x : R, out result : R) { Pre {x ≥ 0}

Post {result ∗ result = x } }

proc suma(in x : Z, in y : Z, out result : Z) { Pre {True}

Post {result = x + y } }

proc resta(in x : Z, in y : Z, out result : Z) { Pre {True}

Post {result = x − y } }

proc cualquieramayor (in x : Z, out result : Z) { Pre {True}

Interpretando una especificaci´ on

I proc rcuad (in x : R, out result : R) { Pre {x ≥ 0}

Post {result ∗ result = x } }

I ¿Qu´e significa esta especificaci´on?

I Se especifica que si el programa rcuad se comienza a ejecutar en un estado que cumple x ≥ 0, entonces es cierto que:

1. el programa termina, y

2. el estado final cumple result ∗ result == x .

(8)

Argumentos que se modifican (inout)

Problema: Incrementar en 1 el argumento de entrada.

I Alternativa sin modificar la entrada (usual).

proc incremento(in a : Z, out result : Z){

Pre {True}

Post {result = a + 1}

}

I Alternativa que modifica la entrada: usamos elmismoargumento para la entrada y para la salida.

problema incremento-modificando(inout a : Z){

Pre {a = a0} Post {a = a0+ 1}

}

29

Otro ejemplo

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

proc cociente(in dividendo : Z, in divisor : Z, out result : Z) { Pre {divisor > 0}

Post {

result ∗ divisor ≤ dividendo

∧(result + 1) ∗ divisor > dividendo }

}

Qu´e sucede si ejecutamos con ...

I dividendo = 1 y divisor = 0?

I dividendo = −4 y divisor = −2, y obtenemos result = 2?

I dividendo = −4 y divisor = −2, y obtenemos result = 0?

I dividendo = 4 y divisor = −2, y el programa no termina?

30

M´ as ejemplos

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

I Retornamos el cociente y resto en dos argumentos de tipo “out”

distintos.

proc cocienteyResto(in a : Z, in b : Z, out r : Z, out q : Z) { Pre { b > 0 }

Post { a = q ∗ b + r ∧ 0 ≤ r < b } }

Pasaje de Par´ ametros

in, out, inout

I Par´ametros de entrada (in): Si se invoca el procedimiento con el argumento c para un par´ametro de este tipo, entonces se copia el valor c antes de iniciar la ejecuci´on

I Par´ametros de salida (out): Al finalizar la ejecuci´on del procedimiento se copia el valor al par´ametro pasado. No se inicializan, y no se puede hablar de estos par´ametros en la precondici´on.

I Par´ametros de entrada-salida (inout): Es un par´ametro que es a la vez de entrada (se copia el valor del argumento al inicio), como de salida (se copia el valor de la variable al argumento). El efecto final es que la ejecuci´on del procedimientomodifica el valor del

par´ametro.

(9)

Sobre-especificaci´ on

I Consiste en dar unapostcondici´on m´as restrictivaque lo que se necesita, o bien dar unaprecondici´on m´as laxa.

I Limita los posibles algoritmos que resuelven el problema, porque impone m´as condiciones para la salida, o ampl´ıa los datos de entrada.

I Ejemplo:

proc distinto(in x : Z, out result : Z) { Pre {True}

Post {result == x + 1}

}

I ... en lugar de:

proc distinto(in x : Z, out result : Z){

Pre{True}

Post {result 6= x } }

33

Sub-especificaci´ on

I Consiste en dar una una precondici´on m´as restrictivaque lo realmente necesario, o bien unapostcondici´on m´as d´ebilque la que se podr´ıa dar.

I Deja afuera datos de entrada o ignora condiciones necesarias para la salida (permite soluciones no deseadas).

I Ejemplo:

proc distinto(in x : Z, out result : Z){

Pre {x > 0}

Post {result 6= x } }

... en vez de:

proc distinto(in x : Z, out result : Z){

Pre {True}

Post {result 6= x } }

34

Especificar los siguientes problemas

I Calcular la funci´on signo.

proc signo(in x : R, out result : Z){

Pre {True}

Post{(result = 0 ∧ x = 0)

∨(result = −1 ∧ x < 0) ∨ (result = 1 ∧ x > 0)}

}

I Calcular el ´area de un tri´angulo rect´angulo.

proc area(in x : R, in y : R, out result : R) { Pre {x > 0 ∧ y > 0}

Post {result = x ∗ y /2}

}

Especificar los siguientes problemas

I Encontrar una ra´ız de un polinomio de grado 2.

proc raiz(in a : R, in b : R, in c : R, out result : R){

Pre {True}

Post {a ∗ result ∗ result + b ∗ result + c = 0}

}

I Est´a bien especificado? No! Existen datos de entrada que cumplen la precondici´on para los cuales no se puede escribir un programa que termine cumpliendo la postcondici´on.

I proc raiz(in a : R, in b : R, in c : R, out result : R){

Pre {a 6= 0 ∧ b ∗ b ≥ 4 ∗ a ∗ c}

Post {a ∗ result ∗ result + b ∗ result + c = 0}

}

(10)

Ultimo ejemplo (por hoy) ´

I Dada una hora, minutos y segundos correspondientes a una hora de la ma˜nana, dar la cantidad de segundos que faltan hasta el

mediod´ıa.

I proc hastamediodia(in h : Z, in m : Z, in s : Z, out result : Z) { Pre {0 ≤ h < 12∧ 0 ≤ m < 60 ∧ 0 ≤ s < 60}

Post{result + (h ∗ 60 + m) ∗ 60 + s = 12 ∗ 60 ∗ 60}

}

37

Referencias

Documento similar

De non ser así, as facturas non poderán tramitarse para o pago, e a USC, a través do responsable de asuntos económicos do centro da USC que solicitou os seus servicios Rexeitará

U-Ranking cuenta con la colaboración del Ministe- rio de Universidades, al permitirnos el acceso al Sistema Integrado de Información Universitaria (SIIU). El SIIU es

[r]

[r]

[r]

Luis Miguel Utrera Navarrete ha presentado la relación de Bienes y Actividades siguientes para la legislatura de 2015-2019, según constan inscritos en el

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

El deber principal a tener en cuenta para plantear los diferentes tipos de estructuras de datos, interfaces y algoritmos de la aplicación es el de la