lunes, 5 de mayo de 2008

PROGRAMACION MODULAR

Programacion Modular:

Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución.

Si traslados este metodo a la programación, se puede crear y trabajar con subprogramas para resolverlos los problemas. A estos subprogramas se les suele llamar módulos, de ahí viene el nombre de programación modular. En Pascal disponemos de dos tipos de módulos: los procedimientos y las funciones.

Los procedimientos: Es un subprograma que realiza una tarea específica. Para hacer que se ejecute, hay que escribir su nombre en el cuerpo de otro procedimiento o en el programa principal. Hay que tener en cuenta que la declaración debe hacerse antes de que sea llamado por otro módulo.

Un procedimiento se compone de la palabra procedure seguida del nombre del procedimiento y una lista de parámetros que es opcional.
Las secciones de declaración de constantes (const), de tipos (type) y de variables (var) también pueden aparecer en la estructura de cualquier procedimiento.

El cuerpo del procedimiento, se delimita por las palabras reservadas begin y end, y en su interior puede contener sentencias simples o estructuradas
.

Procedure nombre (lista_parametros);
const declarar_ctes;
type declarar_tipos;
var declarar_vars;
begin
cuerpo_procedimiento
end ;

En los programas y procedimientos se puede usar variables globales y locales

Variable local: Es una variable que se declara dentro de un subprograma, y se dice que es local al subprograma. Y lo que la caracteriza es que su valor sólo está disponible mientras se ejecuta el subprograma, el programa principal no tiene conocimiento alguno de las variables locales
.
Variable Global: Es una variable que se declara en la sección de declaración de variables en
el programa principal, a diferencia de las locales, su valor está disponible tanto en el cuerpo del programa principal como en el de cualquiera de los subprogramas declarados.

Funciones:
Funciones predefinidas:
Las funciones predefinidas, también llamadas estándar, son las que el propio lenguaje Pascal pone a disposición del programador. Por ejemplo, si necesitas calcular el valor absoluto de un número, no es necesario construir la función, pues ya se dispone de una que lo hace.
Dependiendo del tipo de compilador
de Pascal que se use, se dispondrá de más o menos funciones estándar, pero siempre se tendrá un grupo básico que comparten todos.

Algunas de las funciones básicas:
sin(x:real)
seno de x
cos(x:real)
coseno de x
sqr(x:real)
cuadrado de x
sqrt(x:real)
raíz cuadrada de x
abs(x:real)
valor absoluto de x
ln(x:real)
logaritmo neperiano de x
int(x:real)

Funciones definidas por el usuario: Son las que el propio usuario declara, de igual manera que declara procedimientos. Las funciones nacen con el propósito de ser subprogramas que siempre tienen que devolver algún valor.
Las dos principales diferencias entre procedimientos
y funciones son:

- Las funciones siempre devuelven un valor al programa que las invocó.
- Para llamar a un procedimiento se escribe su nombre en el cuerpo del programa, y si los necesita, se incluyen los parámetros entre paréntesis. Para invocar una función es necesario hacerlo en una expresión.

El cuerpo de las funciones, function seguido del nombre de la funcion, luego los parametros a usar y el tipo de dato que devolvera la función, se delimita por las palabras reservadas begin y end, y en su interior puede contener sentencias simples o estructuradas.

function nombre [(p1,p2,...)] : tipo;
const lista_ctes;
type lista_tipos;
var lista_vars;
begin
nombre := valor_devuelto
end;

Una vez declarados los procedimientos y funciones que van a formar el programa se debe realizar el llamado de dichos procedimientos y funciones en el programa principal, este programa debe contener un Inicio y End.
Ejemplo:

Program Calcular; (*nombre del programa*)
uses crt; (*Declaracion de las unidades*);
var (*Declaracion de las variables*)
const (*Declaracion de las constantes es opcional*)

begin (*Inicio del programa principal*)
leer; (*llamada del procedimiento leer, previamente declarado*)
sumar; (*llamada del procedimiento sumar, previamente declarado*)
calcular_sueldo; (*llamada del procedimiento calcular sueldo, previamente declarado*)
End. (*Fin del programa principal*)

Nota: todo lo que esta entre parentesis son comentarios, no influyen en la ejecución del programa.

Ejemplo: Una compañía de electricidad desea imprimir el costo del consumo de electricidad de sus clientes. El costo se efectúa de acuerdo a las siguientes condiciones:
- Los primeros 140 kwh o menos paga una tarifa fija de 35 bsf.
- Si es mayor a 140 kwh y menor a 170 kwh, se cobra la tarifa fija más los kwh extras multiplicados 0.15.
- Las mediciones que superen los 170 kwh, se cobra la tarifa fija mas los kwh extras multiplicados por 0.50
Imprimir el monto de la factura y el consumo.
PROGRAM FACTURA;
USES CRT;
VAR
CONSUMO,COSTO,EXTRA:REAL;
CONST
TARIFA_FIJA=35;
POR1=0.50;
POR2=0.15;
BEGIN
WRITELN ('INTRODUZCA LA CANTIDAD KWH CONSUMIDOS: ');
READLN (CONSUMO);

IF CONSUMO <= 140 THEN
BEGIN
COSTO:=TARIFA_FIJA;
WRITELN('EL MONTO TOTAL A PAGAR ES:' , COSTO);
READLN;
END;
IF (CONSUMO > 140) AND (CONSUMO <= 170) THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR2;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO);
READLN;
END;
IF CONSUMO > 170 THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR1;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO);
READLN
END;

CLRSCR;
READLN;
END.

ESTE ES EL MISMO EJEMPLO, USANDO PROGRAMACION MODULAR.(Con programa principal)

PROGRAM FACTURA;
USES CRT;
VAR
CONSUMO,COSTO,EXTRA:REAL;
CONST
TARIFA_FIJA=35;
POR1=0.50;
POR2=0.15;

PROCEDURE LEER;
BEGIN

WRITELN ('INTRODUZCA LA CANTIDAD KWH CONSUMIDOS: ');
READLN (CONSUMO);
END;

PROCEDURE CALCULO_CONSUMO;
BEGIN

IF CONSUMO <= 140 THEN
BEGIN
COSTO:=TARIFA_FIJA;
WRITELN('EL MONTO TOTAL A PAGAR ES:' , COSTO:2:2);
READLN; END;

IF (CONSUMO > 140) AND (CONSUMO <= 170) THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR2;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO:2:2);
READLN;
END;
IF CONSUMO > 170 THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR1;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO:2:2);
READLN
END;
END;

(*PROGRAMA PRINCIPAL*)
BEGIN
LEER;
CALCULO_CONSUMO;
CLRSCR;
READLN;
END.