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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Ayuda con este programa en C
« en: 22 Julio 2018, 15:26 pm »

Quiero comparar si una fecha es mayor que la otra en este programa si alguien me puede dar una idea de como hacerlo que no sea con if()

Código
  1. /* Escribe un programa para calcular el numero de dias
  2.    que hay entre dos fechas; declarar fecha como una
  3.    estructura */
  4.  
  5. #include<stdio.h>
  6.  
  7. struct fecha{
  8. unsigned int dia, mes, año;
  9. };
  10.  
  11. int main(int argc, char *argv[]){
  12. struct fecha f[3];
  13. int i, dia, mes, año;
  14.  
  15. for(i=0; i<2; i++){
  16. printf("Introduzca fecha %d: ", i+1);
  17. scanf("%d %d %d", &f[i].dia, &f[i].mes, &f[i].año);
  18. }
  19.  
  20. dia = f[0].dia - f[1].dia;
  21. mes = f[0].mes - f[1].mes;
  22. año = f[0].año - f[1].año;
  23.  
  24. año = año * 360;
  25. mes = mes * 30;
  26. f[2].dia = año + (mes) + (dia);
  27.  
  28. printf("\n\n\nDias Trascurridos %d", f[2].dia);
  29. return 0;
  30. }
  31.  


En línea

aurquiel

Desconectado Desconectado

Mensajes: 31



Ver Perfil
Re: Ayuda con este programa en C
« Respuesta #1 en: 23 Julio 2018, 17:08 pm »

1-Evitar la ñ usar variables como año
2- Si usas unsigned en la estrutura las demas variabbles tambien deben ser unsgined
3-Declaraste tres estructuras la ultima estructura que aloja el resultado hubiera sido mas factible solo declarar unas variables.
4- El operador ternario (a>b) ? 1:0 puede ser una sustitucion al if.


Código
  1. #include<stdio.h>
  2.  
  3. struct fecha{
  4. unsigned int dia, mes, año;
  5. };
  6.  
  7. int main(){
  8. struct fecha f[3];
  9. unsigned int i = 0, dia = 0, mes = 0, año= 0;
  10.  
  11. for(i=0; i<2; i++){
  12. printf("Introduzca fecha %u: ", i+1);
  13. scanf("%u %u %u", &f[i].dia, &f[i].mes, &f[i].año);
  14. }
  15.  
  16. dia = f[0].dia - f[1].dia;
  17. mes = f[0].mes - f[1].mes;
  18. año = f[0].anioo - f[1].año;
  19.  
  20. año = año * 360;
  21. mes = mes * 30;
  22. f[2].dia = anioo + mes + dia;
  23.  
  24. printf("\n\n\nDias Trascurridos %d", f[2].dia);
  25. printf("La fecha 1 es %s que la fecha 2\n", (dia>=0) ? "menor":"mayor");
  26.  
  27. return 0;
  28. }
  29.  


« Última modificación: 23 Julio 2018, 18:00 pm por aurquiel » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: Ayuda con este programa en C
« Respuesta #2 en: 23 Julio 2018, 19:59 pm »

Si bien es cierto que está bien usar tipos que concuerden entre sí, yo no recomendaría usar unsigned salvo que sea totalmente necesario.
Fíjate, por ejmeplo, en esto: (dia>=0) ? "menor":"mayor"
dia es unsigned, así que siempre va a ser mayor o igual a 0.
La lógica y las operaciones cambian, además de que conseguiremos fácilmente un underflow al andar haciendo restas sin comprobaciones (sin ir más lejos, si el dia o el mes de [1] es mayor que el de
  • saldrán resultados incorrectos).

Y en cuanto a la pregunta original, comparar fechas es como restar. Si el mes de la fecha más alta es menor que el de la más pequeña, igual que en una resta: le restas 1 al año y le sumas 12 al mes. Parecido para los días.
En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Ayuda con este programa en C
« Respuesta #3 en: 24 Julio 2018, 02:21 am »

Hay que considerar que los años pueden ser bisiestos.

Que tal si calcular la distancia hacia una fecha pasada comun de cada fecha y luego la diferencia entre ambas ditancias?
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.479



Ver Perfil
Re: Ayuda con este programa en C
« Respuesta #4 en: 24 Julio 2018, 13:54 pm »

Y qué tal si de hace con time.h, que ya tiene todo eso pensado?
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
srWhiteSkull


Desconectado Desconectado

Mensajes: 437



Ver Perfil WWW
Re: Ayuda con este programa en C
« Respuesta #5 en: 25 Julio 2018, 15:04 pm »

Y qué tal si de hace con time.h, que ya tiene todo eso pensado?

...exacto, como usar difftime() y esas cosas  :rolleyes:
https://en.cppreference.com/w/c/chrono/difftime
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.410


ASMático


Ver Perfil WWW
Re: Ayuda con este programa en C
« Respuesta #6 en: 25 Julio 2018, 20:31 pm »

Basta ver el comentario del código para suponer que la idea es hacerlo a mano.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.479



Ver Perfil
Re: Ayuda con este programa en C
« Respuesta #7 en: 26 Julio 2018, 02:07 am »

A mi me ha dado la impresión de que lo que quiere es saber si una fecha va antes de otra y que desconocía que con time.h se puede hacer.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
srWhiteSkull


Desconectado Desconectado

Mensajes: 437



Ver Perfil WWW
Re: Ayuda con este programa en C
« Respuesta #8 en: 26 Julio 2018, 14:38 pm »

Código:
/* Escribe un programa para calcular el numero de dias
   que hay entre dos fechas; declarar fecha como una
   estructura */

No pone de que forma debes hacer el programa, simplemente te indica que resuelvas la forma para calcular los días entre dos fechas. Y encima fecha puedes declararla como una estructura time_t (Ejemplo, time_t fecha; ).

Si esto no es lo que buscaba el profesor este argumento astuto puede usarse contra él  ;) :xD

PD Hay que tener en cuenta que el resultado de la función difftime() lo devuelve en segundos, no es como si al usarla resolviera completamente el ejercicio.
« Última modificación: 26 Julio 2018, 14:41 pm por srWhiteSkull » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con este programa
Programación C/C++
daxelmejor 1 1,393 Último mensaje 13 Mayo 2010, 16:00 pm
por Akai
Ayuda con este programa en C++
Programación C/C++
miguelb18 1 1,400 Último mensaje 25 Agosto 2010, 17:23 pm
por Littlehorse
Ayuda con este programa
Programación C/C++
nosotros12 1 1,277 Último mensaje 18 Noviembre 2011, 09:06 am
por s00rk
ayuda con este programa
Dudas Generales
ZXILER 1 1,818 Último mensaje 16 Marzo 2012, 23:16 pm
por Aprendiz-Oscuro
ayuda con este programa
Java
hairam 2 1,392 Último mensaje 9 Julio 2012, 20:56 pm
por rommel89
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines