Kalendarz ver. 2
Kod był wyświetlany 3422 razy.
    /*
Name: Kalendarz - zadanie maturalne
Copyright: GPL GNU
Author: Przemysław Pastuszka
Date: 29-11-2007 16:02:38
Description:
Według kalendarza juliańskiego wprowadzonego przez Juliusza Cezara od roku 45 p.n.e., każdy rok nieprzestępny trwał 
365 dni, a rok przestępny przypadający dokładnie co 4 lata trwał 366 dni.Ustalenia te spowodowały, że na każde 
128 lat pojawiała się różnica jednego dnia pomiędzy tym kalendarzem, a kalendarzem astronomicznym. 
Aby zlikwidować narastający błąd, w roku 1582 zastąpiono kalendarz juliański kalendarzem gregoriańskim. 
Nowy kalendarz obowiązuje od 4 października 1582 roku, kiedy po czwartku 4 października 1582 nastąpił piątek 
15 października 1582 r. 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.
Rok powinien być liczbą naturalną z przedziału <1500, 2005>.
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
Dane wejściowe:
• dzień tygodnia „podany z klawiatury” jako tekst (pisany bez polskich liter i spacji);
• rok „podany z klawiatury”.
Program powinien wyświetlić komunikat o błędnie wprowadzonym dniu tygodnia oraz błędnie wprowadzonym roku.
Układ wyświetlonych wyników powinien być zgodny z układem przedstawionym w przykładowym oknie dialogowo-wynikowym. Daty powinny zostać wyświetlone w formacie dd.mm.rrrr. W kodzie programu powinny znaleźć się komentarze umożliwiające analizę użytego algorytmu.
*/

#include <iostream>
#include <conio.h>
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()
{
	char podaj[20];
	cout<<"Podaj dzien: ";
	cin>>podaj;
	int rok;
	cout<<"Podaj rok: ";
	cin>>rok;
	int dzien;
	if(podaj[0]=='p'&&podaj[1]=='o')
		dzien=0;
	if(podaj[0]=='w'&&podaj[1]=='t')
		dzien=1;
	if(podaj[0]=='s'&&podaj[1]=='r')
		dzien=2;
	if(podaj[0]=='c'&&podaj[1]=='z')
		dzien=3;
	if(podaj[0]=='p'&&podaj[1]=='i')
		dzien=4;
	if(podaj[0]=='s'&&podaj[1]=='o')
		dzien=5;
	if(podaj[0]=='n'&&podaj[1]=='i')
		dzien=6;
	if(rok<=1582)
		julianski(rok, dzien);
	if(rok>=1582)
		gregorianski(rok, dzien);
	getch();
	return 0;
}
    
Pobierz plik tekstowy
Załączniki
Administrator WJL
PHP&SQL coded by NOVA-IT