Signo zodiacal en C - Ejercicio resuelto
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.
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.
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.
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.
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.
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.
En este post te quiero compartir un código de C++ para listar y cancelar trabajos…
Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…
Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…
Esta semana estuve recreando la API del plugin para impresoras térmicas en Android (HTTP a…
Hoy te enseñaré a extraer la cadena base64 de una clave PEM usando una función…
Encender un foco con un Bot de Telegram es posible usando una tarjeta como la…
Esta web usa cookies.