ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 45 TEMA 5:SUBALGORITMOS 5.1.- SUBALGORITMOS: Conjunto estructurado de operaciones identificado mediante un nombre único, de modo que toda referencia al mismo implica la ejecución de las acciones correspondientes. Módulos o bloques que resuelven un problema parcial y que se pueden utilizar en un algoritmo principal como si fuesen operaciones primitivas simplificación en la codificación. Existe la posibilidad de anidamiento (dentro de un subalgoritmo, definir otro). 5.2.- FUNCIONES Y PROCEDIMIENTOS: Existen dos tipos de subalgoritmos: Funciones: resultado explícito función del valor de unos parámetros o argumentos. Procedimientos: no producen forzosamente un resultado explícito. Ejemplo: Algoritmo selección constante n =... vector de reales a(1..n) variables enteras i,k leer a para i de 1 a n-1 hacer k=indice_minimo (a,i,n) intercambiar (a,i,k) fin para escribir a Fin Función entera indice_minimo (a,i,n) parámetro vector de reales a(1..n) parámetros enteros i,n variables enteras x,j x=i para j de i+1 a n hacer si a(j)<a(i) entonces x=j fin si fin para indice_minimo=x Fin -Procedimiento intercambiar (a,i,k) parámetro variable vector de reales a(1..n) parámetros enteros i,k variable real x x=a(i) a(i)=a(k) a(k)=x -Fin 45 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 46 5.2.1.- FUNCIONES Declaración: Función tipo nombre (parámetros) Resultado de una función: se especifica mediante una instrucción de asignación incluida en el subalgoritmo: nombre=expresión Declaración de los parámetros: al comienzo de la función y pueden ser de cualquier tipo, incluido vector, matriz o tabla: parámetro tipo nombre Parámetros: valores constantes del subalgoritmo. Ninguna operación debe modificarlos. Dentro de la función se pueden definir las variables necesarias para su ejecución (además de los parámetros). Referencia a una función: mediante un nombre con los valores de los parámetros particulares. Cuando el nombre de la función aparece en una expresión del algoritmo principal, se ejecutan las operaciones definidas en el subalgoritmo, calculándose así su valor, y sustituyéndose éste en la expresión donde se hace referencia a la función. Las funciones pueden aparecer en cualquier lugar de una expresión, siempre que sean del tipo adecuado. Ejemplos: -Función real g(x) parámetro real x g=sen(x) + cos(x) -Fin Función entera m (a,b) parámetros enteros a,b m=(a + b) / 2 Fin 46 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 47 Función real producto_escalar (x,y) parámetros vectores reales x(1..n),y(1..n) variable real p variable entera j p=0 * 0 para j de 1 a n hacer p=p + x(j) * y(j) fin para producto_escalar=p Fin Ejemplos de utilización de funciones: variables enteras i,j,k variables reales a,b,c vectores reales x(1..3),y(1..3) ... ... i=m (j,k) + 2 ... k=3 * i + 2 * m (i,j) ... a=g(b) / 3 * 0 + c * producto_escalar(x,y) 5.2.2.- PROCEDIMIENTOS: Declaración: procedimiento nombre (parámetro) En lugar de devolver un valor escalar, los procedimientos pueden tener parámetros variables (escalares o vectoriales), cuyo valor se puede modificar en el subalgoritmo, siendo visible el cambio de valor por el algoritmo invocador. Activación de un procedimiento: se produce con la presencia de su nombre como instrucción independiente, junto con los parámetros correspondientes, en el algoritmo principal. Obsérvese que un procedimiento no devuelve ningún valor, así que no debe invocarse en una acción de asignación ni dentro de una expresión, como es el caso de las funciones. Ejemplos de definición de procedimientos: Procedimiento P(a,b,c) parámetros enteros a,b parámetro variable entero c c=(a + b) / 2 Fin 47 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 48 Procedimiento suma_de_vectores (x,y,z) parámetros vectores reales x(1..n),y(1..n) parámetro variable vector real z(1..n) variable entera i para i de 1 a n hacer z(i)=x(i) + y(i) fin para Fin Ejemplos de utilización de procedimientos: constante n=3 variables enteras i,j,k vectores reales a(1..n),b(1..n),c(1..n) ... ... i02 j=5 P(i,j,k) ... leer a,b suma_de_vectores (a,b,c) escribir c ... 5.3.- VARIABLES Y PARÁMETROS: ALGORITMO SUBALGORITMO Dentro de un subalgoritmo podemos encontrar: variables locales al subalgoritmo variables globales al subalgoritmo y a otros módulos parámetros (constantes y opcionalmente variables en procedimientos) 5.3.1.- VARIABLES LOCALES Variables definidas en cada subalgoritmo o algoritmo principal, accesibles dentro del módulo correspondiente. Existe la posibilidad de que coincidan sus nombres en módulos distintos (se consideran como variables distintas). Cuando se sale de un módulo, el contenido de estas variables locales es borrado automáticamente. 48 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 49 Ejemplo: Porcedimiento P(i) parámetro variable entero i variable entera j j=i + 2 i=2 * j Fin Algoritmo A1 Traza: variables enteras i,j i=1 A1: i j 1 2 j=2 p(i) 6 2 P: i 1 6 j 3 Fin j variable local (no se modifica en A1) 5.3.2.- VARIABLES GLOBALES: Son variables accesibles desde diferentes módulos (conservan su valor en todo el programa): Declaración: variable global nombre Se incluye la declaración en cada módulo en el que se haga referencia a la variable global. Ejemplo: Procedimiento P(i) parámetro variable entero i variable global entera k variable entera j j=i + 2 i=2 * j k=i + 2 Fin 49 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Algoritmo A2 variable global entera k variables enteras i,j i=1 j=2 k=3 P(i) Fin Fundamentos de Informática 50 Traza: A2: i j k P: i j k 1 2 3 - - 3 3 1 3 3 8 6 3 8 6 2 8 Todo cambio en el valor de k se refleja en ambos módulos (no sucede con j,i) 5.3.3.- PARÁMETROS: Medio normal de transmisión de información entre módulos y otros. Son el tercer tipo de variables que intervienen en un algoritmo descompuesto en subalgoritmos. Parámetros Formales: los que aparecen en la definición del subalgoritmo (nombres genéricos sin existencia propia). Parámetros Actuales: los que aparecen en la llamada al subalgoritmo y que sustituyen a los formales en la ejecución del subalgoritmo. Los parámetros formales pueden considerarse locales con respecto al subalgoritmo. Además, son sustituidos por parámetros actuales en virtud de su posición relativa en la lista de parámetros. Ejemplo: Procedimiento P(x,y) parámetros enteros x,y ... Fin (x,y parámetros formales) Si efectuamos las siguientes llamadas al procedimiento P(x,y) mediante las instrucciones: P(i,j) i=x j=y 50 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA P(2,a) 2=x a=y p(m,n/2) m=x n/2=y 51 Fundamentos de Informática Los parámetros actuales y los parámetros formales deben tener igual número y ser del mismo tipo. Parámetros (otra clasificación): constantes (o de entrada) – funciones y procedimientos variables (de entrada/salida) – sólo en procedimientos 5.4.- MODOS DE TRANSMISION DE LOS PARAMETROS: Transmisión por valor: si los parámetros formales son constantes, se copian los valores de los parámetros actuales en el lugar correspondiente del subalgoritmo. Transmisión por referencia o por dirección: si los parámetros formales son variables, los que se copia en el subalgoritmo es una referencia a la posición de memoria de los parámetros actuales. 5.5.- PARAMETROS FUNCIONALES: Mediante este nombre identificamos, no a los parámetros de una función, sino a la Posibilidad de usar funciones y procedimientos como parámetros de un subalgoritmo. Ejemplo: Procedimiento tabular_funcion (f,a,b,delta) parámetro función real f ----------> PARÁMETRO FUNCIONAL parámetros reales a,b,delta variables reales x,y x=a mientras x<b hacer y=f(x) ----------> USO DE LA FUNCION escribir x,y PASADA COMO PARÁMETRO x=x + delta fin mientras Fin Así, en otro algoritmo podríamos encontrar llamadas al procedimiento tales como: tabular_funcion (sen,0 * 0,pi,0 * 1) 51 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 52 tabular_funcion (exp,0 * 0,1 * 0,0 * 1) Aplicación al cálculo de una integral definida mediante el método de los rectángulos: b S f ( x)dx a S n1 n1 k 0 k 0 f ( xk ) h h f ( xk ) siendo h ba ; x0 a; xk 1 xk h n Podemos realizar este cálculo mediante la función: Función real integral (f,a,b,n) parámetro función real f parámetros reales a,b parámetro entero k h=(b - a) / n s=0 * 0 x=a para k de 0 a n-1 hacer s=s + f(x) x=x + h fin para integral=h * s Fin 5.6.- PROGRAMACION MODULAR: Consiste en la descomposición de un algoritmo en subalgoritmos para reducir la complejidad de la programación. Así, podemos descomponer un problema complejo de programación en módulos compilables por separado Sus principales ventajas son: Facilita la programación. Aumenta la claridad de los programas. Posibilidad de desarrollo en paralelo. Posibilidad de biblioteca de subprogramas. ... 52 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 53 Ejercicios de Evaluación: 1. Escribir una función para calcular el producto escalar de dos vectores, x e y, de dimensión n. 2. Escribir una función que calcule el módulo de un vector real x. 3. Escribir un procedimiento para multiplicar matrices. 4. Escribir un procedimiento para calcular el factorial de un número y otro para, utilizando el procedimiento anterior, calcular: Cnm n! m!(n m)! 5. Escribir un procedimiento para restar de una fila i de una matriz el producto de otra fila j por un escalar c. 53 ETSII Dpto. de Informática y Sistemas ALGORÍTMICA PARTE 1 - TEORÍA Fundamentos de Informática 54 54