ProcedureReturn

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

ProcedureReturn

Beitrag von NicTheQuick »

Ohne viel Erklärung.

Dieser Code funktioniert:

Code: Alles auswählen

Procedure jultag_SK(y.l, m.l)
  If m > 2
    If y % 400 = 0
      ProcedureReturn 1
    ElseIf y % 4 = 0 And y % 100
      ProcedureReturn 1
    EndIf
  EndIf
  ProcedureReturn 0
EndProcedure

Procedure.l jultag_MK(m.l)
  Protected r.l
  
  Select m
    Case 1, 4, 5 : r = -1
    Case 2, 6, 7 : r = 0
    Case 3 : r = -2
    Case 8 : r = 1
    Case 9, 10 : r = 2
    Case 11 : r = 3
  EndSelect
  
  ProcedureReturn r
EndProcedure

Procedure jultag_LT(y.l, m.l, d.l)
  Protected r.l
  r = jultag_MK(m)
  ProcedureReturn d + 30 * (m - 1) + jultag_SK(y, m) + r
EndProcedure

Debug jultag_LT(1917, 10, 25)
Dieser hier nicht. Er gibt etwas falsches aus:

Code: Alles auswählen

Procedure jultag_SK(y.l, m.l)
  If m > 2
    If y % 400 = 0
      ProcedureReturn 1
    ElseIf y % 4 = 0 And y % 100
      ProcedureReturn 1
    EndIf
  EndIf
  ProcedureReturn 0
EndProcedure

Procedure.l jultag_MK(m.l)
  Protected r.l
  
  Select m
    Case 1, 4, 5 : r = -1
    Case 2, 6, 7 : r = 0
    Case 3 : r = -2
    Case 8 : r = 1
    Case 9, 10 : r = 2
    Case 11 : r = 3
  EndSelect
  
  ProcedureReturn r
EndProcedure

Procedure jultag_LT(y.l, m.l, d.l)
  ProcedureReturn d + 30 * (m - 1) + jultag_SK(y, m) + jultag_MK(m)
EndProcedure

Debug jultag_LT(1917, 10, 25)
So gehts übrigens genauso wenig:

Code: Alles auswählen

;Code von oben
Procedure jultag_LT(y.l, m.l, d.l)
  Protected r.l
  r = d + 30 * (m - 1) + jultag_SK(y, m) + jultag_MK(m)
  ProcedureReturn r
EndProcedure
Ich bitte um Bestätigung!
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Was soll der Code denn genau machen?
So ganz 100%ig habe ich es nicht verstanden oder der Code läuft noch nicht richtig.

Und was läuft bei dir nicht?
Aber mal als Hinweis, ich habe auch schon mitbekommen das "ProcedureReturn" nicht immer richtig funktioniert. Das wurde hier und im englischen Forum schon bestätigt, vielleicht hat es damit was zu tun.

[edit]
Ich kann aber bestätigen, das Procedurereturn bei dem code den du als "flasches Ergebnis" bezeichnst nicht den Wert zurückgibt, den es müßte.
Wir mit dem Bug zusammenhängen, der auch bei Newlist und einigen anderen Dingen auftritt.
Warten wir mal die Beta5 ab.
1. Win10
PB6.1
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Aha, ok!
Das wird wohl an dem ProcedureReturn liegen.

Gut, damit wäre das dann auch erledigt.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

@Nick: Ich hab mal dein Beispiel bis auf den Fehler heruntergebrochen. Es scheint an dem Case-Befehl in Verbindung mit Procedurereturn zu liegen:

Code: Alles auswählen

Procedure.l b()
  Select 10
    Case 10
  EndSelect
  ProcedureReturn 2
EndProcedure

m = 10
b = b()

Debug 2   ; = 2
Debug b   ; = 2
Debug b() ; = 2

Debug 30 * (m - 1) + 2   ; = 272
Debug 30 * (m - 1) + b   ; = 272
Debug 30 * (m - 1) + b() ; = 12 !!! solte auch 272 sein !!!
Und wenn man im Case-Befehl den Wert z.B. auf 20 ändert, dann passiert folgendes eigenartiges:

Code: Alles auswählen

Procedure.l b()
  Select 20
    Case 20
  EndSelect
  ProcedureReturn 2
EndProcedure

m = 10
b = b()

Debug 2   ; = 2
Debug b   ; = 2
Debug b() ; = 2

Debug 30 * (m - 1) + 2   ; = 272
Debug 30 * (m - 1) + b   ; = 272
Debug 30 * (m - 1) + b() ; = 22 !!! solte auch 272 sein !!!
Toshy
Beiträge: 713
Registriert: 22.03.2005 00:29
Computerausstattung: Computer und Strom vorhanden
Wohnort: LK Wolfenbüttel

Beitrag von Toshy »

Laut Fred ist der Fehler behoben.
Warten wir mal auf die nächste Beta.
Gruß
Toshy
1. Win10
PB6.1
Gesperrt