Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: cargs en 2 Agosto 2019, 05:02 AM

Título: solicitar día de la semana e imprimir número correspondiente
Publicado por: cargs en 2 Agosto 2019, 05:02 AM
Soy muy nuevo, lo que quiero hacer es hacer funcionar un programa parecido al que pongo, pero a la inversa, es decir, leer el día de la semana (lunes) y que se imprima el número correspondiente (1) para martes 2, etc, ¿cómo se hace?

/**
* C program to print day of week using switch case
*/

#include <stdio.h>

int main()
{
    int week;
   
    /* Input week number from user */
    printf("Enter week number(1-7): ");
    scanf("%d", &week);
   
    switch(week)
    {
        case 1:
            printf("Monday");
            break;
        case 2:
            printf("Tuesday");
            break;
        case 3:
            printf("Wednesday");
            break;
        case 4:
            printf("Thursday");
            break;
        case 5:
            printf("Friday");
            break;
        case 6:
            printf("Saturday");
            break;
        case 7:
            printf("Sunday");
            break;
        default:
            printf("Invalid input! Please enter week number between 1-7.");
    }

    return 0;
}
Título: Re: solicitar día de la semana e imprimir número correspondiente
Publicado por: K-YreX en 2 Agosto 2019, 06:53 AM
Si estás empezando, hacerlo a la inversa es un poco más complicado pero te comento lo que deberías mirar:
Título: Re: solicitar día de la semana e imprimir número correspondiente
Publicado por: cargs en 2 Agosto 2019, 07:31 AM
Wow!  ;-) ;-) ok, muchas gracias, voy a revisar!! Saludos!
Título: Re: solicitar día de la semana e imprimir número correspondiente
Publicado por: cargs en 2 Agosto 2019, 23:18 PM
Hola, pude avanzar, el programa debe solicitar el mes y como resultado mostrar el número de mes (1 para enero, 2 para febrero, 3 para marzo) y la estación del año correspondientes.El usuario debe introducir el mes en minúsculas. Si el usuario ingresa mal u otra cosa, debe aparecer "prueba de nuevo"

En el código que hice, funciona para diciembre, pero para los demás meses como resultado manda el número de mes y la estación, pero además el mensaje de "prueba de nuevo" ¿Qué debo hacer para que solo mande el número de mes y la estación?

este es el código:
#include <stdio.h>
#include <string.h>

char mes[100];

int main() {
    printf("Cual es el mes? (en minusculas)\n");
    fgets (mes, 100, stdin);
    mes[strlen(mes)-1] = '\0';
    if (strcmp(mes, "enero") == 0) {
        printf("1 invierno!\n");
    }
    if (strcmp(mes, "febrero") == 0) {
        printf("2 invierno!\n");
    }
    if (strcmp(mes, "marzo") == 0) {
        printf("3 primavera!\n");
    }
    if (strcmp(mes, "abril") == 0) {
        printf("4 primavera!\n");
    }
    if (strcmp(mes, "mayo") == 0) {
        printf("5 primavera!\n");
    }
    if (strcmp(mes, "junio") == 0) {
        printf("6 verano!\n");
    }
    if (strcmp(mes, "julio") == 0) {
        printf("7 verano!\n");
    }
    if (strcmp(mes, "agosto") == 0) {
        printf("8 verano!\n");
    }
    if (strcmp(mes, "septiembre") == 0) {
        printf("9 otonio!\n");
    }
    if (strcmp(mes, "octubre") == 0) {
        printf("10 otonio!\n");
    }
    if (strcmp(mes, "noviembre") == 0) {
        printf("11 otonio!\n");
    }
    if (strcmp(mes, "diciembre") == 0) {
        printf("12 invierno!\n");
    }
    else {
        printf("prueba de nuevo.\n");
    }
    return 0;
}
Título: Re: solicitar día de la semana e imprimir número correspondiente
Publicado por: K-YreX en 2 Agosto 2019, 23:48 PM
Eso es porque usas condicionales aislados. Es decir, que has utilizado un conjunto de condiciones que son independientes por lo que tu programa las comprueba todas. En estos casos en los que una coincidencia en un <if> excluye que pueda ser verdadera otra coincidencia se usa <if - else if - else if - ... - else>.

Aquí tienes un código sencillo que funciona correctamente pero que no es muy eficiente ya que se compara el valor de <numero> con 1 y coincida o no, se compara con 2 y coincida o no se comprueba que el número sea distinto de 1 y de 2:
(Sé que el código es un poco absurdo pero me parecía un buen ejemplo para mostrarte el problema)

int numero = 1;

if(numero == 1)
    printf("El numero vale 1");
if(numero == 2)
    printf("El numero vale 2");
if(numero != 1 && numero != 2)
    printf("El numero es distinto de 1 y de 2");



Se ve claramente que si el número vale 1 ya no va a valer 2 ni ningún otro valor. Por lo que se puede hacer más eficiente así:

int numero = 2;

if(numero == 1) // si vale 1...
    printf("El numero vale 1");
else if(numero == 2) // si no vale 1, si vale 2...
    printf("El numero vale 2");
else // si no vale 1 ni 2... ya se da por hecho que es distinto de 1 y de 2
    printf("El numero es distinto de 1 y de 2");

En este caso se comprueba cada <if> hasta que uno sea cierto y en el momento que uno es cierto no sigue comprobando el resto de condiciones.

En tu caso compruebas de forma aislada cada mes excepto el último y en el último haces:

si mes == "diciembre" entonces
    12  invierno
sino entonces
    prueba de nuevo
fin si

Entonces ese <sino> se ejecutará siempre que el mes no sea igual a "diciembre".
Título: Re: solicitar día de la semana e imprimir número correspondiente
Publicado por: cargs en 3 Agosto 2019, 00:45 AM
perfecto,  ya quedó!
muchas gracias por tus explicaciones, me ayudaron enormemente!!! ;-) ;-)