Download ppt - Unidad III

Transcript

MODULARIDAD

Procedimientos (Procedures)

Funciones (Function)

Elab. Ing. Anaida EscalonaColab. Ing. Fidel Montesdeoca

Modularidad

• La modularidad se basa en la descomposición de un problema en una serie de subproblemas; dividiéndolo en módulos que resultan de segmentar el problema en funciones lógicas. • Se considera la programación estructurada como la programación que se hace por módulos. Cada módulo realiza alguna tarea específica y cuando se necesite esa tarea simplemente se hace el llamado a ese módulo.• Como cada modulo es independiente del resto, las relaciones entre estos se realiza a través de interfaces bien definidas.

Modularidad

Módulo: Está constituido por una o varias instrucciones físicamente contiguas y lógicamente encadenadas, las cuales se pueden referenciar mediante un nombre y pueden ser llamadas desde diferentes puntos de un programa.Un módulo puede ser:

• Un programa• Una función• Una subrutina (Procedimiento o Función)

Modularidad

Ventajas• Un programa modular es fácil de mantener y modificar.• Un programa modular es más fácil de escribir y depurar (ejecutar, probar y poner a punto).• Un programa modular es más fácil de controlar.• Posibilita el uso de la reutilización de módulos en otros programas (Librerías)

Desventajas• La programación modular requiere más memoria y tiempo de ejecución.

Notas:• Debe nombrarse con mucho cuidado y deben ser significativos de su finalidad, para facilitar la lectura del código fuente y su comprensión.• Cuando su finalidad sea muy compleja, se recomienda utilizar ternas de tres letras para nombrarlas, y se puede utilizar el símbolo ‘_’ para concatenarlas.

Modularidad

Reglas

1. Cada subprograma deberá ejecutar solo una tarea.2. Cada subprograma debe comunicarse con tan pocos como sea

posible.3. Deben intercambiar la menor información posible.4. Cada subprograma deberá ocultar algo, es decir, que toda la

información de un módulo debe ser privada al módulo, a menos que se haya declarado específicamente como global o sea de la interfase.

Procedimientos

Son módulos de programas que pueden realizar una tarea y no retornar ningún valor o retornar mas de uno.

Declaración de un ProcedimientoPROCEDURE Nombre_Procedimiento (Lista de Parámetros

Formales);(* Sección Local de Declaración *)BEGIN (* Cuerpo del Procedimiento *)END;

Llamada del procedimientoNombre_Procedimiento (Lista de Parámetros Efectivos o Actuales);

Nota: 1. Las variables declaradas en la sección local de declaración solo

esta definido durante la ejecución de la función.2. Los Procedimientos Predeterminados se pueden llamar siempre

y cuando se incluyan las librerías en la sección USES.

Variables

• Variable Global: Aquella que está declarada en la sección de declaración del programa principal. Estas variables pueden ser utilizadas y modificadas en cualquier parte del programa.

• Variable Local: Aquella que está declarada y definida dentro de una función o procedimiento.Solo son reconocidas en el procedimiento o función donde se haya declarado y en ninguna otra parte del programa se puede hacer uso de ella.

Nota:• Debe nombrarse las variables con mucho cuidado y deben ser significativos de su finalidad para mejorar la lectura del código fuente y su comprensión.• Las variables globales deben utilizarse lo menos posible ya que disminuyen la interfase entre los módulos.

Parámetros

Parámetros Actuales o EfectivosSon los datos (Parámetros) que se le envían al procedimiento o función para que realice determinada tarea. A cada parámetro efectivo se le asocia un parámetro formal.

Lista de Parámetros Formales:Son los datos recibidos cuando se realiza la llamada a un procedimiento o función. Se especifican los parámetros formales y sus tipos.

• Variables: Parámetros que se pueden modificar en el procedimiento y se modifica su correspondiente parámetro efectivo o actual. Debe colocarse la palabra reservada VAR.• Valor: Parámetros que se pueden modificar en el procedimiento y NO se modifica su correspondiente parámetro efectivo.

Nota: Uso de Parámetros de Valor y Variable (Tiempo de Procesamiento y Consumo de Memoria Vs Protección).

Uso de Parámetros

Reglas de Correspondencia de la Lista de Parámetros• Debe haber el mismo numero de parámetros efectivos que formales.• Para los parámetros de variables, su correspondiente formal y efectivo deben ser del mismo tipo.• Para los parámetros de valor, su correspondiente formal y efectivo deben ser de tipo compatible. • Un parámetro efectivo que corresponda a un parámetro formal de variable debe ser una variable.Ejemplos:Declaración:PROCEDURE MiEjemplo(VAR A,B: REAL; C,D : INTEGER; VAR E : CHAR);Llamada X, Y : REAL; M : INTEGER; Siguiente : CHAR;MiEjemplo (M, Y, M+3, 10, Siguiente);MiEjemplo (10, Y, M, M, Siguiente);MiEjemplo (Y, X, 35, M DIV 10, Siguiente);

Uso de Parámetros

Ejemplos:

Declaración:PROCEDURE MiEjemplo(VAR A,B: REAL; C,D : INTEGER; VAR E : CHAR);

Llamada X, Y : REAL; M : INTEGER; Siguiente : CHAR;MiEjemplo (M, X, 30, 10, Siguiente);

El tipo de M no es realMiEjemplo (X, Y, M, 10);

La lista de parámetros está incompletaMiEjemplo (35.1, Y, M, 10, Siguiente);

La constante real 35.1 no es una variableMiEjemplo (X, Y, M, M/10, Siguiente);

El tipo de M/10 es realMiEjemplo (A, B, 30, 10, Siguiente);

Las variables A y B no están declaradas

Uso de Parámetros

Ejemplos de Declaraciones:

PROCEDURE MiEjemplo (VAR A,B: REAL, C,D : INTEGER, VAR E : CHAR);

PROCEDURE MiEjemplo (VAL A,B: REAL; C,D : INTEGER; VAR E : CHAR);

PROCEDURE MiEjemplo (VAR A,B; C,D : INTEGER; VAR E : CHAR);

PROCEDURE MiEjemplo (A: 111…999; C : INTEGER);

Funciones Definidas por el ProgramadorSon módulos de programas que pueden realizar una tarea retornan un

valor.

Declaración de una Función:

FUNCTION Nombre_Funcion (Lista de Parámetros Formales):Tipo_Resultado;

(* Sección Local de Declaración *)BEGIN (* Cuerpo del Procedimiento *) Nombre_Funcion := Expresión;END;

Llamada de la funciónValor := Nombre_Funcion (Lista de Parámetros Efectivos o Actuales);

Nota: 1. Las variables declaradas en la sección local de declaración solo esta

definido durante la ejecución de la función.2. Las Funciones Predeterminadas se pueden llamar siempre y cuando

se incluyan las librerías en la sección USES.

Diferencias Entre Procedimientos y Funciones

PROCEDIMIENTOS FUNCIONES

• Pueden no retornar valor o retornar varios valores

• Retornan un único valor

• No se le asigna un valor por lo tanto no tiene tipo.

• Se le asigna un valor al nombre de la función.

• Los parámetros formales pueden ser de valor y/o variables.

• Los parámetros formales deben ser de tipo valor

• El su llamada no se realiza una evaluación o asignación

• El su llamada realiza una evaluación del valor retornado o una asignación.

Funciones Predefinidas

Frac() Devuelve la parte decimal de un número Real. Ej. Frac(4.29) devuelve 0.29

Int() Devuelve la parte entera de un número real. Ej. Int(4.29) devuelve el real 4.

Round() Redondea un número real al entero mas próximo. Ej. Round(12.9) devuelve 13.

Inc() Incrementa un valor de tipo ordinal.

Inc(X) Es igual a x := x + 1

Inc(X,n) Es igual a x := x + n

Dec() Decrementa un valor de tipo ordinal.

Dec(X) Es igual a x := x − 1

Dec(X,n) Es igual a x := x − n

Random()

Genera números aleatorios. Ej. Random devuelve un número entre 0 y 1. Random(5) devuelve un valor entre 0 y 4 .

Son proporcionadas por el lenguaje.

Estructura de una Unidad en Delphiunit Unit1;Interface

uses { Lista de unidades }type     { Lista de tipos definidos por el usuario }

{ Luego encabezado de los procedimientos y funciones de los objetos}var  { variables visibles desde afuera }

implementation  uses { lista de unidades usadas localmente }  var  { variables visibles solo localmente }      { Luego implementación de los procedimientos y funciones declaradas en interface más otras las del programador}

Procedure NombreProcedimientoProgramador;Function NombreFuncionProgramador:TipoRetorno;

Initialization     { código de inicialización antes de ejecutarse}finalization ;    { código de finalización después de ejecutarse}

end.

Ejercicios• Implemente un programa modular que, leyendo de teclado los

valores necesarios, muestre por pantalla el área de un círculo, un cuadrado, un triángulo.

• Implemente un programa modular que muestre el precio de un equipo informático (con y sin iva) compuesto por pantalla, teclado, ratón, 2 disco duro de 1.28 Gb, 1Gb de memoria RAM, un procesador, una tarjeta de red, una tarjeta de video y una tarjeta de sonido. El precio de cada componente se debe leer de teclado.

• Implemente un programa modular que, leyendo el nombre de N alumnos y la nota obtenida por cada uno en una asignatura, muestre por pantalla la media de las notas.

• Escribir un programa que solicite al usuario la longitud de los tres lados de un triangulo. El programa debe mostrar si el triangulo es equilátero, isósceles o escaleno. Se emplea un procedimiento que tiene como entrada los lados del triangulo y como salida una variable de tipo enumerado que indica si el triangulo es equilátero, isósceles o escaleno.

Ejercicios• Desarrollar un programa que pide por teclado dos valores

enteros. Y muestre en pantalla la suma de todos los enteros que hay entre los dos números introducidos por teclado. Emplear para ello un procedimiento que calcule dicha suma.

• Desarrollar un programa que dado un número entero determine y muestre por pantalla si dicho número es o no primo. En caso de no serlo, se mostrarán por pantalla todos sus divisores y el número primo más cercano a él. Para ello: se empleará una función que determine si un número es primo o no, un procedimiento para calcular y mostrar en pantalla todos los divisores de un número, y otra función para obtener el primo más cercano a otro dado. Las cabeceras de las funciones y procedimientos son las siguientes:

function primo (numero:integer):boolean;procedure calcular_divisores (numero:integer);procedure primo_mas_cercano (numero:integer; var

primo:integer)

Ejercicios• Desarrollar un programa que llame a un procedimiento o función que calcule el factorial de un número natural pasado como parámetro, en forma iterativa. Realizar todas las validaciones que considere necesarias.

• Escribir una función que determine si un año es bisiesto. Son bisiestos los años divisibles entre 4 y si es divisible entre 100 debe ser también divisible entre 400.

Sabiendo que el máximo común divisor de dos números X e Y tiene las siguientes propiedades: Si X>Y entonces m.c.d(X,Y)=m.c.d.(X-Y,Y) Si Y>X entonces m.c.d.(X,Y)=m.c.d(X,Y-X) Si X=Y entonces m.c.d.(X,Y)=Ximplementar una función que calcule el máximo común divisor de dos números dados como parámetros de una función. El m.c.d. debe ser el valor de retorno de la función.

Ejercicios

• Se decidió poner en práctica un sistema de cobro de agua que penalizara el consumo excesivo de la forma que se indica en la tabla siguiente:

Consumo (m3) Pts/m3Primeros 100 30De 100 a 500 40De 500 a 1000 60Más de 1000 100

Escribe un subprograma que dados unos metros cúbicos consumidos devuelva el coste de agua total. Tener en cuenta que en la tabla se indica lo que hay que cobrar por los metros cúbicos que se encuentran en el intervalo. Así si hemos consumido 750m3 deberíamos pagar:

100*30 + 400*40+250*60 = 34000pts.