Date et heure en langage C

Fermé
zakzaks Messages postés 1 Date d'inscription lundi 29 juin 2015 Statut Membre Dernière intervention 29 juin 2015 - 29 juin 2015 à 11:03
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 2 juil. 2015 à 10:53
Bonjour.
je voudrais créer un programme dans lequel je dois taper une date et je voudrais que le jours avant et le jour après s'affiche.
j'arrive a afficher une date mais je voudrais le taper moi même.
JE VOUDRAIS LA SOLUTION AU PLUS VITE
merci.

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
29 juin 2015 à 11:54
Bonjour,

On n'est pas là pour faire mais pour aider à faire.
Donc tu n'auras pas la solution toute faite.
Montre-nous plutôt ce que tu as commencé et dis-nous ce que tu n'arrives pas à faire.

Cdlt,
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
Modifié par YCN- le 29/06/2015 à 16:22
Bonjour,

Je crois que tout dépend de la façon dont tu donnes la date, mais admettons que tu stock la date dans un tableau T de 3 case de la forme T[0]=Jour T[1]=Mois T[2]=Année

int jour_suivant ( int T[] ) {
int i =0 ;
for (i=0;i<2;i++){
T[i]=T[i]+1;
}
return T[];
}

int jour_suivant(int T[]){
// à completer
}

int main (void) {
int T[3]; int Tplus [3]; int Tmoins[3]
int nb;
T[0]=29;
T[1]=06;
T[2]=2015;
Tplus[] = jour_suivant(T[]);
Tmoins[]=jour_precedent(T[]);
return 0;
}

Il ne te reste plus qu'à coder la fonction jour suivant, et ajouter les scanf nécessaire. Une amélioration possible serait d'utiliser des pointeurs, mais je suppose que tu n'en es pas encore là.

En espérant t'avoir aider,

PS : je n'ai pas compilé, il y a peut être de petites erreurs

Cordialement Yann CARDAILLAC
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
29 juin 2015 à 16:41
Les pointeurs n'amélioreraient pas le programme puisque ce sont déjà des pointeurs que tu passes en paramétre et que dans le main(), le tableau est fixe et de petite taille.
Tplus[] = jour_suivant(T[]);
Pas bon en C.

return T[];
Pas bon non plus en C. D'autant que ta fonction renvoie un int. Vu la logique utilisée, pas besoin de return. Donc un simple void jour_suivant(int T[]); fera l'affaire.

Ensuite, ton programme ne tient pas compte de la partie qui pose souvent problème : en fin de mois, tu ne peux pas faire j+1, mais il faut incrémenter le mois. Mais si le mois vaut 12, c'est l'année qu'il faut incrémenter.

Note : pour les prochaines fois, n'oublie pas d'utiliser la balise <code c> pour ton code.
Exemple : <code c>ici tu mets ton code</code>
Cdlt,
0
YCN- Messages postés 116 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 13 juillet 2017 12
30 juin 2015 à 10:37
D'acc, oui oui c'était juste une espèce de brouillons que j'ai fait vite fait de façon à le débloquer ! L'histoire des pointeurs c'est simplement que ce serait plus propre je pense. J'avoue ne pas avoir pris le temps de me casser la tête pour que ce soit parfait, je voulais simplement l'aider un peu. Mais effectivement tu as tout à fait raison.
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
1 juil. 2015 à 14:43
Bonjour à tous,

La demande de zakzaks est tellement mal formulée, qu'on ne sait pas réellement quel est son besoin, car on peut interpréter son problème de multiples façons.

Obtenir le code de ce que zakzaks comme le demande fiddy est une façon d'éclairer notre lanterne ... à moins que zakzaks demande de l'aide pour un exercice et qu'il ou elle fasse entièrement fausse route, auquel cas, son code et l'énoncé précis de ce qu'on lui demande de faire seraient utiles.

Sinon, dans un monde réel, pour ajouter ou retrancher du temps à une date et heure et en afficher le résultat, on peut se servir des fonctions standard offertes par le C dans time.h.

http://www.cplusplus.com/reference/ctime/

en particulier mktime

Dal
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
1 juil. 2015 à 19:58
Moi je vote pour la demande de résolution d'exo :-p.
0
zakzaks > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
2 juil. 2015 à 09:35
Bonjour a tous
a propos de mon problème, j'avoue que je n'avais aucune idée de la façon a procéder mais j'ai trouvé quelque chose qui m'a aidé sauf que je n'ai pas du tout saisie ce que ça voulait dire surtout que j'ai un problème avec les pointeurs
Voila,
#include <stdio.h>
#include <time.h>

int jour(int j, int m, int a)
{
struct tm tm = {0, 0, 12, j, m - 1, a - 1900, 0, 0, 0};
time_t t = mktime(&tm);
return t < 0 ? 0 : localtime(&t)->tm_wday + 1;
}

int main(void)
{
const char *j[] = {"Echec","Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};
printf("%s\n", j[jour(25, 12, 2012)]);
return 0;
}

J'ai donc utilisé cela en aboutisssant à:
#include <stdio.h>
#include <time.h>

int jour(int j, int m, int a)

{
struct tm tm = {0, 0, 12, j, m - 1, a - 1900, 0, 0, 0};

time_t t = mktime(&tm);
return t < 0 ? 0 : localtime(&t)->tm_wday + 1;
}

int main(void)
{
int a,b,c;
const char *j[] = {"Echec","Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};
printf("taper une date JJ MM AAAA: ");
scanf("%2d%2d%4d",&a,&b,&c);
printf("nous somme le %02d/%02d/%4d\n",a,b,c);
printf("on est donc %s\n", j[jour(a, b, c)]);
a+=1;
printf("demain nous serons donc %s\n", j[jour(a, b, c)]);
a-=2;
printf("et hier nous etions donc %s\n", j[jour(a, b, c)]);
return 0;
}
merci
0