Anda di halaman 1dari 14

1

P i I T 6 P i I T 6 Programacin I. Tema 6 Programacin I. Tema 6


Manejo de funciones en C
Contenido Contenido
Concepto de algoritmo parametrizado.
Formalizacin de algoritmos parametrizados.
Funciones en C.
Tipos de parmetros.
Paso de parmetros en C.
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 2
2
Concepto de algoritmo parametrizado Concepto de algoritmo parametrizado
El diseador del algoritmo necesita saber la funcionalidad
del algoritmo llamado
Al it ll t it l i t f d l Algoritmo llamante necesita conocer la interfaz del
algoritmo llamado:
El nombre del algoritmo.
Orden, tipos de cada uno y clase de cada uno de los
parmetros si los hay.
El tipo del valor que retorna como algoritmo llamado, si
es que retorna.
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 3
Para el algoritmo llamante, el algoritmo llamado es
considerado como una sola accin.
Formalizacin de algoritmo Formalizacin de algoritmo
Todo algoritmo debe estar formalizado.
En la precondicin (Pre) se indica los requisitos que
tiene que cumplir originalmente los parmetros
El algoritmo tiene que tener un nombre significativo,
junto a los parmetros que tiene y que toma como
origen del algoritmo, y los parmetros que contienen el
resultado de dicho algoritmo
En la postcondicin (Post) se indica, con la mayor
precisin posible, la funcionalidad del algoritmo y la
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 4
relacin entre los resultados obtenidos y los datos de
origen
3
Funciones en C Funciones en C
La definicin en C est formada por:
Cabecera. Contiene:
El nombre de la funcin.
Los parmetros si los tiene (tipos de cada uno Los parmetros si los tiene (tipos de cada uno,
nombre del parmetro. Estos forman parte del
entono del algoritmo.
Tipo del valor que retorna. (int, char, )
Cuerpo. Contiene :
La declaracin de variables de la funcin (completan
el entorno), si las hay.
Secuencia de acciones del algoritmo parametrizado
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 5
g p
(acciones).
Si la funcin devuelve un valor, ser necesario el uso
de la sentencia:
return (valor_a_devolver);
Funciones en C Funciones en C
Formato de una funcin definida por el programador.
tipo valor de retorno nombre funcin ( lista de parmetros con tipos )
C A B E C E R A C A B E C E R A (header) (header)
tipo_valor_de_retorno nombre_funcin ( lista de parmetros con tipos )
{
/* ENTORNO */
declaracin de variables locales
/* ACCIONES */
CC
UU
E E (body) (body)
RR
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 6
sentencias de la funcin
[ return (<expresion>); ]
}
PP
OO
4
Funciones en C Funciones en C
Ejemplo: Definir una funcin que dado dos nmeros enteros,
sume dichos nmeros y devuelva el resultado obtenido
Formalizacin:
Pre {ninguna }
funcion suma (a, b : enteros) dev ( c: entero);
Post {c =a +b }
Codificacin:
int suma (int a, int b)
{
int suma (int a, int b)
{
return(a +b);
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 7
{
int c;
c=a+b;
return (c);
}
return (a +b);
}
Funciones en C. Funciones en C.
Cmo se invoca a una funcin?
int main (void)
{
int resultado; /* resultado op */
int num1; /* operando 1 */
int num2; /* operando 2 */
.........................
resultado = suma (num1,num2);
}
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 8
int suma ( int x, int y )
{
return ( x + y );
}
5
Funciones en C. Funciones en C.
La llamada a una funcin puede formar parte de una
expresin.
Al ser evaluada la expresin, la funcin se ejecuta y es
sustituida por el valor que ha devuelto sustituida por el valor que ha devuelto
int main (void)
{
int num1; / * oper ando 1 */
int num2; / * oper ando 2 */
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
if ( suma (num1, num2) >= 0 )
fprintf (stdout, La suma es positiva);
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 9
else
fprintf (stdout, La suma es negativa);
................................................
}
Tipos de parmetros Tipos de parmetros
Segn el algoritmo al que pertenece:
Formal: el que se usa para definir el algoritmo
parametrizado. Forma parte de su entorno.
A t l f ti l l t d d Actual o efectivo: el valor que toma en cada una de
sus llamadas. Pertenece al algoritmo llamante.
Dependiendo del sentido del intercambio de informacin:
De entrada o de dato.
De salida o resultado.
De entrada/salida.
Dependiendo del mecanismo que emplea el lenguaje:
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 10
Dependiendo del mecanismo que emplea el lenguaje:
Valor: Se hace una copia del parmetro actual al
parmetro formal.
Referencia: Se copia la direccin del parmetro
actual al parmetro formal.
6
Clasificacin de parmetros Clasificacin de parmetros
Parmetro formal: Es el nombre genrico que recibe cada
uno de los parmetros en la cabecera y dentro de la
funcin.
Parmetro actual: Es el parmetro que se emplea en la Parmetro actual: Es el parmetro que se emplea en la
llamada a la funcin.
int main (void)
{
int resultado;
int num1;
int num2;
Parmetros actuales
Parmetros formales
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 11
int suma (int x,int y)
{
return ( x + y );
}
int num2;
...............
resultado = suma (num1,num2);
...............
}
Clasificacin de parmetros Clasificacin de parmetros
El nombre de un parmetro formal y un parmetro actual
pueden coincidir, pero representan cosas distintas.
Un parmetro formal representa a una variable del
algoritmo parametrizado Se crea automticamente en algoritmo parametrizado. Se crea automticamente en
memoria en el momento de la llamada a la funcin.
Durante la ejecucin de la funcin, se podr acceder a
dichos parmetros, y no tendr sentido acceder a los
mismos despus de finalizar la ejecucin de la funcin.
?
Memoria
????:
????
int suma (int x,int y)
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 12
?
?
?
?
????:
????:
????:
????: x:
y:
( , y)
{
return ( x + y );
}
7
Parmetros de entrada Parmetros de entrada
Para su implementacin se utiliza el mecanismo de paso de
parmetros por valor.
En el momento de la llamada, se copia el valor del
parmetro actual en el parmetro formal parmetro actual en el parmetro formal.
La funcin parte del valor copiado.
Si modificar el valor del parmetro formal, esta
modificacin no afecta al valor del parmetro actual.
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 13
Parmetro de salida o de entrada/Salida Parmetro de salida o de entrada/Salida
Aun cuando el mecanismo adecuado para este tipo de
parmetros es el de paso por referencia, C no
proporciona este mecanismo.
En C se pasa la direccin de memoria del parmetro actual En C se pasa la direccin de memoria del parmetro actual
al parmetro formal.
La funcin, al conocer la direccin del parmetro actual,
puede modificar el contenido de la posicin de memoria
referenciada.
Permite retornar ms de un valor al poder existir ms de un
parmetro de este tipo.
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 14
8
Parmetros de tipo Array en C Parmetros de tipo Array en C
En C todos los parmetros de tipo Array se pasan por
referencia, ya que un Array queda determinado por un
puntero a la primera posicin del mismo.
Si se quiere evitar que la informacin asociada a una Array
sea modificada por alguna sentencia de un parametrizado,
se debe utilizar el modificador const
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 15
int strcmp (const char* string1,const char* string2)
Parmetros de tipo Array en C Parmetros de tipo Array en C
Paso de un array como parmetro a una funcin
void inicializar ( int x[] )
{
int i;
for (i=0; i<MAX; i++)
x [i] = MAX - i;
}
void visualizar ( const int x[] )
{
int i;
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 16
for (i=0; i<MAX; i++)
{
fprintf (stdout,"Posicion: %d , i);
fprintf (stdout,Contenido: %d\n", x[i]);
}
}
9
Parmetros de tipo Array en C Parmetros de tipo Array en C
#include <stdio.h>
#define MAX 10
void inicializar (int x[]);
void visualizar (const int x[]);
void main (void)
{
int num [MAX];
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 17
inicializar (num);
visualizar (num);
}
Paso de estructura a una funcin Paso de estructura a una funcin
Paso como parmetro de salida. Ejemplo: Codificar
una funcin que rellene los datos de un alumno.
typedef struct { yp {
char nombre [50];
char grupo [3];
} TAlumno;
void leerAlumno ( TAlumno *alumno )
{
printf (Nombre);
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 18
printf ( Nombre );
gets (alumno -> nombre);
printf (Grupo: );
gets (alumno -> grupo);
}
10
Paso de estructura a una funcin Paso de estructura a una funcin
Paso como valor devuelto. Ejemplo: Codificar una
funcin que rellene los datos de un alumno.
typedef struct {
char nombre [50];
char grupo [3];
} TAlumno;
TAlumno leerAlumno ( void )
{
TAlumno alumno;
printf (Nombre);
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 19
p t ( o b e );
gets (alumno.nombre);
printf (Grupo: );
gets (alumno.grupo);
return (alumno);
}
Paso de estructura a una funcin Paso de estructura a una funcin
Paso como parmetro de entrada/salida.Ejemplo:
Codificar una funcin que cambie el grupo de un
alumno.
typedef struct { typedef struct {
char nombre [50];
char grupo [3];
} TAlumno;
void modificaAlum ( TAlumno *alumno, const char newGrp [ ] )
{
printf (El alumno %s tenia asignado el grupo %s,
alumno -> nombre, alumno -> grupo);
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 20
strcpy (alumno -> grupo, newGrp);
printf (y ha pasado al grupo %s\n , alumno -> grupo);
}
11
Tipos de parmetros. Uso de void Tipos de parmetros. Uso de void
Se utiliza para:
Definir funciones que no retorna valor.
void valorAbsoluto (int * num);
Indicar que una funcin no tiene parmetros.
int leerEnteroPositivo (void);
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 21
Funciones. Orden de definicin Funciones. Orden de definicin
Una funcin tiene que estar declarada antes de ser
invocada.
Posibles alternativas:
Ubi t d l f i l t l Ubicar todas las funciones para que se cumpla esta regla
(esto no siempre es posible).
Declarar los prototipos de las funciones (funciona
siempre) antes de su utilizacin.
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 22
12
Funciones. Prototipos Funciones. Prototipos
El prototipo de una funcin contiene la misma informacin
que la cabecera de la funcin:
Nombre de la funcin.
Ti d l t Tipo de valor que retorna.
Los parmetros que hay y su orden.
Tipo de cada parmetro.
tipo_valor_funcin nombreFuncion (tipo_par par, );
El uso de prototipos permite la ordenacin arbitraria de
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 23
El uso de prototipos permite la ordenacin arbitraria de
definicin de funciones.
Funciones. Prototipos Funciones. Prototipos
Si la funcin es:
int resta (int a, int b)
{
return( b a );
}
Su prototipo es :
int resta (int a, int b); /* retorna b a */
El nombre de los parmetros no es estrictamente necesario,
pero si se quiere explicar la funcionalidad es necesario Si la
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 24
pero si se quiere explicar la funcionalidad es necesario. Si la
declaracin del prototipo fuera
int resta (int, int); /* retorna */ ??????
Qu realiza? (a b), (b a)
Qu es a y que es b?
13
Paso de parmetros a la funcin main Paso de parmetros a la funcin main
Al programa principal se le pueden pasar parmetros
actuales desde la lnea de comandos al invocarlo.
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 25
Nombre del programa
Parmetros
Paso de parmetros a la funcin main Paso de parmetros a la funcin main
El prototipo de la funcin main es:
int main ( int argc, char * argv [ ] );
El parmetro argc nos indica cuntos elementos tiene el
array argv.
El parmetro argv es una tabla de punteros a cadenas
de caracteres. Estas cadenas de caracteres son los
parmetros que se introducen desde la lnea de
comandos.
Si no se ha producido ningn error en la ejecucin de la

Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 26
funcin main, se devolver un 0, en caso contrario, se
devolver un 1.
14
Paso de parmetros a la funcin main Paso de parmetros a la funcin main
En la siguiente invocacin al programa factores_primos:
D:\> factores_primos 10 pepe 12.4
Los valores que tomarn los parmetros de la funcin
main sern los siguientes:
argc = 4 (el nombre del programa se tambin se
cuenta)
argv [0] = factores_primos
argv [1] = 10
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 27
argv [1] 10
argv [2] = pepe
argv [3] = 12.4
Paso de parmetros a la funcin main Paso de parmetros a la funcin main
#include <stdio.h>
int main ( int argc, char * argv[ ] )
{{
int i;
if (argc!=3)
fprintf(stdout, Ejecute: <nombre del
programa><parametro 1> <parametro 2>);
else
for (i=0; i<argc; i++)
fprintf(stdout,El argumento %d es: %s\n ,
Curso 05/06
Programacin I: Manejo defunciones en C Tema6 - 28
fprintf(stdout, El argumento %d es: %s\n ,
i, argv [ i ]);
return 0;
}

Anda mungkin juga menyukai