begin process at 2012 05 30 12:06:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Divers

 > 

Structure date c


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Structure date c

vendredi 11 novembre 2011 à 12:44:19 | Structure date c

hamriham123


<<
on considère la structure date definie comme suite :
typedef struct date
{ int jours;
int mois;
int année;
} date;
écrire une fonction qui ajoute un nombre n de jours à une date
exemple : 20+ 15/10/2011 = 04/11/2011.>>

le nombre de jours etant quelconque .
Merci de bien vouloir m'aider .
vendredi 11 novembre 2011 à 13:30:29 | Re : Structure date c

pop70

Salut,
qu'est-ce qui te pose problème précisément ? La façon d'écrire la fonction ou le calcul ?
Est-ce que tu as déjà écris un morceau de ce code ?

Pop70
vendredi 11 novembre 2011 à 16:13:29 | Re : Structure date c

hamriham123

En fait j'arrive pas a commencer mon programme ! Ce qui me pose probleme evidemment c'est le fait qu'il ai des mois a 28, 29, 30 et 31 jours .
J'ai eu de la part d'un prof ceci :

" #include<stdio.h>
#include<conio.h>

typedef struct
{
int jour,mois,annee;
} date;


void main()
{
clrscr();

date d;
int j,total;
do
{
printf("Entrez le nombre de jours à ajouter <=30");
scanf("%d",&j);
}while(j>30);
printf("Entrez la date");
scanf("%d %d %d",&d.jour,&d.mois,&d.annee);
total=j+d.jour;

if((total<=29 && d.mois==2)||(total<=30 &&(d.mois==4||d.mois==6||d.mois==9||d.mois==11))||(total<=31))
{
printf("La date résultant est=%d %d %d",total,d.mois,d.annee);
}
else
{
if(d.mois==2)
{
printf("La date résultant est=%d %d %d",total-29,d.mois+1,d.annee);
}
else if(d.mois==4||d.mois==6||d.mois==9||d.mois==11)
{
printf("La date résultant est=%d %d %d",total-30,d.mois+1,d.annee);
}
else
{
printf("La date résultant est=%d %d %d",total-30,d.mois+1,d.annee);
}
}

getch();

}
>>
Mais je ne sais pas comment passer de n<30 à n quelconque !
sinon mon prof nous a parlé d'une autre méthode qui consiste à je cite : (n'ajouter qu'un jour au début et puis généraliser pour n jours) personnellement j'ai pas vraiment compris ce qu'il voulait dire par là mais si ça te dit quelque chose fait le moi savoir .
vendredi 11 novembre 2011 à 19:44:43 | Re : Structure date c

pop70

Ajouter un jour puis généraliser, ça veut dire : faire la fonction qui ajoute un seul jour, puis l'appeler n fois, dans une autre fonction qui a pour but d'ajouter n jours :

Code C/C++ :
#include<stdio.h>
// j'ai enlever conio.h (sur mon compilo j'en ai pas besoin)

typedef struct
{
    int jour;
    int mois;
    int annee;
} date;


void ajouteJour (date *date_struct) // Fonction qui ajoute un seul jour
{
    if (date_struct->mois == 12 && date_struct->jour == 31) // Si on est le dernier jour de l'annee,
    {
        date_struct->annee++;   // on change d'annee,

        date_struct->mois = 1;  // et on passe au 1er janvier.
        date_struct->jour = 1;

        return;
    }


    if (date_struct->mois == 2) // Sinon, si on est en Février,
    {
        if ((date_struct->annee % 4) == 0)  // lors d'une année bissextile,
        {
           if (date_struct->jour == 29) // et le 29 du mois,
           {
                date_struct->mois++;    // on change de mois
                date_struct->jour = 1;  // et on repasse au 1er du mois.
                return;
           }
        }
        else
        {
            if (date_struct->jour == 28)    // sinon, c'est le 28 que
            {                               // s'effectue ce changement.
                date_struct->mois++;
                date_struct->jour = 1;
                return;
            }
        }
        date_struct->jour++;    // Et si on est pas à la fin du mois, on change tout simplement de jour.
        return;
    }
    else if (date_struct->mois < 8) // Si c'est un autre mois mois, inferieur à Août,
    {
        if ((date_struct->mois % 2) == 1) // alors s'il est multiple de 2,
        {
            if (date_struct->jour == 31)    // il a 31 jours, et si on est le 31ème,
            {
                date_struct->mois++;    // on passe au mois suivant,
                date_struct->jour = 1;  // et on remet le jour à 1.
                return;
            }
        }
        else
        {
            if (date_struct->jour == 30) // sinon, il a 30 jours, et si on est le 30ème
            {
                date_struct->mois++;    // on passe au mois suivant,
                date_struct->jour = 1;  // et on change de jour.
                return;
            }
        }
        date_struct->jour++;    // Et si on est pas à la fin du mois, on change juste de jour.
        return;
    }
    else    // Sinon, si le mois est supérieur ou égal à Août, c'est l'inverse :
    {
        if ((date_struct->mois % 2) == 0) // ceux qui sont multiple de 2
        {
            if (date_struct->jour == 30)    // ont 30 jours,
            {
                date_struct->mois++;
                date_struct->jour = 1;
                return;
            }
        }
        else
        {
            if (date_struct->jour == 31)    // et les autres 31.
            {
                date_struct->mois++;
                date_struct->jour = 1;
                return;
            }
        }
        date_struct->jour++;
        return;
    }

    return;
}


void ajoutPlrsJours(date *date_struct, int nb_jours)    // Ajoute plusieurs jours.
{
    int i;
    for(i=0; i < nb_jours; i++) // ajoute un jour après l'autre.
        ajouteJour(date_struct);
}

int main ()
{
    date test_date;
    test_date.annee = 2011;
    test_date.mois = 12;
    test_date.jour = 28;


    printf("%02d/%02d/%04d\n", test_date.jour, test_date.mois, test_date.annee);

    ajoutPlrsJours(&test_date,5);

    printf("%02d/%02d/%04d\n", test_date.jour, test_date.mois, test_date.annee);

    return 0;
}



L'algo est simple, c'est comme avec les bosses des mains : bosse->31 jours, creux->30 jours. Il en ressort un motif de 1 sur 2 qui a 30 jour, sauf en Août qui lui a 31 jours aussi.
Pour Février je le traite à part, si l'année est bissextile -> 29 jours, sinon 28 (d'où modulo 4).



C++dialement,
Pop70
vendredi 11 novembre 2011 à 19:47:24 | Re : Structure date c

pop70

(Dsl pour les fautes (enlevé, multiples...) je clique toujours sur "Envoyer" sans relire...


Pop70
samedi 12 novembre 2011 à 11:02:42 | Re : Structure date c

hamriham123

Un grand Merci a toi POP70 !!
lundi 14 novembre 2011 à 09:24:25 | Re : Structure date c

buno

Administrateur CodeS-SourceS
Hello,
@hamriham123: je te conseille de mettre le nom de Pop70 sur ton compte-rendu de TP...


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
vendredi 18 novembre 2011 à 16:14:27 | Re : Structure date c

katsankat

Membre Club
Salut, le code me semble un peu long.
Surtout qu'en corrigeant les copies, les profs vérifient rapidement d'ou provient un code, eux aussi ont internet! (je forme des programmeurs en tant que prof...) et cppfrance plutôt bien référencé par google. Bref...

Je ferais autrement (va savoir la note?) : transformer la date donnée en timestamp UNIX (nombre de secondes écoulées depuis le 1er janvier 1970) il y a certainement une fonction de la LibC qui fait ça; puis ajouter le nombre de secondes correspondant à 20 jours, pour retransformer ce nouveau timestamp en jour, mois, an à partir du pointeur de la structure passé en argument de la fonction.

Anecdote, l'histoire du 1er janvier 70 produira une panique similaire au passage en l'an 2000 puisque le timestamp UNIX est stocké sur un int, dont la capacité est limitée à 4 milliards de seconde, ce qui entrainera un dépassement de capacité de cette variable en 2038.
mercredi 23 novembre 2011 à 01:45:49 | Re : Structure date c

hamriham123

En fait, j'avais pas demandé à POP70 de me passer le code en entier mais juste, m'expliquer ce que notre prof voulait qu'on fasse ; "Ajouter un jour puis généraliser, ça veut dire : faire la fonction qui ajoute un seul jour, puis l'appeler n fois, dans une autre fonction qui a pour but d'ajouter n jours : " aurait suffit mais monsieur s'est pris la peine d'écrire le programme et me le passer(En plus c'est meme pas un TP qu'on a, je bloque dessus c'est tout)!
Vous en faites tout un plat !
mercredi 23 novembre 2011 à 02:00:53 | Re : Structure date c

1 2

Cette discussion est classée dans : date, structure


Répondre à ce message

Sujets en rapport avec ce message

structure de données?? [ par debutant0c ] Salut, Je dois écrire un programme EN C qui permet de placer n taches sur m machines tel que une fois une tache terminée placer la tache suivante sur Comment imprimer une structure à l'aide d'un pointeur?? [ par IHECinformaticien ] Bonjour, j'ai définit une structure date contenant 3 champs de type entier pour identifier le jour, le mois & l'année. Ensuite j'ai initialisé une var Un problème avec les structures en C ??!! [ par IHECinformaticien ] Bonsoir/Bonjour, dans le code source qui suit, j'ai défini un tableau de type structure date( une structure qui contient le jour, le mois et l'année), Créer un raccourci (DEV-C++) [ par ndubien ] Bonjour, Cela fait un moment que je cherche une fonction permettant de créer un raccourci. Je l'ai trouvé mais impossible de la compiler sous DEV-C++: suppression de fichier en fonction de la date de création [ par koma777 ] Bonjour à tous, Je cherche actuellement un programme automatisant la suppression de fichier en fonction d'une date antérieur. En effet, j'ai une camer fonctions de listes chainees en c [ par loftiteau ] bonjourje souhaite avoir d'aide pour faire des fonctions d'ajout et suppression et modification en utilisant la liste chainé suivante en language c :s Incruster heure et date dans une image [ par deck_bsd ] Yop à tous,Voila, j'aurai voulu savoir comment je pourrai faire pour incruster l'heure et la date dans une image, de la même manière que fais un apare structure de la trame GPS [ par loik250 ] je voulais avoir qcq documentation sur la structure de la trame GPS . Merci d'avance Manipulation de date [ par alphaone ] Bonjour, j'ai fait une fonction pour copier la date d'un fichier vers un autre:[code]/** \brief change file time with system time\param file File name Afficher heure [ par maxlog ] Bonjour, J'aimerais savoir comment afficher l'heure de mon serveur (mon Ordi) avec la commande 'date'... J'ai affiché la date mais je voudrais mainten


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales