Autor |
Beitrag |
der organist
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: So 08.03.09 22:02
Hi Leutz,
Fehlermeldung wie beschrieben.
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:
| function TSpieler.DayNumber(ADate: string):Integer; var day,month:Integer; begin day:=StrToInt(Copy(ADate,1,2)); month:=StrToInt(Copy(ADate,4,5)); DayNumber:=Day; if month=2 then inc(DayNumber,31) else if month=3 then inc(DayNumber,28) else if month=4 then inc(DayNumber,31) else if month=5 then inc(DayNumber,30) else if month=6 then inc(DayNumber,31) else if month=7 then inc(DayNumber,30) else if month=8 then inc(DayNumber,31) else if month=9 then inc(DayNumber,31) else if month=10 then inc(DayNumber,30) else if month=11 then inc(DayNumber,31) else if month=12 then inc(DayNumber,30); end; |
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: So 08.03.09 22:21
Hallo
- deine vielen ifs: gugg Dir mal case an  , der reine Abfragen-aufbau läßt sich besser lösen.
Zitat: |
- month:=StrToInt(Copy(ADate,4,5));
|
der 3. Paramter bei copy ist count, nicht die "bis"-position, du würdest somit 5 Zeichen rauskopieren, das möchtest du sicher nicht
- du willst nicht inc(Daynumber,31) schreiben, sondern
Delphi-Quelltext 1: 2: 3:
| result := 31 bzw Daynumber := 31 |
ersteres ist besser. Daynumber ist ja deine Funktion selber, die du wieder aufrufen würdest.
Anstatt das selber zu machen: gugg mal in der Hilfe zur unit "Dateutils", dort findest du viele Routinen rund ums Datum, z.B. "DaysInAMonth" oder "DayoftheYear",
die logik in deinem Code erschließt sich mir nicht ganz. willst du die Anzahl der Tage im Monat zurückgeben, oder die Anzahl der Tage seit Jahresanfang?
du hast im Aufbau da einen Denkfehler drin
Gruß Frank
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 08.03.09 22:24
Was mir noch auffällt: Du solltest nicht den Funktionsname für den Rückgabewert verwenden, sondern Result. Sonst bekommst du beim Umbenennen der Funktion viele seltsam scheinende Fehlermeldungen. Und ich kann mir auch vorstellen, dass genau dort der Fehler liegt: die Parameter fehlen nicht bei inc, sondern bei DayNumber - Delphi denkt, du wölltest die Funktion aufrufen.
|
|
der organist 
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: So 08.03.09 22:28
(a) Vielen Dank für die schnelle Hilfe!
(b) Ihr habt mir auch gleich bei nem anderen Problem geholfen
(c) Ja, hab nur noch nich an case gedacht...
(d) doch, ich will inc(DayNumber,31); schreiben
(e) ich will die Tage seit Jahresanfang wiedergeben
(f) Logik ist folgende: erst werden die Tage addiert, die im aktuellen Monat sind
danach wird, wenn wir z.B. März haben, noch die Tage für Januar und Februar addiert, hab ich einen Denkfehler?
(g) Die Idee mit den gegebenen Funktionen ist gut
(h) und Yogu, ich glaube, du hast den Nagel auf den Kopf getroffen
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 08.03.09 22:32
Es gibt in der Unit DateUtils auch die Funktion DayOfTheYear. Ich denke einmal das ist genau was du da selbst schreiben möchtest. 
|
|
der organist 
      
Beiträge: 467
Erhaltene Danke: 17
WIN 7
NQC, Basic, Delphi 2010
|
Verfasst: So 08.03.09 22:38
Jop, danke. Damit hat sich alles wesentlich vereinfacht. Und da hat einer auch die Logik verstanden, ohne dass ich sie beschrieben hab (ich gehe mal davon aus, dass du deinen vor meinem Beitrag geschrieben hast).
_________________ »Gedanken sind mächtiger als Waffen. Wir erlauben es unseren Bürgern nicht, Waffen zu führen - warum sollten wir es ihnen erlauben, selbständig zu denken?« Josef Stalin
|
|
Keldorn
      
Beiträge: 2266
Erhaltene Danke: 4
Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
|
Verfasst: So 08.03.09 22:41
dayoftheyear steht doch schon oben
aber mal zu deinem code:
sag mal, was dein Programm machen würde, wenn Du den 20.03. übergibst 
_________________ Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
|
|
|