Seite 2 von 3

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 12:39
von Mok
Kaeru Gaman hat geschrieben:@Kevin:
check deinen code noch mal, da ist mindestens ein Tippfehler drin.
Also bei mir funzt der Code

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 12:42
von Kaeru Gaman
schau genau

... laufen tut er bei mir auch ...

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 12:45
von Kevin
... ich finde denn fehler nicht
meinst du vielleicht das einrücken ?

Code: Alles auswählen

Macro Min(var, min)
  If var < min
    var = min
  EndIf
EndMacro

Macro Max(var, max)
  If var > max
    var = max
  EndIf
EndMacro


Dim Test(1)
Test(1) = -90

bla = 4021


Debug "Test(1)= " + Str(Test(1))
Debug "min= 0"
Min(Test(1), 0)
Debug "Test(1)= " + Str(Test(1))

Debug ""

Debug "bla= " + Str(bla)
Debug "max= 4000"
Max(bla, 4000)
Debug "bla= " + Str(bla)

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 12:55
von Kaeru Gaman
meinst du vielleicht das einrücken ?
also bitte, ich werde doch irgendwelche Einrück-Schwächen nicht als "Fehler" bezeichnen...
... ich finde denn fehler nicht
Tjaaaa...
dann teste doch mal die Ergebnisse
schau dir einfach an, was dein zweiter Code wirklich ausgibt.

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 13:01
von Kaeru Gaman
okay.... ich bin drauf gekommen wo das Problem liegt.

es handelt sich um ein Mißverständnis.

eine Min() oder Max() Funktion dient nicht dazu, einen Wert auf bestimmte Grenzen zu beschränken.
das ist das was dein Code tut.

sie dienen dazu, den kleinsten bzw. größten Wert einer Reihe von Werten zu ermitteln.
davon tut deine Funktion das genaue Gegenteil.

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 13:03
von Kevin
oh das habe ich wohl falsch verstanden ...

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 13:09
von Kaeru Gaman
das ist ja nicht schlimm....

für eine Min/Max Ermittlung wäre ja auch eine Funktion die einen der Werte verändert nicht so dolle gewesen.

aber für eine Min/Max Festlegung, wie du das aufgefasst hattest, ist das Macro das den Wert tatsächlich verändert genau richtig. :allright:

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 15:52
von Pelagio
Hallo,

wie vorab schon angesprochen wurde kann man mit Hilfe von LinkedList und Array eine entsprechende Funktion schreiben, wobei ich persönlich LinkedList vorziehen würde. Aber auch mit Hilfe eines Strings ist dies machbar und gerade wenn man die Zahlen zusammen in ein StringGadget eingibt, braucht man die Daten nicht zusätzlich in eine Liste oder Array kopieren.

Code: Alles auswählen

Zahlenwerte.s = "25;35;28;36"

Procedure.l Min(Value.s, Separator.s = ";")
   Protected n.l, Zahl.l = Val(StringField(Value, 1, Separator))
   
   For n=2 To CountString(Value, Separator)
      If (Zahl>Val(StringField(Value, n, Separator)))
         Zahl = Val(StringField(Value, n, Separator))
      EndIf
   Next n
   ProcedureReturn Zahl
EndProcedure

Procedure.l Max(Value.s, Separator.s = ";")
   Protected n.l, Zahl.l = Val(StringField(Value, 1, Separator))
   
   For n=2 To CountString(Value, Separator)
      If (Zahl<Val(StringField(Value, n, Separator)))
         Zahl = Val(StringField(Value, n, Separator))
      EndIf
   Next n
   ProcedureReturn Zahl
EndProcedure

Debug Min(Zahlenwerte)
Debug Max(Zahlenwerte)
Für Fließkommazahlen muss der Code natürlich entsprechend angepasst werden.

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 16:06
von Kiffi
hier eine LinkedList-Variante:

Code: Alles auswählen

NewList Values()

AddElement(Values()) : Values() = 25
AddElement(Values()) : Values() = 35
AddElement(Values()) : Values() = 28
AddElement(Values()) : Values() = 36
AddElement(Values()) : Values() = 15

SortList(Values(), #PB_Sort_Ascending)

FirstElement(Values()) : Debug Values() ; <- Min
LastElement(Values())  : Debug Values() ; <- Max
Grüße ... Kiffi

Re: Min - und Max - Funktion

Verfasst: 20.02.2010 16:12
von NicTheQuick
Die Version mit der LinkedList ist ja keine so gute Idee, was die Laufzeit angeht. Die ist hier immerhin O(n*log(n)), owbohl das auch in O(n) möglich wäre.