No es un bug, es una característica no documentada

viernes, 17 de octubre de 2014

Programación. Diseño de la programación (II)

20:55 Posted by Inazio , No comments
Algoritmo primoEntreDosNumeros

variables
            min,max,primo:entero;
principio
            leerEntero(teclado,min);
            leerEntero(teclado,max);
            primo:=siguiente-primo(min);

            mientras que primo<=max hacer
                        escribirEntero(pantalla,primo);
                        primo:=siguiente_primo(primo+1)
            fmq
fin

función siguiente_primo(numero:entero) devuelve entero
{Precondición: numero es número natural. Postcondición: Devuelve el menor primo p que cumpla p>numero}

variables
            resultado:entero;
principio
            resultado:=numero;
            mientras que (NOT es_primo(resultado) hacer
                        resultado:=resultado+1;
            fmq
            devolver(resultado);
fin

función es_primo(numero:entero)devuelve booleano
{Precondición: numero es número natural. Postcondición: devuelve VERDAD o FALSO en función de que numero sea primo o no}
variables
            primo:booleano;
            i:entero;
principio
            i:=2;
            primo:=VERDAD;

            mientras que (i<numero && primo) hacer
                        si (numero MOD i)=0) entonces
                                   primo:=FALSO;
                        fsi
                        i:=i+1;
            fmq
            devolver(primo);
fin

Procedimientos

Un procedimiento es un subprograma que realiza operaciones sobre uno o más valores que se han pasado como parámetros y puede utilizar alguno de ellos para alterarlo y devolver datos en ellos al programa o subprograma que lo invocó.

No tiene un valor asociado. La forma de devolver información al programa es a través de los parámetros.

Puede devolver más de un resultado, uno o ninguno.

Sus parámetros pueden ser de entrada, salida o entrada/salida.

Declaración de procedimientos. Sintaxis y semántica

Procedimiento<nombre de procedimiento>(<lista parámetros formales>)
Variables
            <definición de variables locales>
Principio
            <acciones>
Fin

La semántica es similar a la de una función, pero no devuelve ningún valor y hay que especificar la clase del parámetro formal (E,S o E/S).

Ejemplo de declaración:

Procedimiento intercambiar (E/S p:entero, E/S q:entero)
variables
            x:entero;
principio
            x:=p;
            p:=q;
            q:=x;
fin

Uso de procedimientos

<nombre de procedimiento>(<lista de parámetros actuales>)

Recordar que los parámetros actuales, en función de que sean de E, S o E/S tienen que cumplir cierto requisitos:
  • Como parámetro de entrada no sirve cualquier expresión (al igual que en las funciones)
  • Como parámetro de salida o entrada/salida necesito pasar obligatoriamente una variable que será donde el procedimiento me devolverá el dato correspondiente al terminar si es de salida, o modificará el dato que le pase, si es de entrada/salida.


Ejemplo:

Algoritmo ordenMayorAMenor
variables
            a,b,c:entero;
principio
            escribirCadena(pantalla,’Introduzca tres números enteros’);
            leerEntero(teclado,a);
            leerEntero(teclado,b);
            leerEntero(teclado,c);

            si a<b
                        intercambiar(a,b) {En a se queda el mayor de los dos}
            fsi
           
            si a<c
                        intercambiar(a,c) {En a tengo el mayor de los tres}
            fsi

            si b<c
                        intercambiar(b,c) {Así acabo de ordenar los dos números que me faltaban}
            fsi

            escribirCadena(pantalla,’Los números de mayor a menor son:’);
            escribirEntero(a);
            escribirEntero(b);
            escribirEntero(c);
fin

Invocación. Procedimientos vs. Funciones

Una invocación a un procedimiento es una acción y por tanto puede aparecer sola como una instrucción completa: “Haz tal cosa”

Una invocación a una función es una expresión o parte de una expresión, no constituye por sí misma una instrucción. Tiene que ir asignada a una variable, o aparecer el algún sitio en el que el dato resultado se utiliza para algo.

Precondición y postcondición

La precondición es la condición que deben cumplir los valores que recibe el procedimiento o función para sus parámetros E o E/S cuando es invocado por el algoritmo principal u otro procedimiento o función.

La postcondición es la condición que deben cumplir los valores que devolveremos en  los parámetros S o E/S o como resultado de la evolución de una función, cuando este subalgoritmo termine, al algoritmo o subalgoritmo invocante.

Un procedimiento o función es correcto si cumpliéndose la precondición para cualquier valor válido en los parámetros E o E/S quede garantizado que se cumplirá la postcondición.

0 comentarios:

Publicar un comentario