Sie sind auf Seite 1von 36

Funciones y Procedimientos II

Andrs Arcia Departamento de Computacin Escuela de Ingeniera de Sistemas Facultad de Ingeniera Universidad de Los Andes

27/05/05

Programacin Digital I

Funciones definidas por el programador


La manera principal de organizar bloques funcionales en el computador es a travs de funciones. La funcin que sirve de interfaz entre el sistema operativo y una aplicacin es el main.
#define todo_esta_ok 0 int main () { printf(funcion principal); return todo_esta_ok; }

Aspectos importantes: Un programa en C consta de una o varias funciones. Un programa siempre debe contener la funcin main. La ejecucin de un programa siempre comienza por la funcin main. Una funcin puede no devolver ningn valor, puede devolver un slo valor, o puede devolver varios valores.
27/05/05 Programacin Digital I

Notacin algortmica 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. El tipo_resultado (tipo de valor devuelto por la funcin), la lista de parmetros formales, la declaracin de variables locales y la sentencia devolver son opcionales. NOTA IMPORTANTE: Una definicin de una funcin no puede estar incluida en otra pero una funcin puedeI acceder a otras funciones. 3 Programacin Digital 27/05/05

Notacin algortmica de una funcin


tipo_resultado funcin nombre_funcin (lista_parmetros_formales) Cada parmetro formal viene precedido por su declaracin de tipo:
tipo_dato nombre_parmetro_formal1, tipo_dato nombre_parmetro_formal2,

Los identicadores usados como nombre_parmetro_formal son locales a la funcin. Si la denicin de una funcin no contiene parmetros formales se tiene: tipo_resultado funcin nombre_funcin ()

27/05/05

Programacin Digital I

Notacin algortmica de una funcin


procedimiento nombre_procedimiento (lista_parmetros_formales) Declaracin_variables_locales Inicio Conjunto de sentencias n_procedimiento Notacin utilizada para denir funciones que no devuelven un valor en el nombre de la funcin, no obstante pueden devolver valores a travs de la lista de parmetros formales. Se omiten el tipo_resultado (tipo de valor devuelto por la funcin) y la sentencia devolver.

27/05/05

Programacin Digital I

Definicin de una funcin: Notacin algortmica


Ejemplos:
entero funcin minuscula_a_mayuscula (entero c1) entero funcin maximo (real a, caracter b) real funcin sin(real angulo) procedimiento f(entero x) procedimiento imprime_salida()
27/05/05 Programacin Digital I 6

Sentencia devolver
La sentencia devolver, detiene el flujo de ejecucin de una funcin para retornar a la lnea inmediata siguiente desde donde fue llamada. El tipo de esta expresin debe ser el mismo que el tipo de la funcin definida en tipo_resultado. Si la funcin no tiene asociado un tipo_resultado entonces se omite la sentencia devolver. En otros lenguajes de programacin a este tipo de funciones se les llama procedimiento. Pueden incluirse una o mas sentencias devolver en una Programacin Digital I 27/05/05 misma funcin.

Recordar.
Cuando se llama a una funcin desde alguna parte especfica del programa, se ejecutan sus sentencias. Una vez ejecutada la funcin completa, se devuelve el control a la parte del programa desde donde se realiz la llamada. Generalmente una funcin devuelve un slo valor, aunque se pueden escribir funciones que no devuelven ningn valor o que devuelven varios valores.

27/05/05

Programacin Digital I

Definicin de una funcin Ejemplo 1


Calcular el cuadrado de un nmero entero
entero funcin (entero e) cuadrado

tipo_resultado: entero nombre_funcin: cuadrado lista_parmetros_formales: e de tipo entero Declaracin_variables_locales: No hay variables locales devolver: resultado de la evaluacin de la expresin e * e

Inicio devolver e * e fin_funcin

27/05/05

Programacin Digital I

Definicin de una funcin: Ejemplo 2


Dados tres nmeros enteros, determinar cul es el mayor entero funcin mayor (entero x, entero y, entero z) entero max Inicio max = x Si (y > max) entonces max = y fin_si Si (z > max) max = z fin_si devolver max 27/05/05 fin_funcin

tipo_resultado: entero nombre_funcin: mayor lista_parmetros_formales: x de tipo entero, y de tipo entero y z de tipo entero Declaracin_variables_locales: max de tipo entero devolver: valor de la variable max

Programacin Digital I

10

Llamada a una funcin


La llamada a una funcin se hace especicando su nombre, seguido de una lista de parmetros actuales. En la llamada a una funcin debe haber un parmetro actual por cada parmetro formal que aparece en la denicin de la funcin. Cada parmetro actual debe ser del mismo tipo de su correspondiente parmetro formal. Ejemplo:
Denicin: entero funcin mayor (entero x, entero y, entero z) Llamada: x = mayor(a, 5, b + c)

27/05/05

Programacin Digital I

11

Llamada a una funcin


Si la funcin es de un tipo determinado
<var> = <nombre_funcin> (<lista de parmetros actuales>) x = mayor(a, b + 1, 2)

Si la funcin no tiene tipo asociado

<nombre_procedimiento> (<lista de parmetros actuales>) ordenar(x, y, z1)

Dentro de una expresin

<var> = x + <nombre_funcin>(<lista de parmetros actuales>) y = mayor(a + factorial(b), b, c)

27/05/05

Programacin Digital I

12

Llamada a una funcin que no tiene tipo asociado


procedimiento MiFuncion() Inicio

0. Inicio 1. MiFuncion() 2. OtraFuncion() 3. Fin

fin_procedimiento

procedimiento OtraFuncion() Inicio fin_procedimiento

27/05/05

Programacin Digital I

13

Llamadas a funciones
Ejemplos:
F = factorial(5); determinado // Funcion de un tipo

F = factorial(a)/factorial(a - b);// Funcion de un tipo determinado if (esBisiesto(anyo) == true) condicin // Dentro de una

MiFuncion(); // Funcion que no tiene tipo asociado

27/05/05

Programacin Digital I

14

Llamadas a funciones: Ejemplo 1


Calcular (x2 + y2)/(x-y)2
entero funcin cuadrado (entero e) Inicio devolver e * e fin_funcin 0. Inicio 1. Escribir (Introduzca los valores de x y y) 2. Leer (x, y) 3. Resultado = (cuadrado(x) + cuadrado(y))/cuadrado(x - y) 4. Escribir (Resultado =, Resultado) 5. Fin Programacin Digital I 27/05/05

15

Llamadas a funciones: Ejemplo 1


Calcular x2 + y2/(x-y)2 Para x = 5, y = 4 Resultado = (cuadrado(5) + cuadrado(4))/cuadrado(1) 1) entero cuadrado (entero e) devolver 5 * 5 = 25 Resultado = (25 + cuadrado(4))/cuadrado(1) 2) entero cuadrado (entero e) devolver 4 * 4 = 16 Resultado = (25 + 16)/cuadrado(1) 3) entero cuadrado (entero e) devolver 1 * 1 = 1 Resultado = (41)/1 = 41
27/05/05

Programacin Digital I

16

Llamadas a funciones: Ejemplo 2


entero funcin mayor (entero x, entero y, entero z) entero max Inicio max = x Si (y > max) entonces max = y fin_si if (z > max) max = z fin_si devolver max; fin_funcin 0. Inicio 1. Escribir (Introduzca los valores de a, b y c) 2. Leer (a, b, c) 3. P = mayor (3, 4, 6) 4. Q = mayor (a, b, c); 5. R = mayor (a + 1, b, 1) 6. S = mayor (P, Q, R) 7. Escribir (mayor =, S) 8. Fin

27/05/05

Programacin Digital I

17

Definicin de una funcin en C


tipo_resultado nombre_funcin (lista_parmetros_formales) { Declaracin_variables_locales Conjunto de sentencias return (expresin); }

27/05/05

Programacin Digital I

18

Encabezado de una funcin en C


tipo_resultado nombre_funcin (lista_parmetros_formales)
tipo_resultado

int main ( )

No hay parmetros formales

Nombre_funcin

27/05/05

Programacin Digital I

19

Encabezado de una funcin en C


El tipo void se usa para indicar que la funcin no devuelve ningn valor, o que no existen parmetros formales. void funcion(void) // No devuelve valor y no // tiene parmetros formales

Cada parmetro formal debe ser declarado.


int F2(int a, int b, char c) // La funcin F2 devuelve un valor entero // Tiene tres parmetros formales // Dos enteros a y b, uno carcter c
27/05/05 Programacin Digital I 20

Cuerpo de una funcin en C


Declaracin de variables locales. Cdigo ejecutable (conjunto de sentencias). Ejemplo:
int F2 (int a, int b) { int c; // Declaracin de variables locales // Cdigo ejecutable c = a*a; c += b; return (c); }

27/05/05

Programacin Digital I

21

Sentencia return
Sentencia que devuelve el valor obtenido como resultado de la ejecucin de una funcin. Ejemplo
int cuadrado (int e) { return (e * e); }

27/05/05

Programacin Digital I

22

Funciones en C: Ejemplo 1
Algoritmo
entero funcin mayor (entero x, entero y, entero z) entero max Inicio max = x Si (y > max) entonces max = y fin_si Si (z > max) max = z fin_si devolver max fin_funcin

Codicacin
int mayor (int x, int y, int z) { int max = x; if (y > max) max = y; if (z > max) max = z; return (max); }

27/05/05

Programacin Digital I

23

Funciones en C Ejemplo 2
Codicacin
// Funcion factorial long int factorial (int n) { long int f; int i; f = 1; i = 0; while (i < n) { i++; f = f * i; } return (f);

Corrida en fro
Para la llamada x = factorial(5)
i=0, f=1 i=1, f=1 i=2, f=2 i=3, f=6 i=4, f=24 i=5, f=120

27/05/05

Programacin Digital I

24

Funciones en C: Ejemplo 3
#include <stdio.h> int a; // a es global void f1 (int b, int c) { // k es local int k; k = b * b; printf(k = %i\n, k); a = k + c; // a es global printf(a = %i\n, a); }
// b y c diferentes a las de // f1 void f2 (int b, int c) { int k; // k local diferente // a la de f1 k = b + 2; printf(k = %i\n, k); a = k * a * c; // a global printf(a = %i\n, a); } void main () { f1(1,2); a++; f2(3,4); }
25

27/05/05

Programacin Digital I

Funciones en C: Ejemplo 4
// Calcular los cuadrados de los enteros del 1 al 10
#include <stdio.h> int cuadrado (int e) { return (e * e); } void main () { int x; for (x = 1; x <= 10; x++) printf(%i,cuadrado(x)); }

27/05/05

Programacin Digital I

26

Funciones en C: Ejemplo 5
// Convertir un caracter en minuscula a // mayuscula #include <stdio.h> #include <ctype.h> int minusc_mayusc (int c1) { int c2; c2 = toupper(c1); return (c2); } void main () { int may, min, x; for (x = 1; x <= 10; x++) { printf(Introduzca una letra minuscula\n); scanf(%i,&min); may = minusc_mayusc(min); printf(%c\n,may); } }
27/05/05 Programacin Digital I 27

Prototipos de funciones en C
En los ejemplos descritos anteriormente, las funciones definidas por el programador siempre han precedido a la funcin main. Cuando la funcin main precede a las funciones definidas por el programador se utilizan prototipos.
<tipo_funcin> <nombre_funcin> (tipo_param_1, , tipo_param_n);

27/05/05

Programacin Digital I

28

Funciones en C: Ejemplo 1
#include <stdio.h> void bar(); // Prototipo // de la funcion bar void foo(); // Prototipo de la // funcion foo int gMiVar = 10; // gMiVar es global int main() { // Llamada a una funcion // dentro de otra foo(); return 0; void bar() { printf("gMiVar = %i", gMiVar); } void foo() { // Llamada a una funcion dentro // de otra bar(); }

27/05/05

Programacin Digital I

29

Funciones en C: Ejemplo 2
#include <stdio.h> void bar(int p) { printf("p = %i", p); } void foo() { // Llamada a una funcion dentro // de otra bar(); } void main( ) { int miVar = 10; // Llamada a una funcion // dentro de otra } bar(miVar);
30

27/05/05

Programacin Digital I

Ejercicios
Explicar el significado de cada uno de los siguientes prototipos de funciones:
int f(int); double f1(double, int); char f2(void)

Escribir una llamada a apropiada para cada una de las siguientes funciones:
float formula(float x) { float y; y = 3 * x - 1; return (y); } } void escribir(int a, int b) { int c; c = sqrt(a * a + b * b); cout << c = << c << end;

27/05/05

Programacin Digital I

31

Ejercicios
Escribir una funcin (algoritmo y codificacin) que reciba como parmetro un nmero y devuelva como resultado un valor de tipo lgico que indique si el nmero es o no par. Escribir una funcin (algoritmo y codificacin) que reciba como parmetro dos nmeros y devuelva como resultado un valor de tipo lgico que indique si el primer nmero es mltiple del segundo. Utilizando la funcin factorial, escribir una funcin (algoritmo y codificacin) que calcule el nmero combinatorio dado por la n! frmula siguiente:
m! x (n - m)!

27/05/05

Programacin Digital I

32

Ejercicios
Escribir una funcin (algoritmo y codificacin) que reciba los valores de x y n como parmetros de entrada y devuelva el valor de xn como salida. Escribir una funcin (algoritmo y codificacin) que imprima la pirmide 1 121 12321 1234321 La declaracin de la funcin ser la siguiente:
void piramide (int niveles)

Siendo niveles el nmero de filas de la pirmide (en el ejemplo 4).


27/05/05 Programacin Digital I 33

Ejercicios
Escribir una funcin de nombre Siguiente tal que, recibiendo un nmero primo mayor que uno, devuelva el nmero primo inmediatamente siguiente y superior a dicho nmero primo. Por ejemplo, si se invoca siguiente(7), la funcin devolver el nmero 11. Escriba una funcin que reciba como parmetros las dos coordenadas cartesianas (x, y) de un punto del plano y devuelva como resultado un nmero del 1 al 4 que indique el cuadrante al cual pertenece al punto (no considere los ejes de coordenadas). Escribir una funcin que reciba como parmetros de entrada dos instantes de tiempo expresados en horas, minutos y segundos y devuelva como resultado un 1 o un 2segn el Programacin Digital 27/05/05 primer instante de tiempo sea anteriorI al segundo o viceversa.

34

Ejercicios
Sea el siguiente programa incompleto:
#include <stdio.h> void main (void) { int x1, x2, suma; printf(Introduce dos valores: \n); scanf(%i%i,&x1,x2); suma = suma_intervalo (x1, x2); printf(La suma de los valores del intervalo es: %i, suma); }

27/05/05

Completar el programa escribiendo la funcin suma_intervalo que calcula la suma de todos los nmeros enteros comprendidos entre los dos parmetros de entrada, ambos inclusive.
Programacin Digital I

35

Ejercicios
Escribir una funcin
void maxmin (int x1, int x2, Pint max, Pint min);

que reciba como parmetros de entrada dos nmeros enteros x1 y x2 y devuelva a travs de los parmetros de salida max y min el mximo y el mnimo, respectivamente, de ambos nmeros. Modificar la funcin anterior para que calcule tambin el valor medio de ambos nmeros. El nuevo prototipo de la funcin ser ahora el siguiente:
void maxmin (int x1, int x2, Pint max, Pint min, Pint media);

Escribir una funcin cuyo prototipo es:


bool esLetra (char c);

que reciba como parmetro de entrada un carcter y devuelva un valor lgico true si dicho carcter es una letra del alfabeto, y false en caso contrario.
27/05/05 Programacin Digital I 36

Das könnte Ihnen auch gefallen