Funktionen Max() & Min()
Funktionen Max() & Min()
Habe seit einiger Zeit nicht mehr mit Purebasic programmiert, sondern in anderen Sprachen.
Umso größer ist jetzt meine Verwunderung, dass ich keine Funktion Min() oder Max() in PB finde. Ist es möglich, dass diese Standard-Funktionen nicht in PB enthalten sind? Gefunden habe ich jedenfalls nichts in der Befehlsreferenz.
Umso größer ist jetzt meine Verwunderung, dass ich keine Funktion Min() oder Max() in PB finde. Ist es möglich, dass diese Standard-Funktionen nicht in PB enthalten sind? Gefunden habe ich jedenfalls nichts in der Befehlsreferenz.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: Funktionen Max() & Min()
StandardFunktionen ?? In Bezug auf was ?
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Re: Funktionen Max() & Min()
Nein sind nicht anthalten.
Der Grund ist u.a. weil so jeder Programmierer seine eigene Definition wählen kann:
Max(a,b,c,d,...)
Max(Array ...)
Max(List ...)
usw.
Der Grund ist u.a. weil so jeder Programmierer seine eigene Definition wählen kann:
Max(a,b,c,d,...)
Max(Array ...)
Max(List ...)
usw.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Funktionen Max() & Min()
Danke für die Antworten. Jetzt weiss ich zumindest, dass ich es nicht übersehen habe.
Wenn es so wäre dass etwas nicht implementiert ist, damit jeder seine eigenen Procedure definiert, dann könnte man sich von Haus aus alle Funktionen schenken. Damit sich keiner eingeschränkt fühlt.
Wenn es so wäre dass etwas nicht implementiert ist, damit jeder seine eigenen Procedure definiert, dann könnte man sich von Haus aus alle Funktionen schenken. Damit sich keiner eingeschränkt fühlt.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: Funktionen Max() & Min()
Quatsch. Eine Max-Funktion, die ein Array, oder eine LL oder eine Reihe von Integern, Floats oder gar Strings erwartet kann es in PB nicht geben.
Das wäre inkonsistent. PB unterstützt nunmal kein Overloading und nur explizite Typen.
Das wäre inkonsistent. PB unterstützt nunmal kein Overloading und nur explizite Typen.
- mpz
- Beiträge: 505
- Registriert: 14.06.2005 15:53
- Computerausstattung: Win 11 Pro, 48 GB Ram, Intel I7 CPU und RX4070 Grafikkarte, PB (4/5) 6.12LT
- Wohnort: Berlin, Tempelhof
Re: Funktionen Max() & Min()
Hi,
diese Funktionen kann man wie in "c" schnell als Prozeduren realisieren. Hier mal für Integer(gerade Zahlen) und Float(Fließkommazahlen)
Gruß Michael
diese Funktionen kann man wie in "c" schnell als Prozeduren realisieren. Hier mal für Integer(gerade Zahlen) und Float(Fließkommazahlen)
Code: Alles auswählen
Procedure.i Max(a, b) ; Sucht den Maximalwert von Zwei Werten raus
If a > b
ProcedureReturn a
Else
ProcedureReturn b
EndIf
EndProcedure
Procedure.f MaxFloat(a.f, b.f) ; Sucht den Maximalwert von Zwei Werten raus
If a > b
ProcedureReturn a
Else
ProcedureReturn b
EndIf
EndProcedure
Procedure.i Min(a, b) ; Sucht den Minimalwert von Zwei Werten raus
If a < b
ProcedureReturn a
Else
ProcedureReturn b
EndIf
EndProcedure
Procedure.f MinFloat(a, b) ; Sucht den Minimalwert von Zwei Werten raus
If a < b
ProcedureReturn a
Else
ProcedureReturn b
EndIf
EndProcedure
Working on
- LibSGD - MP3D Engine - 
Re: Funktionen Max() & Min()
Hm, wäre ich vorsichtig sowas zu sagen. Selber schreiben, geht, glaub ich, wirklich nicht, aber PB könnte solche Funktionen zur Verfügung stellen. Siehe z.b. SortArray(), da kann man auch jede Art von Array übergeben. Der Typ des Arrays wird nämlich in seinem Header mitgespeichert.TomS hat geschrieben:Quatsch. Eine Max-Funktion, die ein Array, oder eine LL oder eine Reihe von Integern, Floats oder gar Strings erwartet kann es in PB nicht geben.
Das wäre inkonsistent. PB unterstützt nunmal kein Overloading und nur explizite Typen.
lg kevin
ps: da fällt mir ein, so könnte man auch den Min/Max-Wert von vielen Wert bekommen. Man sortiert einfach mit SortArray() und nimmt das erste Element.

http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
- NicTheQuick
- Ein Admin
- Beiträge: 8838
- 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: Funktionen Max() & Min()
Wenn du 'SortArray()' dazu missbrauchst eine Min-/Max-Funktion zu schreiben, dann musst du aber mit einer Laufzeit von mindestens O(log(n)*n) rechnen, während eine optimale Implementierung dazu Laufzeit O(n) haben könnte.
Max-/Min-Funktionen mit zwei Parametern lassen sich auch mit Hilfe von Makros lösen und können somit alle Typen verwenden. Lösungen dazu finden sich im Forum. Bin gerade zu faul das selbe wieder zu schreiben.
Max-/Min-Funktionen mit zwei Parametern lassen sich auch mit Hilfe von Makros lösen und können somit alle Typen verwenden. Lösungen dazu finden sich im Forum. Bin gerade zu faul das selbe wieder zu schreiben.
Re: Funktionen Max() & Min()
Könnte.CSHW89 hat geschrieben:Selber schreiben, geht, glaub ich, wirklich nicht, aber PB könnte solche Funktionen zur Verfügung stellen. Siehe z.b. SortArray(), da kann man auch jede Art von Array übergeben. Der Typ des Arrays wird nämlich in seinem Header mitgespeichert.
Sollte es aber nicht. Da es inkonsistent wäre gegenüber der üblichen PB-Syntax und der Typen-Handhabung.
SortArray ist dann schon die Ausnahme.
Man könnte auch OpenWindow(#PB_Any, 10.0, "10", '800', "400"+"200", "Titel") gelten lassen. Solche Spirenzchen sind in PHP z.B. erlaubt ("400"+"200" wahrscheinlich nicht, aber der Rest auf jeden Fall).
Man könnte sicherlich auch Overloading integrieren, so dass man beliebig viele Werte vergleichen kann, ohne ein Array zu verwenden.
Man könnte aber auch gleich C(#/++) verwenden...
Naja, solange man sich selber einfache Sachen stricken kann, fehlt PB an nichts. Nur wenn die Mittel, mit denen man es selber machen könnte zu langsam sind, sollte so eine Funktion auf jeden Fall nativ eingebunden werden. Aber ein einfaches If kann da sicherlich kein Geschwindigkeitsverlust sein. Evtl sogar eher ein Vorteil, wenn man Makros verwendet anstelle von Funktionen...
Re: Funktionen Max() & Min()
Die Sache mit SortArray ist sowie etwas anderes, da ja nicht der Array-Inhalt (Integer, String, o.a.) übergeben wird, sonden nur ein Pointer zum Array.
Das heißt, es wäre vergleichbar mit:
Ist natürlich zimlich "overkill" aber es funktioniert halt ^^
Das heißt, es wäre vergleichbar mit:
Code: Alles auswählen
Structure AllTypes
StructureUnion
l.l : f.f : s.String
EndStructureUnion
EndStructure
Procedure Max(*Pointer1.AllTypes, *Pointer2.AllTypes, Type)
Select Type
Case #PB_Float
If *Pointer1\f > *Pointer2\f : ProcedureReturn *Pointer1 : Else : ProcedureReturn *Pointer2 : EndIf
Case #PB_Long
If *Pointer1\l > *Pointer2\l : ProcedureReturn *Pointer1 : Else : ProcedureReturn *Pointer2 : EndIf
Case #PB_String
If *Pointer1\s\s > *Pointer2\s\s : ProcedureReturn *Pointer1 : Else : ProcedureReturn *Pointer2 : EndIf
EndSelect
EndProcedure
A.f = #PI
B.f = #E
*Result.AllTypes = Max(@A, @B, #PB_Float)
Debug *Result\f
C.l = 3
D.l = -5
*Result.AllTypes = Max(@C, @D, #PB_Long)
Debug *Result\l
E.String\s = "A"
F.String\s = "Z"
*Result.AllTypes = Max(@E, @F, #PB_String)
Debug *Result\s\s
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr