Академический Документы
Профессиональный Документы
Культура Документы
SUBPROGRAMAS
Elementos de Programacin I
Elementos de Programacin I
T T E E M M A A 5 5
5.1. Subprogramas.
Conceptos. Tipos de parmetros
Elementos de Programacin I
Elementos de Programacin 4
Obtener Nota
Imprimir calificacin
Elementos de Programacin 5
Elementos de Programacin 6
Subalgoritmo
Calificacin ObtenerNotaNumrica ImprimirCalificacin
Al cdigo correspondiente al mdulo raz o principal le llamaremos algoritmo principal y al cdigo de cada uno de los restantes mdulos subalgoritmo Elementos de Programacin 7
Elementos de Programacin 8
Elementos de Programacin 9
Elementos de Programacin 10
Pero el cdigo del ejemplo no es totalmente reutilizable. Deberamos hacer uso del concepto de llamada.
Elementos de Programacin 11
La instruccin de llamada 1 provoca la ejecucin del algoritmo B sobre los valores que le indiquemos. Al acabar el algoritmo B, puede que nos devuelva unos resultados
Elementos de Programacin 12
Elementos de Programacin 13
En la llamada al subalgoritmo estarn los parmetros reales (o actuales), que son expresiones separadas por comas.
nombre ( parmetros reales )
Elementos de Programacin 14
Nivel 0
Primos_menores
Comprobar si un n esprimo
Nivel 1
Comprobar_si_es_primo
Elementos de Programacin 15
Elementos de Programacin 16
Elementos de Programacin 17
Elementos de Programacin 18
Elementos de Programacin 19
Elementos de Programacin 20
Elementos de Programacin 21
Tipo de la funcin:
La funcin puede devolver un valor de un tipo.
Elementos de Programacin 22
Elementos de Programacin 23
Desventajas
? Utiliza ms memoria
Por Valor
Por Referencia
? Solo permite variable como parmetro real ? Puede producir efectos laterales
Elementos de Programacin 24
nmero
Elementos de Programacin 25
Elementos de Programacin 27
Elementos de Programacin 28
Algoritmo principal
Elementos de Programacin 29
Zm Cc
Cuales de las siguientes llamadas son incorrectas? Por qu? prueba (m+3, 10, x, y, c) prueba (30, 10, m, x, c) prueba (m, 19, x, y) prueba (m, m*m, y, x, c) prueba (35, m*10, x, c, y) prueba (m, 10, 35.0, y, E) prueba (m, 3.5, x, y, c) prueba (30, 10, x, x+y, c) prueba (30, 10, c, d, e) prueba (m, m, x, y, c)
Elementos de Programacin 30
Procedimientos y funciones
Todos los algoritmos vistos hasta ahora son procedimientos:
Algoritmo nombre (parmetros formales) declaraciones INICIO acciones FIN
Declaracin
Llamada
Esta llamada constituye por si sola una accin o sentencia del algoritmo llamante
Elementos de Programacin 31
Procedimientos y funciones
Supongamos que queremos un subalgoritmo que calcule la raz cuadrada de un nmero; su cabecera sera:
Algoritmo RazCuadrada ( E R nmero; S Z resultado)
El subalgoritmo realiza una serie de acciones y devuelve un resultado ( y slo uno) al algoritmo llamante, es mejor utilizar otro tipo de subalgoritmo llamado funcin. Una funcin se declara de la forma:
Algoritmo R RazCuadrada (E R nmero) declaraciones INICIO acciones /* Entre ellas al menos una sentencia DEVOLVER */ FIN
Elementos de Programacin 32
Procedimientos y funciones
La llamada a una funcin no puede constituir por si sola una sentencia del algoritmo llamante ! Ejemplos de llamada:
resultado= RazCuadrada ( 34.5 ) resultado= 2.0 * RazCuadrada ( (23.0 / 2.3) +dato_real ) + 66.6
La llamada a una funcin debe aparecer dentro de alguna sentencia del algoritmo llamante, de forma que el valor devuelto se utilice de alguna forma.
Elementos de Programacin 33
Procedimientos y funciones
Las funciones que devuelven un valor lgico son especialmente tiles. Ejemplo:funcin que devuelve si un nmero es primo o no.
Algoritmo B EsPrimo ( E N Num) VARIABLES N contador B primo INICIO primo = TRUE contador = 2 MIENTRAS (contador < Num) Y primo HACER primo = NO (Num MOD contador == 0) contador = contador + 1 FINMIENTRAS DEVOLVER primo FIN
Elementos de Programacin 34
Procedimientos y funciones
Desde el algoritmo principal se puede invocar a la funcin de esta forma:
SI EsPrimo (numero) ENTONCES acciones SINO acciones FINSI
Elementos de Programacin 35
Procedimientos y funciones
Ejemplo: Algoritmo para calcular nmeros combinatorios.
?m ? ? ?n ? ? ? n! ? ? m! ?m ? n?!
Algoritmo N Factorial (E N nmero) VAR N contador, fact INICIO fact = 1 PARA contador = 1 HASTA nmero HACER fact = fact * contador FINPARA DEVOLVER fact FIN
Elementos de Programacin 36
Procedimientos y funciones
Algoritmo Combinatorios VAR N m,n INICIO Leer(m) Leer(n) Escribir(Factorial(m) DIV (Factorial(n) * Factorial(m-n))) FIN
Elementos de Programacin 37
Un programa tiene una sola funcin main() . La funcin main() puede tener un tipo: devolver un valor. Ej: int main(){ /*Bloque sentencias*/ return 0; }
Elementos de Programacin 38
Funciones en C/C++
Tipo de resultado Lista de parmetros
float suma (float num1, float num2) { Cabecera de la float resp; Declaracin de funcin
variables
Elementos de Programacin 39
Elementos de Programacin 40
Elementos de Programacin 41
Elementos de Programacin 42
Elementos de Programacin 43
T T E E M M A A 5 5
Elementos de Programacin I
Subprogramas anidados
Desde el cuerpo de cualquier procedimiento o funcin se pueden realizar llamadas a otros procedimientos y/o funciones. Para poder invocar a un procedimiento es necesario que se haya declarado antes. Dnde puede estar declarado?
Antes que el algoritmo que realiza la llamada. Dentro de l, en su zona de declaraciones.
Elementos de Programacin 46
to ien m ida An
Subprogramas anidados
Reglas:
Algoritmo Principal
declaraciones vbles y ctes Algoritmo Sub1 vbles y ctes INICIO acciones FIN Algoritmo Sub2 vbles y ctes INICIO acciones FIN .......... Algoritmo Subn vbles y ctes INICIO acciones FIN
Dentro del cuerpo del algoritmo principal se pueden realizar llamadas a cualquier Subi. Dentro del cuerpo de un subalgoritmo Subi se podr llamar a un Subj siempre que j <= i (si j = i estamos ante la Recursividad ).
Elementos de Programacin 47
Subprogramas anidados
Puede ser que un subalgoritmo Subi est declarado de la forma:
Algoritmo Subi vbles y ctes
Algoritmo Subi1 vbles y ctes INICIO acciones FIN Algoritmo Subi2 vbles y ctes INICIO acciones FIN .......... Algoritmo Subik vbles y ctes INICIO acciones FIN
Desde Subi se puede invocar a cualquier Subih. Desde un Subip se podr realizar llamadas a otro Subiq siempre que q <= p. Pero adems, tambin es aplicable que: Desde cualquier Subip se puede invocar a un Subj , siempre que j <= i. Si Subj est estructurado de forma similar a Subi: No es posible una llamada a ningn Subjh desde el cuerpo de Subi o desde el cuerpo de cualquier Subip
Elementos de Programacin 48
Reglas de mbito
Variables globales:
Declaradas en un algoritmo principal. Son visibles tanto en su cuerpo como en el de los subalgoritmos declarados dentro de el. Declaradas en un subalgoritmo. Slo pueden utilizarse dentro de l. Una variable local a un subalgoritmo se puede considerar como global para con sus algoritmos. Cada vez que se invoca a un subalgoritmo sus variables locales comienzan con valores indefinidos. Cuando un subalgoritmo termina su ejecucin, los valores de sus variables locales se destruyen. Elementos de Programacin 49
Variables locales:
Reglas de mbito
Efecto lateral : Cualquier efecto de un algoritmo sobre otro, que no es a
travs de la interfaz definida explcitamente sobre ellos.
Programa principal y otros procedimientos
Parmetros
Procedimiento
Elementos de Programacin 50
Reglas de mbito
Reglas de mbito: Determinan donde puede ser accedido un identificador
dentro de un algoritmo.
1 2 3 4
Un identificador es accesible desde el cuerpo del algoritmo que lo declara y desde el cuerpo de los algoritmos anidados dentro de l, excepto los de la regla 3. El nombre de un subalgoritmo tambin es accesible desde su propio cuerpo. El mbito de un identificador no se extiende a ningn subalgoritmo anidado que contenga otro identificador con el mismo nombre (precedencia de nombre) El mbito de un parmetro formal es el mismo que el de una variable local del subalgoritmo.
Elementos de Programacin 51
Reglas de mbito
Ejemplo:
Algoritmo Principal VAR N A, D, C Algoritmo uno (ES N X, Y; E N D) VAR N I, J INICIO /* Sentencias de Uno */ FIN Algoritmo Dos (ES B M) VAR RL Algoritmo Tres (ES N S) INICIO /* Sentencias de Tres */ FIN INICIO /* Sentencias de Dos */ FIN INICIO /* Sentencias de Principal */ FIN
Elementos de Programacin 52
Reglas de mbito
Principal A D C Uno
I J X Y D Dos M L Tres S
Elementos de Programacin 53
Reglas de mbito
Algoritmos
Principal Uno Dos Tres
Principal, Uno, Dos Principal, Uno
Variables
? A, D, C (Principal)
Elementos de Programacin 54
Elementos de Programacin 55
Diseo modular
Una implementacin modular generalmente se sigue de una solucin desarrollada mediante diseo top-down . Ejemplo:
Procesar nmina
Id. Empleado
Ingresos Tot.
Calcular ingresos
Calcular impuestos
SS
IRPF
Elementos de Programacin 56
Elementos de Programacin 57
Bibliografa
Programacin en C++. Algoritmos, estructuras de datos y objetos. L. Joyanes. McGraw-Hill, 2000 Cmo programar en C/C++. H.M. Deitel, P.J. Deitel. Prentice Hall, 1995 Fundamentos de programacin. Algoritmos y estructuras de datos. L. Joyanes. McGraw-Hill. 1996 PASCAL. Introduccin al lenguaje y programacin estructurada. Koffman. Addison Wesley.1987 PASCAL y Estructuras de datos. N. Dale & S. Lilly. McGraw-Hill. 1992. Curso Interactivo de programacin en Pascal. L. Sommaruga y otros. McGraw-Hill. 1997.
Elementos de Programacin 58