Program źle dodaje miesiące i dni
Ostatnio zmodyfikowano 2015-11-29 21:13
Opsowns Temat założony przez niniejszego użytkownika |
Program źle dodaje miesiące i dni » 2015-11-29 20:21:17 Witam mam problem tego typu, że program nie przeskakuje mi na kolejny miesiąc jak wpisze liczbę za dużą i z dniami jest tak samo. int Date::ilosc; Date Date::_default( 1, 1, 1992 ); Date::Date( int a, int b, int c ) { ilosc++; if( a > 0 && a <= 31 ) day = a; else day = 1; if( b > 0 && b <= 12 ) month = b; else month = 1; if( c > 0 ) year = c; else year = 1900; }
Date::~Date( void ) { ilosc--; }
Date::Date( const Date & d ) { ilosc++; day = d.day; month = d.month; year = d.year; }
void Date::display( char * nazwa ) { string month1; switch( month ) { case 1: month1 = "styczen"; break; case 2: month1 = "luty"; break; case 3: month1 = "marzec"; break; case 4: month1 = "kwiecien"; break; case 5: month1 = "Maj"; break; case 6: month1 = "Czerwiec"; break; case 7: month1 = "Lipiec"; break; case 8: month1 = "Sierpien"; break; case 9: month1 = "Wrzesien"; break; case 10: month1 = "Pazdziernik"; break; case 11: month1 = "Listopad"; break; case 12: month1 = "Grudzien"; break; } cout << nazwa << ": " << day << "." << month1.c_str() << "." << year << endl << endl; } Date & Date::addDay( int ile ) { for( day; day <= 31; day++ ) this->day = this->day + ile; if( this->day >= 31 ) { this->day -= 32; } return * this; } Date & Date::addYear( int ile ) { this->year = year + ile; return * this; }
Date & Date::addMonth( int ile ) { this->month = month + ile; if( this->month >= 12 && this->day >= 1 ) { this->month -= 12; } return * this; } Date & Date::addDate( const Date & d ) { this->day += d.day; this->year += d.year; this->month += d.month; return * this; } |
|
Pawlo3 |
Masz poprawioną wersję klasy. » 2015-11-29 21:13:15 #include <iostream> using namespace std; #include <conio.h> class Date { private: int month; int day; public: Date( void ) { month = 1; day = 1; } void Date::AddDay( void ) { day++; if( month == 1 && day == 32 ) { day = 1; AddMonth(); } else if( month == 2 && day == 30 ) { day = 1; AddMonth(); } else if( month == 3 && day == 32 ) { day = 1; AddMonth(); } else if( month == 4 && day == 31 ) { day = 1; AddMonth(); } else if( month == 5 && day == 32 ) { day = 1; AddMonth(); } else if( month == 6 && day == 31 ) { day = 1; AddMonth(); } else if( month == 7 && day == 32 ) { day = 1; AddMonth(); } else if( month == 8 && day == 32 ) { day = 1; AddMonth(); } else if( month == 9 && day == 31 ) { day = 1; AddMonth(); } else if( month == 10 && day == 32 ) { day = 1; AddMonth(); } else if( month == 11 && day == 31 ) { day = 1; AddMonth(); } else if( month == 12 && day == 32 ) { day = 1; AddMonth(); } } void AddMonth( void ) { month++; if( month >= 13 ) month = 1; } void DisplayDate( char * str ) { cout << str << ": " << day << " "; switch( month ) { case 1: cout << "Stycznia"; break; case 2: cout << "Lutego"; break; case 3: cout << "Marca"; break; case 4: cout << "Kwietnia"; break; case 5: cout << "Maja"; break; case 6: cout << "Czerwca"; break; case 7: cout << "Lipca"; break; case 8: cout << "Sierpnia"; break; case 9: cout << "Wrzesnia"; break; case 10: cout << "Pazdziernika"; break; case 11: cout << "Listopada"; break; case 12: cout << "Grudnia"; break; } cout << "\n"; return; } };
int main( void ) { Date dt; dt.DisplayDate( "Data" ); for( int licz = 1; licz < 40; licz++ ) { dt.Date::AddDay(); dt.DisplayDate( "Data" ); } dt.AddMonth(); dt.DisplayDate( "Data" ); getch(); return 0; }
Niestety, przegapiłem, że w Twej klasie jest rok. Poprawię to jutro. Niestety, kiedy definiowałem funkcje poza klasą był problem z dostępem do składowych prywatnych. Olałem zasadę języka, że funkcje w ciele klasy są typu inline. |
|
« 1 » |