DJ's Fragen.

Anfängerfragen zum Programmieren mit PureBasic.
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

DJ's Fragen.

Beitrag von D.J.Peters »

Array (member einer structure) an procedure übergeben ?

Ich kann "normale" Arrays an Proceduren übergeben.
Verstehe aber leider nicht die Syntax wenn das Array "[]" ein Member einer Structure ist.

Ale drei Versuche die mir als erstes logisch erscheinen sind leider falsch.
Ich möchte nicht die Structure selbst (als Pointer) übergeben sondern nur das Array der Structure.

Danke für den richtigen Tip.

DJ

Code: Alles auswählen

Structure TEST
  a.f[2]
EndStructure

Procedure Test_Array(Array a.f(1))
  a(0)=1
  a(1)=2
  a(1)=3
EndProcedure

t.TEST
; Alles falsch !
Test_Array(t\a)
Test_Array(t\a[])
Test_Array(t\a())
Zuletzt geändert von D.J.Peters am 22.03.2012 14:49, insgesamt 1-mal geändert.
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Array (member einer structure) an procedure übergeben ?

Beitrag von Bisonte »

ähem... in deiner Struktur ist kein Array.

In einer Struktur wird deinem Fall das Array so angegeben.

Code: Alles auswählen

Structure test_struct
  Array a.f(1)
EndStructure
Dann hast du ein Array. Das mit den eckigen Klammer ist was anderes (mir fällt der Name grad nicht ein... ja das Alter ;) )

dann sähe das ganze so aus

Code: Alles auswählen

Structure test_struct
  Array a.f(1)
EndStructure

Procedure Test_Array(Array a.f(1))
  a(0)=1
  a(1)=2
  a(1)=3
EndProcedure

Define t.test_struct

Dim t\a(1) ; <- array dimensionieren

Test_Array(t\a())

Debug t\a(1)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: Array (member einer structure) an procedure übergeben ?

Beitrag von D.J.Peters »

Soll wohl heißen:
Eine Deklaration mit "()" ist nur ein Zeiger auf dynamisches Array welches daher noch dimensioniert werden muss.
Eine Deklaration mit "[]" ist ein reservierter Speicherbereich innerhalb der Strukture
welche "nur" als Zeiger an eine Procedure übergeben werden kann.

Das macht Sinn Danke.

DJ
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: DJ's Fragen.

Beitrag von D.J.Peters »

Noch etwas.
Wie kann man einen literalen Stringvergleich als bedingte "numerische" Kompelierung auswerten.

Danke

DJ

Code: Alles auswählen

#EXT = "png"

CompilerIf (#EXT = "png")
  UsePNGImageDecoder()
CompilerElse
  UseJPGImageDecoder()
CompilerEndIf
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
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: DJ's Fragen.

Beitrag von ts-soft »

Das geht nicht, ist IMHO auch nicht nötig:

Code: Alles auswählen

Enumeration ; Bildformate
  #img_PNG
  #img_BMP
  #img_JPG
EndEnumeration

#EXT = #img_PNG

CompilerIf #EXT = #img_PNG
  UsePNGImageDecoder()
CompilerElse
  UseJPGImageDecoder()
CompilerEndIf
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
D.J.Peters
Beiträge: 87
Registriert: 28.11.2010 13:07
Computerausstattung: P4 2x3.2GKz.1GB WIXP 32Bit NVIDEA GT240 1GB DDR3, AMD XP 1.8GHz Linux 32Bit NVIDEA GT240 TIi3200
Wohnort: Germany
Kontaktdaten:

Re: DJ's Fragen.

Beitrag von D.J.Peters »

ts-soft hat geschrieben:Das geht nicht, ist IMHO auch nicht nötig:
Ob nötig oder nicht das sei mal dahin gestellt.
#EXT = "png" wird für die Bildung von Verzeichnis- und Dateinamen benutzt.

File = #EXT + "/" + Name + "." + #EXT

Das erlaubt mir zwischen verschiedenen Formaten und vor allem Verzeichnissen zu wecheln.

#EXT = "png"
;#EXT = "jpg"

Bei der bedingten Kompelierung geht es ja letzendlich um numerische Ausdrücke
und ein literaler Stringvergleich müste ja #True oder #False ergeben.

Geht halt nicht mit PB Boardmitteln und man muss halt noch extra eine weitere numerische Konstante definieren.

Aber auch nicht so tragisch und nochmals Danke.

DJ
PS. meine vielen Fehler der Rechtschreibung auf dem Forum könnt Ihr gerne ignorieren.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Re: DJ's Fragen.

Beitrag von Josef Sniatecki »

Ich persönlich würde den fehlschlagenden Vergleich von literalen Strings innerhalb der Compilerzeit als Makel ansehen (komischer Satz), ist aber in der Tat nicht so tragisch.

Du kannst beispielsweise weiterhin die Methode von TS-soft verwenden und daraus die Extension bestimmen, ebenfalls innerhalb der Compilerzeit:

Code: Alles auswählen

Enumeration ;Bildformate
  #img_PNG
  #img_BMP
  #img_JPG
EndEnumeration

#imgFormat = #img_PNG

CompilerSelect #imgFormat
  CompilerCase #img_PNG
    #EXT = "png"
  CompilerCase #img_BMP
    #EXT = "bmp"
  CompilerCase #img_JPG
    #EXT = "jpg"
CompilerEndSelect
Numerische Konstanten und textbasierte Konstanten macht es gleich noch praktischer, falls du z.B. bevorzugst, die Namen der Formate der Lesbarkeit halber auszuschreiben, aber die daraus resultierenden Extensionen dennoch beizubehalten. Somit vergleichst du dann nur noch die Wahl deines Formates, nicht die Datei-Erweiterungen.

Gruß Josef
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Antworten