Affichage d'un calendrier en langage c

kheweul86 Messages postés 1 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
je programme en c et je voudrais afficher le calendrier de l'année 2008.
je sollicite votre aide . je vous remercie d'avance.
Configuration: Windows XP
Firefox 2.0.0.14

2 réponses

  1. BENOITE1862
     
    cela t'affiche le calendrier de n'importe qu'elle année

    //directive include des fichiers "stdio.h", "time.h", "math.h"
    #include <stdio.h>
    #include <math.h>
    #include <time.h>

    //mise en place du type "structure" de la DATE
    typedef struct{ int jour, mois, annee; } DATE;

    //forme classique vers forme astronomique
    long datetoastro (DATE d)
    {
    //declarations des variables
    int a,m,jourastro;
    if (d.mois>2)
    {a=d.annee; m=d.mois-3;}
    else
    {a=d.annee-1; m=d.mois+9;}
    jourastro=((146097*(a/100))/4)+((1461*(a%100))/4)+(((153*m)+2)/5)+d.jour+1721119;
    return jourastro;
    }

    //forme astronomique vers forme classique
    DATE astrotodate (long jourastro)
    {
    //declarations des variables
    int a,m,j,annee,mois,jour,q1,q2,q3;
    q1=4*(jourastro-1721119)-1;
    a=q1/146097;
    q2=4*((q1%146097)/4)+3;
    j=q2/1461;
    q3=5*(((q2%1461)/4)+1)-3;
    m=q3/153;
    DATE d;
    d.jour=(((q3%153)/5)+1);
    if (m<10)
    { d.annee=100*a+j; d.mois=m+3;}
    else
    {d.annee=100*a+j+1;d.mois=m-9;}
    return d;
    }

    //nb de jours dans un mois
    int nbjours_mois(DATE x)
    {
    //convertion en astro du 1er du mois
    long x_astro;
    x_astro = datetoastro(x);
    //convertion en astro du 1er du mois suivant
    DATE y = {1, x.mois+1, x.annee};
    long y_astro;
    y_astro = datetoastro(y);
    //calcul nb jour du mois
    int nbjours_m;
    nbjours_m = (y_astro - x_astro);
    return nbjours_m;
    }

    //nb de jours dans une annee
    int nbjours_annee(DATE x)
    {
    //convertion en astro du 1er de l'annee
    long x_astro;
    x_astro = datetoastro(x);
    //convertion en astro du 1er de l'annee suivante
    DATE y = {1, 1, x.annee+1};
    long y_astro;
    y_astro = datetoastro(y);
    //calcul nb jour de l'annee
    int nbjours_a;
    nbjours_a = (y_astro - x_astro);
    return nbjours_a;
    }

    //jour de la semaine
    char jour_de_semaine(DATE x)
    {
    //convertion en astro de la date
    long x_astro;
    x_astro = datetoastro(x);
    //calcul du jour de la semaine
    int jour_de_s;
    jour_de_s = (x_astro%7);
    //conversion de l'entier en lettre du jour de la semaine (possible de le realiser en if ou switch)
    //char s[]={'L','M','M','J','V','S','D'};
    return jour_de_s;
    }

    //jour du 1er de l'annee
    int prem_de_annee(DATE x)
    {
    DATE y = {1, 1, x.annee};
    char prem_de_a;
    prem_de_a=jour_de_semaine(y);
    return prem_de_a;
    }

    //recherche du numero de semaine
    int semaine(DATE x)
    {
    DATE y = {1, 1, x.annee};
    int prem_sem;
    int num_sem;
    prem_sem=prem_de_annee(y);

    if (prem_sem<=3) num_sem=1;
    else num_sem=54;
    return num_sem;
    }

    int main ()
    {
    DATE x ;

    // demande du jour
    /* printf (" Quelle jour? ");
    scanf("%d", &x.jour);
    if (x.jour>31)
    {printf ("!!! Gros debile, un mois ne peux pas contenir plus de 31j !!!");
    return 0;}
    */
    x.jour = 1;
    //demande du mois
    /* printf ("\n Quel mois? ");
    scanf("%d", &x.mois);
    if (x.mois>12)
    {printf ("!!! Mais tu es vraiment idiot, une annee comporte 12 mois !!!");
    return 0;}
    */
    x.mois = 1;
    // demande de l'année
    printf (" Quelle annee? ");
    scanf("%d", &x.annee);

    //afichage du numero de la premiere semaine

    printf ("%d\n",semaine(x));

    //boucle pour créer un calendrier graphique annuel
    for (x.mois=1;x.mois<=12;x.mois++)
    {

    //VERSION GRAPHIQUE DU CALENDRIER

    printf ("---------------------------------\n---------------------------------\n");
    //conversion de l'entier du mois en toute lettre (possible de le realiser en switch)
    if (x.mois==1) printf ("JANVIER ");
    else if (x.mois==2) printf ("FEVRIER ");
    else if (x.mois==3) printf ("MARS ");
    else if (x.mois==4) printf ("AVRIL ");
    else if (x.mois==5) printf ("MAI ");
    else if (x.mois==6) printf ("JUIN ");
    else if (x.mois==7) printf ("JUILLET ");
    else if (x.mois==8) printf ("AOUT ");
    else if (x.mois==9) printf ("SEPTEMBRE ");
    else if (x.mois==10) printf ("OCTOBRE ");
    else if (x.mois==11) printf ("NOVEMBRE ");
    else if (x.mois==12) printf ("DECEMBRE ");

    //suite de l'affichage de l'en-tete du Calendrier graphique
    printf ("%d\n",x.annee);
    printf ("---------------------------------\n L M M J V S D semaine\n---------------------------------\n");

    //affichage de l'interieur du calendrier graphique
    long jx = datetoastro(x);
    DATE ex = astrotodate(jx);
    int i;

    //cherche le 1er jour du mois
    for (i = 0; i < jx%7; ++i)
    printf(" ");

    for (i=1;i<=nbjours_mois(x);i++,jx++)
    {
    {
    ex = astrotodate(jx);
    printf (" %2d",ex.jour);
    if (jx%7==6)
    printf("\n");
    }
    }

    printf ("\n");

    }

    printf ("\n");

    return 0;
    }
    22
  2. snowbinard
     
    Bonjour,

    je commence juste dans la programmation, en cours on fait les bases, style le site du zéro, et mon prof m'a dit que l'an prochain on en ferai beaucoup plus, à un niveau plus élevé... du coup je lui ai demandé ce que je pouvais faire pour essayer de m'améliorer et il m'a donné un sujet (créer un agenda électronique en ligne de commande) qu'il avait déjà donné auparavant à ses élèves et m'a dit que si je voulais je pouvais m'amuser à le faire et qu'il pourrait regarder...

    Bref en fait j'ai trouvé ce calendrier que j'ai réussi à inclure dans mon programme, mais j'aimerai savoir comment faire pour afficher le numéro des semaine, et pourquoi pas afficher une semaine en entrant le numéro de celle-ci...?

    Est-ce possible, trop compliqué, facile? Et pourrais-je avoir une réponse "pour débutant"? :-)
    Merci beaucoup d'avance.
    0
    1. 1udo93e
       
      salut:
      je veux un programme qui affiche ce triangle
      1
      12
      123
      1234
      merçi d'avance
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Merci de créer un nouveau post lorsque votre question n'a rien à voir avec le post initial.
      De plus, nous ne sommes pas là pour faire vos programmes mais pour vous aider...
      0