[C]Problème affichage Calendrier en C (débutant)

Problème affichage Calendrier en C (débutant) [C] - C - Programmation

Marsh Posté le 01-02-2014 à 12:49:22    

Bonjour ,  
 
On nous a demandé de creer un programme qui génère le calendrier 2014 (en utilisant les boucles/tableaux/test et les 2 fonctions stdio.h et conio.h)  
 
je l'ai fait et voici le programme  
 
#include<stdio.h>  
#include <conio.h>  
 
main()  
 
{  
 
int i,a=0,o,j[12]={31,28,31,30,31,30,31,31,30,31,30,31  
};  
 
char m[12][20]={"JANVIER","FEVRIER","MARS","AVRIL","MAI  
","JUIN","JUILLET","AOUT","SEPTEMBRE","OCTOBRE","N  
OVEMBRE","DECEMBRE"};  
 
printf("\t\t----------Calendrier annee 2014----" );  
 
for(i=0;i<12;i++)  
 
{  
 
printf("\n\t\t\t%s\t",m[i]);  
 
printf("\nLUN\tMAR\tMER\tJEU\tVEN\tSAM\tDIM\n" );  
printf("\t\t" );  
for(o=1;o<=j[i];o++)  
{printf("%d\t",o); a=a+1;  
if(a==5 || a==12|| a==19 || a==26)printf("\n" );} a=0;  
printf("\n" );  
 
 
}  
getch();  
}  
 
 
Ce qui donnera ça http://www.noelshack.com/2014-05-1 [...] apture.jpg (les trois premiers mois sont visibles)  
et donc y a une répitition et un problème lié a la disposition des dates selon les jours de la semaines , valable seulement pour Janvier , mais se repercute sur les autres mois a cause de la boucle.  
 
Need help svp

Reply

Marsh Posté le 01-02-2014 à 12:49:22   

Reply

Marsh Posté le 01-02-2014 à 13:28:44    

utilise les balises code:

Code :
  1. #include<stdio.h> 
  2. #include <conio.h>  // inutile
  3. main() 
  4.     int i,a=0,o,j[12]={31,28,31,30,31,30,31,31,30,31,30,31  }; 
  5.     char m[12][20]={"JANVIER","FEVRIER","MARS","AVRIL","MAI","JUIN","JUILLET","AOUT","SEPTEMBRE","OCTOBRE","NOVEMBRE","DECEMBRE"}; 
  6.     printf("\t\t----------Calendrier annee 2014----" ); 
  7.     for(i=0;i<12;i++) 
  8.      { 
  9.          printf("\n\t\t\t%s\t",m[i]); 
  10.          printf("\nLUN\tMAR\tMER\tJEU\tVEN\tSAM\tDIM\n" ); 
  11.         printf("\t\t" ); 
  12.         for(o=1;o<=j[i];o++) 
  13.         {
  14.             printf("%d\t",o); a=a+1; 
  15.             if(a==5 || a==12|| a==19 || a==26)printf("\n" );} a=0; 
  16.             printf("\n" ); 
  17.         }
  18.      }// il manquait une }   
  19.      getch(); 
  20. }


 
problème ligne 13: tu ajoutes des tabulations qui décale l'affichage du premier jour de chaque mois (puisque c'est dans une boucle!).
Ne devrais d'ailleurs tu pas utiliser une fonction pour obtenir le jour du 1 janvier afin de faire ton affichage correctement (plutôt que de mal utiliser la tabulation pour atterrir sur le mercredi!)? (faut aussi penser à calculer l'affichage du nombre de jours de février)


Message édité par breizhbugs le 01-02-2014 à 13:32:49

---------------
Seul Google le sait...
Reply

Marsh Posté le 01-02-2014 à 13:35:30    

Pardon j'ai omis.

Reply

Marsh Posté le 01-02-2014 à 13:41:05    

Ah désolé , je n'ai pas vu le message éditer , sinon Le prof a été évasif.
 
Du coup je ne sais pas vraiment comment m'y prendre (les calcules/disposition et tout)
Si vous pouvez m'aider
je suis preneur
 

Reply

Marsh Posté le 01-02-2014 à 23:57:26    

Testes ce petit programme:

Code :
  1. #include <stdio.h>
  2. #include <time.h>
  3. int main(int argc, char *argv[])
  4. {
  5. struct tm quand={0};
  6. __time64_t result;
  7. char jour[7][15]={"dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"};
  8. char moisT[12][15]={"janvier", "février", "mars", "avril", "mai", "juin", "juillet", "aout", "septembre", "octobre", "novembre", "décembre"};
  9. int moisN;
  10. for (moisN = 0; moisN < 12; moisN++)
  11. {
  12.  // on remplit la structure avec les champs que l'on connait:
  13.  quand.tm_mday=1;     // le 1er
  14.  quand.tm_mon=moisN;    // janvier
  15.  quand.tm_year=2014-1900;  //2014 // -> on retranche 1900 car l'année compte a partir de 1900, voir la doc des fonctions de temps
  16.  // attention la structure n'est pas correcte puisque l'on ne connait pas tous les champs on va utiliser mktime qui va la valider:
  17.  if( (result = mktime( &quand )) != (time_t)-1 ) // mktime corrige la structure qui contient des champs incorrects pour l'instant
  18.  {
  19.   printf ("le 1er %s 2014 est un %s\n", moisT[moisN], jour[quand.tm_wday]); // on peut s'en servir pour savoir de quel jour c'était
  20.  }
  21. }
  22. return 0;
  23. }


 
Maintenant, tu dois pouvoir utiliser "quand.tm_wday" pour calculer combien de tabulation tu dois mettre au début du mois!


---------------
Seul Google le sait...
Reply

Marsh Posté le 06-02-2014 à 11:29:54    

Merci pour ta code breizhbugs , mais je dois utilisé que les deux fonctions conio.h et stdio.h et non time.
J'ai modifié un peu mon programme et il me reste plus qu'a trouver un moyen pour couper le nombre de jour a dimanche  
et revenir sur le lundi
 
Merci de m'éclairer
 

Code :
  1. #include<stdio.h>
  2. #include <conio.h>
  3. main()
  4. {
  5. int i,o,z,e,j[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  6. int p[12]={3,6,6,2,4,7,2,5,1,3,6,1};
  7. //int r[12]={7,7,7,7,7,7,7,7,7,7,7,7};
  8. char m[12][20]={"JANVIER","FEVRIER","MARS","AVRIL","MAI","JUIN","JUILLET","AOUT","SEPTEMBRE","OCTOBRE","NOVEMBRE","DECEMBRE"};
  9. printf("\t\t----------Calendrier annee 2014----" );
  10. for(i=0;i<12;i++)
  11. {
  12. printf("\n\n\t\t\t%s\n\t",m[i]);
  13. printf("\nLUN\tMAR\tMER\tJEU\tVEN\tSAM\tDIM\n" );
  14. for (e=1;e<=p[i];e++) {
  15.     printf("\t",e);
  16. }
  17. for(o=1;o<=j[i];o++)
  18.                      {printf("%d\t",o);
  19. }
  20. }
  21. getch();
  22. }

Reply

Marsh Posté le 06-02-2014 à 14:46:32    

c'est bon, je l'ai terminé!
 
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed