Rechner

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Rechner

Beitrag von The_Dark_Zim-.- »

Hey ho
Ich hab mir einen ganz normalen Taschenrechner gemacht. Hab allerdings noch ein paar Probleme, die ich im mom nicht raus bekomme, bitte euch darum um hilfe :wink:

Also mein Problem ist das ich keine kommaeingabe über die Tasten machen kann, da das komma dann immer verschwindet!?!?!?! 2. Problem ist , wenn man nach einer Rechnung eine Zahl eingibt, diese dann hinten dran gehängt wird, is eigentlich auch Richtig das er es macht, soll er aber nich :mrgreen: , heißt er soll eine neue Rechnung anfangen und nicht die nachvolgenden zahlen anhängen wie er es jetzt macht.

Hoffe ich schreib nicht zu verwiert :freak:

Hier der Code:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #Button_3
  #Button_4
  #Button_5
  #Button_6
  #Button_7
  #Button_8
  #Button_9
  #Button_10
  #Button_11
  #Button_12
  #Button_13
  #Button_14
  #Button_15
  #Button_16
  #Button_17
EndEnumeration

Global FontID1
FontID1 = LoadFont(1, "Arial", 10, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 14)
Global FontID3
FontID3 = LoadFont(3, "Arial", 22)

InitKeyboard() And InitSprite()

  If OpenWindow(#Window_0, 511, 245, 518, 548, "Rechner",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered ) 
   If OpenWindowedScreen(WindowID(0), 511, 245, 518, 548, 0, 0, 0) 
    If CreateGadgetList(WindowID(#Window_0))
      StringGadget(#String_0, 20, 40, 480, 30, "")
      SetGadgetFont(#String_0, FontID2)
      ButtonGadget(#Button_0, 20, 140, 60, 60, "CE")
      SetGadgetFont(#Button_0, FontID2)
      ButtonGadget(#Button_1, 100, 140, 60, 60, "/")
      SetGadgetFont(#Button_1, FontID2)
      ButtonGadget(#Button_2, 180, 140, 60, 60, "X")
      SetGadgetFont(#Button_2, FontID2)
      ButtonGadget(#Button_3, 20, 220, 60, 60, "7")
      SetGadgetFont(#Button_3, FontID2)
      ButtonGadget(#Button_4, 100, 220, 60, 60, "8")
      SetGadgetFont(#Button_4, FontID2)
      ButtonGadget(#Button_5, 180, 220, 60, 60, "9")
      SetGadgetFont(#Button_5, FontID2)
      ButtonGadget(#Button_6, 20, 300, 60, 60, "4")
      SetGadgetFont(#Button_6, FontID2)
      ButtonGadget(#Button_7, 100, 300, 60, 60, "5")
      SetGadgetFont(#Button_7, FontID2)
      ButtonGadget(#Button_8, 180, 300, 60, 60, "6")
      SetGadgetFont(#Button_8, FontID2)
      ButtonGadget(#Button_9, 260, 140, 60, 60, "-")
      SetGadgetFont(#Button_9, FontID3)
      ButtonGadget(#Button_10, 260, 220, 60, 140, "+")
      SetGadgetFont(#Button_10, FontID2)
      ButtonGadget(#Button_11, 260, 380, 60, 140, "OK")
      SetGadgetFont(#Button_11, FontID2)
      ButtonGadget(#Button_12, 180, 380, 60, 60, "3")
      SetGadgetFont(#Button_12, FontID2)
      ButtonGadget(#Button_13, 100, 380, 60, 60, "2")
      SetGadgetFont(#Button_13, FontID2)
      ButtonGadget(#Button_14, 20, 380, 60, 60, "1")
      SetGadgetFont(#Button_14, FontID2)
      ButtonGadget(#Button_15, 20, 460, 140, 60, "0")
      SetGadgetFont(#Button_15, FontID2)
      ButtonGadget(#Button_16, 180, 460, 60, 60, ",")
      SetGadgetFont(#Button_16, FontID3)
      ButtonGadget(#Button_17, 390, 460, 110, 60, "EXIT")
      SetGadgetFont(#Button_17, FontID2)
      
    EndIf
   EndIf
  EndIf

 Repeat
  
  Event = WaitWindowEvent()
  
  WindowID = EventWindow() 
  
  GadgetID = EventGadget() 
  
  EventType = EventType() 
    
ExamineKeyboard()
If KeyboardPushed (1)
End
EndIf  

If KeyboardPushed (#PB_Key_Subtract)
   a.f=0
   b.f=0
   c.f=0
   d.f=1
   SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
   f.f=ValF(GetGadgetText(#string_0))
EndIf

  If Event = #PB_Event_Gadget
    
    If GadgetID = #String_0

    ElseIf GadgetID = #Button_0
    StringGadget(#String_0, 20, 40, 480, 30, "")
    SetGadgetFont(#String_0, FontID2)
    ElseIf GadgetID = #Button_1 ;/
   a.f=1
   b.f=0
   c.f=0
   d.f=0
   SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
   f.f=ValF(GetGadgetText(#string_0))
   
   StringGadget(#String_0, 20, 40, 480, 30, "")
   SetGadgetFont(#String_0, FontID2)
   
    ElseIf GadgetID = #Button_2 ;x
    
   a.f=0
   b.f=1
   c.f=0
   d.f=0
   SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
   f.f=ValF(GetGadgetText(#string_0))
   
   StringGadget(#String_0, 20, 40, 480, 30, "")
   SetGadgetFont(#String_0, FontID2) 
  
    ElseIf GadgetID = #Button_3
    ;7
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=7
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 7
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"7")
    7:
    ElseIf GadgetID = #Button_4
    ;8
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=8
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 8
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"8")
    8:
    ElseIf GadgetID = #Button_5
    ;9
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=9
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 9
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"9")
    9:
    ElseIf GadgetID = #Button_6
    ;4
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=4
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 4
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"4")
    4:
    ElseIf GadgetID = #Button_7
    ;5
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=5
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 5
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"5")
    5:
    ElseIf GadgetID = #Button_8
    ;6
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=6
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 6
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"6")
    6:
    
    ElseIf GadgetID = #Button_12
    ;3
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=3
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 3
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"3")    
    3:
    ElseIf GadgetID = #Button_13
    ;2
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=2
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 2
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"2")
    2:
    ElseIf GadgetID = #Button_14
    ;1
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=1
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 1
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"1")
    1:
    ElseIf GadgetID = #Button_15
    ;0
    x.f=ValF(GetGadgetText(#string_0))
    If x.f =0
    x.f=0
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f))
    Goto 0
    EndIf
    StringGadget(#String_0, 20, 40, 480, 30, Str(x.f)+"0")
    0:
    ElseIf GadgetID = #Button_16
    ;,
    x=ValF(GetGadgetText(#string_0))
    StringGadget(#String_0, 20, 40, 480, 30, Str(x)+".")
    y=1
    ElseIf GadgetID = #Button_17
    End
    EndIf
    
   ElseIf GadgetID = #Button_9 ;-
   a.f=0
   b.f=0
   c.f=1
   d.f=0
   SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
   f.f=ValF(GetGadgetText(#string_0))
   
   StringGadget(#String_0, 20, 40, 480, 30, "")
   SetGadgetFont(#String_0, FontID2)
   
   ElseIf GadgetID = #Button_10 ;+
   a.f=0
   b.f=0
   c.f=0
   d.f=1
   SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
   f.f=ValF(GetGadgetText(#string_0))
   
   StringGadget(#String_0, 20, 40, 480, 30, "")
   SetGadgetFont(#String_0, FontID2)
   
   ElseIf GadgetID = #Button_11
   ;ok
   SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
   g.f=ValF(GetGadgetText(#string_0))
    
       If c=1
   e.f=f.f-g.f
   StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2))
   SetGadgetFont(#String_0, FontID2)
   EndIf
   
       If a=1
   e.f=f.f/g.f
   StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2))
   SetGadgetFont(#String_0, FontID2)
   EndIf
   
       If b=1
   e.f=f.f*g.f
   StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2))
   SetGadgetFont(#String_0, FontID2)
   EndIf
   
       If d=1
   e.f=f.f+g.f
   StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2))
   SetGadgetFont(#String_0, FontID2)
   EndIf
    
  EndIf

Until Event = #PB_Event_CloseWindow 

End
Ist etwas durcheinander und vermutlich auch ziehmlich stümperhaft aber bin halt noch am lernen nehme tipps gerne an ;)

Thx für alle die helfen oder sich die Mühe machen es zu Lesen is ja nicht gerade wenig :P
(Und sry für Rechtschreibung und Gramatik :lol: :oops: )[/b]
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

HM scheint doch kein so einfaches problem zu sein :?
(Pusch)
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

The_Dark_Zim-.- hat geschrieben:HM scheint doch kein so einfaches problem zu sein :?
wieso? Weil sich nach unendlich langen 4 Stunden noch niemand gemeldet hat? :roll:
The_Dark_Zim-.- hat geschrieben:(Pusch)
Pushen darfst Du nach Tagen, nicht nach Stunden.
a²+b²=mc²
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

jaja is ja schon gut ich bin ruhig bis ich nach tagen keine antwort bekommen hab sry <)
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

manchmal wird in diesem forum durchaus sehr schnell geantwortet.
das sind dann aber oftmals fragen, zu denen mehrere kollegen die lösungen schon parat haben,
weil sie selber schon vor dem problem standen oder es schon x-mal gefragt wurde.

bei deinem problem muss man sich schon zeit nehmen, und dann ist eben die frage, wer da jetzt zeit und bock zu hat.


> 2. Problem ist , wenn man nach einer Rechnung eine Zahl eingibt, diese dann hinten dran gehängt wird, is eigentlich auch Richtig das er es macht, soll er aber nich Mr. Green , heißt er soll eine neue Rechnung anfangen und nicht die nachvolgenden zahlen anhängen wie er es jetzt macht.

führe ein Flag ein, das notiert, wenn die letzte eingabe "=" war.
wenn das der fall ist, löscht die nächste zahl das display, ansonsten nicht.


btw. deine interpunktion könntest du mal überarbeiten. schlangensätze mit 37 kommata sind schwierig zu lesen. ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

@The_Dark_Zim-.-

Du könntest uns (und später dann auch Dir selber) schon mal die Arbeit
erleichtern, indem Du Dir angewöhnst, Deinen Code vernünftig einzurücken.

Wenn Du das von vorherein gemacht hättest, dann wärst Du auch recht
schnell darauf gekommen, dass Du an dieser Stelle schon mal ein
strukturelles Problem hast. Das solltest Du erst einmal beheben:

Code: Alles auswählen

[...]
  ElseIf GadgetID = #Button_17
    End
  EndIf
   
ElseIf GadgetID = #Button_9 ;- 
[...]
Ebenso würde es das Lesen des Codes einfacher machen, wenn Du die
Konstanten sinnvoll benennen würdest. Es ist für uns (uns später auch für
Dich) schwierig, zwischen #Button_1 und #Button17 zu unterscheiden.

Benenne die Konstanten doch einfach #Button_Zahl_0 bis #Button_Zahl_9
für die Zahlenbuttons und dann #Button_Multiplizieren, Button_Dividieren,
etc. etc.

Also: Da hast Du schon mal was zu tun. Vielleicht findest Du beim
überarbeiten Deine Fehler von selber. Wenn nicht, dann kannst Du gerne
noch einmal (mit dem überarbeiteten Code) nachfragen. :-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

Okey, dann geh ich das nochmal durch, auch wenn ich nich so recht auf Ordnung achte, weil ich es nich brauch, aber ist später bestimmt sinnvoll.

Der Code is sowieso noch nicht fertig, ein paar kleinigkeiten will ich noch ändern. Wollte aber das nu erstmal soweit haben, das es funktionsmässig geht.
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

The_Dark_Zim-.- hat geschrieben:auch wenn ich nich so recht auf Ordnung achte, weil ich es nich brauch
wie geschrieben: Wenn Du 'Ordnung gehalten' hättest, wäre Dir zumindest
ein kapitaler Fehler selber aufgefallen, bzw. Du hättest ihn nicht erst gar nicht
gemacht.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

Beitrag von The_Dark_Zim-.- »

ääähm müssen die Buttons in der richtigen Reinfolge stehen?!?!?!
Also Button 1
Button 2
oder is das egal???
Weil wegen hab das geordnet und nu gehts nicht mehr richtig :evil:

Hab normalerweise keinen Fehler reingebracht, außer man darf die buttons nicht umsortieren, bzw. ich wüsste nich wo -.-

Guck mir das aber noch mal an.
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

"Weil wegen hab das geordnet ..."?

Onga Bonga? :?:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten