Anda di halaman 1dari 6

Centro Regional Universitario de Veraguas Facultad de Informtica, Electrnica y Comunicacin Programacin III - Estructuras de Datos.

Pase de parmetros a una funcin

Funciones
Las funciones son programas que se disean para realizar tareas especficas o especiales y se ejecutan a partir de la invocacin o llamado de otro programa o funcin. Como una funcin es un programa, entonces admite declaracin para las variables que se consideran de utilidad para su funcionamiento interno, tales variables se consideran locales, ya que solo son conocidas en el mbito de la funcin y dejan de existir despus de la ejecucin de la misma. Para trabajar con funciones hay que tomar en consideracin los siguientes aspectos: Prototipo de la funcin Es la declaracin de la funcin en la que se indica el tipo, el nombre y los argumentos de la funcin. Argumentos Los argumentos siguen al nombre de la funcin y sus declaraciones se colocan entre parntesis, ellos constituyen las variables que ha de necesitar la funcin para realizar su tarea. Si no hay argumentos solo se colocan los parntesis. Llamado a la funcin Se refiere a una instruccin del programa que hace la invocacin a la funcin, para obtener los resultados del trabajo realizado por ella. En esta invocacin se coloca el nombre de la funcin que ya se lo dimos en el prototipo, seguido de parntesis que contiene los parmetros o valores que necesita la funcin para trabajar y que van a ser asignados a los argumentos, estos parmetros deben coincidir en tipos y cantidad con los argumentos del prototipo, obsrvese que los nombres de los parmetros pueden ser diferentes a los nombres de los argumentos. El valor que devuelve la funcin es sustituido por el nombre de la funcin en la instruccin de invocacin. Definicin de la funcin Corresponde a la lgica de la funcin que se enmarca a partir de un encabezado idntico al prototipo. Incluye la instruccin return que permite devolver el resultado calculado por la funcin o simplemente retornar el control al programa que hizo la invocacin. Si la funcin no devuelve ningn valor se usa la palabra reservada void como tipo de la funcin, esto debe coincidir con el prototipo. Diego Santimateo G.
CRUV-FIEC

Centro Regional Universitario de Veraguas Facultad de Informtica, Electrnica y Comunicacin Programacin III - Estructuras de Datos. Pase de parmetros a una funcin

Ejemplo
main() { int suma (int x, int y); int a, b, c; scanf(%d %d, &a, &b); c = suma(a, b); ......... } /*fin del main */ int suma(int x, int y); { int a; a = x + y; return(a); } /*prototipo de funcin */

/* los parmetros deben tener valores */ /*llamado a la funcin */ /* c obtendr el valor que retorna la funcin */

/*definicin de funcin */

/*se devuelve el resultado al lugar de la invocacin */

Pases de estructuras de datos a una funcin


Al momento de realizar la invocacin a una funcin se establece una comunicacin entre el programa que invoca (principal) y la funcin que ha sido llamada. En este momento desde el programa principal se pasan a la funcin, los valores que ella necesita para trabajar. El pase de los parmetros a los argumentos de la funcin se puede realizar de dos maneras: Pase por valor: el valor del parmetro es copiado en el argumento. Cuando se modifica o cambia el valor del argumento el parmetro no se altera. Pase por referencia: la direccin de memoria del parmetro es pasada al argumento, por lo tanto, se puede modificar el valor de la variable cuya direccin se recibe.
Direccin

Pase por Valor de la variable Pase por

Referencia

Funcin
Recibe la direccin

Valor
Recibe el valor

A continuacin presentamos esquemas del pase de varios tipos de estructuras de datos a funciones.

Diego Santimateo G.

CRUV-FIEC

Centro Regional Universitario de Veraguas Facultad de Informtica, Electrnica y Comunicacin Programacin III - Estructuras de Datos. Pase de parmetros a una funcin VARIABLE SIMPLE Pase por valor; no se pasan direcciones de memoria, sino los valores de los argumentos. Las variables se pueden pasar por valor o por referencia.
Main() { int calcula (float a); ........... flota x, y; .......... y = calcula (x); ........... } /* fin del main */ float calcula (float a); { flota p; p = a * 100 . . . . . . . . . . return(p); }

/* prototipo de funcin */ /* declaracin de variables */ /* llamado a la funcin calcula */

/* definicin de la funcin */

/* La variable a es una copia de la variable x */

ARRAY Los arreglos se pasan por referencia, esto significa que los cambios que haga la funcin en el arreglo sern conocidos por el programa principal.
main() { int y[10]; int reordenar (int x[]); ......... ......... reordenar(y); ......... }

/*declaracin de variable arreglo*/ /*prototipo de funcin */

/*llamado a la funcin */ /*fin del main */

void reordenar(int x[]); /*definicin de funcin con tipo void */ { . . . . . . . . . /* proceso o lgica de la funcin*/ return; }

Diego Santimateo G.

CRUV-FIEC

Centro Regional Universitario de Veraguas Facultad de Informtica, Electrnica y Comunicacin Programacin III - Estructuras de Datos. Pase de parmetros a una funcin PUNTEROS Los punteros son variables que guardan direcciones de memoria y permiten que una variable se pase por referencia desde un programa principal a una funcin. En el pase por referencia es la direccin de memoria la que se usa como parmetro y se pasa al argumento correspondiente en la funcin.
main() { int func1(int *pu); //prototipo de funcin int a, b; // declaracin de variables printf("indique un valor:"); scanf("%d", &a); b=func1(&a); // Se llama a la funcin y se pasa la direccin de la variable a, es decir &a printf("nuevo valor de a:%d\n",a); printf("Valor que devuelve la funcion:%d\n",b); } // fin del main int func1(int *pu) { int c; *pu = *pu - 5 ; c = *pu + 100; return(c); } /*Al valor de la variable a, es decir *pu, se le resta 5 y la variable c queda con el nuevo valor de a + 100 ...ojo la funcin modifica un valor del main y devuelve c */ /* definicin de la funcin */ /* Se declara el apuntador pu como argumento, l debe recibir una direccin de memoria o sea &a, ver invocacin */

Diego Santimateo G.

CRUV-FIEC

Centro Regional Universitario de Veraguas Facultad de Informtica, Electrnica y Comunicacin Programacin III - Estructuras de Datos. Pase de parmetros a una funcin ESTRUCTURAS
En este ejemplo la estructura se pasa por valor, pero la funcin es de tipo estructura ( xxx), en consecuencia los valores de los campos capturados en la funcin se pueden usar en el programa principal. Los valores de los campos de la estructura aux no son cambiados por la funcin. #include <stdio.h> #include <string.h> typedef struct { int edad; float salario; char nom[15]; }xxx; main () { xxx aux, aux1; xxx lafuncion (xxx est ); aux.edad = 0; // los parmetros deben tener valor previo aux.salario =0.0; aux1 = lafuncion (aux); printf("El nombre:%s\n", aux1.nom); printf("La edad:%d\n", aux1.edad); printf("El salario:%f\n", aux1.salario); } // fin del main // definicin de la funcin xxx lafuncion (xxx est) { printf("Escriba su nombre:"); scanf(" %[^\n]", est.nom); printf("Escriba su edad:"); scanf(" %d", &est.edad); printf("Escriba su salario:"); scanf("%f", &est.salario); return(est); } Cuando se trabaja con estructuras conviene crear un nuevo tipo de variable para comunicar el programa principal con la funcin. En el ejemplo anterior se usa typedef para definir el tipo xxx. De esta manera podemos declarar variables del tipo xxx creado por el programador. Ntese como se usa el nuevo tipo xxx para definir la funcin y su argumento. Para que el nuevo // llamado a la funcin

/* declaracin de tipo estructura global */

//declara estructuras tipo xxx /*Prototipo de funcin */

Diego Santimateo G.

CRUV-FIEC

Centro Regional Universitario de Veraguas Facultad de Informtica, Electrnica y Comunicacin Programacin III - Estructuras de Datos. Pase de parmetros a una funcin
tipo sea reconocido por el compilador debemos declararlo global, es decir fuera de la funcin principal main. Una estructura igual que otra variable se puede pasar por referencia si usamos un apuntador al tipo de la estructura como en el siguiente ejemplo. Para indicar un campo que es apuntado por un puntero usamos ->. #include <stdio.h> #include <string.h> typedef struct { int edad; float salario; char nom[15]; }xxx; void main () { xxx aux;

/* declaracin de tipo, estructura global */

//pase por referencia de una estructura //declara estructuras tipo xxx //Prototipo de funcin con apuntador a la estructura

void lafuncion (xxx *est );

lafuncion (&aux); printf("El nombre:%s\n", aux.nom); printf("La edad:%d\n", aux.edad); printf("El salario:%5.2f\n", aux.salario); } // fin del main

// llamado a la funcin pasando la direccin de la estructura

// definicin de la funcin void lafuncion (xxx *est) { printf("Escriba su nombre:"); scanf(" %[^\n]", est->nom); printf("Escriba su edad:"); scanf(" %d", &est->edad); printf("Escriba su salario:"); scanf("%f", &est->salario); return; }

Diego Santimateo G.

CRUV-FIEC