17 - Funciones con parámetros de tipo int, float y char


Una función puede recibir uno o más parámetros para que sea más flexible y se adapte a varias situaciones.

Veremos primero funciones que reciban uno o más parámetros de tipo int, float o char.

La sintaxis cuando una función recibe parámetros es:

[valor que retorna]   [nombre de la función] ([parámetros de la función])
{
    [altoritmo]
}

Los parámetros se disponen luego del nombre de la función encerrado entre paréntesis y separados por coma, algunos ejemplos:

void funcion1(int v1)
{
    ....
}

void funcion2(int v1,int v2)
{
    ....
}

void funcion3(float f1,int v1)
{
    ....
}

void funcion4(char letra)
{
    ....
}

Arriba vemos como declarar funciones con uno o más parámetros de tipos int, float y char.

Problema 1:

Confeccionar una función que reciba dos enteros e imprima el mayor de ellos. Llamar a la función desde la main cargando previamente dos valores por teclado.

Programa: programa89.c

Ver video

#include<stdio.h>
#include<conio.h>

void imprimirMayor(int v1,int v2)
{
    if (v1>v2)
    {
        printf("El mayor es %i",v1);
    }
    else
    {
        printf("El mayor es %i",v2);
    }
}


int main()
{
    int valor1,valor2;
    printf("Ingrese primer valor:");
    scanf("%i",&valor1);
    printf("Ingrese segundo valor:");
    scanf("%i",&valor2);
    imprimirMayor(valor1,valor2);
    getch();
    return 0;
}

En este problema se requiere implementar una función que reciba dos enteros y muestre el mayor de ellos. Los parámetros van después del nombre de la función entre paréntesis y separados por coma:

void imprimirMayor(int v1,int v2)

Los parámetros de la función solo se pueden utilizar dentro de dicha función y luego que finaliza de ejecutarse dicha función los mismos se borran de la memoria.

Cuando llamamos a la función desde la main le debemos pasar dos variables enteras, las variables que le pasamos deben estar cargadas con información:

    imprimirMayor(valor1,valor2);

En el momento que se llama la función el contenido de valor1 se copia en el parámetro v1 y el contenido de valor2 se copia en el parámetro v2:

parametros int lenguaje c

Si por algún motivo modificamos v1 o v2 dentro de la función las variables definidas en la main no cambian.

Los parámetros son la forma de comunicarse entre una función y otra.

Podemos inclusive desde la main llamar a la función inprimirMayor pasando directamente valores enteros:

imprimirMayor(70, 5);

Tengamos en cuenta que en este caso v1 recibe el número 70 y v2 recibe el número 5.

Problema 2:

Confeccionar un programa que solicite el pago por hora de un empleado y la cantidad de horas trabajadas dentro de una estructura repetitiva en la función main. Elaborar una función que reciba como parámetro el valor de la hora y la cantidad de horas trabajadas y nos muestre el total a pagar.

Programa: programa90.c

Ver video

#include<stdio.h>
#include<conio.h>

void calcularSueldo(float costoHora, int cantidadHoras)
{
    float sueldo=costoHora * cantidadHoras;
    printf("El sueldo total a pagar es %0.2f\n",sueldo);
}


int main()
{
    float costoHora;
    int cantidadHoras;
    char opcion;
    do {
        printf("Ingrese cuanto se le paga por hora:");
        scanf("%f",&costoHora);
        printf("Cuantas horas trabajo:");
        scanf("%i",&cantidadHoras);
        calcularSueldo(costoHora, cantidadHoras);
        printf("Desea calcular los datos de otro empleado[s/n]:");
        scanf(" %c",&opcion);
    } while (opcion=='s');
    getch();
    return 0;
}

Para resolver este problema planteamos una función que reciba como parámetros un float y un int, dentro del bloque de la función definimos una variable local llamada sueldo y procedemos a guardar el producto de los dos parámetros. Mostramos finalmente el sueldo total a pagar (damos formato al valor float para mostrar dos decimales):

void calcularSueldo(float costoHora, int cantidadHoras)
{
    float sueldo=costoHora * cantidadHoras;
    printf("El sueldo total a pagar es %0.2f\n",sueldo);
}

En la función main procedemos a llamar a la función calcularSueldo y le pasamos a los parámetros dos variables que definimos en la main:

        calcularSueldo(costoHora, cantidadHoras);

No hay ningún problema que las variables que definimos en la función main se llamen igual que los parámetros definidos en la otra función:

int main()
{
    float costoHora;
    int cantidadHoras;

Y los parámetros de la otra función:

void calcularSueldo(float costoHora, int cantidadHoras)

Pero recordar que en la memoria de la computadora se almacenan en lugares distintos las variables de la función main y los parámetros de la función calcularSueldo.

Problema 3:

Desarrollar dos funciones que reciban como parámetro el valor del lado de un cuadrado. La primera debe calcular y mostrar la superficie y la segunda calcular y mostrar el perímetro.
En la main llamar a las funciones pasando los valores enteros comprendidos entre 10 y 20

Programa: programa91.c

Ver video

#include<stdio.h>
#include<conio.h>

void calcularSuperficie(int lado)
{
    int superficie=lado*lado;
    printf("La superficie de un cuadrado de lado %i es de %i\n",lado,superficie);
}

void calcularPerimetro(int lado)
{
    int perimetro=lado*4;
    printf("El perimetro de un cuadrado de lado %i es de %i\n",lado,perimetro);
}


int main()
{
    int x;
    for(x=10;x<=20;x++)
    {
        calcularSuperficie(x);
        calcularPerimetro(x);
    }
    getch();
    return 0;
}

Hemos planteado dos funciones que reciben un parámetro de tipo int y cada una implementa el algoritmo:

void calcularSuperficie(int lado)
{
    int superficie=lado*lado;
    printf("La superficie de un cuadrado de lado %i es de %i\n",lado,superficie);
}

void calcularPerimetro(int lado)
{
    int perimetro=lado*4;
    printf("El perimetro de un cuadrado de lado %i es de %i\n",lado,perimetro);
}

Desde la función main llamamos a dichas funciones 11 veces a cada una pasando en la primer llamada el valor 10, ya que x vale 10:

    for(x=10;x<=20;x++)
    {
        calcularSuperficie(x);
        calcularPerimetro(x);
    }

Problema 4:

Desarrollar una función que reciba como parámetro un caracter. Si llega una 'h' mostrar por pantalla el mensaje "hombre", si llega una 'm' mostrar el mensaje "mujer".
Llamar desde la función main pasando una vez una 'h' y otra vez una 'm'.

Programa: programa92.c

Ver video

#include<stdio.h>
#include<conio.h>

void mostrarGenero(char tipo)
{
    if (tipo=='h')
    {
        printf("Hombre\n");
    }
    if(tipo=='m')
    {
        printf("Mujer\n");
    }
}


int main()
{
    mostrarGenero('h');
    mostrarGenero('m');
    getch();
    return 0;
}

La función mostrarGenero recibe un solo parámetro de tipo char. Dentro del bloque de las llaves según el valor que llega muestra el mensaje "Hombre", "Mujer" según corresponda:

void mostrarGenero(char tipo)
{
    if (tipo=='h')
    {
        printf("Hombre\n");
    }
    if(tipo=='m')
    {
        printf("Mujer\n");
    }
}

Desde la función main llamamos a la función mostrarGenero y le pasamos directamente el caracter 'h' en la primer llamada y el caracter 'm' en la segunda llamada:

int main()
{
    mostrarGenero('h');
    mostrarGenero('m');

Recordar que cuando llamamos a la función no es obligatorio pasar variables sino podemos pasar un valor del mismo tipo que tiene el parámetro.

Problemas propuestos

Solución
programa93.c

#include<stdio.h>
#include<conio.h>

void mayor(int v1,int v2,int v3)
{
    printf("Mayor:");
    if (v1>v2 && v1>v3)
    {
        printf("%i",v1);
    }
    else
    {
        if (v2>v3)
        {
            printf("%i",v2);
        }
        else
        {
            printf("%i",v3);
        }
    }
}


int main()
{
    int valor1,valor2,valor3;

    printf("Ingrese primer valor:");
    scanf("%i",&valor1);
    printf("Ingrese segundo valor:");
    scanf("%i",&valor2);
    printf("Ingrese tercer valor:");
    scanf("%i",&valor3);
    mayor(valor1,valor2,valor3);
    getch();
    return 0;
}




programa94.c

#include<stdio.h>
#include<conio.h>

void mostrarHasta(int valor)
{
    if (valor<0)
    {
        printf("Error");
    }
    else
    {
        int x;
        for(x=1; x<=valor; x++)
        {
            printf("%i ",x);
        }
    }
}


int main()
{
    mostrarHasta(1000);
    getch();
    return 0;
}




programa95.c

#include<stdio.h>
#include<conio.h>

void esVocal(char letra)
{
    if (letra=='a' || letra=='e'  || letra=='i'  || letra=='o'  || letra=='u' ||
        letra=='A' || letra=='E'  || letra=='I'  || letra=='O'  || letra=='U')
    {
        printf("El caracter %c es una vocal.\n",letra);
    }
    else
    {
        printf("El caracter %c no es una vocal.\n",letra);
    }
}


int main()
{
   char c;
   for(c='A'; c<='z'; c++)
   {
       esVocal(c);
   }
   getch();
   return 0;
}

Retornar