QBasic und PB Structures

Für allgemeine Fragen zur Programmierung mit PureBasic.
DEU.exe
Beiträge: 5
Registriert: 08.09.2004 11:38

QBasic und PB Structures

Beitrag von DEU.exe »

Hallo zusammen,

Ich spiele hier gerade mit ein paar alten QBasic Routinen, doch fehlt mir hier etwas der Durchblick.
Bitte mal korrigieren, falls ich falsch liege:

Also:

Code: Alles auswählen

TYPE TestTyp
  a AS LONG
  b AS LONG
END TYPE
Schreibe ich in PB um in:

Code: Alles auswählen

Structure TestTyp
  a.l
  b.l
EndStructure
Soweit, sogut. Aber was wird, aufbauend auf dem ersten Beispiel, aus:

Code: Alles auswählen

TYPE ABTyp
  a AS TestTyp
  b AS TestTyp
END TYPE
und

Code: Alles auswählen

DIM SHARED bc(t%) AS TestTyp
var(a,b).z = 0
etwa

Code: Alles auswählen

shared bc(t).TestTyp
?
Wär nett, wenn mir jemand einen Tipp geben könnte.
Gruss
:mrgreen:
PB3.94 | wXP | Celeron D 3.06GHz
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Code: Alles auswählen

Structure TestTyp
  a.l
  b.l
EndStructure
Structure ABTyp
  a.TestTyp
  b.TestTyp
EndStructure
Dim bc.TestTyp(t) ;Was soll das t% denn sein?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag von Kekskiller »

Also laut dem, was ich gerade ausprobiert habe, kommt der Debugger mit:

Code: Alles auswählen

Structure Type
 a.b
 b.b
EndStructure

Structure Untertyp
 c.Type
 d.b
EndStructure
ganz gut klar, müsste ja im Prinzip auch funktionieren. Schließlich ist PB
ja nicht hinterblieben, daher müssten solche "Unterstrukturen" (ich weiß,
eigentlich falsch, ist was ganz anderes) auch unterstützt werden.

Aber leider funktioniert:

Code: Alles auswählen

Structure Type
 a.b
 b.b
EndStructure

Structure Untertyp
 c.Type
 d.Untertyp
EndStructure
nicht, da das ja unmglich rekursiv wäre <) .
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
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

Beitrag von NicTheQuick »

Klar geht das nicht. Das geht nur mit Pointern

Code: Alles auswählen

Structure Untertyp 
 c.Type 
 *d.Untertyp 
EndStructure
Das ist dann allerdings ein anderes Anwendungsverfahren. Zum Beispiel bei LinkedLists gebräuchlich.
DEU.exe
Beiträge: 5
Registriert: 08.09.2004 11:38

Beitrag von DEU.exe »

So weit mal ist mir das jetzt klar.

Nur das noch nicht ganz:

Code: Alles auswählen

a(b,c).d = 0
und was ist das? Hier steht kein IF davor

Code: Alles auswählen

a = a And b(c) = b(c - 1)
Bei

Code: Alles auswählen

DIM SHARED bc(t%) AS TestTyp 
wird am Programmanfang bc für die Prozeduren (mit CALL) verwendbar gemacht. SHARED geht bei PB nur innerhalb der Prozeduren. Allerdings können Felder ja auch von PB-Prozeduren verwendet werden, ohne shared zu sein. Oder täusche ich mich da? Also

Code: Alles auswählen

bc(t).TestTyp
Danke erstmal, werde jetzt ein paar Testläufe schreiben, dann werde ich hoffentlich sehen was da los ist.

Grüsse
PB3.94 | wXP | Celeron D 3.06GHz
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag von Kekskiller »

Les dir mal die Hilfe durch, die hilft enorm weiter.

Bei 1.)
Das ist ein mehrdimensionales Feld mit Typenangabe, ist doch logisch, oder?

Bei 2.)
Das If ist hier nicht da, da das keine Abfrage ist, sondern eine Rechnung.
AND ist ein Operator für Bitoperationen, siehe Hilfe oder allgemeines
Programmierbuch. Desweiteren würde ich sagen, das ist wie bei C, man kann
hintereinander Sachen setzen. Beispiel (Achtung, ich arbeite nicht viel mit C,
daher kann das fehlerhaft sein!):

Code: Alles auswählen

a=b=c
beudeutet, dass erst b auf c und dann a auf b gesetzt wird. Siehe in QB:
b=c
a=b
Bei 3.)
Prozeduren definierst du mit Declare., sprich:

Code: Alles auswählen

Declare Funktion(v1.b, v2.b, xyz.f)
Der Typ davon kann nicht mit Strukturen verwendet werden,
dass macht man glaube (wieß nicht mehr so recht) mit:

Code: Alles auswählen

Procedure.Typename NameDerFunktion(Parameter1, Parameter2...)
;code
EndProcedure
Näheres dazu steht in der Hilfe.

Bei Shared)
MAcht Varaiblen innerhalb einer Procedure global glaube ich).
Antworten