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: Clase de Práctica AED1: 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 >

Recomendamos

Material educativo de Alipso relacionado con Clase Practica AED1
  • El sonido.: INTRODUCIÓN GENERAL DEL TEMA, ESTUDIO TEÓRICO, EL CANAL DE SONIDO, DEMODULADORES DE FRECUENCIA, EL DETECTOR EN CUADRATURA (COINCIDENCIA), EL DETECTOR DE RELACIÓN, DESACENTUACIÓN, UNA ETAPA DE SALIDA DE AUDIO PRÁCTICA, ESTUDIO CONCRETO DEL MODULO UTILIZADO
  • Clase Ghersi de contratos:
  • Imperativo y complejo.: Las clases son una herramienta que provee C++ para la implementación de tipos. A diferencia de lo que permitía gofer en la definición de tipos, en una clase se pueden definir tanto la representación como las operaciones que se pueden realizar, limitando la visibilidad de las mismas.
  • Medición de la humedad mediante un psicrómetro.: Material experimental. Introducción teórica. Realización práctica.


  • Enlaces externos relacionados con Clase Practica AED1
  • Manual metodologico para entrenadores de Taekwondo
  • Practica de los ejercicios fisicos para pacientes asmaticos
  • Metodologia del diseno de un programa de entrenamiento socio psicologico(Una experiencia practica)


  • 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.





    Boletín de Novedades

    Usuarios ya reciben nuestro boletín informativo. Suscribase Ud. también gratis.

    Suscribir Desuscribir
      X