Seite 3 von 3

Verfasst: 23.08.2005 20:15
von PAMKKKKK
@Kiffi
ich stimme mit dir überein!

@jear
Das du in deinem altern noch nicht gelernt hast, über Flüchtigkeitsfehler hinwegzusehen [kopfschüttel....]
Ihr treibt mich noch so weit, dass ich mich gar nicht mehr traue zu Posten!
Zum Rechtschreibthread geht’s hier lang:
http://forums.purebasic.com/german/view ... highlight=
Ich dachte hier geht’s um die Sache nicht um die Form…….

@Tafkadasom2k5
Gib mal in der Purebasic-Hilfe „Strukturen“ ein da ist das sehr gut erklärt.
Mit Hilfe eines Arrays können Daten eines einheitlichen Datentyps geordnet so im Speicher abgelegt werden, dass ein Zugriff auf die Daten über einen Index möglich wird.

Code: Alles auswählen

; Array mit 4 Speichestellen Dimensionieren (speicher reservieren)
Dim MyArray.l(4)

; zuweisen von inhalten:
MyArray(0) = 1234
MyArray(1) = 2345
MyArray(2) = 3456
MyArray(3) = 45567

; auslesen von den Inhalten des Arrays

For i = 0 To 3
  Debug "Array" + Str(i) + " = " + Str(MyArray(i)) 
Next
Es gibt auch mehrdimensionale Arrays. Ein zweidimensionales Array kann man sich wie eine Tabelle vorstellen, oder wie Schiffe versenken ;)

Code: Alles auswählen

  ; Dieses Array ist 2 dimensional wie eine Tabelle
  ; man kann sagen das die erste Zahl die Spalte (10) und die zweit Zahl die Zeilen (20) darstellt
  ; wie beim Schiffe versenken ;-)
  
  ; Array festlegen (speicher reservieren)
  Dim MultiArray.b(10,20)
  
  
  MultiArray(8,15) = 111 ; "Spalte 8" "Zelle 15" mit Inhalt füllen
  MultiArray(10,20) = 28 ; "Spalte 10" "Zelle 20" mit Inhalt füllen
  
; auslesen
  Debug MultiArray(8,15) 
  Debug MultiArray(10,20)
Wenn was nicht klar ist, Fragen!

Verfasst: 23.08.2005 21:58
von PMV
[offtopic]
sorry, die frage beschäftigt mich jetzt? -.-
Ihr redet hier so "abrtrünnig" von Globalen Variablen. Ich hab sie zumindest wie es für mich rüberkommt noch nie als so schlimm entfunden. Also lieber eine Procedure mit "Static"-Variable als eine Globale Variable (+Structure) z.b. bei Userlibs? Auch wenns auf Optimierung ankommt, oder ist das egal oder wie is das verhältnis? -.-
[/offtopic]

MFG PMV

Verfasst: 23.08.2005 22:04
von Batze
Ich würde sagen Static ist besser, da dann Mehrfachnuntzngen nicht so leicht vorkommen.

Verfasst: 23.08.2005 22:14
von MVXA
ich behaupte, dass protected sogar noch besser ist. Wenn ich es
richtig verstanden habe, dann kann eine mit protected deklarierte
Variable neben einer globalen Variable existieren.

Verfasst: 23.08.2005 22:19
von Batze
Protected ermöglicht den Zugriff auf eine Variable nur innerhalb einer Procedure, auch wenn die gleiche Variable im Hauptprogramm bereits als Global deklariert wurde. Protected in seiner Funktion ist aus anderen BASIC-Dialekten oftmals als 'Local' bekannt.

Der Wert der lokalen Variablen wird bei jedem Prozedur-Aufruf neu initialisiert (zurückgesetzt). Um dies zu vermeiden, können Sie alternativ das Schlüsselwort Static verwenden, um globale von lokalen Variablen zu trennen, während diese ihren Wert behalten.
Beispiel:

Code: Alles auswählen

  Global a
  a = 10
  
  Procedure Change()
    Protected a
    a = 20 
  EndProcedure 
  
  Change()
  MessageRequester("Information", Str(a)) ; Wird 10 ausgeben, da die Variable innerhalb der Prozedur gesichert ('protected') war.

Static ermöglicht Ihnen, in einer Procedure eine lokale (statische) Variable, die ihren Wert behält, zu deklarieren, auch wenn die gleiche Variable im Hauptprogramm bereits als Global deklariert wurde.

Der Wert der Variable wird nicht bei jedem Prozedur-Aufruf neu initialisiert, dies bedeutet, dass Sie lokale Variablen parallel zu globalen Variablen (mit dem gleichen Namen) verwenden können, und beide beihalten ihre Werte.

Neben Static können Sie auch das Schlüsselwort Protected verwenden, um globale von lokalen Variablen zu trennen, mit Protected behalten die lokalen Variablen jedoch nicht ihren Wert.
Beispiel:

Code: Alles auswählen

  Global a
  a = 10
  
  Procedure Change()
    Static a
    a+1
    PrintN("In der Prozedur: "+Str(a)) ; Wird 1, 2, 3 ausgeben, da sich die Variable bei jedem Prozedur-Aufruf um eins erhöht.
  EndProcedure 
  
  If OpenConsole()
    Change()
    Change()
    Change()
    PrintN(Str(a)) ; Wird 10 ausgeben, da die statische Variable nicht die globale beeinflusst.
    Input()
    CloseConsole()
  EndIf
Alle Klarheiten beseitigt?
Stammt aus der Hilfe von PB :allright:

Verfasst: 24.08.2005 08:19
von PAMKKKKK
jear hat geschrieben:Ansonsten sollte man noch bemerken, dass Linked Lists, Pointer, Konstanten, Arrays usw. grundsätzlich global sind.
Schlimm genug! :cry:
Es gibt nicht umsonst, viele versuche LinkedList per Pointer zu übergeben.

Verfasst: 24.08.2005 09:01
von helpy
jear hat geschrieben:Ansonsten sollte man noch bemerken, dass Linked Lists, Pointer, Konstanten, Arrays usw. grundsätzlich global sind.
Dass Pointer global sind, ist mir neu.

=> Wo ist denn das dokumentiert? In der Hilfe habe ich das nicht gefunden!

Dass ein Pointer eine Adresse auf globale Linked Lists oder Arrays enthalten kann, das ist mir klar! Aber dass Pointer selbst global sind .... :?: :?: :?:

cu, helpy

Verfasst: 24.08.2005 09:08
von Batze
Pointer sind nicht global!

Code: Alles auswählen

Procedure RR()
 procedurereturn *Pointer
Endprocedure

*Pointer = 102124
debug *Pointer
debug RR()
debug *Pointer

Verfasst: 24.08.2005 09:28
von Tafkadasom2k5
Hey Pamkkkkk!
Danke für dein kleines Tutorial für mich-habs ganz schnell gecheckt...also: :allright: :allright: :allright: für das kleine Tut!

Mach weiter so :allright:

Hab echt viel gelernt in diesem Thread-wird also Zeit das ichn neuen eröffne ^^ hab da nämlich schon n neues Projekt im Auge ;) :allright:

Aber Danke ersmal für alles-ihr seid Klasse-auch eure überflüssigen Kommentare waren sehr Lehrreich... :lol: :lol:

Gr33tz
Der Marc

Verfasst: 01.10.2005 17:26
von Kaeru Gaman
jear hat geschrieben:Ob die Nutzung globaler Variablen schlecht oder gut ist, das entscheidet jeder Programmierer selbst. Hält er keine Ordnung, dann kann das Ganze schief gehen. Dann geht es aber auch schief, wenn er keine Globalen benutzt.
das ist auch meine meinung.