Diapositiva 1

Anuncio
F
U
N
C
I
O
N
E
S
Lenguajes de programación LPSI EUI UPM
•
•
•
•
•
Subprograma
Cero o más parámetros de entrada
Devuelve uno o ningún valor
No se pueden anidar
Las variables declaradas dentro de una
función son locales a ella
• Todos los parámetros son por “copia”
• Pueden utilizar vbles globales definidas
con anterioridad
Lenguajes de programación LPSI EUI UPM
• Definición
tipo nombre (lista de parámetros)
{
cuerpo
}
Lista de parámetros: tipo1 param1, tipo2 param2, …
• prototipo:
tipo nombre (lista de tipos de los parámetros);
• return (valor) devuelve el resultado de la función
Lenguajes de programación LPSI EUI UPM
unsigned long factorial (unsigned n)
{ unsigned long fact = 1;
for ( ; 1 < n; n--)
fact *= n;
return (fact);
}
main ()
{ printf (“El factorial de 25 es %l\n”, factorial(25));
}
Lenguajes de programación LPSI EUI UPM
unsigned mcd (unsigned a, unsigned b)
{ while (a != b)
? a -=b: b -= a;
if a(a>>bb)
a -= b;
else
b -= a;
return (a);
}
Lenguajes de programación LPSI EUI UPM
main ()
{ int i = 8, j = 0, k = 20;
float x = 0.0, y;
a = 45;
}
int funcion (char c)
{ short a, b, d = 0;
float x = 0.0;
i++;
k--;
local
x = 100.4;
}
¡error!
Lenguajes de programación LPSI EUI UPM
int f (char c)
{ ……….
}
char g (int i)
{ ….
c = h (i);
……….
}
¡error!
int h (int k)
{ ………
g (47);
}
Lenguajes de programación LPSI EUI UPM
int f (char);
char g (int);
int h (int);
int f (char c)
{ ……….
}
char g (int i)
{ ….
c = h (i);
……….
}
int h (int k)
{ ………
g (47);
}
Lenguajes de programación LPSI EUI UPM
• tipo “void”
– tipo de la función: no devuelve ningún valor
– parámetro: sin parámetros
void rara (void)
{ printf (“\n¡¿Qué hago yo aquí?!”);
}
void f (unsigned n)
{ for (; n; n--)
printf (“\n%i”, n);
}
Lenguajes de programación LPSI EUI UPM
RECURSIVIDAD
void sep_digi (unsigned n)
{ if (n <10)
printf (“%i ”, n);
else
{ sep_digi (n / 10);
printf (“%i “, n % 10);
}
}
Lenguajes de programación LPSI EUI UPM
PARÁMETROS POR VALOR
void intercambio (int i, int j)
{ int aux = i;
i = j; j = aux;
}
main ()
{ int a = 5, b = 8;
printf (“\na = %d b = %d”, a, b);
intercambio (a, b);
printf (“\na = %d b = %d”, a, b);
}
a=5 b=8
a=5 b=8
Lenguajes de programación LPSI EUI UPM
PARÁMETROS POR REFERENCIA
void intercambio (int *i, int *j)
{ int aux = *i;
*i = *j; *j = aux;
}
main ()
{ int a = 5, b = 8;
printf (“\na = %d b = %d”, a, b);
intercambio (&a, &b);
printf (“\na = %d b = %d”, a, b);
}
a=5 b=8
a=8 b=5
Lenguajes de programación LPSI EUI UPM
void intercambio (int **i, int **j)
{ int *aux = *i;
*i = *j; *j = aux;
}
main ()
{ int a = 5, b = 8, *p1 = &a, *p2 = &b;
printf (“\na = %d b = %d”, *p1, *p2);
intercambio (&p1, &p2);
printf (“\na = %d b = %d”, *p1, *p2);
}
a=5 b=8
a=8 b=5
Lenguajes de programación LPSI EUI UPM
TIPOS DE VARIABLES
int total = 0;
int fun (int n)
{ char c = ‘ ‘;
static int suma = 0;
suma += total;
total++; c++;
return (suma)
}
GLOBAL
LOCAL O AUTO
STATIC
main ()
REGISTRO
{ register int i;
for (i = 0; i < 20; i++)
printf (“\nVan acumulados %d”, fun (total);
}
Lenguajes de programación LPSI EUI UPM
PUNTEROS A FUNCIÓN
• Declaración
tipo (*pf) (lista tipos parám.)
int (*p_int) (void);
char* (*p_cad) (char, char, int);
• Asignación
pf = nombre de la función
p_int = funcion_x;
• Invocación de una función
i = (*p_int) ();
printf (“%s”, (*p_cad) (‘a’, ‘z’, 88));
Lenguajes de programación LPSI EUI UPM
int escribir (int x)
{ printf (“%d\n”, x);
}
main ()
{ int (*pf) (int);
pf = escribir;
(*pf) (6);
}
Lenguajes de programación LPSI EUI UPM
EJERCICIOS
¿Qué significan las siguientes declaraciones?
char *fp ()
float (*pf) (void)
Lenguajes de programación LPSI EUI UPM
float **fpp (char, int)
short (*fpf (void)) (double);
Lenguajes de programación LPSI EUI UPM
double * (* pfp) (int, short)
char (*(* pfpf) (int *)) (char *)
Lenguajes de programación LPSI EUI UPM
int (*pf [8]) (char, char)
(void (*) (int, int, void (*p [4][5]) (void))) * (*pf) (int)
Lenguajes de programación LPSI EUI UPM
Escribir una función que recibiendo como parámetro un
nº entero positivo lo devuelva invertido
Lenguajes de programación LPSI EUI UPM
• Escribir una función que recibiendo
como parámetro un nº entero, positivo
o negativo, lo devuelva invertido.
• Escribir una función que recibiendo
como parámetros una matriz cuadrada
de enteros y un entero positivo mayor
que 2 indicando su tamaño, devuelva
cierto si es triangular superior y falso
en caso contrario.
Lenguajes de programación LPSI EUI UPM
Descargar