Post #11
En el post de hoy vamos a aprender a crear nuestras propias funciones. En realidad cuando hacemos un programa estámos creando una función (main) que es la que se ejecuta. Pero como también hemos visto en nuestro programa podemos usar otras funciones (como printf o scanf). Al igual que usamos las funciones propias de C también podemos crear las nuestras. Antes de nada debéis saber que las funciones, al igual que las variables tenemos que crearlas antes de usarlas (¿tiene sentido, no?). Para crear una variable tenemos que poner el tipo de datos que va a devolver. Con la fución main ponemos que devuelve int, pero puede devolver char, float y otras cosas. También puede no devolver nada. Para indicar que una función no devuelve nada ponemos void (que significa literalmente "vacío"). Después ponemos el nombre de la función, que al igual que las variables no puede empezar por un número y sólo puede llevar letras, números y el carácter '_'. Tampoco suelen llevar mayúsculas los nombres de las funciones, pero esto no es obligatorio. Después como todas las funciones llevan paréntesis de apertura y de cierre. Si la función recibe algo lo indicamos aquí, y si no podemos poner void o no poner nada (sólo podemos poner void si no recibe nada al crear la función, no al usarla); para este primer ejemplo ni recibirá ni devolverá nada. Y por último, entre dos llaves indicamos qué queremos que haga la función, se hace exactamente igual que con la función main.
Ejemplo 10: Diseña un programa que muestre "abc" por pantalla 40 veces.
Para resolverlo vamos a crear una función que muestre por pantalla "abc" 40 veces:
#include
//Ahora, antes de usarla, es decir antes de main
//creamos la función abc40, que muestra abc por
//pantalla 40 veces.
void abc40(void) {
int i;
for(i = 0; i < 40; i++) {
printf("abc\n");
}
}
int main () {
abc40(); //usamos la funcion abc40 como usariamos printf o cualquier otra función
system("pause > null");
return 0;
}
Con este ejemplo no creo que haya ningún problema. La función crea una variable, hace un bucle y muestra "abc" por pantalla. Ahora veamos qué pasa con las funciones que reciben algo. Se pone el tipo de datos que devuelven y se les da un nombre como si fuera una variable para poder usar ese dato que reciben. Si reciben varias cosas se ponen separadas por comas dentro de los paréntesis. Veamos un ejemplo:
Ejemplo 11: Diseña un programa que muestre por pantalla el carácter que quiera el usuario repetido el número de veces que quiera el usuario.
#include
void muestra_char(char c, int n) {
//recibe un caracter. Para referirnos a él en la función lo llamamos c
//también recibe un entero, para poder usarlo lo llamamos n
int i;
for(i = 0; i < n; i++) {//hacemos un bucle desde 0 hasta n
printf("%c\n", c);//muestra el carácter c
}
}
int main () {
int num_veces;
char caracter;
printf("Que caracter quieres que se muestre? ");
scanf("%c", &caracter);
printf("Cuantas veces se mostrara? ");
scanf("%d", &num_veces);//recuerda que %i es lo mismo que %d
muestra_char(caracter, num_veces);
system("pause > null");
return 0;
}
Si tienes dudas sobre este ejercicio para de leer y pregunta ahora por que se va a complicar.
Ahora veamos qué pasa cuando las funciones devuelven algo. Primero se indica antes del nombre de la función al crearla el tipo de datos que devuelve. En nuestro caso float (número con decimales). Para hacer que devuelva algo ponemos dentro de la función la palabra clave return seguida de lo que queremos que devuelva. En el momento que la función devuelva algo terminará inmediatamente y no se seguirán realizando las acciones que haya más adelante. En una misma función puede aparecer "return" varias veces, pero en cuanto la función llegue al primero devolverá ese valor y ya no seguirá haciendo nada más. Cuando usamos una función que devuelve algo podemos usar esa función como si usáramos el valor que devuelve. Es decir, si tenemos una función cinco() que devuelve 5 cuando pongamos cinco() es como si pusiéramos 5. No tiene demasiado sentido hacer una función que reciba siempre el mismo valor. Se suelen usar funciones que reciban algo y en función de lo que reciban devolverán una cosa u otra. Por ejemplo vamos a hacer un programa que reciba un array y su tamaño y devuelva la suma de todos sus elementos:
int suma_array(int array[], int tam) {
int suma = 0, i;//donde se almacenará la suma de todos los elementos del array
for(i = 0; i < tam; i++) {
suma += array[i];
}
return suma;
}
Si queréis ver un ejemplo completo con función main que lo utiliza aquí está:
[code]#include
int suma_array(int array[], int tam) {
int suma = 0, i;//donde se almacenará la suma de todos los elementos del array
for(i = 0; i < tam; i++) {
suma += array[i];
}
return suma;
}
int main () {
int array[5] = { 1, 1, 2, 1, 0 }; //la suma deberá ser 5 (1+1+2+1+0)
printf("%i\n", suma_array(array, 5));
system("pause > null");
return 0;
}
Ahora vamos con unos cuantos ejercicios. No me entreguéis solo el código de la función, dadme el código entero del programa que usa esa función.
[u]Ejercicio 24 (B): Diseña una función que reciba dos números con decimales y devuelva su producto. Haz un programa que utilice esa función.[/u]
[u]Ejercicio 25 (M): Diseña una función que reciba dos arrays de enteros y el tamaño de cada uno y devuelva la semisuma (la mitad de la suma) de la suma de los elementos de ambos arrays. Haz un programa que utilice esa función.[/u]
[u]Ejercicio 26 (A): Diseña una función que reciba un carácter, un array de enteros y el tamaño del array. La función mostrará por pantalla el carácter tantas veces como valor tenga el elemento del array con más valor. Sólo lo hará si el mayor valor es positivo. Haz un programa que utilice esa función.[/u]
Aclaración del ejercicio 26: si por ejemplo la función recibe 'A' y el array {1, 3, 2} mostrará por pantalla A tres veces (el mayor valor del array). Sin embargo si recibe {-25, -7, -9, -2, -4, -100} No mostrará nada, ya que el mayor valor (-2) es negativo.[/i][/code][/i]