# Kalender Programm, Nach Wochentag



## _SH_ (16. Februar 2004)

Hallo

Ich möchte/soll ein Programm in C++ schreiben.
Man soll ein Datum eingeben können (Jahr, Monat, Tag), aus dem das Programm dann umrechnet, welcher Tag in der Woche das ist. Also z.B. der 16.2.2004 wird dann als Montag identifiziert.
Ausgegeben werden soll das ganze in so einer typischen Tabelle eines Kalenders/Organizers.
z.B. in diesem Fall dann:
___________________
Mo  Di  Mi  Do  Fr  Sa  So
--------------------------------1
--2---3---4----5--6---7----8
--9--10-11--12-13-14--15
16 -17 ..
___________________

Bin in C++ absoluter Neuling und weiß gar nicht, wo ich da anfangen soll. Irgendwie hat uns unserer Lehrer nichts stichfestes für diese Aufgabe beigebracht. Ich hoffe mir kann jemand von euch helfen.
Ich habe mir sagen lassen, das die Berechnung ein Algorithmus sein soll, nur woher nehmen?

Schonmal danke im Vorraus.

MfG
Stephan


----------



## Terrance & Philipp (16. Februar 2004)

Also du könntest auch den einfachsten aller Wege nehmen, ein Kalender Control nehmen und dem das Datum übergeben.  

Stellt sich nur noch die Frage ob der Prof das billigt.


----------



## Kachelator (16. Februar 2004)

> Also du könntest auch den einfachsten aller Wege nehmen, ein Kalender Control nehmen und dem das Datum übergeben.


  Naja, das ist wohl nicht so hilfreich. 




> Ich habe mir sagen lassen, das die Berechnung ein Algorithmus sein soll, nur woher nehmen?


  Ja, ein Algorithmus wird es auf jeden Fall sein. Algorithmus ist nur ein allgemeiner Ausdruck für 'Vorgehensweise' bei Programmen. Ähnlich wäre der Begriff 'Rezept' für das Kochen.

Einen Algorithmus für die Umrechnung habe ich leider nicht; ebenso Beispielcode, deshalb lasse ich den Punkt offen. Vielleicht kann den jemand anderes beantworten. Hast du Verständnisprobleme bei C++, bei denen wir dir helfen können?


----------



## Daniel Toplak (16. Februar 2004)

Datumsberechnungen habens in der Programmierung teilweise insich.
Aber um das zu realisieren, was du möchtest, benötigst du bestimmte Datumsformate z.B. das julianische Datum, damit du den Wochentag errechnen kannst usw.
Eine sehr gute Seite ist das hier: Kalender 

Gruß Homer


----------



## MorningStar (16. Februar 2004)

Hier ist der Anfang. Den Rest darfst du selbst erledigen. 
Schliesslich ist das deine Aufgabe 


```
#include <iostream>
#include <time.h>

using namespace std;

typedef struct _date
{
	int day;
	int month;
	int year;

} date;

int main()
{	
	const char* szWeekday[] = { "Sonntag", "Monntag" , "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"  };

	date   then;
	struct tm timeinfo;	
	time_t time_then;

	then.day   = 17;
	then.month = 02;
	then.year  = 2004;

	timeinfo.tm_year = then.year  - 1900;
  	timeinfo.tm_mon  = then.month - 1;
  	timeinfo.tm_mday = then.day;
	timeinfo.tm_hour = 0;
	timeinfo.tm_min  = 0;
	timeinfo.tm_sec  = 0;

	time_then = mktime( &timeinfo );
	cout <<  then.day << "." << then.month << "." << then.year \
		 << " ist " << szWeekday[ timeinfo.tm_wday ]  << endl;

	return 0;	
}
```


----------



## _SH_ (17. Februar 2004)

Erstmal danke =)

Verständnissprobleme habe ich bei C++ bis jetzt denke ich noch nicht. Schleifen und Ausgaben auch mit Formatierung (iomanip.h) bekomme ich schon hin.
Ging mir nur darum den ersten Tag im Monat auszurechnen.
Deswegen auch meine Frage..

@MorningStar
Danke für das Beispiel, aber so richtig weiß ich damit noch nichts anzufangen.. es berechnet mir den "Namen" des Tages, von dem Datum das ich eingebe.. aber ich brauche ja den 1. Tag.. ?!  

EDIT: und könntest du mir vielleicht eine groe Erklärung für die Funktionen in deinem Script geben? Habe sowas noch nie gesehen


----------



## _SH_ (17. Februar 2004)

Noch ein Problem.. 2004 ist ein Schaltjahr.
Das Programm zeigt an, das der 29.2.04 ein Samstag wäre, es ist aber ein Sonntag

EDIT: Der 16.11.2004 ist auch kein Montag sondern ein Dienstag


----------



## _SH_ (17. Februar 2004)

Ich kann glücklich sein, ich habs hinbekommen! Ich hatte einen Algorithmus gefunden, der den Samstag als Tag "0" vorraussetzt. Nach der Umwandlung um Montag als Tag "0" funktioniert es.
Ich muss nur noch die Tageszahlzuordnung im Februar auf Schaltjahre und diese 400 Jahre - Ausnahme ändern.


> /**/


----------



## MorningStar (17. Februar 2004)

_@MorningStar
Danke für das Beispiel, aber so richtig weiß ich damit noch nichts anzufangen..
es berechnet mir den "Namen" des Tages, von dem Datum das ich eingebe.. aber ich brauche ja den 1. Tag.. ?!_

*Bitte. Von dem ersten Tag im Monat war in deiner ursprünglichen Anfrage keine Rede also brauchst du mein Beispiel hier nicht schlechter zu machen als es ist denn es tut genau das wonach du gefragt hast:*

_Man soll ein Datum eingeben können (Jahr, Monat, Tag), aus dem das Programm dann umrechnet, welcher Tag in der Woche das ist. Also z.B. der 16.2.2004 wird dann als Montag identifiziert._ 

*Wie wäre es damit dem Programm den ersten Tag zu übergeben zBsp.:
01.02.2004 ?!*

_Noch ein Problem.. 2004 ist ein Schaltjahr.
Das Programm zeigt an, das der 29.2.04 ein Samstag wäre, es ist aber ein Sonntag
EDIT: Der 16.11.2004 ist auch kein Montag sondern ein Dienstag_

*Guck dir mein Code oben noch mal genauer an. Jetzt sollte es funktionieren. Vorausgesetzt deine Lokalzeit auf dem Rechner ist auf die richtige Timezone eingestellt.

Und wie ich schon sagte. Manchmal muss man auch in der Lage sein selbst nachzudenken. Machs gut.*


----------

