Módulo 5 ALGORITMOS Y ESTRUCTURA DE DATOS

advertisement
23/09/2011
Módulo 6
ALGORITMOS Y ESTRUCTURA DE DATOS
PROFESOR: SIRACUSA EMILIANO
MARTÍN
Página Web: www.esiracusa.jimdo.com
Puede recibir cero o mas valores de !a unidad que lo activa y
devolver cero o más valores a dicho programa activador. La
tarca asignada al procedimiento se ejecuta siempre que se
encuentre el nombre del procedimiento.
Función: unidad de programa independiente que devuelve al
menos un valor a la unidad llamadora. Puede recibir cero o
más valores de la unidad que lo activa. La tarea asignada a la
función se ejecuta siempre que se encuentre el nombre de la
función.
Declaración de un procedimiento o una función:
Todo procedimiento o función se declara dentro de la sección
de declaraciones del programa principal o de un
subprograma.
Procedimientos y funciones
Una estrategia para la resolución de problemas complejos con
computadoras es la división o descomposición del problema
en otros problemas más pequeños o subproblemas. Estos
subproblemas se implementan mediante unidades o
subprogramas. Generalmente un proyecto de programación
se compone de un programa principal y un conjunto de
subprogramas. Los subprograma; en Pascal se clasifican en
procedimientos y funciones.
Procedimiento: es un subprograma que realiza una tarea
específica. Es una unidad de programa independiente. Está
compuesto por un conjunto de sentencias a las que se le
asigna un nombre. Permite la transferencia de valores entre la
unidad que lo activa y el subprograma propiamente dicho.
Las declaraciones de ambos
subprogramas constan de tres partes:
• El encabezamiento que proporciona el nombre
del mismo y en caso de existir, una lista de
parámetros. Las funciones tienen que indicar el
tipo de dato cuyo valor asume la función cuando
se ejecuta.
• Una sección de declaraciones similar a la de los
programas
• Una sección ejecutable: similar a la de los
programas (con alguna variante en las funciones).
1
23/09/2011
Ejemplos de encabezamiento:
Procedure PI (a,b: integer ; var e:real);
Palabra reservada
Identificador del procedimiento
Lista de parámetros formales (opcional)
Procedure Intersección (a, b, c, d, e, f: real; var x, y: real);
Procedure EscribirMensaje;
Procedure HorasHombre (dia: Tdiassemana; var horas,minutos;
natural);
En el cuerpo de la función se nene la obligación de
asignar un valor al identificador de la función, al menos
una vez ya que el último valor que tome será el valor
que transmite a la unidad que la invoca.
Function EsBisiesto(año: integer): boolean;
Begin
EsBisiesto := (año mod 4 = 0) y ( año mod 100 <>0) o
(año mod 400= 0);
End;
Ejemplos de encabezamiento:
Function Fl (a,b: integer):real;
Palabra reservada
Identificador de función
Lista de parámetros fórmales (opcional)
Tipo de dato del valor de la función
Function Racional(a,b: integer):real;
Function EsBisiesto(año: integer): boolean;
Function Salario (dia: Tdiassemnal,horas: natural): real;
Invocación de un procedimiento
Un procedimiento se invoca dentro del programa o
de un subprograma directamente por su nombre
respetando el alcance de los identificadores, seguido
de una lista de parámetros efectivos, si fuera
necesario. La invocación de un procedimiento es una
sentencia del programa o de la unidad llamadora. La
ejecución de dicha sentencia equivale a la ejecución
del procedimiento que lleva su nombre. Una vez
finalizada la ejecución del procedimiento se retorna
el control a la sentencia que sigue a la que dio lugar
dicha activación en el subprograma llamador.
2
23/09/2011
Invocación de un procedimiento
Invocación da un procedimiento
Declaración
Procedure P1 (a ;b: integer; var e: real);
Pl( x,y,z)
Procedure Intersección (a,b,c,d,e.f: real; var x,y: real);
Procedure EscribirMensaje;
Procedure HorasHombre (dia: Tdiassemana; var
horas,minutos; natural);
Invocación
Invocación del procedimiento P1 con tres
parámetros efectivos, ya que su .definición se
realizó con tres parámetros formales.
Invocación de una función
Una función se invoca dentro del programa o de un
subprograma directamente por su nombre respetando el
alcance de los identificadores, seguido la una lista de
parámetros efectivos, si fuera necesario. La invocación de
una función se realiza dentro de una expresión del
programa o de la unidad llamadora.
La ejecución de dicha expresión incluye la ejecución de la
función indicada que se realiza en el momento que
corresponde de acuerdo a las reglas de ejecución de la
expresión. Una vez finalizada la ejecución de la función, su
valor se opera con el resto de los operandos. Es decir se
retorna el control de ejecución a la expresión..
Procedure Intersección (a, b, c, d, e, f, x, y);
Procedure EscribirMensaje;
Procedure HorasHombre (Undia, Lashoras, Losminutos);
Invocación de una función
Function F1 (a, h: integer): real;
…* F1 (a, h)/3…
Invocación de la función F1 con dos parámetros
efectivos, ya que su definición se realizó con dos
parámetros formales.
3
23/09/2011
Invocación de una función
Declaración.
Function Racional(a, b: integer):real;
Function EsBisiesto(año: integer): boolean;
Function Salario (dia: Tdiassemana; horas: natural): real;
Invocación
numero := 16*RacionaI(3,b) /7
Ejemplo:
Program P;
Procedure Q;
begin
writeln (‘este es un procedimiento')
end; {Q}
begin
writeln ('Este programa a activa al procedimiento Q');
Q;
La ejecución del programa dará por
end.
If EsBisiesto(2008)
then writeln('el ano', 2008,'es bisiesto');
resultado:
while Salario (dia, horas) < 500 do
este es un procedimiento
El procedimiento Q está declarado en el programa P. Se puede
representar la declaración de procedimientos con un diagrama que
revela el lugar que ocupa cada uno dentro dala estructura-estática del
programa.
P
Program P;
Procedure Q;
Q
begin
Writeln ('Este es un procedimiento')
end;{ Q}
begin
Writeln('Este programa activa al procedimiento Q);
Q;
end.
Este programa activa al procedimiento Q
Si se tuviera:
Program P;
procedure Q;
begin
End; { Q}
procedureR;
begin
end; {R}
begin
Q;
R;
end.
P
Q
R
Q y R pueden hacer
referencia a todos los
identificadores declarados
en P.
P pueden hacer referencia a
los identificadores Q y R.
4
23/09/2011
Q
y:=3;
Q;
P;
X
Writeln( 'el valor de y declarada en, P es:', y)
end.
Traza en P
P
P
Y
3
P
Y
3
Y
3
Q
el valor de y en Q es 3
Tal como está declarada la variable y es local al programa P y global para los
procedimientos Q y R.
P
Q
begin
Writeln('Dentro de Q se puede hacer referencia a y declarar P ');
Writeln( 'el valor de y en Q es:', y);
end; { Q}
R
Procedure R;
begin
Writeln( 'Dentro de R se puede hacer referencia a y declarada en P );
Writeln( 'el valor de y es:', y)
end; { R}
begin
Traza en P
P
P
Y
R
R
Program P;
Var
y: integer;
Procedure Q;
y:=3;
Q;
P;
X
Writeln( 'el valor de y declarada en, P es:', y)
end.
Q
Procedure R;
begin
Writeln( 'el valor de y en R es:', y);
end; { R}
begin
Procedure R;
begin
Writeln( 'Dentro de R se puede hacer referencia a y declarada en P );
Writeln( 'el valor de y es:', y)
end; { R}
P
begin
y:=3;
Q;
P;
X
Writeln( 'el valor de y declarada en, P es:', y)
end.
P
Program P;
Var
y: integer;
Procedure Q;
begin
Writeln( 'el valor de y en Q es:', y);
end; { Q}
Program P;
Var
y: integer;
Procedure Q;
begin
Writeln('Dentro de Q se puede hacer referencia a y declarar P ');
Writeln( 'el valor de y en Q es:', y);
end; { Q}
3
P
Y
Q
3
Y
3
R
el valor de y en Q es 3
el valor de y en R es 3
Identificador local a un subprograma o programa:
Es el que está declarado en el subprograma o programa. Está activo sólo
durante la ejecución del mismo. Una vez finalizada la ejecución de la unidad
donde está declarado no se puede hacer referencia a dicho identificador.
Program P;
y, Q son locales a P
var
y: integer;
Procedure Q;
x es local Q
var
x: integer:
begin
x:=1;
end; { Q}
begin
y:= 3;
Q;
writeln(‘ el valor de y en P es:’, y);
end.
5
23/09/2011
La variable ‘y’ y los procedimientos Q y R son locales a P.
Los procedimientos Q y R no tienen identificadores
locales.
Program P;
Var
y: integer;
Procedure Q;
begin
Writeln('Dentro de Q se puede hacer referencia a y declarar P ');
Writeln( 'el valor de y en Q es:', y);
end; { Q}
Procedure R;
begin
Writeln( 'Dentro de R se puede hacer referencia a y declarada en P );
Writeln( 'el valor de y es:', y)
end; { R}
begin
y:=3;
Q;
P;
X
Writeln( 'el valor de y declarada en, P es:', y)
end.
Program P;
var
y: integer;
Procedure Q;
var
x: integer:
begin
x:=1;
x:=x+1;
Y:=y+1;
end; { Q}
begin
y:= 3;
Q;
writeln(‘ el valor de y en P es:’, y);
end.
Traza en P
P
P
Y
3
P
Y
34
Q
x
1 2
Y
4
Program P;
var
y: integer;
Procedure Q;
var
x: integer:
begin
x:=1;
end; { Q}
begin
y:= 3;
Q;
writeln(‘ el valor de y en P es:’, y);
end.
Program P;
var
y: integer;
Procedure Q;
var
y: integer:
begin
y:=1;
Y:=y+1;
end; { Q}
begin
y:= 3;
Q;
writeln(‘ el valor de y en P es:’, y);
end.
Traza en P
P
P
Y
3
P
Y
3
Y
3
Y
3
Q
x
1
Traza en P
P
P
Y
3
P
Y
3
Q
x
1 2
6
23/09/2011
Parámetros:
La transferencia de valores desde y hacia el
procedimientos o función se realiza por medio de
parámetros.
Ejemplo:
Algoritmo SiEsMayor
DE: x, y: real
DS: esmayor: lógico
Acciones
esmayor  x > y
fin
Procedure SiEsMayor (x, y:real; var esmayor: boolean);
begin
esmayor:= x > y
end;
Function SiEsMayor (x, y:real): boolean) ;
begin
SiEsMayor := x > y
End;
En la sentencia de invocación del procedimiento se indica la lista de parámetros
actuales, reales o efectivos que se corresponderán en número, tipo y orden con
los parámetros formales del procedimiento correspondiente.
Ejemplo:
Una lista de identificadores con sus tipos de datos es el mecanismo
para transferir valores desde el subprograma que invoca al
subprograma invocado y devolver los valores desde el
subprogramas llamador.
La lista de identificadores en el encabezamiento de la declaración
De un procedimiento o una función es llamada lista de parámetros
formales, los parámetros formales son identificadores locales al
subprograma donde están declarados.
Esta lista establece un conjunto de entidades que representan
objetos o datos, en término de los cuales se expresa el
procedimiento o la función. Estos parámetros son los datos de
entrada al subprograma y/o los datos de salida del mismo, son
comparables a los datos de entrada y salida de un algoritmo, pero
no son iguales. Dentro del cuerpo del procedimiento se tratan
como cualquier otra variable aunque sus efectos no siempre son
los mismos.
En la invocación de una función se indica la lista de parámetros
actuales, reales o efectivos que se corresponderán en número, tipo y
orden con los parámetros formales de la función correspondientes.
Ejemplo:
Program Estudio;
Program Estudio;
Lista de parámetros formales
Lista de parámetros formales
....var, h: integer ,z: boolean.....................
....var, h: integer ,z: boolean.....................
Procedure SiEsMayor (x, y: integer; var esmayor: boolean);
begin
.................. _
Lista de parámetros efectivos
End;
Function SiEsMayor (x, y: integer; var ): boolean;
begin
.................. _
Lista de parámetros efectivos
End;
Begin
………
SiEsMayor ( a, b, z); {invocación}
………
End.
Begin
………
If SiEsMayor ( a, b) then
………
End.
{invocación}
7
23/09/2011
Veremos dos tipos de pasaje de
parámetros que presenta Pascal
Hay cuatro tipos de parámetros
formales en Pascal:
•
•
•
•
por valor
por variable
funciones
procedimientos
El tipo de cada parámetro actual está determinado por el correspondiente
parámetro formal. La correspondencia entre la lista de parámetros
formales y efectivos debe ser:
La cantidad de parámetros debe ser la misma en ambas listas.
Cada parámetro actual se corresponde con el formal que ocupa la misma
posición en la lista de parámetros formales.
La correspondencia de tipos debe coincidir entre los efectivos y los
formales.
•
•
Por valor
Por referencia
En la lista de parámetros formales, ( en la declaración del procedimiento) los
parámetros por referencia se declaran del siguiente modo:
var lista de identificadores: identificador de tipo de dato
var x, y: real;
var x: real;
var y : integer
Los parámetros efectivos que se corresponden con los formales por variable (en
la invocación del procedimiento) deben ser variables.
SiEsMayor (3,5,z);
Los parámetros efectivos van separados por comas.
Ejemplo:
En la invocación del
procedimiento el parámetro
efectivo se liga al formal con
var, h: integer ,z: boolean;
pasaje por referencia.
Durante la ejecución del
Procedure SiEsMayor (x, y: integer; procedimiento, toda
var esmayor: boolean); modificación en el valor del
begin
parámetro formal por
Esmayor:= x < y;
referencia, modificará el
End;
parámetro efectivo
Instantáneamente.
Finalizada la ejecución del
begin
procedimiento no se tiene más
read(a.b);
acceso al parámetro formal.
SiEsMayor( a,b,z);
Write (z);
end.
Program Estudio;
Los parámetros formales por referencia se pueden
comparar con los datos de entrada salida de un algoritmo,
pero no son iguales.
En un algoritmo el argumento que se corresponde con un
dato de entrada y salida de una primitiva, en la invocación
de la primitiva, le asigna el valor al dato y cuando finaliza
la ejecución de la primitiva el dato le asigna el valor
obtenido al argumento.
En un subprograma el parámetro que se corresponde con
un parámetro formal por referencia, en la invocación del
procedimiento, se liga al mismo y todo cambio en el
parámetro formal o efectivo se transmite al otro.
8
23/09/2011
Parámetros por valor
Program Area_cuadrado;
Se usa el parámetro por valor cuando el único rol del parámetro
es ingresar un valor al procedimiento, es unidireccional
(parámetro de entrada) se declaran del siguiente modo:
Lista de identificadores : tipo de dato
El parámetro efectivo que se corresponde con uno formal por
valor, asigna al mismo, su valor, en la invocación del
procedimiento. No se mantiene la correspondencia durante la
ejecución ni a la finalización del mismo.
Son comparables a los datos de entrada de las primitivas y sus
invocaciones.
Traza del programa Area_cuadrado
Area_cuadrado
Area_cuadrado
Area_cuadrado
Lado
4
Lado
4
Lado
4
Area
16
Area
16
Area
16
Imprimir
a
4
b
16
el área del cuadrado de lado 4 es: 16
var lado, area: real;
Procedure imprimir( a,b: real);
begin
write(‘el área del cuadrado de lado', a, 'es: ',b)
end;
begin
read( lado);
area := lado * lado;
imprimir (lado, area);
End.
Pautas a tener en cuenta para utilizar parámetros:
Si la información que se pasa al procedimiento no tiene
que ser devuelta fuera del procedimiento el parámetro
formal que representa dicha información puede ser un
parámetro por valor.
Si se tiene que devolver infamación a la unidad
llamadora el parámetro formal que representa esa
información debe ser un parámetro por referencia.
Si la información que se pasa al procedimiento puede
ser modificada y se devuelve un nuevo valor, el
parámetro formal que representa dicha información
debe ser un parámetro por referencia.
9
23/09/2011
Variables globales vs parámetros
Las variables globales deben evitarse para intercambiar información entre
unidades de programas.
La modificación del valor de una variable global puede tener efectos no
esperados sobre las unidades de programas que las usan.
El uso de variables globales requiere una estrecha coordinación entre las
distintas personas que escriben los procedimientos del programa.
El uso de variables globales limita la libre elección de los identificadores y
dentro de los procedimientos.
El uso de variables globales impide la independencia entre las unidades del
programas.
No se permitirá el uso de variables globales en los programas de este curso.
Bibliografía
 López García, Guillermo (ed.) (2005). El ecosistema digital: Modelos de
comunicación, nuevos medios y público en Internet. Valencia: Servei de
Publicacions de la Universitat de València. Disp.
 Snyder, Ilana –compiladora (2004): Alfabetismos digitales.
Comunicación,innovación y educación en la era electrónica. Málaga: Aljibe
Stallman, Richard M. (2004) Software libre para una sociedad libre. Introducción de
Lawrence Lessig.
 Curso Nivelación 2011 - Universidad Nacional de Chilecito Lic. en Sistemas - Ing. En
Sistemas – Tecnicatura Univ. Desarrollo Aplic. WEB.
 Agustin Fonseca- Juegos de mente – Memoria, Cálculo, Memoria, Agilidad Mental.
 Martín Sierra, Abel Martín Álvarez, Ángel Aguirre Pérez- Aula Matemática digital 2.
 Ing. Gábor loerines, ing. Francisco Chaves-Micro computación Tomo 2- Nahel
Ediciones.
 Adrián Paenza- Matemática... ¿Estás Ahí?
 Adrián Paenza- Matemática... ¿Estás Ahí? Episodio 2
 Adrián Paenza- Matemática... ¿Estás Ahí? Episodio 3,14.
38
 Moroni Norma-Apunte de R.P.A (2003) –U.N.S.
10
Descargar