Módulo 6 (sin estilo)

38
Módulo 6 ALGORITMOS Y ESTRUCTURA DE DATOS PROFESOR: SIRACUSA EMILIANO MARTÍN Página Web: www.esiracusa.jimdo.com

Transcript of Módulo 6 (sin estilo)

Page 1: Módulo 6 (sin estilo)

Módulo 6

ALGORITMOS Y ESTRUCTURA DE DATOS

PROFESOR: SIRACUSA EMILIANO MARTÍN

Página Web: www.esiracusa.jimdo.com

Page 2: Módulo 6 (sin estilo)

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.

Page 3: Módulo 6 (sin estilo)

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.

Page 4: Módulo 6 (sin estilo)

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

Page 5: Módulo 6 (sin estilo)

Ejemplos de encabezamiento:

Procedure PI (a,b: integer ; var e:real);

Palabra reservadaIdentificador 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);

Page 6: Módulo 6 (sin estilo)

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;

Page 7: Módulo 6 (sin estilo)

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;

BeginEsBisiesto := (año mod 4 = 0) y ( año mod 100 <>0) o (año mod 400= 0);End;

Page 8: Módulo 6 (sin estilo)

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.

Page 9: Módulo 6 (sin estilo)

Invocación de un procedimiento

Procedure P1 (a ;b: integer; var e: real);

Pl( x,y,z)

Invocación del procedimiento P1 con tres parámetros efectivos, ya que su .definición se realizó con tres parámetros formales.

Page 10: Módulo 6 (sin estilo)

Invocación da un procedimiento

Declaración

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

Procedure Intersección (a, b, c, d, e, f, x, y);Procedure EscribirMensaje;Procedure HorasHombre (Undia, Lashoras, Losminutos);

Page 11: Módulo 6 (sin estilo)

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

Page 12: Módulo 6 (sin estilo)

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.

Page 13: Módulo 6 (sin estilo)

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

If EsBisiesto(2008)then writeln('el ano', 2008,'es bisiesto');

while Salario (dia, horas) < 500 do

Page 14: Módulo 6 (sin estilo)

Ejemplo:Program P;Procedure Q;

beginwriteln (‘este es un procedimiento')end; {Q}

begin writeln ('Este programa a activa al procedimiento Q');

Q;end.

La ejecución del programa dará por resultado:

Este programa activa al procedimiento Q

este es un procedimiento

Page 15: Módulo 6 (sin estilo)

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}

beginWriteln('Este programa activa al procedimiento Q);Q;

end.

Page 16: Módulo 6 (sin estilo)

Si se tuviera:Program P;

procedure Q;beginEnd; { Q}

procedureR; beginend; {R}

beginQ;R;end.

Q y R pueden hacer referencia a todos los identificadores declarados en P.

P pueden hacer referencia a los identificadores Q y R.

P

Q R

Page 17: Módulo 6 (sin estilo)

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;XWriteln( 'el valor de y declarada en, P es:', y) end.

P

Q R

Page 18: Módulo 6 (sin estilo)

Program P;Var y: integer;Procedure Q;

begin Writeln( 'el valor de y en Q es:', y); end; { Q}

Procedure R;begin Writeln( 'el valor de y en R es:', y);end; { R}

begin

y:=3;Q;P;XWriteln( 'el valor de y declarada en, P es:', y) end.

P

Q R

Traza en PP P P

Q

Y 3 Y 3 Y 3

el valor de y en Q es 3

Page 19: Módulo 6 (sin estilo)

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;XWriteln( 'el valor de y declarada en, P es:', y) end.

P

Q R

Traza en PP P P

Q R

Y 3 Y 3 Y 3

el valor de y en Q es 3el valor de y en R es 3

Page 20: Módulo 6 (sin estilo)

Tal como está declarada la variable y es local al programa P y global para los procedimientos Q y R.

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

y, Q son locales a P

x es local Q

Page 21: Módulo 6 (sin estilo)

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;XWriteln( 'el valor de y declarada en, P es:', y) end.

La variable ‘y’ y los procedimientos Q y R son locales a P.

Los procedimientos Q y R no tienen identificadores locales.

Page 22: Módulo 6 (sin estilo)

Traza en PP P P

Q

Y 3 Y 3 Y 3

x 1

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.

Page 23: Módulo 6 (sin estilo)

Traza en PP P P

Q

Y 3 Y 3 4 Y 4

x 1 2

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.

Page 24: Módulo 6 (sin estilo)

Traza en PP P P

Q

Y 3 Y 3 Y 3

x 1 2

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.

Page 25: Módulo 6 (sin estilo)

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: realDS: esmayor: lógicoAcciones esmayor x > y fin

Procedure SiEsMayor (x, y:real; var esmayor: boolean); beginesmayor:= x > y end;

Function SiEsMayor (x, y:real): boolean) ; begin SiEsMayor := x > y End;

Page 26: Módulo 6 (sin estilo)

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ónDe un procedimiento o una función es llamada lista de parámetros

formales, los parámetros formales son identificadores locales alsubprograma 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.

Page 27: Módulo 6 (sin estilo)

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:

Program Estudio;

....var, h: integer ,z: boolean.....................

Procedure SiEsMayor (x, y: integer; var esmayor: boolean); begin.................. _End;

Begin………SiEsMayor ( a, b, z); {invocación} ………End.

Lista de parámetros efectivos

Lista de parámetros formales

Page 28: Módulo 6 (sin estilo)

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;

....var, h: integer ,z: boolean.....................

Function SiEsMayor (x, y: integer; var ): boolean; begin.................. _End;

Begin………If SiEsMayor ( a, b) then {invocación} ………End.

Lista de parámetros efectivos

Lista de parámetros formales

Page 29: Módulo 6 (sin estilo)

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.

Page 30: Módulo 6 (sin estilo)

Veremos dos tipos de pasaje de parámetros que presenta Pascal

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

Page 31: Módulo 6 (sin estilo)

Ejemplo:Program Estudio;

var, h: integer ,z: boolean;

Procedure SiEsMayor (x, y: integer; var esmayor: boolean); begin Esmayor:= x < y; End;

beginread(a.b); SiEsMayor( a,b,z); Write (z);end.

En la invocación del procedimiento el parámetro efectivo se liga al formal conpasaje por referencia.Durante la ejecución del procedimiento, toda modificación en el valor delparámetro formal por referencia, modificará el parámetro efectivoInstantáneamente.Finalizada la ejecución del procedimiento no se tiene más acceso al parámetro formal.

Page 32: Módulo 6 (sin estilo)

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.

Page 33: Módulo 6 (sin estilo)

Parámetros por valor

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.

Page 34: Módulo 6 (sin estilo)

Program Area_cuadrado;

var lado, area: real;

Procedure imprimir( a,b: real); beginwrite(‘el área del cuadrado de lado', a, 'es: ',b) end;

beginread( lado); area := lado * lado;imprimir (lado, area);End.

Page 35: Módulo 6 (sin estilo)

Traza del programa Area_cuadrado

Area_cuadrado

Lado 4

Area 16

Area_cuadrado

Lado 4

Area 16

Imprimir

a 4

b 16

el área del cuadrado de lado 4 es: 16

Area_cuadrado

Lado 4

Area 16

Page 36: Módulo 6 (sin estilo)

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.

Page 37: Módulo 6 (sin estilo)

Variables globales vs parámetrosLas 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.

Page 38: Módulo 6 (sin estilo)

38

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. Moroni Norma-Apunte de R.P.A (2003) –U.N.S.

Bibliografía