Autor Beitrag
Smokee
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 09.12.10 15:51 
Hallo,

ich bin Newbie in Sachen C# und soll nun ein Kalenderblatt programmieren welches nach Eingabe des Jahres und des Monats, ein Kalenderblatt für zum Beispiel März 2018 ausgibt. Ich bin auch schon ziemlich weit nur weis ich jetzt nicht weiter. Hier der Auszug aus dem Quellcode:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
short getWochentag(int uTag,int uMonat,int uJahr, int gt,int lt,int _ASSERT)
{
// ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez
int[] arrMonatsOffset = new int[] {0143614625035};

int cbJahrhundertOffset = 0;
[b]
_ASSERT(uTag >) 0;
_ASSERT(uTag <) 31;
_ASSERT(uMonat >) 0;
_ASSERT(uMonat <) 12;
_ASSERT(uJahr >) 1600;[/b]

//"_ASSERT" wurde ja oben mit int deklariert, VS gibt mir aber den Fehler aus das //es eine Variable sei und wie eine Methode verwendet wird

// Wir können erst ab 1. März 1600 rechnen.
// Monat / Tag - Plausi prüfen:
[b]if ( uTag >) 31; || (uMonat >) 12) || (uMonat == 0)
    || (uTag == 0) || (uJahr <) 1600);
return -1;

if (uJahr == 1600) (uMonat <) 2);
return -1;

// Jahrhundertoffset berechnen:
if ( (uJahr < 1700)
|| ((uJahr == 1700) (uMonat <= 2)) )
{
// 01.03.1600 - 28.02.1700
cbJahrhundertOffset = 6;
}
else if ( (uJahr < 1800)
|| ((uJahr == 1800)  (uMonat <)) 2;
{
// 01.03.1700 - 28.02.1800
cbJahrhundertOffset = 4;
}
else if ( (uJahr < 1900)
|| ((uJahr == 1900) && (uMonat <= 2)) )
{
// 01.03.1800 - 28.02.1900
cbJahrhundertOffset = 2;
}
else if ( (uJahr < 2000)
|| ((uJahr == 2000) && (uMonat <= 2)) )
{
// 01.03.1900 - 29.02.2000
cbJahrhundertOffset = 0;
}
else if ( (uJahr < 2100)
|| ((uJahr == 2100) && (uMonat <= 2)) )
{
// 01.03.2000 - 28.02.2100
cbJahrhundertOffset = 6;
}
else if ( (uJahr < 2200)
|| ((uJahr == 2200) && (uMonat <= 2)) )
{
// 01.03.2100 - 28.02.2200
cbJahrhundertOffset = 4;
}
else if ( (uJahr < 2300)
|| ((uJahr == 2300) && (uMonat <= 2)) )
{
// 01.03.2200 - 28.02.2300
cbJahrhundertOffset = 2;
}
else if ( (uJahr < 2400)
|| ((uJahr == 2400) && (uMonat <= 2)) )
{
// 01.03.2400 - 29.02.2400
cbJahrhundertOffset = 0;
}
[/b]
UINT uLocalJahr = uJahr;



So wenn noch fragen sind oder wenn ich was vergessen habe. Entschuldigt bitte werde das dann schnellst möglich nachholen.

Mfg Smokee :wink:


Zuletzt bearbeitet von Smokee am Do 09.12.10 17:33, insgesamt 2-mal bearbeitet
traceurmicha
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 160
Erhaltene Danke: 9

Win XP SP2, Win 7 Pro., Ubuntu 9, Debian 5
C#, ASP.NET, MSSQL, PHP(Microsoft Visual Studio 2010 Ultimate, SharpDevelop 4, Microsoft SQL Server2008 Express, Eclipse for PHP)
BeitragVerfasst: Do 09.12.10 16:10 
Hallo Smokee und :welcome:,

Wo liegt denn dein Problem? Wenn du uns nicht sagst wo der Schuh drückt können wir dir auch nicht helfen.
Und, ist das ne Forms, ASP oder Consolen Anwendung?

Gruß Micha

_________________
Programmieren ist ein Rennen zwischen den Softwareentwicklern, die versuchen größere und bessere idiotensichere Programme zu schreiben und dem Universum, welches versucht größere und bessere Idioten zu produzieren. Zur Zeit liegt das Universum in Führung.

Für diesen Beitrag haben gedankt: Smokee
c#surfer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 42
Erhaltene Danke: 2



BeitragVerfasst: Do 09.12.10 17:22 
user profile iconSmokee hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

ich bin Newbie in Sachen C# und soll nun ein Kalenderblatt programmieren welches nach Eingabe des Jahres und des Monats, ein Kalenderblatt für zum Beispiel März 2018 ausgibt. Ich bin auch schon ziemlich weit nur weis ich jetzt nicht weiter. Hier der Auszug aus dem Quellcode:

[cs]short getWochentag(int uTag,int uMonat,int uJahr, int gt,int lt,int _ASSERT)
{
// ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez
int[] arrMonatsOffset = new int[] {0, 1, 4, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};

int cbJahrhundertOffset = 0;

_ASSERT(uTag &gt) 0;
_ASSERT(uTag &lt) 31;
_ASSERT(uMonat &gt) 0;
_ASSERT(uMonat &lt) 12;
_ASSERT(uJahr &gt) 1600;


//"_ASSERT" wurde ja oben mit int deklariert, VS gibt mir aber den Fehler aus das //es eine Variable sei und wie eine Methode verwendet wird

VS sagt genau wie es ist. _ASSERT ist eine integer Variable aber du verwendest es wie eine Methode. Was möchtest du denn mit der Zeile
_ASSERT(uTag &gt) 0;
erreichen?
Nebenbei: Schau dir mal die DateTime Klasse an.
Smokee Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 09.12.10 17:34 
Hallo,

Es soll eine Consolen Anwendung werden.

Die Fehler hab ich in den Quellcode mit reingeschrieben.

In Zeile 14 steht dieser beschrieben. Sry das ich es nicht schon eher dazu geschrieben habe ^^.


Mfg und einen schönen abend noch Smokee :wink:

Moderiert von user profile iconKha: Komplettzitat entfernt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 09.12.10 17:57 
Zitat:
Was möchtest du denn mit der Zeile
_ASSERT(uTag &gt) 0;
erreichen?


Du solltest diese Frage beantworten. Wir haben festgestellt das das Unsinn ist genauso wie der Compiler. Aber irgendwas wirst du dir ja dabei gedacht haben .... wenn denn der Code tatsächlich so von dir stammt. Es sieht eher nach schlecht geklaut aus C++ aus.

Edit : Von hier? Dann solltest du vielleicht nochmal einen Schritt zurück machen und dir das in C# überlegen. Sonst müsstest du erst C verstehen um es dann richtig in C# übernehmen zu können.

Für diesen Beitrag haben gedankt: Kha
Smokee Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 09.12.10 18:01 
user profile iconc#surfer hat folgendes geschrieben Zum zitierten Posting springen:
VS sagt genau wie es ist. _ASSERT ist eine integer Variable aber du verwendest es wie eine Methode. Was möchtest du denn mit der Zeile
_ASSERT(uTag &gt) 0;
erreichen?
Nebenbei: Schau dir mal die DateTime Klasse an.


Hi,

DataTime darf ich nicht verwenden. Wenn dann hätte ich es schon gemacht. Aber trotzdem danke für deine Hilfe.

Mfg Smokee

Moderiert von user profile iconKha: Komplettzitat entfernt
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Do 09.12.10 21:31 
Hallo,

also ich kenne das Wort "Assert" von Unit-Tests. Dort ist es eine Klasse, die prüft, ob Zustände an einem Objekt wie erwartet entsprechen. Nehme die Asserts doch einfach mal aus dem Code raus, es wird doch nie verwendet.
Dass Du Code von einer anderen Seite nimmst ist ja nicht schlimm. Aber verstehen musst Du ihn!
Und dass Du dann hier Code postest, in dem ">" als "&gt;", "<" als "&lt;" und ein "&&" als "&amp;&amp;" drin stehen, das ist schon schlimm. Und auch peinlich für die Seite, von der Du den Code hast!

Hier mal die bereinigte Version (zum besseren Verständnis):
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
short getWochentag(int uTag, int uMonat, int uJahr, int gt, int lt, int _ASSERT)
{
  // ungült Jan Feb Mrz Apr Mai Jun Jul Aug Sep Okt Nov Dez
  int[] arrMonatsOffset = new int[] {0143614625035};

  int cbJahrhundertOffset = 0;
        
  //_ASSERT(uTag >) 0;
  //_ASSERT(uTag <) 31;
  //_ASSERT(uMonat >) 0;
  //_ASSERT(uMonat <) 12;
  //_ASSERT(uJahr >) 1600;[/b]

  // Wir können erst ab 1. März 1600 rechnen.
  // Monat / Tag - Plausi prüfen:
  if ( uTag > 31 || uMonat > 12 || uMonat == 0 || uTag == 0 || uJahr < 1600)
    return -1;

  if (uJahr == 1600 || uMonat < 2)
    return -1;

  // Jahrhundertoffset berechnen:
  if (uJahr < 1700 || uJahr == 1700 && uMonat <= 2)
  {
    // 01.03.1600 - 28.02.1700
    cbJahrhundertOffset = 6;
  }
  else if (uJahr < 1800 || uJahr == 1800 && uMonat <= 2)
  {
    // 01.03.1700 - 28.02.1800
    cbJahrhundertOffset = 4;
  }
  else if (uJahr < 1900 || uJahr == 1900 && uMonat <= 2)
  {
    // 01.03.1800 - 28.02.1900
    cbJahrhundertOffset = 2;
  }
  else if (uJahr < 2000 || uJahr == 2000 && uMonat <= 2)
  {
    // 01.03.1900 - 29.02.2000
    cbJahrhundertOffset = 0;
  }
  else if (uJahr < 2100 || uJahr == 2100 && uMonat <= 2)
  {
    // 01.03.2000 - 28.02.2100
    cbJahrhundertOffset = 6;
  }
  else if (uJahr < 2200 || uJahr == 2200 && uMonat <= 2)
  {
    // 01.03.2100 - 28.02.2200
    cbJahrhundertOffset = 4;
  }
  else if (uJahr < 2300 || uJahr == 2300 && uMonat <= 2)
  {
    // 01.03.2200 - 28.02.2300
    cbJahrhundertOffset = 2;
  }
  else if (uJahr < 2400 || uJahr == 2400 && uMonat <= 2)
  {
    // 01.03.2400 - 29.02.2400
    cbJahrhundertOffset = 0;
  }
  int uLocalJahr = uJahr;

  //...

//edit musste den Code nochmal nachbessern
Marko
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 10.12.10 08:02 
Hmm, wenn Du mal den Link ganz oben auf der Seite, von der Du den Code vermutlich hast, angeklickt hättest, dann wärst Du auf der Seite gelandet, von der der Code mal ganz ursprünglich kam. Und dort ist er erstens richtig formatiert, besser und vor allem auch viel kürzer geschrieben.
Der Link: www.a-m-i.de/tips/datetime/datetime.php

Marko