Clase de Práctica AED1 - ALIPSO.COM: Monografías, resúmenes, biografias y tesis gratis.
Aprende sobre marketing online, desarrollo de sitios web gratis en Youtube
Suscribite para recibir notificaciones de nuevos videos:
Jueves 18 de Abril de 2024 |
 

Clase de Práctica AED1

Imprimir Recomendar a un amigo Recordarme el recurso

Recursión. Especificación de estados. Código. Programación de computadoras. Correctitud del ciclo. Programa. Metavariables.

Agregado: 17 de JULIO de 2003 (Por Michel Mosse) | Palabras: 1052 | Votar | Sin Votos | Sin comentarios | Agregar Comentario
Categoría: Apuntes y Monografías > Computación > Programación >
Material educativo de Alipso relacionado con Clase Práctica AED1
  • Honorarios: practica planilla para determinar cuantia.:
  • Guía práctica sobre el latín.: Circunstanciales. Casos y declinaciones. Verbos. Conjugaciones. Proposiciones incluídas. Modo indicativo.
  • Practica de comprensión de inglés: Comprensión de textos en inglés. Ejercicios.

  • Enlaces externos relacionados con Clase Práctica AED1

    Clase de Práctica AED1, 8/6/2000. Demostración de correctitud de ciclos.

    Ejercicio 2i.

    Potencia(n:integer,m:integer):integer

    Especificación de estados

    P º {n = N0 Ù m = M0 Ù (N0 = 0 Þ M0 ¹ 0) Ù M0 ³ 0}

    definimos: Pposº { N0 ¹ 0 Ù M0 ³ 0 Ù n = N0 Ù m = M0 }

    Pc º {i = 0 Ù ret_value = 1 Ù Ppos }

    B º {i < m}

    I º {ret_value = f_potencia n i Ù 0 £ i £ m Ù Ppos }

    Fv = m - i

    Qc º { ret_value = f_potencia n m Ù i=m Ù Ppos }

    Q º {ret_value = f_potencia N0 M0}

    Código

    Function Potencia(n:Integer,m:Integer):Integer;

    Var

    i:integer;

    { P }

    if (n<>0) then

    i=0;

    ret_value:=1;

    { Pc }

    ß

    { I }

    while (i<m) do

    { I Ù B }

    ret_value:=ret_value*n;

    i:=i+1;

    { I }

    od;

    { I Ù ~B }

    ß

    { Qc }

    else

    ret_value:=0;

    fi

    ß

    {Q }

    EndFunction;

    Correctitud del ciclo

    Es importante demostrar que el ciclo fue especificado y codificado correctamente.

    Lo que nos interesa es que partiendo de nuestra precondición del ciclo (Pc), ejecutando una serie de iteraciones podamos alcanzar la postcondición del ciclo (Qc) y que el mismo, en este caso implique la postcondición de la función (ya que luego del ciclo no realizamos ninguna operación más).

    Para cumplimentar estos requisitos es necesario que el invariante verifique estas propiedades:

    1. El invariante se cumple en la entrada del ciclo. Esto significa que la precondición del ciclo implique el invariante (PcÞI).
    2. El invariante debe cumplirse en cada iteración del ciclo. Tanto en la entrada como en la salida. En el primer caso también debe cumplirse la guarda del ciclo.
    3. La función variante es estrictamente decreciente y acotada.
    4. Al finalizar el ciclo (no cumplimiento de la guarda) el invariante debe implicar la postcondición del ciclo (I Ù~B Þ Qc). Esto nos asegura que el invariante se acerca paso a paso a la solución del problema.

    Verifiquemos que si nuestro código cumple con estas propiedades.

    1. Sabemos que la primera vez que entramos al ciclo el estado del programa es el indicado por Pc.

    Pcº{i = 0 Ù ret_value = 1 Ù Ppos}

    siendo nuestro invariante es el siguiente:

    I º {ret_value = f_potencia n i Ù 0 £ i £ m Ù Ppos }

    Reemplazando a i por 0 y ret_value por 1 obtenemos:

    {1 = f_potencia n 0 Ù 0 £ 0 £ m Ù Ppos } º True

    ya que n0 = 1 (n¹0) por lo que se cumple la primera conjunción, se sigue cumpliendo Ppos ya que no cambiamos el valor de n y m y por Ppos sabemos que m= M0 ³ 0 por lo que también se cumple la segunda conjunción.

    1. Si entramos al ciclo podemos asegurar que i<m. Supongamos que I se cumple. Demostremos que I se cumplirá a la salida del ciclo.

    Como  I y B se cumplen podemos caracterizar al conjunto de estados posibles con el siguiente predicado.

    P1º { I Ù B } º {i<m Ù ret_value = f_potencia n i Ù 0 £ i £ m Ù Ppos }

    Ahora llamemos i0 y ret_value0 a los valores de la variables i y ret_value en este momento de ejecución. i0 y ret_value0 son un ejemplo de metavariables que son usadas solamente en la descripción de estados para referirnos al valor de las variables en algún momento de la ejecución.

    Debe quedar claro que las metavariables bajo ninguna circunstancia deben ser usadas en las sentencias de un programa.

    Nuestro predicado anterior puede rescribirse de la siguiente manera:

    E1 º {i0<m Ù i=i0 Ù ret_value = ret_value0 Ù ret_value0 = f_potencia n i0

    Ù 0 £ i0 £ m Ù Ppos }

    Hasta el momento, solo hemos reescrito de manera conveniente nuestro predicado

    I Ù B. Ahora sigamos paso a paso la ejecución de las sentencias del ciclo.

    while (i<m) do

    E1 º{i0<m Ù i=i0 Ù ret_value = ret_value0 Ù ret_value0 = f_potencia n i0 Ù 0 £ i0 £ m Ù Ppos }

    ret_value:=ret_value*n

    E2 º{i0<m Ù i=i0 Ù ret_value = ret_value0 *n Ù ret_value0 = f_potencia n i0

    Ù 0 £ i0 £ m Ù Ppos }

    º (reemplazando el valor de ret_value0)

    E2' º{i0<m Ù i=i0 Ù ret_value = f_potencia n i0 *n Ù 0 £ i0 £ m Ù Ppos }

    i:=i+1;

    E3 º {i = i0+1 Ù i0<m Ù ret_value = f_potencia n i0*n i0 Ù 0 £ i0 £ m Ù Ppos }

    ß?

    { I }

    od;

    Solo nos resta demostrar que E3 Þ I. Pero esto es simple ya que:

            Como i0 < m Ù 0 £ i0 £ m Þ 0 £ i = i0+1 £ m

            ret_value = f_potencia n i0 *n = f_potencia n (i0+1) = f_potencia n i

    luego se cumple I como queríamos demostrar.

    1. Debemos probar que la función variante es estrictamente decreciente y acotada inferiormente.

    La función variante es m-i. Llamemos fv0=m-i0 al valor que representa la función variante en una iteración del ciclo.

    Luego de ejecutar i:=i+1, fv = m- (i0+1)= m - i0- 1= fv0 -1 por lo que queda demostrado que decrece un paso en cada iteración

    Es muy simple ver que está acotada en 0, ya que m=M0 para todas las iteraciones y el ciclo incrementa i hasta alcanzar a m.


    1. Ahora debemos demostrar que (I Ù~B Þ Qc)

    Sabemos que i³m ya que ha terminado el ciclo y además se cumple el invariante. Por lo tanto nuestro estado está caracterizado por el siguiente predicado

    { I Ù ~B } º {i³m Ù ret_value = f_potencia n i Ù 0 £ i £ m Ù Ppos }

    Debido a la restricción que impone I sobre i esta necesariamente deberá ser igual a m.

    {i=m Ù ret_value = f_potencia n i Ù Ppos} º {i=m Ù ret_value = f_potencia n m Ù Ppos }

    º

     Qc

    Ahora veamos que Qc Þ Q:

    Por Ppos sabemos que n=N0 y m=M0 por lo tanto lo reemplazamos y obtenemos

    {i=m Ù ret_value = f_potencia N0 M0 Ù Ppos }

    ß

    { ret_value = f_potencia N0 M0 } como queríamos demostrar.


    Votar

    Ingresar una calificación para del 1 al 10, siendo 10 el máximo puntaje.

    Para que la votación no tenga fraude, solo se podrá votar una vez este recurso.

    Comentarios de los usuarios


    Agregar un comentario:


    Nombre y apellido:

    E-Mail:

    Asunto:

    Opinión:



    Aún no hay comentarios para este recurso.
     
    Sobre ALIPSO.COM

    Monografias, Exámenes, Universidades, Terciarios, Carreras, Cursos, Donde Estudiar, Que Estudiar y más: Desde 1999 brindamos a los estudiantes y docentes un lugar para publicar contenido educativo y nutrirse del conocimiento.

    Contacto »
    Contacto

    Teléfono: +54 (011) 3535-7242
    Email:

    Formulario de Contacto Online »