Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
PROGRAMACIÓN Y FUNDAMENTOS DE ALGORÍTMICA PROGRAMACIÓN MODULAR SUBPROGRAMAS Pablo Romero LOGRO DE LA SESIÓN Al finalizar la sesión el estudiante elabora seudocódigo empleando módulos para resolver problemas. 2 AGENDA Pseudocódigo Programación modular Subprogramas Ejemplo Procedimiento Declaración, Definición y Llamada Ejemplo Función Declaración, Definición y Llamada Ámbito de variables: local y global Paso de parámetros: por valor y referencia Ejercicios 3 4 PROGRAMACIÓN MODULAR La programación modular es una metodología de programación que consiste en organizar un programa en módulos. En la etapa de diseño de un programa se aplica la estrategia “Divide y vencerás”. En la etapa de implementación, cada uno de los subproblemas se implementa a través de un módulo. Los lenguajes de programación brindan diferentes mecanismos para implementar módulos. Los módulos más simples son los procedimientos y funciones. 5 SUBPROGRAMAS Subprogramas: bloques de código que llevan a cabo una tarea concreta (= resuelven un subproblema concreto) Tienen un propósito Tienen unas precondiciones Permiten reutilizar código de manera sencilla y segura Pueden ser usados más de una vez en el programa principal sin necesidad de reescribir todo (o copiar-pegar) Ayudan a que el código del programa principal sea Legible: Resulta más sencillo leer sólo el nombre del subprograma que todo su código Ordenado: Cada subprograma ocupa un lugar concreto dentro de todo el código 6 SUBPROGRAMAS SUBPROGRAMAS 7 Ejemplo: Podemos pensar en subprogramas para… Mostrar un menú de opciones Pedirle datos al usuario Calcular el máximo de 3 números … De hecho, ya conocemos (y hemos utilizado) algunos subprogramas que no hemos implementado nosotros Para operar con números: sqrt, pow, … Para operar con arreglos de caracteres: strcpy, … SUBPROGRAMAS 8 SUBPROGRAMAS: EJEMPLO 1 9 Hallar el cociente y resto de una división Acción division (entero n1, entero n2, entero &c, entero &r) //Prototipo Acción Principal DV Entero num1, num2, coc, res Inicio leer(num1, num2) division(num1,num2,coc,res) Llamada a procedimiento escribir(coc,res) Fin Acción division (entero n1, entero n2, entero &c, entero &r) Inicio cn1 div n2 rn1 mod n2 FAcción 10 PROCEDIMIENTO Son subprogramas que realizan una tarea determinada y devuelven 0 o más de un valor. Se utilizan para estructurar un programa y mejorar su claridad y generalidad. Debido a que devuelven más de un resultado, NO UTILIZAN la palabra reservada retornar, y los parámetros pueden ser: - de ENTRADA Sólo se utilizan para que los subprogramas que llaman al procedimiento le pasen datos al mismo. - de ENTRADA/SALIDA Se utilizan por parte de los subprogramas que llaman, para pasarle datos al procedimiento, y por parte del procedimiento para pasar los resultados obtenidos al subprograma que lo ha llamado. PROCEDIMIENTO: DECLARACIÓN, DEFINICIÓN, LLAMADA Declaración o prototipo Acción identificador (lista de parámetros) Definición Acción identificador (lista de parámetros) DV //Variables locales Inicio sentencias Facción Llamada o Invocación identificador (lista de parámetros) 11 SUBPROGRAMAS: EJEMPLO 2 12 Hallar el cuadrado de un número Entero Acción cuadrado(Entero n) //Prototipo Acción Principal DV Entero k, cuad //Variables locales a Principal Inicio Leer(k) cuad cuadrado(k) Llamada a la función escribir(“Cuadrado “, cuad) Fin Entero Acción cuadrado(Entero n) DV Entero c //Variable local a cuadrado Inicio cn*n retornar c FAcción 13 FUNCIÓN Son subprogramas que realizan una determinada tarea y devuelven un único resultado o valor. Se utilizan para crear operaciones nuevas no incluidas en el lenguaje. El resultado devuelto se indica mediante la palabra reservada retornar, y TODOS LOS PARÁMETROS son de ENTRADA. FUNCIÓN: DECLARACIÓN, DEFINICIÓN Y LLAMADA 14 Declaración o prototipo tipo Acción identificador (lista de parámetros) Definición tipo Acción identificador (lista de parámetros) DV //Variables locales Inicio sentencias retornar resultado Facción Llamada o Invocación identificador (lista de parámetros) //Obs: retorna resultado 15 EJEMPLO 3 Escribir subprograma para hallar el factorial de un número Entero Acción factorial (Entero num) Entero i, factor1 Para i de 1 a num hacer factorfactor*i Fpara retornar factor FAcción ÁMBITO DE VARIABLES El buen uso de la programación modular requiere que los módulos sean independientes. Esto se consigue intentando satisfacer dos condiciones: Cada módulo se diseña sin conocimiento del diseño de otros módulos La ejecución de un subprograma particular no tiene por que afectar a los valores de las variables de otros subprogramas. Dado que se permite el anidamiento en la llamada a subprogramas, es necesario evitar problemas con los identificadores definidos en varias partes del código. 16 SUBPROGRAMAS: EJEMPLO Hallar las raíces de una ecuación cuadrática 17 SOLUCIÓN //Prototipo Real Acción discri(real a, real b, real c) Acción cuadratica(real a, real b, real c, real &raiz1, real &raiz2) Acción Principal DV Real coef1, coef2, coef3 Real r1, r2 Inicio leer(coef1, coef2, coef3) cuadratica(coef1, coef2, coef3, r1, r2) Llamada a procedimiento escribir(r1, r2) Fin 18 SOLUCIÓN Real Acción discri(real a, real b, real c) DV Real d Inicio d b*b-4*a*c retornar d FAcción Acción cuadratica(real a, real b, real c, real &raiz1, real &raiz2) Inicio raiz1 (-b + discri(a,b,c) **0.5) / (2*a) raíz2 (-b – discri(a,b,c) **0.5) / (2*a) FAcción 19 ÁMBITO DE VARIABLES: VARIABLE LOCAL Son aquellas que se declaran en el cuerpo de la función. Solo son "visibles" o "usables" dentro de la función donde se han declarado. Dos funciones diferentes, pueden utilizar los mismos nombres de variables sin "interferencias“ ya que se refieren a posiciones diferentes de memoria. 20 ÁMBITO DE VARIABLES: VARIABLE LOCAL Acción Principal DV Entero k Variable local a Principal Inicio k3 escribir(“Cuadrado “, cuadrado(k)) Fin Entero Acción cuadrado(Entero n) DV Entero k Variable local a cuadrado Inicio kn*n retornar k FAcción 21 Es aquella que se define fuera del cuerpo de cualquier función, normalmente al principio del programa y antes de cualquier función (En C++ después de la definición de los archivos de biblioteca (#include) y de la definición de constantes simbólicas). El ámbito de una variable global son todas las funciones que componen el programa, cualquier función puede acceder a dichas variables para leer y escribir en ellas. Es decir, se puede hacer referencia a su dirección de memoria en cualquier parte del programa. Al programar usando procedimientos y funciones, no utilizaremos en nuestras aplicaciones las variables globales, pues atenta contra la modularidad y el bajo acoplamiento que son lo que deseamos. 22 ÁMBITO DE VARIABLES: VARIABLE GLOBAL 23 ÁMBITO DE VARIABLES: VARIABLE GLOBAL PARÁMETROS ACTUALES O REALES Son las variables de enlace definidas en el programa principal y que se usan como argumentos dentro de los paréntesis que posee una llamada a un subprograma. Acción Principal DV Entero num1, num2, coc, res Inicio leer(num1, num2) division(num1,num2,coc,res) Llamada a procedimiento escribir(coc,res) Fin 24 Parámetros actuales PARÁMETROS FORMALES O FICTICIOS Son las variables de enlace definidas en la entrada de un subprograma, que aceptan los valores de los parámetros actuales que se usan en la llamada al subprograma y se comportan como otras variables locales. Entero Acción cuadrado(Entero n) DV Entero k //Variable local a cuadrado Inicio kn*nretornar k FAcción 25 Parámetro formal 26 PASO DE PARÁMETROS: POR VALOR El paso de parámetros por valor consiste en copiar el contenido de la variable que queremos pasar en otra dentro del ámbito local del subprograma. Se tendrán dos valores duplicados e independientes, con lo que la modificación de uno no afecta al otro. 27 PASO DE PARÁMETROS: POR VALOR = Z 28 PASO DE PARÁMETROS: POR VALOR Acción Principal DV Entero k, cuad //Variables locales a Principal Inicio Leer(k) cuadcuadrado(k) k es parámetro real escribir(“Cuadrado “, cuad) Fin Entero Acción cuadrado(Entero n) n es parámetro formal DV Entero c //Variable local a cuadrado Inicio cn*n retornar c FAcción El paso de parámetros por referencia consiste en proporcionar al subprograma al que se quiere pasar el argumento, la dirección de memoria del dato. En este caso se tiene un único valor referenciado (o apuntado) desde dos puntos diferentes, el programa principal y subprograma al que se pasa el argumento, por lo que cualquier acción sobre el parámetro se realiza sobre el mismo dato en la memoria. 29 PASO DE PARÁMETROS: POR REFERENCIA http://es.wikipedia.org/wiki/Direcci%C3%B3n_de_memoria La variable X es en realidad una dirección de memoria que apunta a la variable Y. Para poder usar X tendremos que anteponer siempre un &. Todos los cambios que hagamos dentro del procedimiento “miProcedimiento” sobre la variable X se reflejarán en el parámetro actual correspondiente, en este caso Y. 30 PASO DE PARÁMETROS: POR REFERENCIA Mi Procedimiento void miProcedimiento ( miProcedimiento ( 31 PASO DE PARÁMETROS: POR REFERENCIA Hallar el cociente y resto de una división Acción division (entero n1, entero n2, entero &c, entero &r) //Prototipo Acción Principal DV Entero num1, num2, coc, res Inicio leer(num1, num2) division(num1,num2,coc,res) escribir(coc,res) Fin Acción division (entero n1, entero n2, entero &c, entero &r) Inicio cn1 div n2 rn1 mod n2 FAcción PREGUNTAS 32 EJERCICIOS Use subprogramas y paso de parámetros para hallar la suma de los n términos de 1 + 1 2! + 1 3! + 1 4! +⋯ Usando subprogramas halle las raíces de la ecuación cuadrática 33 RESUMEN Subprogramas Tipos Diferencias Parámetros Tipos Paso de parámetros 34
Compartir