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.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.