Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1216 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++]Problème dans mon programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++]Problème dans mon programme

n°1705777
imposer
Posté le 21-03-2008 à 07:35:28  profilanswer
 

Bonjour j'ai fait un petit calendrier en C++ mais j'essaie d'éliminer les variables générales pour des questions pratiques. Lorsque je le fais, mon calendrier foire. Quelqu'un pourrait me dire ce qu'il faut changer après avoir éliminé ces variables? Merci infiniment.
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. int dayOfWeek(int day,int month,int year); // référencie une date précise à un jour de la semaine
  4. int daysInMonth(int month,int year); // détermine le nombre de jours dans le mois
  5. bool isLeapYear(int year); // détermine si l'année est bissextile ou non
  6. void printUnderscore (); // fonction interligne
  7. void printDay(int numberday); // imprime le numéro du jour
  8. void printCalendar(int month,int year); // imprime le calendrier
  9. int day,month,year;  // j'essaie d'enlever ces variables mais lorsque je le fais, mon calendrier décale les jours (j'ai déclaré pour int main les month et year et pour printDay les day,month,year
  10. int main()
  11. {
  12. month=0,year=0;
  13. do
  14. {
  15.  cout<<"Entrer un mois et une annee (MM AAAA):"<<endl;
  16.  cin>>month>>year;
  17. }
  18. while((month<1)|(month>12));
  19. cout<<endl;
  20. printCalendar(month,year);
  21. system("PAUSE" ); //nécessaire pour le programme dev-c++
  22.     return 0;
  23. }
  24. int dayOfWeek(int day,int month,int year)
  25. {
  26. int rankofmonth,yearincentury,yearby100,waitmonth=month,waityear=year;
  27. if((month==1)|(month==2))
  28. {
  29.  waitmonth+=12;
  30.  waityear-=1;
  31. }
  32. rankofmonth=(((waitmonth+1)*26)/10);
  33. yearincentury=(waityear%100);
  34. yearby100=waityear/100;
  35. return ((day+rankofmonth+yearincentury+(yearincentury/4)+(yearby100/4)+(5*yearby100))%7);
  36. }
  37. bool isLeapYear(int year)
  38. {
  39. bool leapyear;
  40. if ((year%400)==0)
  41. {
  42.  leapyear=true;
  43. }
  44. else if (((year%4)==0)&((year%100)!=0))
  45. {
  46.  leapyear=true;
  47. }
  48. else
  49. {
  50.  leapyear=false;
  51. }
  52. return leapyear;
  53. }
  54. int daysInMonth(int month,int year)
  55. {
  56. int numberday;
  57.     bool leap;
  58. leap=isLeapYear(year);
  59. if((leap==true)&(month==2))
  60.  numberday=29;
  61. else if(month==2)
  62.  numberday=28;
  63.  else if ((month==4)|(month==6)|(month==9)|(month==11))
  64.   numberday=30;
  65.   else numberday=31;
  66. return numberday;
  67. }
  68. void printUnderscore()
  69. {
  70. cout<<"_________________________________"<<endl<<endl;
  71. }
  72. void printDay(int numberday)
  73. {
  74. int beginday,j=0,i=1;
  75. beginday=(dayOfWeek(day=1,month,year));
  76. beginday=((beginday+5)%7);
  77. while(j<beginday)
  78. {
  79.  cout<<"     ";
  80.  ++j;
  81. }
  82. while(i<=numberday)
  83. {
  84.  if((j%7)==0)
  85.    cout<<endl;
  86.  if(i<10)
  87.   cout<<"0"<<i<<"   ";
  88.   else cout<<i<<"   ";
  89.  ++i;
  90.  ++j;
  91. }
  92. }
  93. void printCalendar(int month,int year)
  94. {
  95. printUnderscore();
  96. if(month==1)
  97.  cout<<"Janvier "<<year<<endl;
  98. else if(month==2)
  99.  cout<<"Fevrier "<<year<<endl;
  100. else if(month==3)
  101.  cout<<"Mars "<<year<<endl;
  102. else if(month==4)
  103.  cout<<"Avril "<<year<<endl;
  104. else if(month==5)
  105.  cout<<"Mai "<<year<<endl;
  106. else if(month==6)
  107.  cout<<"Juin "<<year<<endl;
  108. else if(month==7)
  109.  cout<<"Juillet "<<year<<endl;
  110. else if(month==8)
  111.  cout<<"Aout "<<year<<endl;
  112. else if(month==9)
  113.  cout<<"Septembre "<<year<<endl;
  114. else if(month==10)
  115.  cout<<"Octobre "<<year<<endl;
  116. else if(month==11)
  117.  cout<<"Novembre "<<year<<endl;
  118. else if(month==12)
  119.  cout<<"Decembre "<<year<<endl;
  120. cout<<endl;
  121. printUnderscore();
  122. cout<<"Lun  Mar  Mer  Jeu  Ven  Sam  Dim"<<endl<<endl;
  123. daysInMonth(month,year);
  124. printDay(daysInMonth(month,year));
  125. cout<<endl<<endl;
  126. printUnderscore();
  127. }


Message édité par imposer le 21-03-2008 à 08:04:28
mood
Publicité
Posté le 21-03-2008 à 07:35:28  profilanswer
 

n°1706620
jesus_chri​st
votre nouveau dieu
Posté le 22-03-2008 à 18:45:20  profilanswer
 

ça réponds pas à ta question, mais dans le bloc de fin, mets :
 

Code :
  1. static const char* montName[] =
  2. {
  3.     "Janvier",
  4.     "Fevrier",
  5.     "Mars",
  6.    ...
  7.     "Decembre"
  8. };
  9. cout << montName[ month - 1] << '\n';


 
A la rigueur un switch aurait pu faire l'affaire :
 

Code :
  1. char* monthName;
  2. switch( month )
  3. {
  4.    case  1 : monthName = "Janvier"; break;
  5.    case  2 : monthName = "Fevrier"; break;
  6.    ...
  7.    case 12 : monthName = "Decembre"; break;
  8.    default : // faut gérer l'erreur, ou mettre un assert() sur month au début.
  9. };
  10. cout << monthName << '\n';


 
Remarque au passage que :
- Mon code est plus aéré, avec des espaces autours des opérateurs, franchement c'est + facile à lire, non ?
- je n'ai tappé le

cout << ... << '\n'

qu'une seule fois, toi 12.
- j'utilise '\n' pour sauter des lignes. endl ça sert à flusher le buffer, et accessoirement à sauter une ligne. Sauf cas particulier, on ne doit pas utiliser endl. Mais je ne t'en veux pas, des dizaines de mauvais bouquins ou mauvais prof disent d'utiliser endl.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++]Problème dans mon programme

 

Sujets relatifs
Communication programme => site web[resolu(erreur de noob)]Probleme "segment fault"
probleme avec php web galleryProbleme de script?
[PHP] Forcer le download - Problème avec IE en remote[resolu]problème alignement...
Problème de JMenuBarProblème avec Merise
Probleme de Link... 
Plus de sujets relatifs à : [C++]Problème dans mon programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR