Sunteți pe pagina 1din 4

Algoritmos y Estructuras de Datos I Departamento de Computacin Facultad de Ciencias Exactas y naturales Universidad de Buenos Aires

Ejercicios para entrenarse para el coloquio !inal de Algoritmos I "oviem#re $%&% Ejercicio & Indicar verdadero o falso: 1. Si un programa es correcto respecto de una especificacin entonces pasa exitosamente todos los casos de testeo para valores que satisfacen la precondicin. 2. Si dos programas que reciben un argumento de entrada, ambos satisfacen la misma especificacin, entonces para cada posible valor de entrada ambos programas dan el mismo valor. Ejercicio $ Sea (P, ! la especificacin de un problema, donde P es la precondicin " Sea un programa foo correcto respecto de (P. !. Indicar verdadero o falso " #ustificar: 1. foo es correcto respecto de (Pv$, ! 2. foo es correcto respecto de (P, % S! &. foo es correcto respecto de (P, v S! '. foo es correcto respecto de (P, P! (. foo es correcto respecto de ( ,P! ). foo es correcto respecto de ( , ! es la postcondicin.

Ejercicio ' * u+ es un tipo de datos, -ar un e#emplo de un tipo de datos abstracto " uno de un tipo de datos algebraico. Ejercicio ( Proponer un con#unto de valores " dar un e#emplo de un tipo algebraico de datos que sea adecuado para representarlo. -ar otro e#emplo de tipo algebraico de datos que sea inadecuado para representar al mismo con#unto de valores. .n ambos casos #ustificar. Ejercicio ) Indicar las similitudes " diferencias del tipo de datos lista " del tipo de datos arreglo vistos como tipos abstractos de datos (primitivos!. -ar sus observadores " sus invariantes de tipos. Ejercicio * -ar un e#emplo de un programa imperativo donde no se viole la transparencia referencial. /ustificar. Ejercicio + -efinir en 0as1ell un tipo de datos que represente un 2rbol binario de n3meros enteros, que tenga un n3mero entero en cada nodo " en cada 4o#a. -ar la funcin en 0as1ell que recorre un 2rbol de +stos en inorden, " produce la lista de los nodos visitados. Ejercicio , .l algoritmo de la b3squeda binaria se puede extender al de b3squeda ternaria, donde en cada iteracin el arreglo se divide en tres partes " se selecciona el tercio de b3squeda apropiado. .specificar el problema de b3squeda ternaria " programarlo en lengua#e imperativo. -ar el invariante del ciclo. Ejercicio 1. .nunciar el teorema del invariante. 2. -ar un e#emplo que cumple las 4iptesis " otro e#emplo que no. &. .nunciar el teorema del invariante con la siguiente modificacin: consignar que la funcin variante sea creciente en cada iteracin del ciclo. Ejercicio &% Sea C un predicado con la siguiente propiedad: 4a" un primer n3mero natural n5 6 1 que cumple C " todos los naturales ma"ores que n5 tambi+n cumplen C. -ar un algoritmo que resuelva el problema de encontrar n5 " que sea m2s r2pido m2s r2pido que el de la simple b3squeda lineal. .l algoritmo debe aprovec4ar la propiedad de la condicin C, " en ve7 de visitar los naturales secuencialmente, visita solamente algunos, dando saltos exponencialmente grandes.

Ejercicio && -ar una funcin en 0as1ell que resuelva el siguiente problema. problema lcp(a: 8894ar::!; res: 8<:= requiere long(a!6; 1 asegura res;8longitud>prefi#o>comun(a8i:,a8i?1:! @ iAB 85..long(a!B2:: aux longitud>prefi#o>comun(s, t!; max8i ?1 @ iAB 85.. min8long(s!, long(t!::, s85..i:;; t85..i: : C donde max " min son las funciones que seleccionan, respectivamente, los valores m2ximos " mDnimos de una lista de enteros. Ejercicio &$ -ar la postcondicin para la cual la siguiente funcin f es correcta.

problema f(n:<! ; res:8894ar:: = requiere n 6; 5E asegura : ...E C f :: Int B6 8894ar:: f 5 ; 8: f 1 ; 8F5G, F1G: f n @ n 6 5 ; 4 H5H (f (n B 1!! ?? 4 H1H (f (n B 1!! 4 :: 94ar B6 8894ar:: B6 8894ar:: 4 x 8: ; 8: 4 x (" : "s! ; (x : "! : 4 x "s Ejercicio &' -ado el siguiente problema: problema bblog(x:<!; res:<= requiere x6;1 asegura res;8log2 x: C donde 8 : denota la parte entera, " log2 denota el logaritmo en base 2. 1. *cmo usarDas el algoritmo de b3squeda binaria para resolver el problema bblog, -escribir (dar el pseudocdigo! la funcin para ser programada en imperativo " codificarla. 2. -ar la especificacin del ciclo utili7ado (Precondicin " Postcondicin del ciclo, Invariante, guarda, funcin variante " cota!. &. Programar la funcin en 0as1ell. Ejercicio &( * u+ es una variable en lengua#e imperativo, .xplicar la operacin de asignacin, " dar su sem2ntica usando la nocin de estado, " transformacin de estados. *cmo difieren las variables en imperativo de las variables en funcional, Ejercicio &) -ado un programa imperativo *9ada ve7 que se e#ecuta con los mismos argumentos de entrada, reali7a la misma transformacin de estados, Ejercicio &* .l paradigma de programacin imperativa permite pasar argumentos por copia " por referencia. -ar dos ra7ones por las cuales al programar una funcin conviene elegir el pasa#e por referencia. Ejercicio &+ -ar tres ra7ones por las cuales una funcin recursiva se puede indefinir. Ejercicio &, *I qu+ se llama rdenes de evaluacin en el paradigma de la programacin funcional, -escribir pros " los contras de cada uno.

Ejercicio &- Sea el siguiente programa en 9??. int p(!= int x;2E J4ile (x6;5!= if (x mod 2;;5! else C return xE C 1. Sea la siguiente expresin variante v;1K2x, si x es parE v;1Kx si x es impar *Por qu+ no sirve para demostrar terminacin, 2. *.ste programa termina, Ejercicio $% data I' a ; 0o#a a @ Lodo data I2 a ; 0o#a a @ Lodo x; 2x?1E x;xB1E

I' a I' a I' a I' a I2 a I2 a

problema de'a2(x: I' a! ; ": I2 a requiere completo(x! asegura altura("! A; 2 altura(x! asegura preorden(x!;;preorden("! Isumir que las expresiones auxiliares completo(x! afirma si el 2rbol x tiene todas sus 4o#as a la misma altura. altura(x! es la altura del 2rbol x preorden(x! es la lista de los elementos del arbol x recorridos en prerden. a. -ar el algoritmo que resuelve este problema " programarlo en 0as1ell. b. -ar la expresin variante de cada una de las funciones utili7adas. Ejercicio $& problema f(a:8<:, b:8<:! modifica b asegura paratodo iB685..nB1! a88b8i:: A a8b8i?1:: a. -ar un algoritmo que resuleva el problema, " programarlo en imperativo. b. -ar el invariante del ciclo c. $eescribir la especificacin del problema con una lista de entrada " una de salida. Programar el mismo algoritmo que en punto b, en funcional. Ejercicio $$ -ado un programa en 0as1ell que imlementa una funcin total f:LB6 L in"ectiva. a. -ar el elgoritmo que que resuelve la inversa de f, " programarlo en 0as1ell. I"uda: usar f(! como fucin auxiliar. b. -emostrar la correctitud de la solucin. Ejercicio $' -ado el siguiente programa en 9??. (Mpcional porque es un poco oscuro, pero si lo entienden es divertido! void bbs(int a8:, int n!= listo;falseE J4ile (Nlisto!= listo;sJap>consecutivos(a,n!E C Se pide: 1. 0acer el seguimiento de los estados por los que pasa la e#ecucin de bbs(8O,1,',2,(:, (! . 2. -ar una expresin variante decreciente " acotada del ciclo de la funcin bbs. (I"uda: observar que en cada iteracin el arreglo a8 : pasa a tener un segmento final definitivo de tamaPo ma"or que el del paso anterior. -ar la postcondicion de sJap>consecutivos teniendo esto en cuenta. &. .specificar un problema para el cual la funcin bbs es correcta.

bool sJap>consecutivos(int a8:, int n!= int sin>cambios;trueE int i;5E J4ile (iA; n Q 2!= if (a8i: 6 a8i?1:!= sJap(a8i:, a8i?1:!E sin>cambios;falseE C i??E C return sin>cambiosE C

S-ar putea să vă placă și