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