1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 1 Más Invariante Ejercicios tomados del recuperatorio del parcial de imperativo del 2do cuatrimestre.

Slides:



Advertisements
Presentaciones similares
Capítulo 2 Algoritmos.
Advertisements

ESTRUCTURAS DE CONTROL
Análisis Sintáctico Descendente
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Estructuras de Decisión I IF - THEN - ELSE
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
ALGORITMOS DE ORDENAMIENTO
Seminario de Actualización - Excel Avanzado y Macros
ORDENACION POR EL METODO DE LA SACUDIDA (SHAKER SORT)
1.5 Algoritmos, Pseudocódigo y Diagramas de Flujo
EJERCICIOS DE PROGRAMACION
1. Asistentes de Pruebas para Lógicos y Matemáticos I
Bloque 2: Divide y Vencerás
INFORMATICA I Funciones CLASE 13.
CS1101X Programming Methodology
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
A B PQ y 2 – y 1 PQ z 2 – z 1 = BQ x 2 – x 1 = AP x y z DISTANCIA ENTRE DOS PUNTOS: Teorema: La distancia entre dos puntos A(x 1, y 1, z 1 ) y B(x 2,
Ejercicios de Arreglos y Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
ESTRUCTURAS DE CONTROL
FUNCIONES EN C. SOBRE FUNCIONES... Caja negra in_1 in_N out_1 In_2 Función: Nombre. (Con el cual es invocada). Entradas. (Parámetros de la función). Salida.
Estructuras de Iteracion (Repetitivas ) while , for,, do-while
SUCESIONES GEOMÉTRICAS
Algoritmos para Ordenar datos
Estructura de Datos y Algoritmos
Capítulo 1 “Elementos de Programación”
Introducción a la Programación
Árboles binarios de búsqueda
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
2. Diagramas de Estado. ¿Qué es y para qué se usa? Una técnica para desarrollar programas Espacialmente adecuado para programas que tienen que analizar.
Material de apoyo Unidad 4 Estructura de datos
Análisis de algoritmos
Ordenación y Búsqueda.
 El acceso concurrente a datos compartidos puede dar pie a inconsistencia de datos  Mantener la consistencia de los datos requiere mecanismos para asegurar.
Recurrencia Programación II de enero de 2009.
4.  Métodos matemáticos.
Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)
Planteos Recursivos Resolución de Problemas y Algoritmos
1 Quicksort Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
1. Desarrollo de Programas iterativos usando invariante
Programación I Arreglos. Los elementos de un arreglo son todos del mismo tipo de dato (todos integer o real o char o registros o aún arreglos)
1 Ordenamiento en tiempo lineal y Estadísticas de orden Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem 2002.
Agenda Clase 6 Iteradores. Enumeración sin iteradores. Loops lógicos. Recursión vs. Iteración. Recursión de Cola. Orden de Evaluación Normal y Aplicativo.
Estructuras de Repetición (Hacer-Mientras)
1 Análisis de algoritmos Generalidades Agustín J. González 1er. Sem
Análisis de algoritmos Generalidades
Conceptos Avanzados de Programación
Estructuras de Repetición (Hacer-Mientras)
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.
Programación Orientada a Objetos.  Un método es una función, segmento, rutina, subrutina o subalgoritmo que puede ser definido dentro de una clase con.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
LENGUAJE “C” Programación.
Ingeniería en Software Facultad de Ingeniería 2014
Algoritmo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
“Análisis y Diseño de Algoritmos” 2a Entrega, Programa 6 Centro de Investigación y Estudios Avanzados del IPN Samuel Garrido Daniel 15-Abril-2004 México,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 4 AEDI Especificación – Práctica 4 1.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
L ENGUAJE DE E SPECIFICACIÓN Algoritmos y Estructuras de Datos I Especificación – Práctica 2 AEDI Especificación – Práctica 2 1.
PROGRAMACIÓN Grupo de Modelamiento de Sistemas
U9 Estructuras: Agrupación de elementos de distinto tipo 1 Barajar complejidad.
Camilo Andrés Salazar González FORTRAN.  Estructura program circulo Real :: r, area write (*,*) 'Escribe el radio r:' read (*,*) r area = *r*r.
2. Arreglos e invariantes. Arreglos Un arreglo es una coleccion ordenada de elementos del mismo tipo – Tipos de datos primitivos (int, …) – Referencias.
2012-BM5A. ¿Qué estructuras de Programación conocemos? Condicional: If … Then … Else …Endif Condicional por Casos: Select Case Repetitiva exacta: for.
SOLUCION DE EJERCICIO N°15 SOLUCION EJERCICIO N°17.
Demostración de correctitud y terminación de ciclos
Decisiones y orden. Estructura if.
Transcripción de la presentación:

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 1 Más Invariante Ejercicios tomados del recuperatorio del parcial de imperativo del 2do cuatrimestre del 2007

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 2 Más Invariante Dada la siguiente implementación, invariante y función variante, demostrar algunos puntos de la corrección y terminación del ciclo: P  I (I  B)  Q El cuerpo del ciclo preserva el invariante: { I  B } cuerpo { I } Se cuenta con aux cambiar(a:[T], i: , val:T) : T, que devuelve el resultado de poner val en la posición i de a, y de no hacer nada más. Enunciado 1

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 3 Más Invariante int par,total,n; int a[];... while (par < n) { if (a[par] % 2 == 0) { total = total + a[par]; } else { a[par] = 0; } par++; } Enunciado // estado Q: total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  // cota 0 // I: 0  par  n ==  total = suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++ // Fv: n - par // estado P: par == total == 0  n == |a|

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 4 Más Invariante Transición de Estados while (par < n) { if (a[par] % 2 == 0) { total = total + a[par]; } else { a[par] = 0; } par++; } // estado Q: total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  // cota 0 // estado E (I  B) // vale 0  par < n ==  total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++ // estado P: par == total == 0 && n == |a| // estado F // vale == // vale mod 2 == 0  a[par] ==  total == + // vale mod 2 != 0  a[par] == 0  total == // vale par ==  n == // vale a[..par) == ([if x mod 2 == 0 then x else 0 | x  (1) // vale a(par..] == // estado G // vale par == + 1  n ==  total ==  a ==

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 5 Más Invariante Solución: P  I P: par == total == 0  n == |a|   ( 0  par  n == (trivial) ( [x | x  mod 2 == 0]) =[] suma([]) == 0 == total  total == suma([x | x  mod 2 == 0]) ) ( [if x mod 2 == 0 then x else 0 | x  == [ ]  ==  a == == [if x mod 2 == 0 then x else 0 | x  ++ ) )  I: 0  par  n == |a| ==  total = suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++  

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 6 Más Invariante Solución: I  B  Q 0  par  n ==  total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++   (par < n)  par  n  par  n  par == n ==  total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++  == [ ]  a == [if x mod 2 == 0 then x else 0 | x  ++ [ ]  total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x   Q I  B :

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 7 Más Invariante Solución: {I  B} cuerpo {I} 0  par  n == : //Estado E vale < n == //Estado F vale par ==  n == //Estado G vale par ==  < n  n == implica 0 < par  n implica 0  par  n  n == // estado E (I  B) vale 0  par < n ==  total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++ // estado F // vale == // vale mod 2 == 0  a[par] ==  total == + // vale mod 2 != 0  a[par] == 0  total == // vale par ==  n == // vale a[..par) == ([if x mod 2 == 0 then x else 0 | x  (1) // vale a(par..] == // estado G vale par == + 1  n ==  total ==  a ==

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 8 Más Invariante Solución: {I  B} cuerpo {I} total == suma([x | x  mod 2 == 0]) : //Estado E vale total==suma([x | x  mod 2 == 0]) //Estado F vale mod 2 == 0  total == + vale mod 2 != 0  total == vale par == vale == implica (reempazando) mod 2 == 0  total == suma([x | x  mod 2 == 0]) +  mod 2 != 0  total == suma([x | x  mod 2 == 0]) Implica (juntado y por 1) total == suma([x | x  mod 2 == 0]) //Estado G vale par ==  total == implica total == suma([x | x  mod 2 == 0]) // estado E (I  B) vale 0  par < n ==  total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++ // estado F // vale == // vale mod 2 == 0  a[par] ==  total == + // vale mod 2 != 0  a[par] == 0  total == // vale par ==  n == // vale a[..par) == ([if x mod 2 == 0 then x else 0 | x  (1) // vale a(par..] == // estado G vale par == + 1  n ==  total ==  a ==

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 9 Más Invariante Solución: {I  B} cuerpo {I} a == [if x mod 2 == 0 then x else 0 | x  ++ //Estado E vale a == [if x mod 2 == 0 then x else 0 | x  ++ //Estado F vale a[..par) == ([if x mod 2 == 0 then x else 0 | x  (1) vale a(par..] == vale mod 2 == 0  a[par] == (2) vale mod 2 != 0  a[par] == 0 (3) vale par == implica(por 1,2y3) a[..par] == ([if x mod 2 == 0 then x else 0 | x  ] implica a == ([if x mod 2 == 0 then x else 0 | x  ] ++ //Estado G vale par == vale a == [if x mod 2 == 0 then x else 0 | x  ] ++ implica a == [if x mod 2 == 0 then x else 0 | x  ++ // estado E (I  B) vale 0  par < n ==  total == suma([x | x  mod 2 == 0])  a == [if x mod 2 == 0 then x else 0 | x  ++ // estado F // vale == // vale mod 2 == 0  a[par] ==  total == + // vale mod 2 != 0  a[par] == 0  total == // vale par ==  n == // vale a[..par) == ([if x mod 2 == 0 then x else 0 | x  (1) // vale a(par..] == // estado G vale par == + 1  n ==  total ==  a ==

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 10 Más Invariante Enunciado 2 Escribir una implementación para la siguiente función sin utilizar arreglos auxiliares. (Sugerencia: este problema se puede resolver utilizando un solo ciclo. Hagan eso para simplificar enormemente el segundo ítem). Dar una precondición, un invariante y una función variante, para cada uno de los ciclos que aparezcan en la solución, que permitan demostrar corrección usando el Teorema del Invariante. NO hacer ninguna demostración. problema ejercicioArtificial (a,b : [Z],n : Z) { requiere |a| == |b| == n  n mod 2 == 1 ; modifica a; b ; asegura pre(a) == reverse(a(medio..]) + + [pre(a) medio ] + + reverse(a[..medio)) ; asegura a medio ==  pre(a) div n ; aux medio : Z = n div 2 ; }

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 11 Más Invariante Solución 1: void EjercicioArtificial(inout [Z] a, inout [Z] b, in int n) { int i = 0; int med = n div 2; int acum = 0; while (i<med) { int aux = a[i]; a[i] = a[n-1-i]; a[n-1-i] = aux; acum += a[n-1-i] + a[i]; i++; } a[med] = acum/n; } P: i == 0  acum == 0 I: 0  i  n div 2  acum ==   a == ++ Fv: med - i

1er Cuatrimestre 2008Algoritmos y Estructura de Datos 1 12 Más Invariante Solución 2: void EjercicioArtificial(inout [Z] a, inout [Z] b, in int n) { int med = n div 2; int i = med - 1; int acum = a[med]; while (0  i) { int aux = a[i]; a[i] = a[n-1-i]; a[n-1-i] = aux; acum += a[n-1-i] + a[i]; i--; } a[med] = acum/n; } P: i == n div 2 – 1  acum == a[n div 2] I: –1  i  n div 2 – 1  acum ==   a == ++ Fv: i