Taschenrechner

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Taschenrechner

Beitrag von AirTokio »

Hallo!

Ich bin ein extremer Anfänger in PureBasic und hab noch einige Probleme!
Ich hab hier angefangen einen Taschenrechner zu programmieren, blicke aber durch die ganzen klick Befehle noch nicht durch!
Könntet ihr mir bitte ganz langsam erklären, denn allein bekomm ich es einfach nicht hin :(

Code: Alles auswählen

 If OpenWindow(1, 288, 237, 246, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateStatusBar(2, WindowID())
    EndIf
    
    If CreateGadgetList(WindowID())
      StringGadget(3, 30, 20, 190, 40, "", #PB_String_Numeric)
      ButtonGadget(4, 30, 80, 40, 40, "1")
      ButtonGadget(5, 80, 80, 40, 40, "2")
      ButtonGadget(6, 130, 80, 40, 40, "3")
      ButtonGadget(7, 30, 130, 40, 40, "4")
      ButtonGadget(8, 30, 230, 40, 40, "0")
      ButtonGadget(9, 80, 130, 40, 40, "5")
      ButtonGadget(10, 80, 180, 40, 40, "8")
      ButtonGadget(11, 130, 130, 40, 40, "6")
      ButtonGadget(12, 130, 180, 40, 40, "9")
      ButtonGadget(13, 30, 180, 40, 40, "7")
      ButtonGadget(14, 190, 80, 50, 30, "+")
      ButtonGadget(15, 190, 120, 50, 30, "-")
      ButtonGadget(16, 190, 160, 50, 30, "*")
      ButtonGadget(17, 190, 200, 50, 30, "/")
      ButtonGadget(18, 190, 240, 50, 30, "=")
      EndIf
  EndIf



  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    
           If EventID = #PB_Event_Gadget
           If EventGadgetID()=4
             
           EndIf


           If EventGadgetID()=5
             
           EndIf

   
   
   
   
    EndIf
    

  
  Until Quit=1

End
Danke schonmal fürs Lesen :allright:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Habs mal ein klein bissel erweitert:

Code: Alles auswählen

If OpenWindow(1, 288, 237, 246, 300,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )")
    If CreateStatusBar(2, WindowID())
    EndIf
   
    If CreateGadgetList(WindowID())
      StringGadget(3, 30, 20, 190, 40, "", #PB_String_Numeric | #PB_Text_Right)
      ButtonGadget(4, 30, 80, 40, 40, "1")
      ButtonGadget(5, 80, 80, 40, 40, "2")
      ButtonGadget(6, 130, 80, 40, 40, "3")
      ButtonGadget(7, 30, 130, 40, 40, "4")
      ButtonGadget(8, 30, 230, 40, 40, "0")
      ButtonGadget(9, 80, 130, 40, 40, "5")
      ButtonGadget(10, 80, 180, 40, 40, "8")
      ButtonGadget(11, 130, 130, 40, 40, "6")
      ButtonGadget(12, 130, 180, 40, 40, "9")
      ButtonGadget(13, 30, 180, 40, 40, "7")
      ButtonGadget(14, 190, 80, 50, 30, "+")
      ButtonGadget(15, 190, 120, 50, 30, "-")
      ButtonGadget(16, 190, 160, 50, 30, "*")
      ButtonGadget(17, 190, 200, 50, 30, "/")
      ButtonGadget(18, 190, 240, 50, 30, "=")
      EndIf
  EndIf


  Anzeigetext.s
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      Quit = 1
    EndIf
   
           If EventID = #PB_Event_Gadget
           If EventGadgetID()=4
              Anzeigetext + Str(1)
             SetGadgetText(3, Anzeigetext) 
           EndIf


           If EventGadgetID()=5
             Anzeigetext + Str(2)
             SetGadgetText(3, Anzeigetext) 
           EndIf

   
   
   
   
    EndIf
   

 
  Until Quit=1

End
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Beitrag von AirTokio »

Wow danke jetzt zeigt der schonmal die zahlen von 1-2 oben an!
Ich versteh den Befehl trotzdem nich!

Code: Alles auswählen

           If EventGadgetID()=5
             Anzeigetext + Str(2)
             SetGadgetText(3, Anzeigetext)
           EndIf 
Was bedeutet das: Anzeigetext + Str(2)
SetGadgetText(3, Anzeigetext)

Könnteste mir das bitte noch erklären?
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

das 2 ändert den text von gadget 3, der neue test ist glecih dem anzeigetext string.

beim ersten, weis ich auch nicht so genau, kann nicht mehr genau nachschauen, bin müde, aber ich glaube, dass wandelt 2 in einen string um :allright:
-.-"
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

dann sags ich:
in den feld da oben können nur stringwerte angezeigt werden, und str(2) ändert 2 eben in einen string

Code: Alles auswählen

setgadgettext(3, anzeigetext)
ändert also den text der oben is vom gadget 3 in den wert von anzeigetext, also '2'

EDIT: jetzt haste ja ne auswahl ,wenn du was nicht verstehst :D
Zuletzt geändert von Rubiko am 13.06.2005 21:35, insgesamt 1-mal geändert.
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Was bedeutet das: Anzeigetext + Str(2)
>> SetGadgetText(3, Anzeigetext)
Anzeigetext ist die Stringvariable, die den Inhalt der Anzeige enthält. Wenn nun der Button 1 gedrückt wird füge ich eine "1" oder so Str(1) hinzu.
Mit SetGadgetText ändere ich die gesamte Anzeige, deren Text sich ja in Anzeigetext befindet.

Anzeigetext + Str(2) kann man auch so schreiben:

Code: Alles auswählen

Anzeigetext.s = Anzeigetext.s + "2"
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Beitrag von AirTokio »

So wow habt ihr hier eine schnelle und tolle Community ;)

Habs jetzt mal verändert:

Code: Alles auswählen

    EventID = WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      Quit = 1
    EndIf
   
           If EventID = #PB_Event_Gadget
           If EventGadgetID()=4
              Anzeigetext + Str(1)
             SetGadgetText(3, Anzeigetext)
           EndIf


           If EventGadgetID()=5
             Anzeigetext + Str(2)
             SetGadgetText(3, Anzeigetext)
           EndIf

   
           If EventGadgetID()=6
             Anzeigetext + Str(3)
             SetGadgetText(3, Anzeigetext)
           EndIf


           If EventGadgetID()=7
             Anzeigetext + Str(4)
             SetGadgetText(3, Anzeigetext)
           EndIf


           If EventGadgetID()=8
             Anzeigetext + Str(0)
             SetGadgetText(3, Anzeigetext)
           EndIf
   

           If EventGadgetID()=9
             Anzeigetext + Str(5)
             SetGadgetText(3, Anzeigetext)
           EndIf   


           If EventGadgetID()=10
             Anzeigetext + Str(8)
             SetGadgetText(3, Anzeigetext)
           EndIf
           
   
           If EventGadgetID()=11
             Anzeigetext + Str(6)
             SetGadgetText(3, Anzeigetext)
           EndIf


           If EventGadgetID()=12
             Anzeigetext + Str(9)
             SetGadgetText(3, Anzeigetext)
           EndIf


           If EventGadgetID()=13
             Anzeigetext + Str(7)
             SetGadgetText(3, Anzeigetext)
           EndIf

    EndIf
   

 
  Until Quit=1

End
So! Also Anzeigetext ist eine Variable und der wird der umgerechnete (in String) Wert 7 dazugetahn. Durch SetGardgetText heisst das er den Text verändern soll (3, <- ist die ID, Anzeigetext ist wieder die Variable mit dem wert.)
Stimmt das? Wenn ja dank ich euch allen! Ihr seid hammer ;)
Aber wie rechne ich jetzt wieter. Die Eingabe hat er schonmal, aber wie rechnet er jetzt?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Aber wie rechne ich jetzt wieter. Die Eingabe hat er schonmal, aber wie rechnet er jetzt?
Wenn zum Beispiel "+" gedrückt wird, merkst Du dir das + und den aktuellen Anzeigetext in einer anderen Variablen
ErsteZahl = Str(Anzeigetext.s)
Funktion, = "+"

jetzt die Anzeige löschen, neue Eingaben Abwarten und bei "=" die Werte Addieren.

Versuch das einfach mal Schritt für Schritt nachzuvollziehen, laß Dir die Werte Deiner Variablen mit dem Debugger Anzeigen, also so:

Code: Alles auswählen

Debug anzeigetext
Debug funktion
Debug ErsteZahl
usw.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

du machst jetzt einfach eine neue variable in der die rechenart gespeicher ist.

dann überprüfst du per if, welche rechenart verwendet ist...
ist addition zum beispiel: zahl1 + zahl2

also

Code: Alles auswählen

if eventgadget()=14
   rechenart = addition
endif
du musst noch zwei variablen machen in denen die zwei zahlen gespeichert werden, und dann eben zu den eventgadget() abfragen hinzumachen...

Code: Alles auswählen

; dann einfach
if rechenart = addition
   zahl1 + zahl2
endif
wenn das jetzt nicht klar is, kann dir jemand bestimmt ein beispiel geben, im forum, ich hab nimmer viel zeit.. aber wer weiß... ^^
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
AirTokio
Beiträge: 22
Registriert: 13.06.2005 21:12

Beitrag von AirTokio »

Verstehe nicht ganz wie es funktioniert!
Hab mal dies nach euren Beiträgen geschrieben:

Code: Alles auswählen

       If EventGadgetID()=14
          ErsteZahl$ = Str(Anzeigetext)
          rechenart = addition
       EndIf 



       If EventGadgetID()=18
          ZweiteZahl$ = Str(Anzeigetext)
       EndIf 






   If rechenart = addition
      ErsteZahl$ + ZweiteZahl$
   EndIf 
Funktioniert bloss nicht... Wie gesagt bin halt ein Anfänger!
Antworten