[c++] Zadanie kalendarz juliański i gregoriański - for i string
Ostatnio zmodyfikowano 2014-04-23 19:04
Azathanai Temat założony przez niniejszego użytkownika |
[c++] Zadanie kalendarz juliański i gregoriański - for i string » 2014-04-22 14:18:33 Witajcie, mam problem z zadaniem z c++ Treść tego zadania brzmi: Latami przestępnymi w kalendarzu juliańskim były wszystkie te lata, które dzieliły się bez reszty przez 4. Według kalendarza gregoriańskiego latami przestępnymi są te, które dzielą się bez reszty przez 4, z wyjątkiem tych, które dzielą się bez reszty przez 100, a nie dzielą się bez reszty przez 400. a) Napisz program, który uwzględniając powyższy opis, wyświetli wszystkie daty wypadające w podanym z klawiatury dniu tygodnia w lutym wskazanego roku. Przykładowe okno dialogowo-wynikowe: podaj dz. tygodnia: wtorek podaj rok: 2000 Odp: 01.02.2000 08.02.2000 15.02.2000 22.02.2000 29.02.2000 mój kod wygląda tak : pwszy to zmienna mająca określić który dzień tygodnia jest 1-szego lutego danego roku. z przykładu wziąłem że 1 lutego 2000 roku to wtorek #include<iostream> #include<string>
using namespace std;
void main() { string dzien, pwszy, dlut; int rok, koniec = 0, w = 1, lut; string dn[ 7 ] = { "poniedzialek", "wtorek", "sroda", "czwartek", "piatek", "sobota", "niedziela" }; pwszy = dn[ 1 ]; do { cout << "Podaj dz. tygodnia:"; cin >> dzien; for( int i = 0; i < 7; i++ ) { if( dzien == dn[ i ] ) koniec = 1; } if( koniec == 0 ) cout << "Podaj prawidlowy dzien!" << endl; } while( koniec == 0 ); do { cout << "Podaj rok:"; cin >> rok; if(( rok <= 2005 ) &&( rok >= 1500 ) ) cout << ""; else cout << "Podaj rok z przedzialu <1500;2005> !" << endl; } while(( rok >= 2005 ) ||( rok <= 1500 ) ); if( rok < 2000 ) { for( int i = 2000; i >= rok; i-- ) { if( rok == 1582 ) { for( int o = 0; o < 11; o++ ) { if( w == 0 ) { w = 6; pwszy = dn[ w ]; } else { w--; pwszy = dn[ w ]; } } } else if( rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0 ) { for( int o = 0; o < 2; o++ ) { if( w == 0 ) { w = 6; pwszy = dn[ w ]; } else { w--; pwszy = dn[ w ]; } } } else if( w == 0 ) { w = 6; pwszy = dn[ w ]; } else { w--; pwszy = dn[ w ]; } } } if( rok > 2000 ) { for( int i = 2000; i <= rok; i++ ) { if( rok == 1582 ) { for( int o = 0; o < 11; o++ ) { if( w == 6 ) { w = 0; pwszy = dn[ w ]; } else { w++; pwszy = dn[ w ]; } } } else if( rok % 4 == 0 && rok % 100 != 0 || rok % 400 == 0 ) { for( int o = 0; o < 2; o++ ) { if( w == 6 ) { w = 0; pwszy = dn[ w ]; } else { w++; pwszy = dn[ w ]; } } } else if( w == 6 ) { w = 0; pwszy = dn[ w ]; } else { w++; pwszy = dn[ w ]; } } } if(( rok % 4 == 0 && rok % 100 ) || rok % 400 == 0 ) lut = 29; else lut = 28; for( int i = 1; i <= lut; i++ ) { dlut = dn[ w ]; if( dzien == dlut ) cout << i << ".02." << rok << endl; if( w == 6 ) w = 0; else w++; } system( "pause" ); } Niestety mimo licznych prób cały czas wynik jest przesunięty o kilka dni . W jednym z przypadków(niestety nie zapisałem go) co 4 lata różnica powiększała się o 1 czasami wyskakiwał błąd Unhandled exception at 0x777515de in matura1.cpp.exe: 0xC0000005: Access violation reading location 0x01165000. Jeśli mógłby ktoś pomóc w znalezieniu błędów byłbym bardzo wdzięczny :) |
|
Gabes |
» 2014-04-22 18:52:29 |
|
Adik80 |
» 2014-04-23 19:04:26 Jesli zaczynasz od roku 2000 i chcesz sprawdzic np. 1995 to powinienes odjac 1 dzien (2 w przestepnym) dla dla 'rokow' 1995-1999, a u ciebie w petli jest 2000 wlacznie. Podonbioe jesli robisz dla np. 2005 to powinienes doac 1 (2 w przetepnym) dla 2000-2004, a u ciebie w petli jest do 2005. BTW. zamaist odejmowac lepiej jest dodawac i dzielic modulo przez 7. Stringi tez niepotrzebnie w petli ustawiasz. |
|
« 1 » |