Beispiele zu neuen Funktionen in PB 4.50

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beispiele zu neuen Funktionen in PB 4.50

Beitrag von STARGÅTE »

Tachchen,

Es gibt ja nun Listen in Strukturen, also habe ich mal versuch diese FUnktion für ganze Baumstrukturen zu nutzen.

Es ist zwar nach wie vor verboten Rekursive Strukturen zu bauen:

Code: Alles auswählen

Structure Tree
  List SubTree.Tree()
EndStructure
Aber man kann ja nun eine Liste auch mit Pointern erzeugen, und mit den nötigen Hilfsmitteln kann mna ein Baum bauen:

Vorinformation über die Größe von Listen in Structuren:

Code: Alles auswählen

Structure StructureList1
  List *Child()
EndStructure

Structure StructureList2
  List Child.s()
EndStructure

Structure SubStructure
  Long.l
  Byte.b
  Quad.q
EndStructure

Structure StructureList3
  List Child.SubStructure()
EndStructure

Debug SizeOf(StructureList1)
Debug SizeOf(StructureList2)
Debug SizeOf(StructureList3)
wie man sieht hat diese immer 8 Byte, unabhängig von der Struktur der Liste (unter 64Bit Systemen vermutlich 16 Byte)
Also 2*Integer

Hier ein Beispielcode für eine mögliche Nutzung von Bäumen mittels Listen:

Code: Alles auswählen

;##################################################################################################################

Structure Tree
  Text$
  List *Child.Tree()   ; Liste der Pointer der Unterelemente 
EndStructure

Procedure CreateChild(*Tree.Tree, Text$="")
  AddElement(*Tree\Child())                     ; Hinzufügen eines neuen Elements in der Liste
  *Tree\Child() = AllocateMemory(SizeOf(Tree))  ; Reservierung des Speichers für einen komplett neuen Baum
  InitializeStructure(*Tree\Child(), Tree)      ; Initialisierung der Struktur mit Liste im neu angelegten Speicher
  *Tree\Child()\Text$ = Text$
  ProcedureReturn *Tree\Child()
EndProcedure

Procedure DebugTree(*Tree.Tree, Level=0)
  Debug Space(Level)+*Tree\Text$
  ResetList(*Tree\Child())
  While NextElement(*Tree\Child())
    DebugTree(*Tree\Child(), Level+3)
  Wend
EndProcedure

Tree.Tree
Tree\Text$ = "Root"
CreateChild(Tree, "Child 1")
CreateChild(Tree, "Child 2")
CreateChild(Tree\Child(), "SubChild 2.1")
CreateChild(Tree\Child(), "SubChild 2.2")
CreateChild(Tree\Child(), "SubChild 2.3")
CreateChild(Tree\Child()\Child(), "SubSubChild 2.3.1")
CreateChild(Tree\Child()\Child(), "SubSubChild 2.3.2")
CreateChild(Tree\Child(), "SubChild 2.4")
*Child = CreateChild(Tree, "Child 3")
CreateChild(*Child, "SubChild 3.1")
CreateChild(*Child, "SubChild 3.2")


DebugTree(Tree)
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
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von ts-soft »

erster Codeteil stürzt grundsätzlich ab, x86 und x64 auf sieben.

der zweite läuft einwandfrei :allright: , aber wie gibt man denn diesen Speicher wieder frei?

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von STARGÅTE »

hat man "normale" Listen in Strukturen ...
würde ein DeleteElement alle Unterlisten mit String usw. selber wegmachen:

Code: Alles auswählen

Structure Test
  List String.s()
EndStructure

NewList Test.Test()

For n = 1 To 1000
  AddElement(Test())
  For i = 1 To 1000
    AddElement(Test()\String())
    Test()\String() = Space(1000)
  Next
Next

ClearList(Test())
ClearList(Test()) löscht also erst die unterlisten und gibt deren Strings frei ... und dann erst sich selber.


In meinem Beispiel muss ich ja selber den Speicher erstellen um eine neue KinderListe zu erzeugen.

Beim löschen des Baums, muss man dann erst von den SubElementen die Speicher wieder freigeben.
Also sowohl ClearStructure() als auch FreeMemory()
Danach häte das Elternelement dieser Kinder eine Liste "voller ungültiger Pointer"
Dort kann man dann wieder ClearStructure() anwenden, usw.

Ein DeleteElement würde also hier nur das eigene Elemnt löschen und deren Pointerliste.
Wäre da aber auch Listen würden die da bleiben ....
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
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von milan1612 »

STARGÅTE hat geschrieben:Es ist zwar nach wie vor verboten Rekursive Strukturen zu bauen:

Code: Alles auswählen

Structure Tree
  List SubTree.Tree()
EndStructure
Fred hat grade im englischen Forum versprochen dass diese Einschraenkung aufgehoben wird :allright:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von NicTheQuick »

Und damit niemand suchen muss: List/Map in Structure - recursion error
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von STARGÅTE »

wow, das wäre natürlich super ...

Dann könnte man zum aller ersten mal echte Tree-Lists erstellen, ohne eigene Speicher zu reservierern oder umwege zu machen.

Zwar arbeitet meine aktuelle TreeList auch komplett ohne Listen, aber toll wäre es trotzdem
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
milan1612
Beiträge: 810
Registriert: 15.04.2007 17:58

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von milan1612 »

STARGÅTE hat geschrieben:Zwar arbeitet meine aktuelle TreeList auch komplett ohne Listen, aber toll wäre es trotzdem
Ich finde je weniger man manuell im Speicher rumdoktoren muss umso besser und sicherer.
Das ist auf jeden Fall ein wichtiges Feature (das wichtigste fuer mich seit langem!) :allright:
Bin nur noch sehr selten hier, bitte nur noch per PN kontaktieren
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von STARGÅTE »

Ist nicht die feine Art in einem Zitat einfach die URL zu ändern.
Könnte ein Mod das mal korrigieren!

Edit: Der betreffende Beitrag wurde bereits gelöscht.
Zuletzt geändert von STARGÅTE am 25.10.2012 17:04, insgesamt 1-mal geändert.
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
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von ts-soft »

@STARGÅTE
Hab den Beitrag mal per Bild gemeldet.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Beispiele zu neuen Funktionen in PB 4.50

Beitrag von RSBasic »

Hab zwar den zitierten Link angepasst, aber der User wird eh bald gelöscht, weil der User laut stopforumspam.com ein Bot/Spam ist.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten