Seite 1 von 1

QBasic und PB Structures

Verfasst: 17.10.2004 13:10
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:

Verfasst: 17.10.2004 13:51
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?

Verfasst: 17.10.2004 13:57
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 <) .

Verfasst: 17.10.2004 14:23
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.

Verfasst: 17.10.2004 16:20
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

Verfasst: 17.10.2004 16:34
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).