Está en la página 1de 48

Programacin 1 (01 ) Unidad V: Subprogramas: Funciones

Prof. Departamento de Computacin Escuela de Ingeniera de Sistemas Facultad de Ingeniera Universidad de Los Andes

Programacin Modular
Construir programas en forma modular (dividir un programa grande en un cierto nmero de componentes mas pequeos)

Re-utilizar los mdulos


Comprender los mecanismos utilizados para pasar informacin entre mdulos

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Programacin Modular
Diseo descendente (de arriba hacia abajo), metodologa del divide y vencers o programacin top-down:
En la solucin de problemas grandes, es conveniente dividirlo en problemas mas pequeos (sub-problemas), los cuales a su vez pueden dividirse en sub-problemas mas pequeos Este proceso de divisin contina hasta que los sub-problemas son tan sencillos que pueden ser resueltos mediante un programa simple llamado mdulo

Las soluciones (mdulos) de un diseo descendente pueden codificarse en lenguajes de programacin tales como C, C++, Pascal, Fortran o Java

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Programacin Modular
Mdulos: Piezas pequeas diseadas para ejecutar una tarea especfica. Permiten desarrollar y mantener programas grandes. Pueden ser de dos tipos:
Funciones Procedimientos

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Programacin Modular: Ejemplo


Ingeniera

Sistemas

Geologa

Elctrica

Mecnica

Qumica

Computacin

Sistemas de Control

Investigacin de operaciones

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Programacin Modular
Programa principal

M1 M1.1

M2 M1.2

M3

M4 M4.1

M1.2.1
Prof. Flor Narciso Programacin 1 Semestre A-2010 6

Programacin Modular: Ejemplo


Gestionar notas estudiantes

Elegir opcin

Insertar nota

Modificar nota

Eliminar nota

Ver nota

Por nombre

Por nota

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Programacin Modular: Ejemplo

Sistema bibliotecario

Prstamo P_Libros

Adquisicin

Catalogacin
C_Libros

P_Revistas

A_Revistas

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Programacin Modular: Ejemplo


Calcular el rea de un rectngulo

Sub-problemas: Entrada de datos de la altura y la base Leer datos Validar datos Calcular el rea Salida de los resultados

Mdulos: leerDatos(altura, base) validarDato(dato) calcularArea(altura, base, area) escribirArea(area)

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Programacin Modular: Ejemplo


Programa Principal

leerDatos validarDato

calcularArea

escribirArea

Diagrama modular

Prof. Flor Narciso

Programacin 1 Semestre A-2010

10

Programacin Modular: Ventajas


Como los mdulos son independientes, varios programadores pueden trabajar simultneamente y de manera independiente en la resolucin de un problema, repartindose las distintas partes del mismo

Facilita la escritura y depuracin de un programa ya que cada mdulo representa una parte bien definida del problema
Localizacin rpida de errores Modificacin de un mdulo sin afectar a los dems
Prof. Flor Narciso Programacin 1 Semestre A-2010 11

Programacin Modular: Ventajas


Un grupo de instrucciones que se repite en distintas partes de un programa se pueden incluir dentro de una sola funcin, a la que se puede utilizar siempre que sea necesario con datos de entrada adecuados para su uso en un contexto particular y desde distintas partes del programa Favorece la portabilidad, ya que se pueden escribir programas sin prestar atencin a las caractersticas de un sistema en particular
Prof. Flor Narciso Programacin 1 Semestre A-2010 12

Reutilizacin de un mdulo
Los algoritmos de cada mdulo slo se escriben y codifican una sola vez, aunque se necesiten en distintas ocasiones a lo largo del sistema de software completo e incluso de otros sistemas de software (reutilizacin) evitando la duplicacin innecesaria de cdigo La reutilizacin de un mdulo por otros sistemas de software es un ahorro de tiempo, ya que no es necesario volver a resolver el problema, y si el mdulo ha sido previamente probado y verificado tambin reduce la posibilidad de errores Fcil comprensin del programa completo

Prof. Flor Narciso

Programacin 1 Semestre A-2010

13

Funcin
Matemticamente una funcin es una operacin que toma uno o mas valores llamados argumentos y produce un valor llamado resultado Ejemplos funcin de un slo argumento
f ( x) 4 x2 1

f(4) = 4/(16 + 1) = 4/17 = 0.235 funcin de dos argumentos

a2 b2 f ( a, b) (a 1) (b 1)

Prof. Flor Narciso Programacin 1 Semestre A-2010 14

Funcin
real funcin f(entero x) 0. Inicio 1.resultado = 4/(x*x + 1) 2.devolver (resultado) 3.Fin

4 f ( x) 2 x 1

Prof. Flor Narciso Programacin 1 Semestre A-2010 15

Funcin
En C los mdulos se llaman funciones (unidad bsica de los programas). Realizan determinadas tareas bien definidas Una funcin:
Tiene un nombre Toma cero o mas valores, denominados argumentos o parmetros de entrada (parmetros formales) Segn el valor de los parmetros, devuelve un resultado, el cual es obtenido durante su ejecucin

Una funcin se define una sola vez pero puede usarse (mediante llamadas) tantas veces como sea necesario
Prof. Flor Narciso Programacin 1 Semestre A-2010

16

Definicin de una funcin


tipo_resultado funcin nombre_funcin (lista_parmetros_formales) Declaracin_variables_locales Inicio Conjunto de sentencias devolver expresin fin_funcin

Notacin utilizada para definir funciones que devuelven UN SOLO VALOR La lista de parmetros formales y la declaracin de variables locales son opcionales

Prof. Flor Narciso

Programacin 1 Semestre A-2010

17

Mecanismo de llamadas entre funciones


A (definicin)

.. Llamada a funcin B .. Llamada a funcin B


Llamada 1

B (definicin)

Llamada a B.1

B.1 (definicin)

..

Nota: Cada vez que una funcin es llamada, se ejecuta y retorna el control al lugar desde donde fue hecha la llamada

18

Mecanismo de llamadas entre funciones


A (definicin) .. y = f(4)
Llamada 1 x = 4

f (definicin)

..
y = f(-7) ..

f(x) = x + 4

Prof. Flor Narciso

Programacin 1 Semestre A-2010

19

Mecanismos utilizados para pasar informacin entre funciones


Parmetros: Proporcionan la forma de comunicar informacin entre funciones
La funcin A llama (o invoca) a la funcin f con parmetro actual 4 4

A Y = f(4)

f f(x) = x + 4

Prof. Flor Narciso

Programacin 1 Semestre A-2010

20

Mecanismos utilizados para pasar informacin entre funciones


Parmetros: Proporcionan la forma de comunicar informacin entre funciones
La funcin A llama (o invoca) a la funcin f con parmetro actual 4 8 La funcin f se ejecuta y devuelve el resultado a la funcin A, el cual es asignado a la variable Y
Programacin 1 Semestre A-2010

A Y=8

f f(4) = 4 + 4 = 8

Prof. Flor Narciso

21

Tipos de funciones en C
Funciones de biblioteca (libreras) : El lenguaje C tiene sus propias funciones incorporadas que permiten realizar ciertas operaciones o clculos de uso comn
Funciones definidas por el programador para realizar determinadas tareas

Prof. Flor Narciso

Programacin 1 Semestre A-2010

22

Librera estndar de C
Contiene una amplia coleccin de funciones para llevar a cabo clculos matemticos comunes, manipulaciones con cadenas de caracteres, manipulaciones con caracteres, operaciones de entrada/salida y muchas otras operaciones tiles. Esta biblioteca de funciones comunes construida una vez, puede ser re-utilizada por diferentes programas
Prof. Flor Narciso Programacin 1 Semestre A-2010 23

Libreras ANSI C

Librera assert ctype

Directiva #include <assert.h> #include <ctype.h>

Descripcin nicamente define la macro de depuracin assert Contiene los prototipos de las funciones y macros de clasificacin de caracteres Define constantes para los cdigos de error Contiene parmetros de entorno, informacin sobre limitaciones y rangos para tipos reales
24

errno float

#include <errno.h> #include <float.h>

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Libreras ANSI C
Librera limits Directiva #include <limits.h> Descripcin Contiene parmetros de entorno, informacin sobre limitaciones y rangos para tipos enteros Contiene los prototipos de las funciones, macros, y tipos para manipular y controlar varias opciones pertenecientes a la localidad del sistema Contiene los prototipos de las funciones y otras definiciones para el uso y manipulacin de funciones matemticas
25

locale

#include <locale.h>

math

#include <math.h>

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Libreras ANSI C

Librera setjmp

Directiva #include <setjmp.h>

Descripcin Contiene los prototipos para las funciones y un tipo para crear y manipular el entorno al hacer llamadas: registros, pilas, etc.. Contiene las funciones, macros, y tipos para crear y manipular seales del sistema Contiene las macros y tipos para crear y manipular argumentos de variables
26

signal

#include <signal.h>

stdarg

#include <stdarg.h>

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Libreras ANSI C

Librera stddef stdio

Directiva

Descripcin

#include < stddef.h> Contiene las macros, y tipos comunes #include <stdio.h> Contiene los prototipos de las funciones, macros, y tipos para manipular datos de entrada y salida Contiene los prototipos de las funciones, macros, y tipos para utilidades de uso general

stdlib

#include < stdlib.h>

Prof. Flor Narciso

Programacin 1 Semestre A-2010

27

Libreras ANSI C

Librera string

Directiva #include < string.h>

Descripcin Contiene los prototipos de las funciones y macros de clasificacin de caracteres Contiene los prototipos de las funciones, macros, y tipos para manipular la hora y la fecha del sistema

time

#include <time.h>

Prof. Flor Narciso

Programacin 1 Semestre A-2010

28

Funciones de librera en C
Tipo de la funcin Tipo y nombre del parmetro formal, parmetro de entrada o argumento

double sin(double x) Definicin de la funcin Nombre de la funcin sin

Ejemplo: valor1 = sin(3.14);


Prof. Flor Narciso

Parmetro actual

Llamada a la funcin sin


29

Programacin 1 Semestre A-2010

Tipos de Parmetros
Parmetros formales (parmetros de entrada o argumentos): Declaraciones de los parmetros en la definicin de la funcin
Parmetros actuales: Valores que toman los parmetros formales y que son proporcionados a la funcin que es llamada por la funcin que la llam

Prof. Flor Narciso

Programacin 1 Semestre A-2010

30

Parmetros formales
Los PARAMETROS FORMALES son VARIABLES LOCALES. La nica diferencia es el lugar donde son declarados, es decir, en la definicin de una funcin (lista_parmetros_formales). Cuando se pasa un valor desde una funcin llamadora o invocadora a una funcin llamada o invocada, se crea una variable temporal dentro de la funcin invocada. Una vez que termina la ejecucin de la funcin invocada y se retorna a la funcin invocadora, esta variable deja de existir.

Prof. Flor Narciso

Programacin 1 Semestre A-2010

Funciones de librera en C
Funcin: double acos(double x);
Propsito Calcula el valor principal del arco coseno de x. Puede producirse un error de dominio para los argumentos que no estn en el intervalo [-1, +1] Retorna el arco coseno en el intervalo [0, PI] radianes Ejemplo

#include <stdio.h> #include <math.h>


int main() { double x = 0.2345; printf( "acos(%f)= %f\n", x, acos(x)); return 0; }

Prof. Flor Narciso

Programacin 1 Semestre A-2010

32

Funciones de librera en C
Funcin: double pow(double x, double y);
Propsito Calcula x elevado a la potencia de y Puede producirse un error de dominio si x es negativo e y no es un valor entero Tambin se produce un error de dominio si el resultado no se puede representar cuando x es cero e y es menor o igual que cero Retorna el resultado de xy
Prof. Flor Narciso Programacin 1 Semestre A-2010 33

Ejemplo

#include <stdio.h> #include <math.h> int main() { double x = 6.54321, y = 0.56789; printf( "pow(%f, %f) = %f\n", x, y, pow(x,y)); return 0; }

Funciones de librera en C
Funcin: int abs(int num);
Propsito Calcula el valor absoluto de un entero num Si el resultado no puede ser representado, el comportamiento no est definido
#include <stdlib.h> #include <stdio.h> int main() { int num, y; puts( "Escriba un numero entero:" ); scanf( "%d", &num ); y = abs(num); printf( "abs( %d ) = %d\n", num, y); return 0; }
Prof. Flor Narciso Programacin 1 Semestre A-2010 34

Ejemplo

Retorna el valor absoluto

Funciones de librera en C
Ejemplos: #include <math.h> valor1 = sin(3.14159); valor2 = sin(x) - cos(y); valor3 = sin(theta)/(sin(delta) - sin(delta-theta)); theta = acos(1.0/sqrt(1 - x*x)); if (sin(x) > 0.7) { printf(Angulo mayor que 90 grados\n); printf(Valor = %f, exp(-a*t) * sin(a*t)); }
Prof. Flor Narciso Programacin 1 Semestre A-2010 35

Funciones de librera en C: Ejemplo


Un polinomio de x, de segundo grado como mximo, se da por ax2 + bx + c Su discriminante se define como b2 4ac Se desea conocer la raz cuadrada del discriminante; si el discriminante no es negativo, b 2 4 ac tiene la interpretacin usual, pero si el discriminante es negativo, entonces significa i (b 4 ac) b 4 ac
2

donde i es el nmero imaginario que satisface 2 i = -1 o en forma equivalente, i= 1

Dado los valores de a, b y c, calcular el valor de la raz cuadrada del discriminante.

Prof. Flor Narciso

Programacin 1 Semestre A-2010

36

Funciones de librera en C: Ejemplo


Anlisis E-P-S Entradas: a, b, c Z Proceso:
- Calcular discriminante = b2 4ac - Si discriminante > 0 RC = b 2 4 ac - Si discriminante < 0 RC = i (b 2 4 ac)

Salidas: Raz cuadrada del discriminante RC R

Prof. Flor Narciso Programacin 1 Semestre A-2010 37

Funciones de librera en C: Ejemplo


Algoritmo
0. Inicio 1. Escribir (a = ?, b = ?, c = ?) 2. Leer (a, b, c) 3. disc= pow(b, 2) - 4ac 4. Si (disc > 0) entonces RC = sqrt(disc) Escribir (Raiz del discriminante = , RC) sino RC = sqrt(-disc) Escribir (Raiz del discriminante = i, RC) fin-si 5. Fin
Prof. Flor Narciso Programacin 1 Semestre A-2010 38

Funciones de librera en C: Ejemplo


Codificacin
#include <stdio.h> #include <math.h> int main () { float a, b, c, disc, RC; printf(Valores de a = ?, b = ?, c = ?)l; scanf(%f %f %f, &a, &b, &c); disc= pow(b, 2.0) - 4.0*a*c; if (disc >= 0.0) { RC = sqrt(disc); printf(Raiz del discriminante = %f\n, RC); } else { RC = sqrt(-disc); printf(Raiz del discriminante = i%f\n, RC); } return 0; }

Prof. Flor Narciso

Programacin 1 Semestre A-2010

39

Funciones de librera en C: Ejemplo


Leer una letra minscula y convertirla a mayscula Anlisis E-P-S Entradas: Letra minscula (minuscula caracteres)

Proceso: Convertir la letra minscula en su correspondiente mayscula


Salidas: Letra mayscula (mayuscula caracteres)

Prof. Flor Narciso

Programacin 1 Semestre A-2010

40

Funciones de librera en C: Ejemplo


Algoritmo
0. Inicio 1. Escribir (Introduzca una letra minscula) 2. Leer (minuscula) 3. mayuscula = convertirMayuscula(minuscula) 4. Escribir (mayuscula) 5. Fin

Prof. Flor Narciso

Programacin 1 Semestre A-2010

41

Funciones de librera en C: Ejemplo


Codificacin
#include <stdio.h> #include <ctype.h> int main() { int minuscula, mayuscula; printf(Introduzca una letra minscula); minuscula = getchar(); mayuscula = toupper(minuscula); putchar(mayuscula); return 0;

Prof. Flor Narciso

Programacin 1 Semestre A-2010

42

Ejercicios
Un programa en C contiene las siguientes declaraciones y asignaciones iniciales:

int i = 8, j = 5; double x = 0.004, y = -0.01; char c = c, d = d;


Determinar el valor de cada una de las siguientes expresiones, que hacen uso de funciones de biblioteca. a) abs(i - 2 * j) b) fabs(x + y) c) ceil (x) d) ceil (x + y) e) floor (x) f) floor(x + y) g) exp(x) h) log(x) i) log(exp(x)) j) sqrt(x*x + y*y) k) sqrt(sin(x) + cos(y)) l) pow(x - y, 3.0)

Prof. Flor Narciso

Programacin 1 Semestre A-2010

43

Paso de parmetros
Paso de parmetros: Por valor Por referencia Por valor: Los parmetros formales correspondientes reciben una COPIA de los valores (constante, variable, resultado de la evaluacin de una expresin) de los parmetros actuales; por tanto, los cambios que se produzcan en ellos por efecto de la ejecucin de la funcin no podrn afectar el valor de los parmetros actuales.En C/C++ todas las llamadas, por defecto, son por valor.

Prof. Flor Narciso

Programacin 1 Semestre A-2010

44

Paso de parmetros por valor: Ejemplo


#include <stdio.h> int mayor (int x, int y, int z) { int max; max = x; if (y > max) max = y; if (z > max) max = z; return max; } } int main() { int a, b, c, P, Q, R, S; printf (Introduzca 3 numeros) scanf(%d %d %d, &a, &b, &c); P = mayor (3, 4, 6); Q = mayor (a, b, c); R = mayor (a + 1, b, 1); S = mayor (P, Q, R); printf(mayor = %d, S); return 0;

Prof. Flor Narciso

Programacin 1 Semestre A-2010

45

Paso de parmetros por valor: Ejemplo


Escribir una funcin que reciba los valores enteros de x y n > 0 como parmetros de entrada y devuelva el valor de xn como salida.
entero funcin Potencia (entero x, entero n) 0. Inicio 1. pot = 1 2. Repita para (I = 1; I < n; I = I + 1) pot = pot * x fin_RP 3. devolver pot 4. fin_funcin

Prof. Flor Narciso

Programacin 1 Semestre A-2010

46

Paso de parmetros por valor: Ejemplo


Escribir un programa que tome un conjunto de pares de nmeros enteros a y b, y calcule la potencia ab de cada par. El fin de entrada de datos viene dado por a = -1 y b = -1.
0. Inicio 1. Q = cierto 2. Repita mientras (Q = cierto) Escribir (Introduzca los valores de a y b) Leer (a, b) Si (a = -1 y b = -1) entonces Q = falso sino Si (b > 0) entonces resultado = Potencia (a, b) Escribir (Resultado = , resultado) sino Escribir(Error: b debe ser > 0) fin_si fin_si fin_RM 3. Fin CODIFICAR!!!!!!
Prof. Flor Narciso Programacin 1 Semestre A-2010 47

Paso de parmetros por valor: Ejemplo


Realizar una funcin en C que permita sumar el nmero de elementos negativos de una lista de n nmeros reales
real funcin Suma () 0. Inicio 1. Escribir (Introduzca el valor de n) 2. Leer (n) 3. resultado = 0 4. Repita para (j = 1; j < n; j = j + 1) Escribir (Introduzca un nmero real) Leer (numero) Si (numero < 0.0) entonces resultado = resultado + numero fin_si fin_RP 5. devolver(resultado) 6. fin_funcion
Prof. Flor Narciso Programacin 1 Semestre A-2010 48