[C++]Problème dans mon programme

Problème dans mon programme [C++] - C++ - Programmation

Marsh Posté le 21-03-2008 à 07:35:28    

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
Reply

Marsh Posté le 21-03-2008 à 07:35:28   

Reply

Marsh Posté le 22-03-2008 à 18:45:20    

ç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.

Reply

Sujets relatifs:

Leave a Replay

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