Módulos: Funciones.
En la programación modular, los programas se dividen en módulos. Un módulo es una unidad lógica de código e independiente de otros módulos, en el cual es posible analizar, codificar y probar por separado. Cada programa tiene un módulo o bloque principal que actúa como coordinador o controlador, el cual deriva el control a otros módulos. A su vez un módulo –sub-módulo- puede ceder el control temporalmente a otro módulo, el cual una vez finalizado deberá devolver el control al módulo que lo invocó. Ya que, los módulos son independientes unos de otros, una consecuencia de esto sería poder dividir el trabajo a distintos programadores a efectos de acelerar los tiempos. Además a un módulo se lo podrá modificar, sin alterar a otros módulos. Existen dos formatos de módulos, a saber:
- Funciones
- Procedimientos
Funciones:
Una función es un módulo que presenta las siguientes partes:
La cabecera presenta las siguientes partes:
El cuerpo de la función es un bloque, dentro del cual se escriben las sentencias. Deberá existir alguna sentencia que asigne al nombre de la función el resultado de una expresión que debe ser de igual tipo que el valor devuelto por la función. Al finalizar la función, el último valor asignado, será el valor que retorne. Una función la podemos ver como una caja negra –no nos interesa saber su interior- o como una caja transparente –si nos interesa saber su interior-. Para que una función pueda ser ejecutada, se deberá llamarla o invocarla. Generalmente los parámetros formales –aquellos que se definen en la cabecera de la función, son pasados por valor, en estos casos, se trabaja con una copia del valor pasado desde la invocación, cualquier modificación que se realice en los parámetros formales, no altera a los parámetros actuales –los indicados en el momento de la invocación-. Una función se la invoca en forma indirecta, es decir, como perteneciente a una sentencia, como p.e., la asignación interna, o como formando parte de una condición, etc..
Una función puede necesitar trabajar con variables internas a su ámbito, en estos casos esas variables definidas dentro de la función son denominadas variables locales. Fuera de la función en que han sido definidas no existen, salvo en los caos en que la función invoque a un módulo definido dentro de su ámbito, allí serán reconocidas. La comunicación entre el módulo que invocó a la función y la función invocada se establece por medio de los parámetros. Si bien una función puede devolver valores por medio de sus parámetros, por el momento no se emplearán.
Estructura de una función: -definición
Ejemplo:
Sqr(x):tipo_x; Retorna el cuadrado de x, es decir, x * x. El tipo de resultado es del mismo tipo que el parámetro x.
Sin(x:real):real; Retorna el seno de x. X expresa un ángulo en radianes. Para convertir grados a radianes, si x está expresado en grados, utilizar:
Cos(x:real):real; Retorna el coseno de x. X expresa un ángulo en radianes. Para convertir grados a radianes, si x está expresado en grados, utilizar:
radianes <-- x * PI / 180
grados <-- arctan(x) * 180 / PI
Exp(x:real):real; Retorna el exponencial o antilogaritmo o ln-1 de x. Exp(x) = e**x. Exp(1) = e. Para convertir la base e a otra base, utilizar: expo ß exp(x * ln(b)), es decir, multiplicar el valor de x por el ln de la base b, a pasar, y a este resultado aplicar la función exponencial.
Int(x:real):real; Retorna la parte entera de x, es decir, x redondeado hacia cero; el resultado es de tipo real, con la parte decimal cero.
Trunc(x:real):longint; Retorna la parte entera de x, es decir, x redondeado hacia cero, pero a diferencia de int, el tipo de resultado es de tipo longint. Ocurrirá un error si el resultado no está dentro del intervalo de un longint.
Round(x:real):longint; Retorna la parte entera de x redondeado al entero más cercano, el tipo de resultado es de tipo longint. Ocurrirá un error si el resultado no está dentro del intervalo de un longint.
round(x) = trunc(x+0.5) si x >= 0 y
round(x) = trunc(x-0.5) si x menor a 0
Odd(x:longint):boolean; Retorna true si x es impar o false si x es par.
Pi:real; Retorna el número irracional π = 3.1415926535897932385
Random:real;
Random sin argumento genera un número al azar –en realidad pseudoaleatorio- en el intervalo semicerrado [0; 1).
Random con argumento genera un número al azar en el intervalo [0; x – 1].
Random(6) + 1, generará un valor en el intervalo [1; 6]
Random(b – a + 1) + a, con a <= b, generará un valor en el intervalo [a; b]
Funciones definidas por el usuario
Como se vió en párrafos previos, una función está formada por una cabecera que contiene el nombre de la función, eventualmente una lista de parámetros y el tipo de valor devuelto y el cuerpo en donde se indican las acciones a realizar, en donde, al menos una de estas acciones se debe asignar al nombre de la función el resultado de una expresión del mismo tipo definido en la cabecera. Siguiendo estos pasos el usuario podrá definir sus propias funciones. A continuación se desarrollan algunas de estas funciones, de tratamiento numérico.
Aplicación:
Dados dos valores enteros a y b, encontrar la fracción irreducible de a / b.
Anterior: Sentencias
Siguiente: Procedimientos
No hay comentarios:
Publicar un comentario