Signo zodiacal en C - Ejercicio resuelto

Signo zodiacal con C – Ejercicio de programación

En este ejercicio de programación en C o ANSI C vamos a ver cómo saber el signo zodiacal del usuario a partir del día y mes de nacimiento.

Vamos a crear un programa en lenguaje C para decirle al usuario su signo zodiacal, usando la sentencia if y switch. Al final tendremos una función que podremos invocar desde cualquier lugar.

Algoritmo

Antes de ver el código fuente en C analicemos un poco. Solo necesitamos el mes y el día, y después de eso hacer un switch para el mes para evaluar cada mes por separado.

En un mes hay dos posibles signos, y todo depende del día de nacimiento. Por ejemplo, para alguien nacido en enero el signo puede ser Capricornio o Acuario. Será Capricornio si el día de nacimiento es el 20 de enero o antes, y Acuario en caso contrario.

Entonces simplemente vamos a evaluar esto con C para los 12 meses, cubriendo todos los rangos posibles para el signo zodiacal.

Sobre las cadenas

Recuerda que en C el manejo de las cadenas es diferente a otros lenguajes más actuales. Por ello es que para asignar el valor a una cadena que se pasa en una función, en lugar de hacer algo como:

mi_cadena = "Hola";

Hacemos lo siguiente:

strcpy(mi_cadena, "Hola");

Nota: para cosas más seguras puedes usar strncpy.

Signo del zodiaco con C

Vamos directo al código fuente. El comportamiento queda encerrado en una función así:

/*
El último argumento es un apuntador a la cadena de destino en donde almacenará el signo zodiacal
*/
void calcularSignoZodiacal(int diaNacimiento, int mesNacimiento, char signo[MAXIMA_LONGITUD_CADENA])
{
    switch (mesNacimiento)
    {
    case 1:
        if (diaNacimiento <= 20)
        {

            strcpy(signo, "Capricornio");
        }
        else
        {
            strcpy(signo, "Acuario");
        }
        break;
    case 2:
        if (diaNacimiento <= 18)
        {
            strcpy(signo, "Acuario");
        }
        else
        {
            strcpy(signo, "Piscis");
        }
        break;
    case 3:
        if (diaNacimiento <= 20)
        {
            strcpy(signo, "Piscis");
        }
        else
        {
            strcpy(signo, "Aries");
        }
        break;
    case 4:
        if (diaNacimiento <= 20)
        {
            strcpy(signo, "Aries");
        }
        else
        {
            strcpy(signo, "Tauro");
        }
        break;
    case 5:
        if (diaNacimiento <= 21)
        {
            strcpy(signo, "Tauro");
        }
        else
        {
            strcpy(signo, "Geminis");
        }
        break;
    case 6:
        if (diaNacimiento <= 21)
        {
            strcpy(signo, "Geminis");
        }
        else
        {
            strcpy(signo, "Cancer");
        }
        break;
    case 7:
        if (diaNacimiento <= 22)
        {
            strcpy(signo, "Cancer");
        }
        else
        {
            strcpy(signo, "Leo");
        }
        break;
    case 8:
        if (diaNacimiento <= 23)
        {
            strcpy(signo, "Leo");
        }
        else
        {
            strcpy(signo, "Virgo");
        }
        break;
    case 9:
        if (diaNacimiento <= 23)
        {
            strcpy(signo, "Virgo");
        }
        else
        {
            strcpy(signo, "Libra");
        }
        break;
    case 10:
        if (diaNacimiento <= 23)
        {
            strcpy(signo, "Libra");
        }
        else
        {
            strcpy(signo, "Escorpio");
        }
        break;
    case 11:
        if (diaNacimiento <= 22)
        {
            strcpy(signo, "Escorpio");
        }
        else
        {
            strcpy(signo, "Sagitario");
        }
        break;
    case 12:
        if (diaNacimiento <= 21)
        {
            strcpy(signo, "Sagitario");
        }
        else
        {
            strcpy(signo, "Capricornio");
        }
        break;
    }
}

Esta función recibe el día de nacimiento (del 1 al 31), el mes (del 1 al 12 en donde enero es 1 y diciembre 12) y finalmente un apuntador a la cadena de destino en donde se almacenará el signo.

Modo de uso

Signo zodiacal en C - Ejercicio resuelto
Signo zodiacal en C – Ejercicio resuelto

Aquí tenemos dos formas de usar esta función dentro del método main del lenguaje C:

int main()
{
    char signo[MAXIMA_LONGITUD_CADENA] = "";
    calcularSignoZodiacal(28, 11, signo);
    printf("El signo zodiacal es: %s\n", signo);
    // Solicitar al usuario e imprimir
    int mes, dia;
    printf("Ingresa tu mes de nacimiento [1-12]: ");
    scanf("%d", &mes);
    printf("Ingresa tu dia de nacimiento [1-31]: ");
    scanf("%d", &dia);
    calcularSignoZodiacal(dia, mes, signo);
    printf("Típico de %s\n", signo);
}

Fíjate que en este caso estoy declarando la cadena de destino en la línea 3, y al invocar a la función en la línea 4 y 12 simplemente le paso esa cadena, ya que la función no devolverá el signo, sino que lo almacenará en la cadena de destino.

Poniendo todo junto

El código completo queda así:

/*
    https://parzibyte.me/blog
*/
#include <stdio.h>
#include <string.h>
#define MAXIMA_LONGITUD_CADENA 100

/*
El último argumento es un apuntador a la cadena de destino en donde almacenará el signo zodiacal
*/
void calcularSignoZodiacal(int diaNacimiento, int mesNacimiento, char signo[MAXIMA_LONGITUD_CADENA])
{
    switch (mesNacimiento)
    {
    case 1:
        if (diaNacimiento <= 20)
        {

            strcpy(signo, "Capricornio");
        }
        else
        {
            strcpy(signo, "Acuario");
        }
        break;
    case 2:
        if (diaNacimiento <= 18)
        {
            strcpy(signo, "Acuario");
        }
        else
        {
            strcpy(signo, "Piscis");
        }
        break;
    case 3:
        if (diaNacimiento <= 20)
        {
            strcpy(signo, "Piscis");
        }
        else
        {
            strcpy(signo, "Aries");
        }
        break;
    case 4:
        if (diaNacimiento <= 20)
        {
            strcpy(signo, "Aries");
        }
        else
        {
            strcpy(signo, "Tauro");
        }
        break;
    case 5:
        if (diaNacimiento <= 21)
        {
            strcpy(signo, "Tauro");
        }
        else
        {
            strcpy(signo, "Geminis");
        }
        break;
    case 6:
        if (diaNacimiento <= 21)
        {
            strcpy(signo, "Geminis");
        }
        else
        {
            strcpy(signo, "Cancer");
        }
        break;
    case 7:
        if (diaNacimiento <= 22)
        {
            strcpy(signo, "Cancer");
        }
        else
        {
            strcpy(signo, "Leo");
        }
        break;
    case 8:
        if (diaNacimiento <= 23)
        {
            strcpy(signo, "Leo");
        }
        else
        {
            strcpy(signo, "Virgo");
        }
        break;
    case 9:
        if (diaNacimiento <= 23)
        {
            strcpy(signo, "Virgo");
        }
        else
        {
            strcpy(signo, "Libra");
        }
        break;
    case 10:
        if (diaNacimiento <= 23)
        {
            strcpy(signo, "Libra");
        }
        else
        {
            strcpy(signo, "Escorpio");
        }
        break;
    case 11:
        if (diaNacimiento <= 22)
        {
            strcpy(signo, "Escorpio");
        }
        else
        {
            strcpy(signo, "Sagitario");
        }
        break;
    case 12:
        if (diaNacimiento <= 21)
        {
            strcpy(signo, "Sagitario");
        }
        else
        {
            strcpy(signo, "Capricornio");
        }
        break;
    }
}

int main()
{
    char signo[MAXIMA_LONGITUD_CADENA] = "";
    calcularSignoZodiacal(28, 11, signo);
    printf("El signo zodiacal es: %s\n", signo);
    // Solicitar al usuario e imprimir
    int mes, dia;
    printf("Ingresa tu mes de nacimiento [1-12]: ");
    scanf("%d", &mes);
    printf("Ingresa tu dia de nacimiento [1-31]: ");
    scanf("%d", &dia);
    calcularSignoZodiacal(dia, mes, signo);
    printf("Típico de %s\n", signo);
}

Si te gusta C, por aquí te dejo con más ejercicios para aprender C.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *