Funktionen Max() & Min()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Funktionen Max() & Min()

Beitrag von 7x7 »

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.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Funktionen Max() & Min()

Beitrag von bobobo »

StandardFunktionen ?? In Bezug auf was ?
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Funktionen Max() & Min()

Beitrag von STARGÅTE »

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.
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
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Funktionen Max() & Min()

Beitrag von 7x7 »

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. <)
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Funktionen Max() & Min()

Beitrag von TomS »

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.
Benutzeravatar
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()

Beitrag von mpz »

Hi,

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
Gruß Michael
Working on :lol: - LibSGD - MP3D Engine - 8)
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Funktionen Max() & Min()

Beitrag von CSHW89 »

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.
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.

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.
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
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()

Beitrag von NicTheQuick »

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. :wink:
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Funktionen Max() & Min()

Beitrag von TomS »

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.
Könnte.
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...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Funktionen Max() & Min()

Beitrag von STARGÅTE »

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:

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
Ist natürlich zimlich "overkill" aber es funktioniert halt ^^
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
Antworten