C# Kalenderblatt
-
Hi,
sowas in der art habe ich gesucht. ich hatte auch mal eine seite wo die berechnungen in c# erklärt waren. nur das problem ist das ich die seite nicht wieder finde. aber danke schon mal für deine hilfe, wäre nur hilfreicher wenn es direkt in c# erklärt worden wäre. aber man kann ja nicht immer alles gleich haben ^^.
Mit freundlichen Grüssen
Smokee
-
Hallo zusammen,
ich habe mich jetzt ran gesetzt und drei stunden gegoogelt und bin fündig geworden.
Teile meines Quellcodes poste ich hier, da ich noch ein "paar" Fehler drin habe die ich nicht beheben kann da ich noch totaler noobie in dem thema bin
naja ich hoffe mir kann einer bei meinen fehlern helfen.
So hier mein anfänglicher Quellcode:
static void Main(string[] args)
{
double jahr = 0.0;
double monat = 0.0;
double tag = 0.0;Console.WriteLine("K A L E N D E R");
Console.Write("Bitte geben Sie das Jahr ein: ");
jahr = Convert.ToDouble(Console.ReadLine());Console.Write("Bitte geben Sie den Monat ein: ");
monat = Convert.ToDouble(Console.ReadLine());
Console.Clear();Console.WriteLine("K A L E N D E R");
Console.ReadKey();
bool istEinSchaltjahr(const UINT uJahr);
{
// Die Regel lautet: Alles, was durch 4 teilbar ist, ist ein Schaltjahr.
// Es sei denn, das Jahr ist durch 100 teilbar, dann ist es keins.
// Aber wenn es durch 400 teilbar ist, ist es doch wieder eins.if ((uJahr % 400) == 0)
return uJahr = true;
else if ((uJahr % 100) == 0)
return uJahr= false;
else if ((uJahr % 4) == 0)
return uJahr = true;return uJahr = false;
}short getAnzahlTageImMonat(const UINT uMonat, const UINT uJahr)
{
// ungült,Jan,Feb,Mrz,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez
int arrTageImMonat[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };if (uMonat == 2)
{
// Februar: Schaltjahr unterscheiden
if (Schaltjahr(uJahr))
return uMonat = 29;
else
return uMonat = 28;
}if ((uMonat >= 1) && (uMonat <= 12))
return arrTageImMonat[uMonat];
else
{
_ASSERT(0); // ungültiger Monat !
return 0;
}
}}
}
}Ich hoffe das meine anfänglichen Bemühungen schon in die richtige Richtung gehen, wenn nicht belehrt mich eines besseren
Mit freundlichen Grüssen
Smokee
-
Warum nimmst du nicht einfach die Formel aus dem Wikipedia Artikel, damit wird das ganze praktisch zu einem Einzeiler!?
-
hmm ja ich probier es auf beiden wegen mal schauen vielleicht habe ich morgen wieder bisschen zeit das auszuprobieren.
für lösungsansätze jeglicher art bin ich immer offen ^^
schönen abend noch
Smokee
-
Ich versteh nicht ganz wo genau das Problem liegt, die Formel aus Wikipedia kannst du praktisch 1:1 in C# abtippen, selbst wenn du langsam tippst sollte das nicht mehr als 5min in Anspruch nehmen!? Wenn du wo ein Verständnisproblem hast dann stell einfach eine konkrete Frage zu diesem Problem. Deine ganzen Gedankengänge schauen soweit schon ganz ok aus, nur ist das eben genau was die simple Formel alles sowieso schon tun würde. Die genaue Herleitung inklusive detaillierter Beschreibung der dahinterstehenden Gedankengänge findet sich ebenfalls im verlinkten Wikipedia Artikel...
-
guten morgen,
ich werde mich gleich mal dran setzen und das versuchen umzusetzen. mal sehen wie lang ich brauche ^^ bin halt noch nicht so gut in programmieren das ich so was in
5 min mache aber ich versuche es mal mit der formel von wikipediamfg smokee
-
Ich habe es jetzt mit der formel von wikipedia probiert. funktioniert auch wunderbar. nur mein lehrer für den ich das machen soll als sozusagen "klausur" möchte das nicht mit der formel sondern so wie in meinem einen beitrag.
so nun zu meiner weiteren frage
bool istEinSchaltjahr(const UINT uJahr)
hier wird bei mir fehler angezeigt das die befehle "const", "UINT" und "uJahr" nicht vorhanden wären. was aber defenitiv der fall ist.
{
// Die Regel lautet: Alles, was durch 4 teilbar ist, ist ein Schaltjahr.
// Es sei denn, das Jahr ist durch 100 teilbar, dann ist es keins.
// Aber wenn es durch 400 teilbar ist, ist es doch wieder eins.if ((uJahr % 400) == 0)
return uJahr = true;
else if ((uJahr % 100) == 0)
return uJahr = false;
else if ((uJahr % 4) == 0)
return uJahr = true;return uJahr = false;
}hoffe ihr könnt mir weiterhelfen.
mfg smokee
-
const gibt es zwar in C# aber es hat eine andere Bedeutung als in C++ und selbst in C++ wäre es sinnlos dort ein const zu verwenden. UINT gibt es in C# nicht (es gibt nur uint), außer irgendwo ist explizit was definiert was so heißt.
-
Warum so umständlich, wenn es deutlich einfacher, übersichtlicher und verständlicher geht:
public static bool istEinSchaltjahr(int iJahr) { return iJahr % 4 == 0 && (iJahr % 100 != 0 || iJahr % 400 == 0); }
-
super danke.
vielleicht hast du ja noch eine idee wie man es vereinfachen kann.
mfg smokee
-
Noch einfacher? Hm ... nein. Wie wär's denn mit ausführlicher?
-
ich habe noch so einige probleme die nach und nach auftreten. ich hoffe irgendwer hat noch ne idee wie man das verkürzen oder einfacher umsetzten könnte.
[CSharp]
short getAnzahlTageImMonat(int uMonat, int uJahr)
{
// ungült,Jan,Feb,Mrz,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov ,Dez
int arrTageImMonat[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };if (uMonat == 2)
{
// Februar: Schaltjahr unterscheiden
if (istEinSchaltjahr(uJahr))
return 29;
else
return 28;
}[/CSharp]
mfg smokee
-
schmidt-webdesign.net schrieb:
Noch einfacher? Hm ... nein. Wie wär's denn mit ausführlicher?
Hi,
danke für den Link ich habe den Link mal überflogen sieht gut aus.
mfg smokee
-
[quote="Smokee"]ich habe noch so einige probleme die nach und nach auftreten. ich hoffe irgendwer hat noch ne idee wie man das verkürzen oder einfacher umsetzten könnte...[/CSharp]
Bitte sinnvoll einrücken, erleichtert es uns zu lesen.
Ich bin kein Fan von "0=Ungültig"-Arrays aber greifen wir es mal auf (wobei du dann eigentlich auch Werte größer 12 abfangen müsstest):
// Warum short zurückgeben, aber mit einem int-Array arbeiten? // (ich habe es mal auf int umgestellt) int getAnzahlTageImMonat(int monat, int jahr) { // ungült,Jan,Feb,Mrz,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez int tageImMonat[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if((monat == 2) && istEinSchaltjahr(uJahr)) return 29; return tageImMonat[monat]; }
-
Guten Morgen,
danke schön für deine Hilfe.
Habe den Quellcode jetzt noch einmal überarbeitet
short getWochentag(int uTag,int uMonat,int uJahr) { // ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez BYTE arrMonatsOffset[13] = [b]{ 0, 1, 4, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};[/b] BYTE cbJahrhundertOffset = 0; [b]_ASSERT[/b](uTag > 0); [b]_ASSERT[/b](uTag <= 31); [b]_ASSERT[/b](uMonat > 0); [b]_ASSERT[/b](uMonat <= 12); [b]_ASSERT[/b](uJahr >= 1600);
Bei den Sachen die ich Größer gemacht habe sind die Fehler. Ich hab es schon gegoogelt, aber ich finde nichts wirklich hilfreiches was ich newbie auch verstehe
Hoffe ihr könnt mir wieder einmal helfen. Hab irgendwie nen Brett vorm Kopf xDMfg Smokee
-
Was genau ist da das Problem und wo/wie hast du eigentlich BYTE und _ASSERT() definiert?
-
dot schrieb:
Was genau ist da das Problem und wo/wie hast du eigentlich BYTE und _ASSERT() definiert?
Ich habe ja gesagt Brett vorm Kopf. Manchmal sind die Fehler so simpel.
Danke
Mfg Smokee
-
Smokee schrieb:
Guten Morgen,
danke schön für deine Hilfe.
Habe den Quellcode jetzt noch einmal überarbeitet
short getWochentag(int uTag,int uMonat,int uJahr) { // ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez BYTE arrMonatsOffset[13] = [b]{ 0, 1, 4, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};[/b] BYTE cbJahrhundertOffset = 0; [b]_ASSERT[/b](uTag > 0); [b]_ASSERT[/b](uTag <= 31); [b]_ASSERT[/b](uMonat > 0); [b]_ASSERT[/b](uMonat <= 12); [b]_ASSERT[/b](uJahr >= 1600);
Bei den Sachen die ich Größer gemacht habe sind die Fehler. Ich hab es schon gegoogelt, aber ich finde nichts wirklich hilfreiches was ich newbie auch verstehe
Hoffe ihr könnt mir wieder einmal helfen. Hab irgendwie nen Brett vorm Kopf xDMfg Smokee
Also eigentlich ist das Problem das "_ASSERT" und "BYTE" nicht defeniert wurden was ich aber leider nicht raffe, weil wenn ich es defeniere bzw deklariere. dann kommt genau der selbe fehler wie wenn ich es nicht deklariere. hoffe irgendwer steigt noch hier durch
Mfg Smokee
-
Smokee schrieb:
[...] weil wenn ich es defeniere bzw deklariere. dann kommt genau der selbe fehler wie wenn ich es nicht deklariere.
Verrat uns vielleicht auch mal was genau das für ein Fehler ist
-
dot schrieb:
Smokee schrieb:
[...] weil wenn ich es defeniere bzw deklariere. dann kommt genau der selbe fehler wie wenn ich es nicht deklariere.
Verrat uns vielleicht auch mal was genau das für ein Fehler ist
short getWochentag(int uTag,int uMonat,int uJahr) { int _ASSERT; int Byte; // ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez BYTE arrMonatsOffset[13] = [b]{0, 1, 4, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5}[/b]; //Bei den Zahlen will VS anstatt den Komma, ein Semikolon. Aber wenn ich ein //Semikolon setzte dann sagt er mir trotzdem noch das er eins haben will. BYTE cbJahrhundertOffset = 0; [b]_ASSERT[/b](uTag >) 0; //Hierbei sagt er dass die Variable "_ASSERT" wie eine Methode verwendet wird _ASSERT(uTag [b]<[/b]= [i][b]31)[/b][/i]; _ASSERT(uMonat [b]>[/b] [i][b]0)[/b][/i]; _ASSERT(uMonat [b]<=[/b] [i][b]12)[/b][/i]; _ASSERT(uJahr [b]>=[/b] [i][b]1600)[/b][/i]; //Bei den Zahlen will VS anstatt den Komma, ein Semikolon. Aber wenn ich ein //Semikolon setzte dann sagt er mir trotzdem noch das er eins haben will.
Hoffe das ich es einigermaßen verständlich beschrieben habe.
Mfg Smokee