GIP 11

#include <iostream>
 
using namespace std;
 
void datumEinlesen(short &tag, short &monat, short &jahr);
 
short codewertMonat(short monat, short jahr);
 
bool schaltjahr(short jahr);
 
string ermittleWochentag(short ergebnis);
 
int main(void)
{
	short tag, monat, jahr;
	double ret;
 
	datumEinlesen( tag, monat, jahr );
 
	ret = jahr + (int)(jahr / 4);
 
	ret = ret + codewertMonat( monat, jahr ) + tag;
	ret = (int)ret%7;
 
	cout << "Dieser Tag war ein " << ermittleWochentag(ret) << endl << endl;
 
	return 0;
}
 
void datumEinlesen(short &tag, short &monat, short &jahr)
{
	int tage[] = { 	31, 28, 31, 30, 31, 30,
					31, 31, 30, 31, 30, 31 };
	if( schaltjahr(jahr) )
	{
		tage[1] = tage[1] + 1;
	}
 
	do
	{
		cout << "Datum eingeben:\nTag   = ? ";
		cin >> tag;
 
		cout << "Monat = ? ";
		cin >> monat;
 
		cout << "Jahr  = ? ";
		cin >> jahr;
 
		if(jahr <= 99 && jahr >= 1)
			if( monat <= 12 && monat >= 1 )
				if(tag <= tage[monat - 1] && tag >= 1)
					break;
	}
	while(true);
}
 
short codewertMonat(short monat, short jahr)
{
	// Codewert des Monats
	// Juni                0 Mai                     4
	// September, Dezember 1 August                  5
	// April, Juli         2 Februar, März, November 6
	// Januar, Oktober     3
	int cwm[] = {3,6,6,2,4,0,2,5,1,3,6,1};
 
	if( schaltjahr(jahr) )
	{
		cwm[0] = cwm[0] -1;
		cwm[1] = cwm[1] -1;
	}
 
	return cwm[monat - 1];
}
 
bool schaltjahr(short jahr)
{
	if(jahr%4 == 0 && jahr%100 != 0)
	{
		return true;
	}
	return false;
}
 
string ermittleWochentag(short ergebnis)
{
	// Donnerstag 0
	// Freitag    1
	// Samstag    2
	// Sonntag    3
	// Montag     4
	// Dienstag   5
	// Mittwoch   6
 
	string wochentag[] = {	"Donnerstag", "Freitag", "Samstag", "Sonntag",
						 	"Montag", "Dienstag", "Mittwoch" };
	return wochentag[ergebnis];
}