Cześć wszystkim!
Od wczoraj walczę z zadaniem. Na pewno rozwiązanie jest mega proste, ale jednak póki co nie udało mi się tego rozgryźć.
Treść zadania jest następująca:
"Napisać program wczytujący z klawiatury dwie daty (zapisane za pomocą trzech liczb całkowitych, oznaczającychj dzień, miesiąc i rok) i sprawdzający, czy te daty są prawidłowe (uwzględniając przy tym przestępność lat) oraz czy pierwsza data jest wcześniejsza od drugiej."
Więc może słowem wstępu - zadanie poprzedzające to zadanie, które polegało na sprawdzeniu, czy rok jest przestępny, czy też nie. Zamieszczę swoje rozwiązanie (nie wiem czy jest ok, bo nie mam odpowiedzi, w necie nie znalazłem żadnego, które wyglądałoby jak moje, ale wydaje mi się, że działa poprawnie). Treść tego zadanie dokładnie jest taka:
"Napisać program sprawdzający, czy podany przez użytkownika rok jest rokiem przestępnym. Rok przestępny (liczbowo) spełnia następujące warunki: jest podzielny przez 4 i niepodzielny przez 100, chyba, że jest podzielny przez 400. "
Moje rozwiązanie:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int rok;
cout << "Sprawdzamy przestepnosc liczbowa roku.\nPodaj rok: ";
cin >> rok;
if (rok %4 == 0)
if(rok %100 != 0)
cout << "Rok przestepny - podzielny przez 4 i niepodzielny przez 100";
else if (rok %400 == 0)
cout << "Rok przestepny, bo podzielny przez 400";
else
cout << "Rok nie jest przestepny, bo niepodzielny przez 400";
else
cout << "Rok nieprzestepny, bo niepodzielny przez 4";
return 0;
}
Odnośnie problemu, to o ile napisałem program, który pobiera od użytkownika trzy liczby dwukrotnie i umie powiedzieć, kiedy która z nich jest <,=,> od drugiej, o tyle mam poważny problem z ograniczeniem na daty. U mnie może być 31.02.0012 r., także absolutnie bez sensu.. Myślałem o instrukcji switch() i w case'ach rozróżniać miesiące, ale na moje (uczące się dopiero) oko powtarzałbym pewniem kod w case'ach wielokrotnie, a chyba tego w programowaniu się unika - powtarzanie tego, czego nie trzeba.
Czy ktoś z Was ma jakiś pomysł? Będę wdzięczny za każdą wskazówkę, sugerację, cokolwiek.
Mój kod:
#include<iostream>
using namespace std;
int main()
{
int d1, d2, m1, m2, r1, r2;
cout << "Podaj dwie daty w kolejnosci dzien, miesiac, rok.\ndata1: ";
cin >> d1 >> m1 >> r1;
cout <<"data 2: ";
cin >> d2 >> m2 >> r2;
if ( r1>0 & r2>0 & m1>=1 & m1 <=12 & m2>=1 &m2<=12 & d1>=1 & d1<=31 & d2>=1 & d2<=31)
if (r1 < r2)
cout << "data 1 jest wczesniejsza od daty 2";
else if (r1 == r2)
if(m1 < m2)
cout << "data 1 jest wczesniejsza od daty 2";
else if (m1 == m2)
if(d1 < d2)
cout << "data 1 jest wczesniejsza od daty 2";
else if (d1 == d2)
cout << "daty sa rowne";
else
cout << "data 2 wczesniejsza od daty 1";
else
cout << "data 2 wczesniejsza od daty 1";
else
cout << "data 2 wczsniejsza od daty 1";
else
cout << "Dzien, miesiac, rok nie mieszcza w racjonalnym przedziale - sa bez sensu";
return 0;
}