W poprzedniej części pokazałem mniej więcej jak to wszystko można zrobić oddzielnie, warunek po warunku, których chcą od nas w zadaniu. Jako że jest to zadanie maturalne wkradnie się tu trochę pisma technicznego, które dla osób nie mających dotąd okazji się spotkać z C++/Cpp może okazać się dość niezrozumiałe. W nawiasach podam jak najlepsze w miarę mam nadzieję przejrzyste wyjaśnienia.
Gdybyśmy użyli tablic, które podałem wcześniej zostałaby okaleczona wręcz informatyka, nasza reputacja no i zdrowie egzaminatora, który by zobaczył naszą pracę. Nie oznacza to, że sposób porównania za pomocą if jest zły, no bo w końcu działa:
if(podaj[0]=='p' && podaj[1]=='i' && podaj[2]=='a' && podaj[3]=='t' && podaj[4]=='e' && podaj[5]=='k') dt=4;
Problem jest wtedy, gdy ciągi C-string ( które to mieliśmy w tablicach) mógłby mieć 1000 liter, a samych wyrazów mogłoby być 1000. Wtedy byłaby to patologia delikatnie ujmując. Dlatego też w trybie przyspieszonym przeskakujemy do biblioteki String i uprościmy sobie życie.
Tak odskakując od tematu – jeżeli zamierzasz zdawać maturę z informatyki i priorytetem jest C++ to musisz to pojąć. W lekturze, z której ja korzystam do nauki C++/Cpp biblioteka String jest ujęta w podstawie.
Teraz zamiast hasła char będziemy wpisywać string. Poprawna deklaracja będzie wyglądała następująco:
string napis; napis = "tekst"; cout<< napis;
Teraz przedstawię gotowy kod do zadania. W celu usprawnienia działania dodałem pętle
do while
, aby nasz użytkownik dostał szansę otrzymania poprawy błędnie wprowadzonej daty lub dnia.
#include <iostream> #include <string> using namespace std; int miesiace[]={31,28,31,30,31,30,31,31,30,31,30,31}; void julianski(int rok, int dzien) { int odlicz=1582, miesiac=9, dM=5, dT=4; while(odlicz!=rok-1) { if(dT==0) dT=6; else dT--; if(odlicz%4==0&&miesiac==2) { if(dM==1) { dM=29; miesiac=1; } else dM--; } else { if(dM==1) { if(miesiac==0) { odlicz--; miesiac=11; } else miesiac--; dM=miesiace[miesiac]; } else dM--; } if(odlicz==rok&&miesiac==1&&dT==dzien) cout<<dM<<".02."<<rok<<endl; } } void gregorianski(int rok, int dzien) { int odlicz=1582, miesiac=9, dM=14, dT=3; while(odlicz!=rok 1) { dT=(dT 1)%7; if(odlicz%4==0&&odlicz!=1700&&odlicz!=1800&&odlicz!=1900&&miesiac==1) { if(miesiac==1) { if(dM==29) { dM=1; miesiac=2; } else dM ; } } else { if(dM==miesiace[miesiac]) { dM=1; if(miesiac==11) { odlicz ; miesiac=0; } else miesiac ; } else dM ; } if(odlicz==rok&&miesiac==1&&dT==dzien) cout<<dM<<".02."<<rok<<endl; } } int main() { int rok1, d=0; string podaj; int rok; int dt=10; cout <<"Program wyswietlajacy wszystkie daty wypadajace w podanym z klawiaturyn dniu tygodnia w lutym wskazanego roku" <<endl; poczatek: cout<<"Podaj dzien: "; cin>>podaj; if (podaj!=poniedzialek || podaj!=wtorek || podaj!=sroda || podaj!=czwartek || podaj!=piatek || podaj!=sobota || podaj!=niedziela) { do cout<<"Zle wprowadzona nazwa dnia tygodnia! Jeszcze raz"; cin>>podaj; while(podaj!=poniedzialek || podaj!=wtorek || podaj!=sroda || podaj!=czwartek || podaj!=piatek || podaj!=sobota || podaj!=niedziela); } cout<<"Podaj rok: "; cin>>rok; if(rok<=1500 || rok>=2006) { do cout<<"Zle wprowadzony rok! Wprowadz liczbe z przedzialu <1500,2006>"; cin>>rok; while (rok<=1500 || rok>=2006); } if(podaj==poniedzialek) dt=4; if(podaj==wtorek) dt=5; if(podaj==sroda) dt=6; if(podaj==czwartek) dt=0; if(podaj==piatek) dt=1; if(podaj==sobota) dt=2; if(podaj==niedziela) dt=3; return 0; }