Haga click para publicitar en Alipso.com
Buscando Secundarios  |  Universidades  |  Carreras  |  Test Orientación Vocacional  |  Medios  |  Profesores particulares  |  Institutos   | Campus
Material Monografias  |  Exámenes Secundarios  |  Exámenes Universitarios  |  Enlaces  |  Enviar material |
Diversión Postales  |  Humor  |  Descargas  |  Juegos Comunidad  Foros  | Institucional Publicite  |  En su sitio  | Contáctese
Cursos en Buenos Aires
 Cursos de Informática | Cursos de apoyo al CBC | Carreras y Cursos de Diseño, Comunicación, Arte y Fotografía

[Monografias, exámenes y sitios ]
Todas las palabras   Cualquier palabra   Frase Exacta
Página inicial Agregar a Favoritos  |  Nuevos Recursos

Imprimir apunte Recomendar a un amigo Recordarme el recurso Descargar como PDF

Más sobre este recurso:
Catalogado en base de datos como: Algoritmos y Estructuras de Datos I: Algoritmos y Estructuras de Datos I Facultad de Ciencias Exactas y Naturales. Universidad de Buenos Aires Primer Cuatrimestre de 2000. Resolución del Parcial 18.
Agregado: 17 de JULIO de 2003 (Por Michel Mosse) | Palabras: 806 | Votar! | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Computación > Programación >

Recomendamos

Material educativo de Alipso relacionado con Algoritmos Estructuras Datos
  • Legislación sobre delitos informáticos: Análisis legislativo. Como instrumento o medio. Como fin u objetivo. Acceso no autorizado. Destrucción de datos. Infracción al copyright de bases de datos. Interceptación de e-mail. Estafas electrónicas.
  • Algoritmos y Estructuras de Datos I: Programación Imperativa: ...
  • Arreglos. Lenguaje C++. Programación.: Tipos char, int y float. El lenguaje C++ permite, además, construir estructuras más complejas a partir de estos tipos básicos. Una de las construcciones que podemos definir son los arreglos. Sintaxis. Diferencias con GOFER. Pasaje de parámetros. Pasaje por Valor o Copia. Pasaje por Referencia.
  • Algoritmos y Estructuras de Datos I: Algoritmos y Estructuras de Datos I Facultad de Ciencias Exactas y Naturales. Universidad de Buenos Aires Primer Cuatrimestre de 2000. Resolución de la Práctica 4. Programación.


  • Enlaces externos relacionados con Algoritmos Estructuras Datos
  • Datos sobre los vegetales
  • Galileo
  • Componentes fisicos de un ordenador


  • Algoritmos y Estructuras de Datos I

    Facultad de Ciencias Exactas y Naturales

    Universidad de Buenos Aires

    Primer Cuatrimestre de 2000

     

    Resolución del Parcial 18

     

    Ejercicio 1

     

    1-a) Es un procedimiento porque cambia a uno de los parámetros de Entrada. Si fuera función en la postcondición tendría que figurar ret_value.

     

    1-b) Si, la postcondición no aclara qué valor tiene cada B[j] (con 0j<dim(B)) al finalizar el programa

     

    1-c) A se modifica.Vale 0 en las posiciones en las cuales A0 era distinto a B0 y el valor opuesto a cada A0 en las posiciones en las cuales A0 era igual a B0

     

    1-d)

    Pc º {i=0} Ù P

    Qc º {i=dim(A) Ù ("j)(0j<dim(A0) => Propiedad (A,A0,j,B0)) Ù B=B0}

    B º {i<dim(A)}

    I º {0idim(A) Ù ("j)(0j<i => Propiedad (A,A0,j,B0)) Ù B=B0 Ù

         ("j)(ij<dim(A) => A[j]=A0[j])}

    FV = dim(A) – i

     

    1-e)

    procedure ej1(in-out:A:Arreglo de integer,in:B:arreglo)

     

      var

        i:integer:=0;

     

      while (i<dim(A)) do

        if (A[i]=B[i]) then A[i]:=-B[i];

                       else A[i]:=0;

        fi;

        i:=i+1;

      od;

     

    endprocedure

     

    1-f) Estaria mal porque podria pasar lo siguiente:

    a)     dim(A)<dim(B)

     

    En la forma en la cual yo elegí implementar el ciclo, haría lo mismo que si B fuera igual a la dimension de A (o sea, no tomando en cuenta los B[i] con dim(B)>i³dim(A)). En este caso no hace falta cambiar nada (pero hay que ver si sigue haciendo lo que se quiere)

     

    b)     dim(A)>dim(B)

     

    Esta mal porque a partir de un cierto momento (cuando i³dim(A)) estoy comparando elementos de A con elementos de B que no existen...

    O sea que en este caso habria que cambiar la precondición y postcondicion (y por supuesto el programa) para que tenga en cuenta este problema (por ejemplo

    Q º {("j)(0j<(f_min dim(A0) dim(B0)) => Propiedad(A,A0,j,B0))} )


     

    1-g)

    P º {A=A0 Ù B=B0 Ù Dim(A)=Dim(B) Ù (0j<dim(A0) => A0[j]¹0 Ù B0[j]¹0)}

    Q º {ret_value=f_contarceros (f_ej1 A0 B0)}

    Pc º {i=0 Ù ("j)(0j<dim(A0) => Propiedad(A,A0,j,B0)) Ù ret_value=0}

    Qc º {i=dim(A) Ù ret_value=f_contarceros (f_take (f_ej1 A0 B0) i) Ù B=B0 Ù

          ("j)(0j<dim(A0) => Propiedad(A,A0,j,B0))}

    B º {i<dim(A)}

    I º {0idim(A) Ù ret_value=f_contarceros (f_take A i) Ù B=B0 Ù

         ("j)(0j<dim(A0) => Propiedad(A,A0,j,B0))}

    FV = dim(A)-i

     

    ej1:: [Int] -> [Int] -> [Int]

    ej1 [] [] = []

    ej1 (x:xs) (y:ys) | x==y = (-y):(ej1 xs ys)

                      | otherwise = 0:(ej1 xs ys)

     

    contarceros:: [Int] -> Int

    contarceros [] = 0

    contarceros (x:xs) | x==0 = 1+contarceros xs

                    | otherwise = contarceros xs

     

     

    function No_coinciden(A:Arreglo de Integer,B:Arreglo de Integer):integer

     

      var

        i:integer:=0;

     

      ej1(A,B);

     

      while (i<dim(A)) do

        if (A[i]=0] then ret_value:=ret_value+1;

                    else skip;

        i:=i+1;

      od;

     

    endfunction

     

    Ejercicio 2

     

    I Ù ⌐B º {f_long L0 Ù 0if_long L0 Ù 0f_long Lf_long L0 Ù

              ret_value=f_suma (f_take L0 i) Ù L=f_drop L0 (f_long L0-f_long L)}

     

    I Ù ⌐B º {f_long L=0 Ù L=[] Ù 0if_long L0 Ù ret_value=f_suma (f_take L0 i)

     

    El invariante está mal porque no se deduce de I Ù ⌐B la postcondición del ciclo (lo único que se deduce es que L=[], o sea f_long L=0, pero no se deduce que i=f_long L0


     

    Ejercicio 3

     

    P º {L=L0 Ù n=N0 Ù N0>0}

    Q º {ret_value=f_promn L0 N0}

    Pc º {i=0 Ù ret_value=[]}

    Qc º {i=f_div_entera (f_long L0) N0 Ù ret_value=f_take (f_promn L0 N0) i

          Ù L=L0 Ù n=N0}

    B º {i<f_div_entera (f_long L) n}

    I º {0if_div_entera (f_long L) n Ù L=L0 Ù n=N0 Ù

         ret_value=f_take (f_promn L0 N0) i}

    FV = f_div_entera (f_long L) n – i

     

    -- NOTA: Habria que usar Float y el div ser la division con decimales...

     

    promn:: [Int] -> Int -> [Int]

    promn [] _ = []

    promn xs n | longitud xs < n = []

               | otherwise = (prom_aux (take n xs) n):(promn (drop n xs) n)

     

    prom_aux:: [Int] -> Int -> Int

    prom_aux xs n = div (suma xs) n

     

    suma:: [Int] -> Int

    suma [] = 0

    suma (x:xs) = x+suma xs

     

     

    function PromN(L:lista de integer,n:integer):lista de integer

     

      var

        i:integer:=0;

     

      ret_value:=[];

     

      while (i<Division_Entera(Long(L),n) do

        AgregarAtras(ret_value,CalcProm(L,n,i));

        i:=i+1;

      od;

     

    endfunction

     

     

     

    //FUNCION AUXILIAR CalcProm

    P º {L=L0 Ù n=N0 Ù ind=ind0 Ù f_long L³ind0*N0}

    Q º {ret_value=f_suma (f_take (f_drop L0 ind0*N0) N0)/2}

    Pc º {i=0 Ù ret_value=0}

    Qc º {i=n Ù ret_value=f_suma (f_take (f_drop L0 ind0*N0) i)}

    I º {0in Ù ret_value=f_suma (f_take (f_drop L0 ind0*N0) i)}

    B º {i<n}

    Fv = n-i

     

    function CalcProm(L:lista de integer,n:integer,ind:integer):integer

      var

        i:integer:=0;

     

      ret_value:=0;

     

      while (i<n) do

        ret_value:=ret_value+Iesimo(L,ind*n+i);

        i:=i+1;

      od;

     

      ret_value:=ret_value/n;

     

    endfunction





    Boletín de Novedades