Also bei mir funzt der CodeKaeru Gaman hat geschrieben:@Kevin:
check deinen code noch mal, da ist mindestens ein Tippfehler drin.
Min - und Max - Funktion
- Mok
- BotHunter
- Beiträge: 1484
- Registriert: 26.12.2005 14:14
- Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit - Wohnort:
Re: Min - und Max - Funktion
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Min - und Max - Funktion
schau genau
... laufen tut er bei mir auch ...
... laufen tut er bei mir auch ...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Min - und Max - Funktion
... ich finde denn fehler nicht
meinst du vielleicht das einrücken ?
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)
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Min - und Max - Funktion
also bitte, ich werde doch irgendwelche Einrück-Schwächen nicht als "Fehler" bezeichnen...meinst du vielleicht das einrücken ?
Tjaaaa...... ich finde denn fehler nicht
dann teste doch mal die Ergebnisse
schau dir einfach an, was dein zweiter Code wirklich ausgibt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Min - und Max - Funktion
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Re: Min - und Max - Funktion
oh das habe ich wohl falsch verstanden ...
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Re: Min - und Max - Funktion
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.
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.

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- Pelagio
- Beiträge: 424
- Registriert: 11.11.2004 17:52
- Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem - Wohnort: Bremen
Re: Min - und Max - Funktion
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. Für Fließkommazahlen muss der Code natürlich entsprechend angepasst werden.
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)
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS].
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS].

Re: Min - und Max - Funktion
hier eine LinkedList-Variante:
Grüße ... Kiffi
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
a²+b²=mc²
- 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
Re: Min - und Max - Funktion
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.