Story Transcript
Modularización (Funciones y Procedimientos) • En general un problema complejo puede ser resuelto de manera más fácil y eficiente si se divide en problemas más pequeños y concentrándonos en cada etapa en la solución de ese "subproblema". • Esto implica que el gran problema original será resuelto por medio de varios módulos, cada uno de los cuales se encarga de resolver un subproblema determinado. Esos módulos, se conocen con el nombre de subalgoritmos. • Los subalgoritmos se escriben sólo una vez, luego es posible hacer referencia a ellos ("llamarlos") desde diferentes puntos de un pseudo código. La ventaja obvia es que nos permite reuGlización y evita la duplicación de códigos. • Los subalgoritmos son independientes entre si, en el senGdo de que se puede escribir y verificar cada módulo en forma separada sin preocuparse por los demás módulos. Por ello, es menos complicado localizar un error y también se puede modificar el código sin tener que tocar o rehacer varias partes del mismo. • Los subalgoritmos pueden ser dos Gpos: Funciones y Procedimientos (también llamadas subruGnas o subprogramas).
Modularización (Funciones y Procedimientos) • Notemos que al uGlizar procedimientos y funciones se establece un límite para el alcance de las variables, unas tendrán efecto y valor sólo en el subalgoritmo y otras en el algoritmo principal, también es posible especificar que una variable tenga efecto en el algoritmo principal y todos los subalgoritmos. • Los subalgoritmos pueden recibir valores del algoritmo principal (parámetros), trabajar con ellos y devolver un resultado al algoritmo principal: No existen limitaciones en cuanto a las acciones que pueda ejecutar un subalgoritmo. • Un subprograma puede, a su vez, invocar o llamar a otros o a sus propios subprogramas, inclusive puede llamarse a sí mismo (esto se conoce como recursividad).
Modularización (Funciones y Procedimientos) • Cada módulo debe tener un nombre que lo idenGfique. • Puede tener una serie de parámetros asociados. • El nombre del módulo es uGlizado para la invocación del mismo. • Cuando se invoca a un subprograma se transfiere el control al mismo y una vez finalizada la úlGma instrucción del módulo el control retornará a la siguiente instrucción del programa o subprograma que lo llamó.
Ámbito de las variables En programación existen dos 5pos de variables, las llamadas locales y las variables globales.
• • • • •
• •
Variables Locales: Son aquellas que se encuentran dentro de un subprograma (procedimiento o función) y es disGnta de las variables que están en el algoritmo principal. El valor se confina al subprograma en el que está declarada. Si en el algoritmo principal tratamos de uGlizar estas variables o imprimirlas, no obtendremos nada, ya que para el algoritmo estas variables son locales y desde su punto de vista NO EXISTEN. Variables Globales: Son las que se definen o están declaradas en el algoritmo principal y Gene efecto tanto en el algoritmo principal como en cualquiera de sus subprogramas. numero y resultado son variables globales, es decir que están disponibles en el algoritmo principal y también en la función RAIZCUA. Comparación: Una variable local (de un subprograma) no Gene ningún significado en el algoritmo principal y otros subprogramas. Si un subprograma asigna un valor a una de sus variables locales, este valor no es accesible a otros subprogramas, es decir, no pueden uGlizar este valor. Las variables globales Genen la ventaja de comparGr información de diferentes subprogramas. En resumen: las variables locales son las que se definen en subprogramas y solo Genen valor dentro de él. Las variables globales son definidas en el algoritmo principal y Genen valor y se pueden uGlizar en cualquier parte de algoritmo o en cualquier subprograma. Conceptualmente, puede decirse que desarrollar módulos con independencia funcional, variables locales y mínima comunicación externa mediante parámetros es una buena prácGca de programación, que favorece la reuGlización y el mantenimiento del soYware.
Funciones • Una función es una expresión que toma uno o más valores llamados argumentos y produce un valor que se llama resultado. Este resultado es además, único. • Ejemplos de funciones matemáGcas son los logaritmos, funciones trigonométricas (seno, coseno, etc). • Una función puede devolver un resultado que puede ser una cadena, un número o un valor de Gpo lógico (verdadero o falso) • Esto hace que en los lenguajes de programación, debamos especificar de qué Gpo es una función. Una función será de Gpo numérica cuando devuelva un número y será de Gpo alfanumérica o string cuando devuelva una cadena • La llamada a una función será siempre: variable ß nombre_funcion (parámetros)
Ejemplo: La llamada a una función MES que devuelva el nombre del mes, pasándole el valor numérico correspondiente será: nombre_mes ß MES(2) (esto devolvería "Febrero") • La función es de Gpo string porque devuelve una cadena como resultado en la variable nombre_mes
Implementación SubProceso Tipo variable_retorno ß nombre_funcion (parámetros)
FinSubProceso Parámetros:
=po_var1 var1, =po_var2 var2, …, =po_varN varN
Ejemplo Algoritmo principal
SubProceso String nombreßMES (entero valor) Programa LosMesesDelAño Según sea valor 1: entero numero_mes nombreß"Enero" string nombre_mes 2: Inicio nombre ß "Febrero" 3: leer numero_mes nombre ß "Marzo” mientras numero_mes 12 4: Escribir "Debe ingresar un número entre 1 y 12" nombre ß "Abril” // Validación del número entre 1 y 12 5: nombre ß "Mayo” leer numero_mes 6: fin mientras nombre ß "Junio" 7: nombre_mes ß MES(numero_mes) nombre ß"Julio" 8: // Llamada a la función MES imprimir "El mes correspondiente es: ", nombre_mes nombre ß "Agosto" 9: Fin nombre ß "SeGembre" 10: nombre ß "Octubre" 11: nombre ß "Noviembre" 12: nombre ß "Diciembre" FinSegún // la función devuelve el resultado “nombre” al algoritmo principal FinSubProceso
Funcion MES à
Matlab Algoritmo principal en archivo LosMesesDelAño.m
func5on LosMesesDelAño() % entero numero_mes % string nombre_mes numero_mes=input(‘Ingrese Numero de Mes’); while(numero_mes 12) disp(‘Debe ingresar un número entre 1 y 12’); // Validación del número entre 1 y 12 numero_mes=input(‘Ingrese Numero de Mes’); fin mientras nombre_mes = MES(numero_mes) // Llamada a la función MES disp( [‘El mes correspondiente es: ‘, nombre_mes)];
Funcion MES à
funcGon nombre=MES (valor) switch valor case 1 nombre=‘Enero’; case 2 nombre= "Febrero“; case 3 nombre = "Marzo“; case 4 nombre = "Abril“; case 5 nombre = "Mayo“; case 6 nombre = "Junio“; case 7 nombre ="Julio“; case 8 nombre="Agosto“; case 9 nombre="SeGembre“; case 10 nombre = "Octubre“; case 11 nombre= "Noviembre“; case 12 nombre="Diciembre“; end
Ejemplo * Ejemplo1: Escribir una función que devuelva la raíz cuadrada de un número ingresado por teclado.
Programa CalcaRaiz Inicio SubProceso real raiz ßRAIZCUA( real valor) real numero, resultado raiz ß valor ^ 1/2 leer numero FinSubProceso mientras numero < = 0 Hacer Escribir "Ingrese un número posiGvo" leer numero fin-‐mientras resultadoßRAIZCUA(numero) imprimir "La raiz cuadrada es:", resultado Fin
Matlab Nota: en matlab hay una función “mean” que calcula el promedio…
funcGon calcularProm() numero1=input(‘ingrese un numero’); numero2=input(‘ingrese otro numero’); numero3=input(‘ingrese otro numero’); prom =PROMEDIO(numero1, numero2, numero3); disp([ ‘El promedio es: ‘, num2str(prom)]); función promedio=PROMEDIO(valor1, valor2, valor3) promedio = (valor1 + valor2 + valor3) / 3;
Procedimientos • Hemos visto que las funciones se uGlizan para devolver como resultado un valor, sin embargo, en ocasiones necesitaremos devolver más de un resultado o también ejecutar las mismas líneas de código varias veces en un algoritmo (como por ejemplo una ordenación, etc.) En estas situaciones la función no es apropiada y se uGlizarán los procedimientos (también llamados subruGnas). • Un procedimiento es un conjunto de sentencias o instrucciones que realizan una determinada tarea y que pueden ser ejecutados desde más de un punto del programa principal. • Un procedimiento Gene una llamada. Cuando el procedimiento se ejecuta totalmente, vuelve al punto desde donde fue llamado y se ejecuta la siguiente instrucción. • Notemos que el objeGvo de los procedimientos es ayudar en la modularidad del programa y evitar la repeGción de instrucciones ya que estas se pueden escribir en un procedimiento solo una vez y llamar al procedimiento cuantas veces sea necesario. • Desde el programa principal es posible pasar valores (numéricos, alfanuméricos o combinación de ambos) al procedimiento. Este uGlizará esos valores para realizar un determinado proceso. Los valores que se pasan a un procedimiento (en forma de variables) se llaman parámetros (de igual forma que en las funciones).
Procedimientos -‐ Declaración La sintaxis para la declaración de un procedimiento es la siguiente: SubProceso Nombre_procedimiento (parámetros) FinSubProceso La llamada a un procedimiento se hace simplemente por su nombre: Nombre_procedimiento(parámetros)
Procedimientos •
Cuando necesitemos devolver más de un valor en un procedimiento, las variables en que se devolverán los resultados deben figurar también en la lista de parámetros. –
•
Pasaje de Parámetros por Referencia!!!!
Ejemplo: Procedimiento para calcular el cociente y resto de la división entre dos números
Programa Cociente entero numeroA, numeroB, P, Q leer numeroA, numeroB DIVISION (numeroA, numeroB, P, Q) Escribir P, Q Fin-‐Programa SubProceso DIVISION ( entero dividendo, entero divisor, entero cociente POR REFERENCIA, entero resto POR REFERENCIA) cociente = dividendo / divisor resto = dividendo -‐ cociente * divisor fin-‐procedimiento • En este ejemplo, se pasan los números el dividendo y divisor (numeroA y numeroB respecGvamente) y también en los parámetros de llamada al procedimiento deben figurar las variables en las que se devolverán los resultados de cociente y resto (P y Q respecGvamente). • Las Variables “dividendo” y “divisor” se pasan POR VALOR à VARIABLES SOLO DE ENTRADA • Las Variables “cociente” Y “resto” se pasan POR REFERENCIA à VARIABLES DE ENTRADA Y SALIDA
Matlab • En Matlab no hay procedimientos, son todas funciones. • En Matlab, una función puede retornar varios resultados. • Ejemplo: Procedimiento para calcular el cociente y resto de la división entre dos números En el archivo Cociente.m: funcGon Cociente() numeroA = input(‘ingrese el dividendo’); numeroB = input(‘ingrese el divisor’); [P,Q]=DIVISION (numeroA, numeroB); disp([ P, Q]); func:on [cociente,resto]=DIVISION (dividendo, divisor) cociente = fix(dividendo / divisor); resto = dividendo -‐ cociente * divisor; %resto=rem(dividendo, divisor)