Autor Beitrag
der organist
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: So 08.03.09 22:02 
Hi Leutz,
Fehlermeldung wie beschrieben.

ausblenden volle Höhe Delphi-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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 467
Erhaltene Danke: 17

WIN 7
NQC, Basic, Delphi 2010
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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)