Array in Structure, negative Felder so dauerhaft möglich

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Array in Structure, negative Felder so dauerhaft möglich

Beitrag von STARGÅTE »

Tachchen,

ich würde gerne volgende Structure nutzen:

Code: Alles auswählen

Structure CoolArray
  _Previous_Test.i[10]
  Test.i[0]
  _Next_Test.i[11]
EndStructure
Der Sinn dahinter ist folgender:

Erstelle ich eine Variable:

Code: Alles auswählen

Test.CoolArray
so kann ich mit dieser Structure auf negative Arrayfelder kommen, ohne irgendetwas zu verletzten:

Code: Alles auswählen

Debug "21 Felder (-10..0..10) : "+Str(SizeOf(CoolArray)/SizeOf(Integer))

Test.CoolArray
Test\Test[-10] = 90
Test\Test[0] = 100
Test\Test[10] = 110

For n = -10 To 10
  Debug "Feld "+Str(n)+" : "+Str(Test\Test[n])
Next

Debug "_Previous_Test[0] : "+Str(Test\_Previous_Test[0])
Debug "_Next_Test[10] : "+Str(Test\_Next_Test[10])
Die beiden "unbenutzen Arrays" in CoolArray, sogen dafür das genügent Speicher davor und dahinter reserviert werden.

Doch wird der Compiler auch in zukünftigen Versionen negative ArrayFelder erlauben?

Das ganze geht ja auch nur weil in einer Strukturdefinition [0] extra dafür sogt das das Array "unbestimmt" ist, nur habe ich das bis lang immer nur für Positive Felder genutzt.
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
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Array in Structure, negative Felder so dauerhaft möglich

Beitrag von DrShrek »

wäre so etwas nicht 'zukunftsicherer' und genauso gut?

Code: Alles auswählen

#CoolArrayStart = 10
Structure CoolArray
  Test.i[21]
EndStructure

Test.CoolArray
Test\Test[#CoolArrayStart+-10] = 90
Test\Test[#CoolArrayStart+0] = 100
Test\Test[#CoolArrayStart+10] = 110

For n = -10 To 10
  Debug "Feld "+Str(n)+" : "+Str(Test\Test[#CoolArrayStart+n])
Next
Aber ernsthaft:
Warum muss ein Array überhaupt 'negativ' sein?
Leuchtet mir fast garnicht ein.
Nur weil Du nicht folgendes programmieren willst?

For n = 0 To 20
Debug "Feld "+Str(n-10)": "+Str(Test\Test[n])
Next
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: Array in Structure, negative Felder so dauerhaft möglich

Beitrag von 7x7 »

Dr. Shrek hat geschrieben:Warum muss ein Array überhaupt 'negativ' sein?
Weil es gelegentlich einfach logischer ist? ->OptionBase

Komischerweise war Stargate derjenige, der gegen mich argumentiert hat...und nun der Sinneswandel?
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Array in Structure, negative Felder so dauerhaft möglich

Beitrag von STARGÅTE »

Komischerweise war Stargate derjenige, der gegen mich argumentiert hat...und nun der Sinneswandel?
jo sind ja 2 Monate vergangen ^^

Im ernst:

Wennm man ein Array nur einmal verwenden will (zu einem Zweg) dann ist es quatsch negative Arraywerte zu brauchen.
Da kann man wirklich eine Kostante verwenden.

Ich will das Array aber an eine procedure übergeben welche Konstanten einsetzt, diese sind meist Positiv, aber es gibt halt auch welche die sind aus Einfachheitsgründen Negativ :
Um nun ein IF oder Select zu spraen würde ich da gerne meine Struktur verwenden ... damit ich IMMER und ÜBERALL bequem
Test\Test[Field] verwenden kann, ohne eine Konstante mit zu schleppen, und ohne mir gedanken zu machen ob mein Fiel nun negativ ist oder nicht, und alle Konstanten hochzusetzten geht auch nicht, "weil wegen oben" ^^

Im gegensatz zu 7x7, hat mein problem wenigstens eine Lösung ^^ denn sie geht ja ... was für echte Array aber nicht möglich ist ...

Aber das ist dann auch vllt deine Lösung 7x7, einfach diese Structure verwenden ^^

PS außerdem hatte ich schon damals die Idee:

Code: Alles auswählen

Dim MeinArray(-10 To 10 Step 5) ; Erzeugt dann ein Array mit 5 Feldern (-10,-5,0,5,10)
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