Programme calculant la difference entre 2 dates - C - Programmation
Marsh Posté le 17-01-2007 à 13:05:17
Deux méthodes :
- Soit avec des if. C'est relativement facile, même si c'est un peu fastidieux.
- Soit en utilisant les fonctions d'une bibliothèque.
Marsh Posté le 17-01-2007 à 13:13:52
Regarde du côté des fonctions de time.h, je pense notamment au type de donnée "struct tm", et la fonction mktime() qui permet de convertir une telle structure en une valeur de type time_t, qui représente le nombre de secondes depuis The Epoch (01/01/1970).
Le but du jeu, c'est que si tu as deux dates représentées sous un nombre de secondes depuis une date fixe (ici, The Epoch), alors une simple soustraction te retourne une différence en secondes, facilement convertible.
Marsh Posté le 17-01-2007 à 16:18:52
USAGE |
(plus qu'à vérifier si j'ai pas des soustractions qui trainent dans mes programmes )
Marsh Posté le 17-01-2007 à 23:41:15
ben tu fait un petite algo qui teste et calcule... ya rien de sorcier là dedans... faut faire travailler les méninges parfois... tout n'est pas dans les lib...
Marsh Posté le 18-01-2007 à 09:39:59
Ange_blond a écrit : ben tu fait un petite algo qui teste et calcule... ya rien de sorcier là dedans... faut faire travailler les méninges parfois... tout n'est pas dans les lib... |
Marsh Posté le 18-01-2007 à 21:24:47
tiens c'est un programme que j'ai fait dernièrement qui permettait de connaitre le jour de la semaine de ta date de naissance (y' une petite erreur que j'ai jamais corrigé, genre lors de l'an 1 mais sinon ça va te donner une petite idée de comment faire)
Code :
|
Marsh Posté le 20-01-2007 à 21:37:48
exhortae a écrit : |
C'est quoi cette horreur ?
Marsh Posté le 20-01-2007 à 23:24:17
exhortae a écrit : tiens c'est un programme que j'ai fait dernièrement qui permettait de connaitre le jour de la semaine de ta date de naissance (y' une petite erreur que j'ai jamais corrigé, genre lors de l'an 1 mais sinon ça va te donner une petite idée de comment faire) |
C'est bien compliqué. Pourquoi ne pas utiliser struct tm, mktime() etc ? C'est fait pour non ?
Marsh Posté le 21-01-2007 à 09:37:05
marctes a écrit : C'est quoi cette horreur ? |
Les case correspondent au mois, à chaque mois j'affecte à la variable aide son nombre de jours maximum (31 pour janvier...), puis je compare cette variable aide avec le nombre de jours entrés pour voir si il n'y a pas d'erreur dans le nombre de jours (genre je mets 31 pour avril alors qu'il n'en compte que 30)
Marsh Posté le 21-01-2007 à 10:29:02
Emmanuel Delahaye a écrit : C'est bien compliqué. Pourquoi ne pas utiliser struct tm, mktime() etc ? C'est fait pour non ? |
Disons que le but c'était d'écrire la fonction sans rien utiliser de prédéfini, de plus si je ne me trompe pas mktime ne permet pas de connaitre le jour de naissance de christophe colomb , ma fonction si (à moins que je ne me trompe sur mktime )
Citation : |
Marsh Posté le 21-01-2007 à 14:54:45
exhortae a écrit : Les case correspondent au mois, à chaque mois j'affecte à la variable aide son nombre de jours maximum (31 pour janvier...), puis je compare cette variable aide avec le nombre de jours entrés pour voir si il n'y a pas d'erreur dans le nombre de jours (genre je mets 31 pour avril alors qu'il n'en compte que 30) |
Code :
|
Marsh Posté le 21-01-2007 à 17:13:31
Sve@r a écrit :
|
C'est beau. Dans mes délires,
http://mapage.noos.fr/emdel/clib/ed/src/date.c
je faisais ça :
Code :
|
Avec une correction sur le mois de février si nécessaire...
Marsh Posté le 21-01-2007 à 17:26:51
sinon on peut aussi s'amuser avec les modulo 2 et faire une correction pour le mois 2 et 7
Marsh Posté le 21-01-2007 à 17:59:13
Sve@r a écrit :
|
j'y avais pas pensé, et ça augmente la lisibilité, merci
Marsh Posté le 21-01-2007 à 21:37:06
Emmanuel Delahaye a écrit : http://mapage.noos.fr/emdel/clib/ed/src/date.c
|
Etant donné qu'une année divisible par 400 est forcément divisible par 4, on peut optimiser un peu
Code :
|
D'une part ça évitera de distribuer le "et" sur les parenthèses, et d'autre part cela collera parfaitement avec la définition d'une année bissextile qui est:
ou
Marsh Posté le 21-01-2007 à 22:12:56
Sve@r a écrit : Etant donné qu'une année divisible par 400 est forcément divisible par 4, on peut optimiser un peu
D'une part ça évitera de distribuer le "et" sur les parenthèses, et d'autre part cela collera parfaitement avec la définition d'une année bissextile qui est:
ou
|
C'est assez discutable :
sur 400 années consécutives il y a :
1 année divisible par 400 (et donc par 4 et par 100) : 3 modtests
3 années divisibles par 100 et par 4 mais pas par 400 : 3 modtests
96 années divisibles par 4 seulement : 2 modtests
300 années indivisibles : 2 modtests
avec la méthode d'origine on a :
Code :
|
1 année divisible par 400 (et donc par 4 et par 100) : 3 modtests
3 années divisibles par 100 et par 4 mais pas par 400 : 3 modtests
96 années divisibles par 4 seulement : 2 modtests
300 années indivisibles : 1 modtest
Le nombre de tests et modulos est identiques dans tout les cas sauf le plus courant (3/4 des cas), ou tu as perdu en efficacité en doublant le nombre de tests
(Oui c'est de la branlette )
Marsh Posté le 22-01-2007 à 14:07:15
0x90 a écrit : C'est assez discutable :
|
Très jolie démonstration.
On peut continuer un peu plus la branlette et examiner le cas où le compilo explose le test en redistribuant le "et" sur les parenthèses mais j'ai pas envie. Tu m'as convaincu !!!
Marsh Posté le 17-01-2007 à 12:35:05
Bonjour a tous, je dois creer un programme en langage C qui se charge de calculer la difference entre 2 dates entr3ee au clavier (JJ MM AAAA).
Mon probleme est que je ne sais pas comment calculer cette difference compte tenu que tout les mois n'ont pas le meme nombre de jour et que les annee bysextiles comptent aussi.
Si quelqu'un aurait une suggestion cela m'aiderait beaucoup.
D'avance merci