La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

1 Procedimientos y Funciones Introducción a la Informática Departamento de Sistemas Universidad del Cauca 2006.

Presentaciones similares


Presentación del tema: "1 Procedimientos y Funciones Introducción a la Informática Departamento de Sistemas Universidad del Cauca 2006."— Transcripción de la presentación:

1 1 Procedimientos y Funciones Introducción a la Informática Departamento de Sistemas Universidad del Cauca 2006

2 2 SUBPROGRAMAS Procedimientos Funciones ALCANCE DE LAS VARIABLES Locales Globales PASO DE PARAMETROS Paso de Parámetros por Valor Paso de Parámetros por Referencia Agenda

3 3 Subprogramas Cuando un programa comienza a ser largo y complejo aparecen problemas para su mantenimiento:  No se comprende bien qué hace el programa debido a que se intenta abarcar toda la solución a la vez.  El programa se vuelve monolítico y difícil de modificar.  Aparecen trozos de código muy similares entre sí repetidos a lo largo de todo el programa.

4 4 Subprogramas Para solucionar estos problemas los lenguajes de alto nivel permiten estructurar el programa principal como compuesto de subprogramas que resuelven problemas parciales del problema principal. A su vez, cada uno de estos subprogramas puede estar resuelto por otra conjunción de problemas parciales. La estructura de un subprograma es igual a la estructura de un programa:  Una información de entrada que es la que le pasamos al hacer la llamada y que se coloca junto al nombre del subprograma (parámetros).  Un conjunto de acciones, variables propias del subprograma, y al terminar la ejecución puede que devuelva o no resultados al programa que lo llamó. Los subprogramas permiten agrupar una serie de operaciones de manera que se puedan utilizar más tarde sin tener que preocuparnos por cómo están implementadas, simplemente sabiendo lo que harán.

5 5 Subprogramas Siempre existirá un módulo o programa principal con el que comienza la ejecución de todo el programa, y a partir de él se van llamando el resto de subprogramas. Cada vez que se llama a un subprograma se le pasa la información que necesita, a continuación comienza a ejecutarse el subprograma y cuando termina su ejecución, devuelve el control a la siguiente instrucción a la de llamada en el programa que lo llamó

6 6 Ejemplo Qué hacer para ver la película Superman Regresa? Ir al CineComprar una entradaVer la películaRegresar a casa ver cartelera de cine en el periódico si proyectan “Superman Regresa” ir hasta el cine si no buscar otra actividad si hay fila entonces ponerse en ella mientras haya personas delante avanzar en la cola si hay entradas entonces comprar una entrada pasar a la sala localizar la butaca mientras proyectan la película ver la película si no refunfuñar...

7 7 Inicio ver cartelera de cine en el periódico si proyectan “Superman Regresa” ir hasta el cine si no buscar otra actividad fin fin_si si hay fila entonces ponerse en ella mientras haya personas delante avanzar en la cola fin_mientras fin_si si hay entradas entonces comprar una entrada pasar a la sala localizar la butaca mientras proyectan la película ver la película fin_mientras si no refunfuñar fin_si volver a casa Fin Inicio caminar hasta llegar a la primera fila repetir comparar números de fila si no son iguales pasar a la siguiente fila hasta que se localice la fila correcta mientras número de silla no coincida avanzar a la siguiente silla fin_mientras sentarse en la butaca Fin localizar la butaca

8 8 En su concepción más simple, un procedimiento es una construcción que permite dar nombre a un conjunto de sentencias y declaraciones asociadas que se usan para resolver un subproblema dado. Un procedimiento es un subprograma que ejecuta una determinada tarea, pero que tras ejecutar esa tarea no devuelve ningún valor o lo hace a través de parámetros. Usando procedimientos la solución es más corta, comprensible y fácilmente modificable.

9 9 Estructura de un Procedimiento La estructura de un procedimiento es semejante a la de cualquier subprograma:  Una cabecera (con el nombre y los parámetros).  Un cuerpo(con la declaración de las variables locales y las instrucciones). Cabecera Cuerpo

10 10 Declaración de un Procedimiento La declaración de un procedimiento se realiza en dos partes: prototipo e implementación.  El prototipo de un procedimiento sirve para declarar el nombre del procedimiento y los parámetros que recibe.  La implementación sirve para definir qué trabajo realiza el procedimiento y cómo lo lleva a cabo.

11 11 Declaración de un Procedimiento Sintaxis Implementación: Donde: Nombre_Procedimiento: Nombre_Procedimiento: es el identificador con el cual se reconoce al procedimiento en el programa principal. Debe ser significativo. ParámetroN: ParámetroN: es la información que necesita el procedimiento. Dentro del procedimiento se pueden utilizar como si fueran variables locales. Se denominan Parámetros Formales. void Nombre_Procedimiento (Tipo Parámetro1,...,Tipo ParámetroN) { //Variables locales //Acciones a ejecutar } Sintaxis Declaración: void Nombre_Procedimiento (Tipo Parámetro1,...,Tipo ParámetroN);

12 12 Llamada del Procedimiento Una vez declarado, el procedimiento puede ser llamado (invocado) en el programa. Para ello basta especificar su nombre (y parámetros en el caso de que los tuviese) como si se tratara de una sentencia más. El procedimiento puede ser llamado desde el programa principal o desde cualquier otro subprograma. Llamar al procedimiento desde cualquier parte, implica el conocimiento previo de que éste procedimiento existe. Cuando se alcanza la llamada, el control pasa a la primera sentencia del procedimiento y cuando su cuerpo se acaba de ejecutar, el control vuelve a la siguiente instrucción escrita tras la llamada al procedimiento. Procedimiento1 Procedimiento2

13 13 Ejemplo Supongamos que queremos calcular la media de votos que un número (dado por el usuario) de candidatos ha conseguido obtener en una votación. La entrada y salida de datos se pretende mejorar separándolas mediante una línea de guiones: ------------------------------------------------------------------------- ¿Cuántos candidatos hay?... 3 ------------------------------------------------------------------------- Candidato número: 1 Teclee el número de votos para este candidato:... 27 ------------------------------------------------------------------------- Candidato número: 2 Teclee el número de votos para este candidato:... 42 ------------------------------------------------------------------------- Candidato número: 3 Teclee el número de votos para este candidato:... 3 --------------------------------------------------------------------------- Número medio de votos conseguidos por candidato es: 2.4E+1 ---------------------------------------------------------------------------

14 14 Sustitución de Parámetros Parámetros Reales Para llamar un procedimiento se utiliza su nombre y entre paréntesis los Parámetros Reales, que podrán ser variables, expresiones, constantes, etc, pero siempre del mismo tipo que los parámetros formales asociados. Nombre_Procedimiento (Parámetros Reales) A través de los Parámetros Reales se proporciona al procedimiento la información que necesita. Procedimiento MostrarDatos (Cadena N, Cadena A, Entero E) Inicio Escribir”Nombre= ”, N Escribir”Apellido= “, A Escribir”Edad= “, E*12, “meses” Fin Programa_Principal Inicio Var: Cadena Nom, Apell Entero Edad Escribir “Ingrese Nombre, Apellido y edad en años” Leer Nom, Apell, Edad MostrarDatos (Nom, Apell, Edad) Fin Al hacer la llamada se produce una asociación automática entre Parámetros Reales y Parámetros Formales. Esta asociación se realiza según el orden de la aparición y de izquierda y derecha. Si el Parámetro Formal y Real no son del mismo tipo o no coincide el número de parámetros, se produce un error.

15 15 Ejemplo Realizar un procedimiento que reciba por parámetro un número y un carácter. Este procedimiento escribirá tantas veces este carácter como indique el número pasado por parámetro. Utilizar este procedimiento para dibujar un triángulo por pantalla. El ancho del triángulo se leerá por teclado al comenzar el programa. Ej: si numero = = 5 y caracter = = * * ** *** **** *****

16 16 Desde el punto de vista matemático, una función es una operación que toma uno o varios valores, y devuelve un resultado. Desde el punto de vista algorítmico, es un subprograma que toma uno o varios valores (parámetros) como entrada y devuelve a la salida un único resultado. Mientras que un procedimiento ejecuta un grupo de sentencias, una función además devuelve un valor al punto donde se llamó. Las funciones siempre devuelven (retornan) un valor. Este único resultado irá asociado al nombre de la función. Una llamada a una función puede aparecer como operando de alguna expresión; el valor de la función se usa, por tanto, para calcular el valor total de la expresión.

17 17 Funciones Hay dos tipos de funciones: Internas: Internas: Son las que vienen definidas por defecto en el lenguaje. Externas: Externas: Las define el usuario y les da un nombre o identificador. Para llamar a una función se utiliza su nombre, y entre paréntesis los argumentos o parámetros que se quieren pasar. Por ejemplo: F(X) = X / (1+X 2 ) Donde: F= Nombre de la función X= Es el argumento (también conocido como parámetro formal)

18 18 Estructura de una Función La estructura de una función es semejante a la de cualquier subprograma:  Una cabecera (con el nombre, los parámetros y el tipo de retorno).  Un cuerpo(con la declaración de las variables locales, las instrucciones y el valor de retorno). Cabecera Cuerpo

19 19 Declaración de una Función La declaración de una función se realiza en dos partes: prototipo e implementación.  El prototipo de una función sirve para declarar el nombre de la función, los parámetros que recibe y el tipo de dato del valor que retorna.  La implementación sirve para definir qué trabajo realiza la función, cómo lo lleva a cabo y para retornar el valor esperado.

20 20 Declaración de una Función Sintaxis Implementación: Donde: Tipo_Retorno: Tipo_Retorno: es el tipo de dato del valor que retorna la función. Nombre_Función: Nombre_Función: es el identificador con el cual se reconoce a la función en el programa principal. Debe ser significativo. ParámetroN: ParámetroN: es la información que necesita la función. Dentro de la función se pueden utilizar como si fueran variables locales. Se denominan Parámetros Formales. Valor_Retorno: es el valor devuelto por la función. Este valor puede ser usado para evaluar expresiones Tipo_Retorno Tipo_Retorno Nombre_Función (Tipo Parámetro1,...,Tipo ParámetroN ) { //Variables locales //Acciones a ejecutar valor_Retorno return valor_Retorno } Sintaxis Declaración: Tipo_Retorno Tipo_Retorno Nombre_Función (Tipo Parámetro1,...,Tipo ParámetroN );

21 21 Llamada de la Función Una vez declarada, la función puede ser llamada (invocada) en el programa. Para ello basta especificar su nombre (y parámetros en el caso de que los tuviese) como si se tratara de una sentencia más. El valor devuelto por la función debe ser recibido en una variable del mismo tipo que dicho valor. Una función puede ser llamada desde el programa principal o desde cualquier otro subprograma. Llamar a la función desde cualquier parte, implica el conocimiento previo de que ésta función existe. Llamado desde main( ) a la funcion1( ), que a su vez contiene a la funcion2( ). Los números indican el orden en que se ejecutan los procesos. Las flechas marcadas con R dentro de un círculo indican el paso en que cada función retorna su valor a la función que la llamó.

22 22 Ejemplos Real Función F(Real X) Inicio Var: Valor Valor  X / (1 + X^2) Retornar Valor Fin Programa_Principal Inicio Var: Real R Escribir “Este es el algoritmo principal” Leer N R  F(N) //Llamado de la función R  R + F(N) Escribir “El resultado de la función es:”,R Fin Una función que calcule la mitad de un valor entero Real Función Mitad (Entero N) Inicio Var: Real M M  N/2 Retornar M Fin Programa_Principal Inicio Var: Entero Num Escribir “Introduce un número” Leer Num Escribir “La mitad de”, Num, “es“, Mitad(Num) Fin

23 23 Ejercicio Nuestro amigo P. Peñazo nos propone un juego en el cual él escribe un número par en una de sus manos e impar en la otra. Después nos dice el valor que resulte de multiplicar por dos el número que tiene en su mano derecha y sumarlo al resultado de multiplicar por tres el número en su mano izquierda. Nuestro objetivo será adivinar en que mano tiene escrito el número par. Realizar una función que recibe el resultado de la operación anterior que nos dice P. Peñazo y devuelve verdadero si el número par está escrito en su mano derecha. Utilizar esta función en un programa que lea por teclado el número anterior y escriba derecha o izquierda en pantalla en función de que mano tenga escrito el número par. Nota. Para la solución de este problema considerar que todo número impar multiplicado por un número impar sigue siendo impar y que multiplicado por un número par siempre da un valor par. Además, la suma de dos números pares siempre es par y la de un número par con uno impar siempre es impar.

24 24 Variables Locales ¿Qué es el ámbito de un identificador? El ámbito de un identificador (variables, constantes, funciones,...) es la parte del programa en la que se conoce y por tanto se puede usar el identificador. Según el ámbito hay 2 tipos de variables: Locales y Globales. Local: Local: Aquella que está declarada y definida dentro de un subprograma. Esto quiere decir que la variable no tiene ningún significado (no se conoce y no se puede acceder a ella) desde fuera del subprograma y que tiene una posición de memoria distinta a la de cualquier otra, incluso si es de una variable que tiene el mismo nombre pero que está definida fuera del subprograma. Las variables locales a un subprograma se definen en la parte de la definición de variables del mismo. Los parámetros formales que se le ponen a un subprograma se comportan dentro de él como si fueran también variables locales a él.

25 25 Variables Globales Global: Global: Son las que están definidas a nivel del programa, es decir, su ámbito es el programa principal y todos los subprogramas que van junto con él. A esta variable podemos acceder desde cualquiera de los subprogramas y el programa principal, salvo que alguno de esos subprogramas tenga definida una variable local con el mismo nombre que la variable global, en este caso si utilizo el nombre de esa variable dentro del subprograma, el compilador se referirá a la local, no a la global (ya que tienen 2 zonas de memoria distintas). En algunos lenguajes de programación las variables globales se define dentro del programa principal, y esa variable será global, en otros lenguajes (Lenguaje C entre ellos) se definen fuera del programa principal y fuera de cualquier otro subprograma (antes de empezar el programa principal). El problema de usar variables globales es que como todos los subprogramas las pueden modificar, puede ser posible que haya usos indebidos cuando un subprograma utiliza una variable global sin saber que otro la ha modificado, por esa razón nunca usaremos para pasar información entre los subprogramas variables globales, sino que usaremos paso de valores por referencia, salvo que no nos quede más remedio.

26 26 Procedimientos Anidados La anidación de procedimientos no se permite en todos los lenguajes y consiste en que dentro de un subprograma se invocar a otros. Si la anidación de procedimientos está permitida, se plantean más problemas en cuanto al ámbito, desde este punto de vista, se dice que una variable local se conoce en el procedimiento en el que está definida y en todos los procedimientos anidados a él que son los que componen el ámbito de dicho procedimiento, salvo que en alguno de esos procedimientos anidados este definida una variable local con el mismo nombre en cuyo caso dentro de ese procedimiento siempre nos referiremos a la variable local definida en él porque siempre se considera el ámbito más restringido.

27 27

28 28 Var: Entero EnteroGlobal // Declaración de una variable global Programa_Principal Inicio // Declaración de una variable local de main: Var: Entero EnteroLocal // Acceso a una variable local: EnteroLocal <- Funcion1(10) // Acceso a una valiable global: EnteroGlobal <- Funcion1(EnteroLocal) retornar 0 Fin Entero Funcion Funcion1(Entero a) Inicio Var: Carácter CaracterLocal; // Variable local de funcion1 /*Desde aquí podemos acceder a EnteroGlobal y también a CaracterLocal pero no a EnteroLocal */ si (EnteroGlobal != 0) retornar a/EnteroGlobal sino retornar 0 Fin Ejemplo

29 29 Comunicación entre subprogramas: Paso de Parámetros POR VALOR: La característica fundamental de este método de paso de parámetros es que el parámetro formal siempre se considera que tiene asociada una dirección de memoria en la que está almacenado y que por tanto se comporta igual que una variable local del subprograma en que aparece. En este método lo que importa es el valor del parámetro actual. El valor del Parámetro Real se copia en la dirección de memoria del parámetro formal asociado. En este caso el parámetro real puede se una constante, expresión o variable, y nunca se va a usar para devolver resultado a través de él, por esa razón precisamente puede ser una constante o una expresión, porque al no devolver resultados a través de él no necesita tomar ninguna zona de memoria en la que este almacenado, es más, incluso si el parámetro actual fuera una variable y se modificara dentro del subprograma (algo que no se debe hacer), fuera del subprograma no tendría ninguna repercusión esta modificación, es decir, esa variable serviría valiendo lo mismo en el programa desde el que se hace la llamada después y antes de hacerla.

30 30 El funcionamiento sería el siguiente: -Al hacer la llamada al subprograma se evalúa el valor del parámetro real, y ese es el que se asocia, es decir, el que se guarda o asigna al parámetro formal asociado. Procedimiento P(Entero X) Inicio X  X*2 Escribir X Fin Programa_Principal Inicio Var: Entero: A A  3 P (A) Escribir A Fin El valor de A sería 3 y el de X sería 6. -Comenzamos a ejecutar el subprograma y si por casualidad se produce algún cambio en el parámetro formal, el parámetro actual no se verá afectado, es decir, su valor seguirá siendo el mismo en el subprograma desde donde se llama que antes de hacer la llamada al subprograma.

31 31 POR REFERENCIA: ¿Para qué se necesita el paso por referencia? Si se trata de modificar los valores de los argumentos de una función, estos cambios no serán vistos desde fuera de la misma. Esto es debido a que los argumentos por valor de la función son copias de las variables reales y son almacenadas como variables locales a dicha función, desapareciendo por tanto al regresar a la función llamante. Por esto, si se quiere modificar el valor de un argumento en una función, se debe pasar este parámetro por referencia: cuando un parámetro se usa como entrada de información y como salida o solo como salida, es decir, se devuelven los resultados al programa que la llama o subprogramas. También es muy aconsejable el paso por referencia en el caso en que una función reciba como argumento una gran estructura de datos (arrays, matrices,...), puesto que el paso por valor implicaría una copia completa de la estructura en el espacio de memoria de la función. A la hora de pasar una variable como argumento a una función, el paso por referencia consiste en entregar como argumento la direccion en memoria de la variable (un puntero a la variable), y no el contenido de la variable. Una variable pasada por referencia es compartida, es decir, se puede modificar directamente por el subprograma.


Descargar ppt "1 Procedimientos y Funciones Introducción a la Informática Departamento de Sistemas Universidad del Cauca 2006."

Presentaciones similares


Anuncios Google