Ejemplo de lenguaje C - Signo del zodíaco
Sabiendo que las categorías a las que pertenecen los signos del zodíaco son:
Signo | Categoría |
---|---|
1. Aries |
Fuego |
2. Tauro |
Tierra |
3. Géminis |
Aire |
4. Cáncer |
Agua |
5. Leo |
Fuego |
6. Virgo |
Tierra |
7. Libra |
Aire |
8. Escorpio |
Agua |
9. Sagitario |
Fuego |
10. Capricornio |
Tierra |
11. Acuario |
Aire |
12. Piscis |
Agua |
Si en lenguaje C se quiere escribir un programa que:
1º) Muestre un listado de los signos del zodíaco, con sus números asociados.
2º) Pida por teclado un número (dato entero) asociado a un signo del zodíaco.
3º) Muestre la categoría a la que pertenece el signo del zodíaco seleccionado.
Nota: Si el número introducido por el usuario, no está asociado a ningún signo del zodíaco, se mostrará el mensaje: "ERROR: <número> no está asociado a ningún signo.".
En la pantalla se verá, por ejemplo:
Al introducir un número no asociado a ningún signo, por ejemplo el 15, se verá:
Solución 1: utilizando la instrucción switch
Una posible solución es:
/* Programa: Signo del zodíaco (Solución 1) */
#include <conio.h>
#include <stdio.h>
int main()
{
int numero;
printf( "\n Listado de signos del zod%caco:", 161 );
printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. G%cminis", 130 );
printf( "\n 4. C%cncer", 160 );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca n%cmero de signo: ", 163 );
scanf( "%d", &numero );
switch ( numero )
{
case 1 :
case 5 :
case 9 : printf( "\n Es un signo de Fuego." );
break;
case 2 :
case 6 :
case 10 : printf( "\n Es un signo de Tierra." );
break;
case 3 :
case 7 :
case 11 : printf( "\n Es un signo de Aire." );
break;
case 4 :
case 8 :
case 12 : printf( "\n Es un signo de Agua." );
break;
default : printf( "\n ERROR: %d no est%c asociado a ning%cn signo.", numero, 160, 163 );
}
getch(); /* Pausa */
return 0;
}
Solución 2: utilizando las instrucciones switch e if
Otra solución es:
/* Programa: Signo del zodíaco (Solución 2) */
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
int numero;
char categoria[7];
printf( "\n Listado de signos del zod%caco:", 161 );
printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. G%cminis", 130 );
printf( "\n 4. C%cncer", 160 );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca n%cmero de signo: ", 163 );
scanf( "%d", &numero );
switch ( numero % 4 )
{
case 1 : strcpy( categoria, "Fuego" );
break;
case 2 : strcpy( categoria, "Tierra" );
break;
case 3 : strcpy( categoria, "Aire" );
break;
case 0 : strcpy( categoria, "Agua" );
}
if ( numero >= 1 && numero <= 12 )
printf( "\n Es un signo de %s.", categoria );
else
printf( "\n ERROR: %d no est%c asociado a ning%cn signo.", numero, 160, 163 );
getch(); /* Pausa */
return 0;
}
En esta segunda solución existen las siguientes diferencias importantes con respecto a la solución anterior:
- En el programa se utiliza una instrucción if, además de un switch.
- En el switch no se ha escrito la opción default.
- La expresión del switch es diferente.
- La expresión "Es un signo de " sólo se escribe una vez.
- Se ha utilizado una variable más: categoria
- Se ha utilizado función strcpy, la cual permite asignar una expresión de cadena a un array de caracteres. La declaración de la función strcpy se encuentra en el archivo de cabecera string.h. Por tanto, para poder usar dicha función, en el código se ha escrito #include <string.h>.
Solución 3: anidando switch en if
Por otra parte, también es posible resolver el problema anidando la instrucción switch dentro de la instrucción if:
/* Programa: Signo del zodíaco (Solución 3) */
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
int numero;
char categoria[7];
printf( "\n Listado de signos del zod%caco:", 161 );
printf( "\n\n 1. Aries" );
printf( "\n 2. Tauro" );
printf( "\n 3. G%cminis", 130 );
printf( "\n 4. C%cncer", 160 );
printf( "\n 5. Leo" );
printf( "\n 6. Virgo" );
printf( "\n 7. Libra" );
printf( "\n 8. Escorpio" );
printf( "\n 9. Sagitario" );
printf( "\n 10. Capricornio" );
printf( "\n 11. Acuario" );
printf( "\n 12. Piscis" );
printf( "\n\n Introduzca n%cmero de signo: ", 163 );
scanf( "%d", &numero );
if ( numero >= 1 && numero <= 12 )
{
switch ( numero % 4 )
{
case 1 : strcpy( categoria, "Fuego" );
break;
case 2 : strcpy( categoria, "Tierra" );
break;
case 3 : strcpy( categoria, "Aire" );
break;
case 0 : strcpy( categoria, "Agua" );
}
printf( "\n Es un signo de %s.", categoria );
}
else
printf( "\n ERROR: %d no est%c asociado a ning%cn signo.", numero, 160, 163 );
getch(); /* Pausa */
return 0;
}