Mit Variablen arbeiten: Problem

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Mit Variablen arbeiten: Problem

Beitrag von PB42 »

Hallo,

folgendes Mini-Programm erzeugt bei jedem Mausklick im Debugger die fortlaufende Ausgabe: a1, a2, a3... usw. Und nun will ich damit auch arbeiten können, indem a1, a2, a3 usw. jeweils der Zahlenwert 1 zugeordnet wird. Mit anderen Worten muß später im Programm z.B. die Abfrage möglich sein

If a1 = 1
...
endif

Der Code:

Code: Alles auswählen

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu,"")

Repeat

  If eventID = #WM_LBUTTONDOWN 
     
  Zahl = Zahl + 1  
  
  Test$ = "a" + Str(Zahl)  
      
  Debug Test$  
        
  EndIf  


eventID = WaitWindowEvent()
Until eventID = #PB_EventCloseWindow
Wie geht das? Danke.

PB42
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mit Variablen arbeiten: Problem

Beitrag von Kiffi »

> Mit anderen Worten muß später im Programm z.B. die Abfrage möglich
> sein

> If a1 = 1

das ist so, wie Du das vorhast, nicht möglich.

Arbeite lieber mit Arrays. Dann geht sowas:

Code: Alles auswählen

Dim a(100)

a(0)=1
a(1)=2

[...]

If a(0)=1
Grüße ... Kiffi
a²+b²=mc²
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Hallo Kiffi,

schön, daß Du auf Arrays kommst, denn ich dachte mir schon, daß ich da jetzt nicht mehr dran vorbeikomme. Problem: Noch nie gerafft, noch nie geschaff! Daher folgender Versuch

Code: Alles auswählen

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu,"")

Repeat

Dim a.l(43)

  If eventID = #WM_LBUTTONDOWN 
     
  a.l = a.l + 1    
  
  Debug a.l(4)
        
  EndIf  

eventID = WaitWindowEvent()
Until eventID = #PB_EventCloseWindow
Wert 4 läßt sich nicht auslesen, dafür läuft der Debugger bei jedem Klick. Wie geht's richtig?

PB42[/code]
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Code: Alles auswählen

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu,"")

Repeat
  
  Dim a.l(43)
  
  If EventID = #WM_LBUTTONDOWN
    b=b+1
    a.l(b) = b
    If b=4
    Debug a.l(4)
  EndIf 
  EndIf 
  
  EventID = WaitWindowEvent()
Until EventID = #PB_EventCloseWindow
Musste mal schauen habs nur überflogen vieleicht ist es das was du willst.
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

So wie Du die Aufgabe beschrieben hast würde es eigentlich mit einer Variablen gehen.

Code: Alles auswählen

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu,"")

Anzahl = 1

Repeat

  If eventID = #WM_LBUTTONDOWN
    Test$ = "a" + Str(Anzahl) 
    Debug Test$ 
    For i = 1 To 10
      If Anzahl >= i
        Test$ = "a" + Str(i) + " = 1"
      Else
        Test$ = "a" + Str(i) + " = 0"
      EndIf
      Debug Test$ 
    Next
    Anzahl = Anzahl + 1 
  EndIf 

eventID = WaitWindowEvent()
Until eventID = #PB_EventCloseWindow
Wenn aber z.B. unterschiedliche Werte festgehalten werden sollen gibt es zwei andere Wege.

Bei einer vorher begrenzten Anzahl von Werten :

Code: Alles auswählen

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu,"")

#MaximaleAnzahl = 10
Anzahl = 0
Dim MyArray.l(#MaximaleAnzahl)

Debug "Programm-Fenster vor dem Debug-Fenster schließen !"
Repeat

  If eventID = #WM_LBUTTONDOWN
    If Anzahl < #MaximaleAnzahl 
      MyArray(Anzahl) = 1
      Test$ = "a" + Str(Anzahl) 
      Debug Test$ 
      Anzahl = Anzahl + 1 
    EndIf 
  EndIf 

eventID = WaitWindowEvent()
Until eventID = #PB_EventCloseWindow


For i = 0 To #MaximaleAnzahl-1
  Test$ = "a" + Str(i) + " = " + Str(MyArray(i)) 
  Debug Test$ 
Next


Bei einer vorher nicht begrenzbaren Anzahl von Werten :

Code: Alles auswählen

OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu,"")


NewList MyList.l()
Anzahl = 0

Debug "Programm-Fenster vor dem Debug-Fenster schließen !"
Repeat

  If eventID = #WM_LBUTTONDOWN
    If AddElement(MyList()) <> 0 
      MyList() = 1
      Anzahl = Anzahl + 1 
      Test$ = "a" + Str(Anzahl) 
      Debug Test$ 
    Else 
      MessageRequester("Fehler!", "Kein Speicherplatz zum Reservieren des neuen Elements", #PB_MessageRequester_Ok)
    EndIf 
  EndIf 

eventID = WaitWindowEvent()
Until eventID = #PB_EventCloseWindow

FirstElement(MyList()) 
For i = 1 To CountList(MyList()) 
  Test$ = "a" + Str(i) + " = " + Str(MyList()) 
  Debug Test$ 
  NextElement(MyList()) 
Next
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Wie geht's richtig?

1. Array ausserhalb der Repeat-Until-Schleife dimensionieren
2. Array-Element richtig zuordnen.

Code: Alles auswählen

Dim a.l(43)
  
OpenWindow(0,0,0,800,600,#PB_Window_SystemMenu,"")

Repeat
  
  eventID = WaitWindowEvent()
  
  If eventID = #WM_LBUTTONDOWN
    
    Zahl + 1
    
    a(Zahl)=Zahl
    
    Debug a(Zahl)
    
  EndIf 
  
Until eventID = #PB_Event_CloseWindow
Grüße ... Kiffi
a²+b²=mc²
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Hallo,

jetzt weiß ich, wie man Arrays ausliest: Vielen Dank an alle, die mir geantwortet haben, das hilft mir erstmal weiter.

Gruß PB42
Antworten