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.
0 comments:
Publicar un comentario