elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con ejercicio de clase (Estructuras de selección)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con ejercicio de clase (Estructuras de selección)  (Leído 1,871 veces)
foreground

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Problema con ejercicio de clase (Estructuras de selección)
« en: 4 Marzo 2013, 11:00 am »

Buenos días a todos.  El caso es que tengo un problema con un ejercicio de clase ya que el programa que he hecho me compila pero no hace lo que se supone que debería hacer. El enunciado del problema en cuestión es:

Citar
Pedir al usuario una fecha: día, mes y año. Indicar si
la fecha es incorrecta. Para que la fecha sea
correcta:
•El año debe ser menor que 2050 y mayor que 1900.
•El mes debe estar comprendido entre 1 y 12.
•El día debe estar comprendido:

Entre 1y31 si el mes es: enero,marzo,mayo,julio, agosto, octubre o diciembre.
Entre 1 y 30 si el mes es: abril, junio, septiembre o noviembre
Entre 1 y 28 si el mes es febrero. No se considera si
el año es bisiesto o no

El código que pense para realizar el programa es el siguiente (no obstante da igual los datos que ponga ya que en ningun caso me muestra si la fecha es correcta o no):

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main()
  6. {
  7.    int dia,mes,anyo;
  8.    printf("Introduzca el dia, el mes y el anyo \n");
  9.    scanf("%d%d%d", &dia,&mes,&anyo);
  10.    if((((dia>1) || (dia<31)) && ((anyo>1900) || (anyo<2050))) && (((mes<1) || (mes>12)) &&  (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)))))
  11.    printf("Fecha correcta \n");
  12.    if((((dia>1) || (dia<30)) && ((anyo>1900) || (anyo<2050))) && (((mes<1) || (mes>12)) && (((mes==4) || (mes==6) || (mes==9) || (mes==11)))))
  13.    printf("Fecha correcta \n");
  14.    if((((dia>1) || (dia<28)) && ((anyo>1900) || (anyo<2050))) && (((mes<1) || (mes>12)) && ((mes==2))))
  15.    printf("Fecha correcta \n");
  16.  
  17.    system("PAUSE");
  18.    return 0;
  19. }


En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: Problema con ejercicio de clase (Estructuras de selección)
« Respuesta #1 en: 4 Marzo 2013, 13:22 pm »

(((mes<1) || (mes>12))

Si el mes es menor a uno y mayor a doce? Esto sería más bien así:

mes>=1 && mes<=12

Todas las comparaciones las deberías hacer estrictamente, es decir, mayor o igual y menor o igual

EDIT:

No te hace falta la comparación del rango en el cual está comprendido el mes, ya que compruebas directamente con el número del mes.


« Última modificación: 4 Marzo 2013, 13:35 pm por naderST » En línea

fer912

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Problema con ejercicio de clase (Estructuras de selección)
« Respuesta #2 en: 4 Marzo 2013, 13:32 pm »

buenos dias, hace mucho que no uso c pero por que no lo desglosas por partes
por ejemplo el primer filtro que tenes es el año este va desde 1900 a 2050 cosa que con un if lo solucionas.
por lo que veo, el mes tambien lo pones en numero o sea que con us switch se soluciona desde 1 a 12
y por ultimo te queda los dias

if ( anyo >= 1900 && anyo <=2500)
{
    switch mes
            case (aca pones en numero los meses de 31 dias)
                     if (dia >=1 && dia<=31)
                      
            case (aca los de 30)
            case 2: "Febrero"
}

lamento no poder ayudarte mas, hace mucho que no programo, si esto lo pones en una funcion bool por ejemplo se entenderia mejor, saludos
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con ejercicio de clase (Estructuras de selección)
« Respuesta #3 en: 4 Marzo 2013, 17:21 pm »

Si puedes manejar funciones puedes utilizar una para encapsular en ella la petición de un numero entero, un ejemplo sencillo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int fn_leer(char const *msj);
  5.  
  6. int main(void)
  7. {
  8.   int dia;
  9.   int mes;
  10.   int año;
  11.  
  12.   dia = fn_leer("Introduce el dia: ");
  13.   mes = fn_leer("Introduce el mes: ");
  14.   año = fn_leer("Introduce el año: ");
  15.  
  16.   printf("%d %d %d\n", dia, mes, año);
  17.  
  18.   return EXIT_SUCCESS;
  19. }
  20.  
  21. int fn_leer(char const *msj)
  22. {
  23.   int rv;
  24.   int num;
  25.   int ch;
  26.  
  27.   printf("%s", msj);
  28.   fflush(stdout);
  29.   rv = scanf("%d", &num);
  30.   while ((ch = getchar()) != EOF && ch != '\n')
  31.      ;
  32.  
  33.   return rv == 1 ? num : -1;
  34. }

Para conocer si el día, mes y año están en el rango valido debes seguir las indicaciones que te han dado y también utilizar el motor de búsqueda de los foros (hay varios temas sobre ello).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
foreground

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Problema con ejercicio de clase (Estructuras de selección)
« Respuesta #4 en: 7 Marzo 2013, 21:34 pm »

Al final solo cambie los operadores como dijo naderST y el programa funciono perfectamente.

Respecto a lo que has dicho rir3760 aun no he manejado esas posibilidades, por lo que he preferido hacerlo del primero modo ya que desconozco gran parte de las partes del codigo que has puesto tales como el fflush(stdout) o los usos del return.

Muchísimas gracias por las respuestas.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Problema con ejercicio de clase (Estructuras de selección)
« Respuesta #5 en: 7 Marzo 2013, 22:50 pm »

Al final solo cambie los operadores como dijo naderST y el programa funciono perfectamente.

.........................


Creo que estas equivocado en cuanto a que ya funciona bien , fíjate en esta entrada:

Código
  1. Introduzca el dia, el mes y el anyo
  2. 6
  3. 6
  4. 2012
  5. Presione una tecla para continuar . . .

Ni correcto ni incorrecto ni nada.

Uno de los problemas básicos está que en lugar de || ha de ir && tanto en años como en días. Por ejemplo 32 es mayor que 1 con lo que cumple la condición si está en un ||. Y 1800 cumple con la condición al ser menor que 2050.

Además te falta "encadenar" los condicionales.Se puede comprobar primero el año y si cumple se comprueba el día y mes, que a su vez se puede simplificar.

Y claro falta la opción de "fecha incorrecta" y para no cambiártelo mucho tipo rir, magistral como siempre, pero que a veces está a "demasiada altura", quedaría algo como esto:


Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int dia,mes,anyo;
  6.    printf("Introduzca el dia, el mes y el anyo \n");
  7.    scanf("%d%d%d", &dia,&mes,&anyo);
  8.    if(anyo>=1900 && anyo<=2050){
  9.        if((dia>=1 && dia<=31 ) &&  (mes==1 || mes==3 || mes==5 || mes==7 || mes==8 || mes==10 || mes==12))
  10.            printf("Fecha correcta \n");
  11.        else if((dia>=1 && dia<=30)  && mes!=2)
  12.            printf("Fecha correcta \n");
  13.        else if((dia>=1 && dia<=28)   && mes==2)
  14.            printf("Fecha correcta \n");
  15.        else
  16.            printf("Fecha incorrecta \n");
  17.    }
  18.    else printf("Fecha incorrecta \n");
  19.    system("PAUSE");
  20.    return 0;
  21. }
  22.  

Saluditos!
. ....

P.D: Mírate lo que te comentaron del switch,
« Última modificación: 7 Marzo 2013, 23:16 pm por leosansan » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con ejercicio de separar interfaz de implementación de una clase
Programación C/C++
Mordecai 1 1,508 Último mensaje 14 Septiembre 2013, 04:49 am
por erest0r
[SOLUCIONADO] Plantilla de una clase con estructuras
Programación C/C++
jesules79 1 931 Último mensaje 18 Diciembre 2013, 23:58 pm
por jesules79
Compartiendo un ejercicio de selección aleatoria (C#)
Ejercicios
erest0r 0 1,570 Último mensaje 7 Junio 2014, 22:24 pm
por erest0r
Ejercicio simple estructuras
Programación C/C++
Ja_90 4 1,591 Último mensaje 13 Octubre 2014, 20:33 pm
por Ja_90
estructuras dentro de una clase
Programación C/C++
fafafa01 3 1,355 Último mensaje 20 Septiembre 2017, 19:51 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines