Variabeln in einer Prozedur verwenden von einer anderen Pro.

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Variabeln in einer Prozedur verwenden von einer anderen Pro.

Beitrag von duli »

Hallo nun mein nächster Schritt mit dem kleinen "Ein mal Eins Rechner", dass ich mit meinem Sohn schreibe.
Es geht dabei darum nach 10 Rechnungen eine Rückmeldung zu erhalten wie gut man war.
Dabei sollte ausgegeben werden wieviele Richtige man hatte und wie lange man brauchte.

Nun ich habe einen Weg gefunden einen Zähler zu installieren der mich zu der Prozetur Auwertung() führt und dort wird ein Meldungsfenster aufgerufen. Aber wie ich das Resultat von der Prozetur Zeit_Updaten den Wert erhalte weis ich nicht.

Danke für euer mitdenken.

hier der Code

Code: Alles auswählen

; Mit Eneumeritation wird den Konstanten eine Fortlaufende Nummer vergeben anstelle dies von Hand zu machen.

Enumeration ; hier kommen alle Windows rein
  #MainWindow
EndEnumeration
 
Enumeration ; hier kommen alle Menüitems rein
  #neu
EndEnumeration

Enumeration ; hier kommen alle Gadgets rein
  #StringZahl1
  #StringZahl2
  #StringZahl3
  #StringErgebnis
  #RichtigOderFalschText
  #AnzahlRichtigeText
  #AnzahlRichtigeWert
  #AnzahlFalscherText
  #AnzahlFalscherWert
  #AktuelleDauer
EndEnumeration




Anzahl_Rechnungen =0
Anzahl_Richtig = 0
Anzahl_Falsche = 0
t_start = ElapsedMilliseconds()

Procedure Zeit_Updaten(Dummy)
   Shared t_start
   Repeat
      laufzeit_jetzt = ElapsedMilliseconds() - t_start
      SetGadgetText(#AktuelleDauer, "Laufzeit:" + Str(laufzeit_jetzt/1000) + "s")
      Delay(1000)
   ForEver
EndProcedure

Procedure FillGadget()
  SetGadgetText(#StringZahl1,Str(Random(8)+2))
  SetGadgetText(#StringZahl2,Str(Random(8)+2))
  SetGadgetText(#StringZahl3,"")
EndProcedure


Procedure rechne()
 
  val1.s = GetGadgetText(#StringZahl1)
  val2.s = GetGadgetText(#StringZahl2)
  result = Val(val1)*Val(val2)
  SetGadgetText(#StringErgebnis,Str(result))
  
  If result = Val(GetGadgetText(#StringZahl3))
    ProcedureReturn #True
  EndIf
 
EndProcedure

Procedure Auswertung()
  Shared Anzahl_Richtig
  Shared Anzahl_Falsche
  MessageRequester("Information", "Sie haben " + Str(Anzahl_Richtig) + " Richtige von 10 Aufgaben", #PB_MessageRequester_Ok)
  End
 EndProcedure

If OpenWindow(#MainWindow,0,0,200,270,"Taschenrechner",#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
 
  If CreateGadgetList(WindowID(#MainWindow))
      
;     TextGadget(#PB_Any, 0, 10, 100, 20, "Erste Zahl")
   
    TextGadget(#StringZahl1,20,30,20,20,Str(Random(8)+2))    
   
    TextGadget(#PB_Any, 41, 30, 20, 20, "*")
   
    TextGadget(#StringZahl2,60,30,100,20,Str(Random(8)+2))   
    
    TextGadget(#PB_Any, 0, 70, 150, 20, "Resultat eingeben")
   
    StringGadget(#StringZahl3,0,90,100,20,"",#PB_String_Numeric)   
    
    TextGadget(#PB_Any, 0, 120, 150, 20, "Neue Rechnung mit Enter")
    
    TextGadget(#RichtigOderFalschText, 0, 140, 150, 40, "")
    
    TextGadget(#StringErgebnis,160,140,100,20,"")
    
    TextGadget(#AnzahlRichtigeText, 0, 180, 100, 20, "Anzahl Richtige")
            
    TextGadget(#AnzahlRichtigeWert, 100, 180, 30, 20, "")
    
    TextGadget(#AnzahlFalscherText, 0, 200, 100, 20, "Anzahl Falsche")
            
    TextGadget(#AnzahlFalscherWert, 100, 200, 30, 20, "")
    
    TextGadget(#AktuelleDauer, 0, 230, 150, 20, "Laufzeit: " + Str(laufzeit_jetzt/1000) + "s")
    
    AddKeyboardShortcut(#MainWindow,#PB_Shortcut_Return,#neu)
    
    SetActiveGadget(#StringZahl3)
    
    CreateThread(@Zeit_Updaten(),0)
    
  EndIf
EndIf


Repeat
  EventID = WaitWindowEvent()

  Select EventID

    Case #PB_Event_Menu
      If EventMenu() = #neu       
    Anzahl_Rechnungen=Anzahl_Rechnungen+1
    If Anzahl_Rechnungen = 11
    Auswertung()
    EndIf
          If rechne()
            Anzahl_Richtig = Anzahl_Richtig +1             
            SetGadgetText(#RichtigOderFalschText, "Richtig das Resultat war")
            SetGadgetText(#AnzahlRichtigeWert, Str(Anzahl_Richtig))
            
          Else
          
            Anzahl_Falsch = Anzahl_Falsch +1
            SetGadgetText(#RichtigOderFalschText, "Aber aber so was auch, das richtige Resultat lautet")
            SetGadgetText(#AnzahlFalscherWert,Str(Anzahl_Falsch))
          EndIf
          
        FillGadget() 
        SetActiveGadget(#StringZahl3) 
      EndIf

    Case #PB_Event_CloseWindow
      End
     
    Case #PB_Event_Gadget

  EndSelect
 Until EventID = #PB_Event_CloseWindow
End 
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Also wie jetzt:
Du willst, nachdem alles fertig ist, noch mal die Zeit auslesen, die der User gebraucht hat, oder wie?

Was deine "Zeit Updaten"Funktion angeht:
Ich würde sicherheitshalber noch "WindowEvent()" da mit einbauen.

Code: Alles auswählen

Procedure Zeit_Updaten(Dummy)
   Shared t_start
   Repeat
      laufzeit_jetzt = ElapsedMilliseconds() - t_start
      SetGadgetText(#AktuelleDauer, "Laufzeit:" + Str(laufzeit_jetzt/1000) + "s")
      Delay(1000)
      WindowEvent()
   ForEver
EndProcedure 
Gr33tz
Tafkadasom2k5

Edit: Ich würde t_start aber noch anders füllen:

Code: Alles auswählen

Procedure Zeit_Updaten(t_start.l)
   Repeat
      laufzeit_jetzt = ElapsedMilliseconds() - t_start
      SetGadgetText(#AktuelleDauer, "Laufzeit:" + Str(laufzeit_jetzt/1000) + "s")
      Delay(1000)
      WindowEvent()
   ForEver
EndProcedure 
Und beim Aufruf einfach

Code: Alles auswählen

Zeit_Updaten(ElapsedMilliseconds())
anstatt

Code: Alles auswählen

t_start =Zeit_Updaten(ElapsedMilliseconds()
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

:| Ja genau dass, am Ende, was bei mir 10 Fragen wären, wird noch eine Rückmeldung gegeben wie es gelaufen ist.

Zum einen soll angezeit werden wieviele Richtige man hatte und wie lange man dafür brauchte.

Danke noch für die verbesserungen der Prozeduren, bin gerade noch am versuchen zu begreifen was da der Unterschied zu dem bestehenden ist. Ich brauche da einfach ein bischen, bin hat nicht mehr der Jüngste....

Danke für euer Engagement
Man kann nicht wissen was man nicht weiss..
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

:| Danke Tafkadasom2k5 aber irgendwie habe ich nicht begriffen wie das von dir Vorgeschlagene funktioniert.
Auch habe ich nicht verstanden wieso man WindowsEvent() einfügen soll, ich verstehe die Funktion für diesen Befehl hier nicht. Oder besser gesagt wieso es gefährlich ist das hier nicht zu haben. :freak:
Tafkadasom2k5 hat geschrieben: Ich würde sicherheitshalber noch "WindowEvent()" da mit einbauen.


Jedoch freue ich mich, dass ich es geschaft habe mein Problem zu lössen. und möchte euch diese nicht vorenthalten.

:allright: Danke Allen die hier mir mit viel Geduld helfen und ich bin schon ganz stoltz das ich schon so vieles verstanden habe, und das dank eures ermutigenden weise mir zu Helfen Danke. :D


Hier nochmal der ganze Code

Code: Alles auswählen

; Mit Eneumeritation wird den Konstanten eine Fortlaufende Nummer vergeben anstelle dies von Hand zu machen.

Enumeration ; hier kommen alle Windows rein
  #MainWindow
EndEnumeration
 
Enumeration ; hier kommen alle Menüitems rein
  #neu
EndEnumeration

Enumeration ; hier kommen alle Gadgets rein
  #StringZahl1
  #StringZahl2
  #StringZahl3
  #StringErgebnis
  #RichtigOderFalschText
  #AnzahlRichtigeText
  #AnzahlRichtigeWert
  #AnzahlFalscherText
  #AnzahlFalscherWert
  #AktuelleDauer
EndEnumeration




Anzahl_Rechnungen =0
Anzahl_Richtig = 0
Anzahl_Falsche = 0
t_start = ElapsedMilliseconds()

Procedure Zeit_Updaten(Dummy)
   Shared t_start
   Repeat
      laufzeit_jetzt = ElapsedMilliseconds() - t_start
      SetGadgetText(#AktuelleDauer, "Laufzeit: " + Str(laufzeit_jetzt/1000) + " s")
      Delay(1000)
   ForEver
EndProcedure


Procedure FillGadget()
  SetGadgetText(#StringZahl1,Str(Random(8)+2))
  SetGadgetText(#StringZahl2,Str(Random(8)+2))
  SetGadgetText(#StringZahl3,"")
EndProcedure


Procedure rechne()
 
  val1.s = GetGadgetText(#StringZahl1)
  val2.s = GetGadgetText(#StringZahl2)
  result = Val(val1)*Val(val2)
  SetGadgetText(#StringErgebnis,Str(result))
  
  If result = Val(GetGadgetText(#StringZahl3))
    ProcedureReturn #True
  EndIf
 
EndProcedure

Procedure Auswertung()
  Shared Anzahl_Richtig
  Shared Anzahl_Falsche
  Sekunden.s = GetGadgetText(#AktuelleDauer)
  MessageRequester("Information", "Sie haben " + Str(Anzahl_Richtig) + " Richtige von 10 Aufgaben in "+ Sekunden, #PB_MessageRequester_Ok)
  End
 EndProcedure

If OpenWindow(#MainWindow,0,0,200,270,"Taschenrechner",#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
 
  If CreateGadgetList(WindowID(#MainWindow))
      
    TextGadget(#StringZahl1,20,30,20,20,Str(Random(8)+2))    
   
    TextGadget(#PB_Any, 41, 30, 20, 20, "*")
   
    TextGadget(#StringZahl2,60,30,100,20,Str(Random(8)+2))   
    
    TextGadget(#PB_Any, 0, 70, 150, 20, "Resultat eingeben")
   
    StringGadget(#StringZahl3,0,90,100,20,"",#PB_String_Numeric)   
    
    TextGadget(#PB_Any, 0, 120, 150, 20, "Neue Rechnung mit Enter")
    
    TextGadget(#RichtigOderFalschText, 0, 140, 150, 40, "")
    
    TextGadget(#StringErgebnis,160,140,100,20,"")
    
    TextGadget(#AnzahlRichtigeText, 0, 180, 100, 20, "Anzahl Richtige")
            
    TextGadget(#AnzahlRichtigeWert, 100, 180, 30, 20, "")
    
    TextGadget(#AnzahlFalscherText, 0, 200, 100, 20, "Anzahl Falsche")
            
    TextGadget(#AnzahlFalscherWert, 100, 200, 30, 20, "")
    
    TextGadget(#AktuelleDauer, 0, 230, 150, 20, "Laufzeit: " + Str(laufzeit_jetzt/1000) + "s")
    
    AddKeyboardShortcut(#MainWindow,#PB_Shortcut_Return,#neu)
    
    SetActiveGadget(#StringZahl3)
    
    CreateThread(@Zeit_Updaten(),0)
    
  EndIf
EndIf


Repeat
  EventID = WaitWindowEvent()

  Select EventID

    Case #PB_Event_Menu
      If EventMenu() = #neu  
           
         
         EndIf
         
          If rechne()
            Anzahl_Richtig = Anzahl_Richtig +1             
            SetGadgetText(#RichtigOderFalschText, "Richtig das Resultat war")
            SetGadgetText(#AnzahlRichtigeWert, Str(Anzahl_Richtig))
            
          Else
          
            Anzahl_Falsch = Anzahl_Falsch +1
            SetGadgetText(#RichtigOderFalschText, "Aber aber so was auch, das richtige Resultat lautet")
            SetGadgetText(#AnzahlFalscherWert,Str(Anzahl_Falsch))
          EndIf
          
        FillGadget() 
        SetActiveGadget(#StringZahl3) 
        
        Anzahl_Rechnungen=Anzahl_Rechnungen+1
         If Anzahl_Rechnungen = 10
         Auswertung()
         
      EndIf

    Case #PB_Event_CloseWindow
      End
     
    Case #PB_Event_Gadget

  EndSelect
 Until EventID = #PB_Event_CloseWindow
End 
Man kann nicht wissen was man nicht weiss..
Bayernhans
Beiträge: 20
Registriert: 09.04.2006 15:56
Wohnort: Bayern

Zufallszahlenreihe aus Bereich von Zahlen

Beitrag von Bayernhans »

Vielleicht helfen auch meine damaligen Überlegungen ...
http://www.purebasic.fr/german/viewtopi ... highlight=
vitamine, Vitamine, VITAMINE, ...
Vitamin PB - the best
PB 4.x
Antworten