Tutoriales de informática - Abrirllave.com

Abrirllave.com

Ejemplo de lenguaje C - Signo del zodíaco

Sabiendo que las categorías a las que pertenecen los signos del zodíaco son:

Categorías de los signos del zodíaco
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:

Visualización en pantalla del programa Signo del zodíaco, siendo Libra un signo de Aire, resuelto en lenguaje C.

Al introducir un número no asociado a ningún signo, por ejemplo el 15, se verá:

Visualización en pantalla del programa Signo del zodíaco, siendo incorrecto el número introducido, resuelto en lenguaje C.

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:

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;
}