| Autor |
Beitrag |
Hazel
      
Beiträge: 26
|
Verfasst: Do 12.04.12 09:32
Hallo
bin ganz neu hier und hab mal eine Frage:
Ich hab einen Taschenrechner programmiert dieser funktioniert auch. Wollte ihn jetzt erweitern um die Funktion x^y. Hab gelesen das dies mit Power Math möglich wäre? Kann mir da jemand vill helfen?
Schon mal Danke im vorraus
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 12.04.12 09:46
Genau, in der Unit "Math" gibt es die Funktion "Power". Wo ist denn konkret Dein Problem?
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 09:58
Hey
danke erstmal
also ich verstehe nicht ganz wie ich das machen muss^^
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 12.04.12 10:02
Du musst die Unit math benutzen, d.h. oben in die "uses-Liste" musst du math hinzufügen. Dann kannst du die Funktionen dieser Unit benutzen, z.B. power
_________________ We are, we were and will not be.
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 10:23
Danke :*
hab jetzt noch einen Fehler drinnen -.-
weis nicht ganz wieso es nicht funktioniert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.HochyClick(Sender: TObject); begin if x <> 0 then begin x:= StrToFloat(Edit1.Text); x:= power(x, Zwischenegebnis); Edit1.Text:= FloatToStr(x); Zahl:= Edit1.Text; end; end; |
vill kann mir einer von euch sagen wo der Fehler liegt?
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 12.04.12 10:26
Dazu müsstest Du uns bitte die Fehlermeldung sagen, die Du bekommst.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 10:27
Gibt keine Fehlermeldung aus es funktioniert nur nicht^^
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 12.04.12 10:47
was stellt denn dieses dar?
Delphi-Quelltext 1: 2: 3:
| if x <> 0 then begin x:= StrToFloat(Edit1.Text); |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 10:51
soll ja ein Taschenrechner werden. Und mit Null soll der nicht rechnen deswegen if x <> 0
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 12.04.12 10:53
ja und was steht vor der Zuweisung x:= StrToFloat(Edit1.Text); in x ???
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 10:57
ich versteh deine Frage nicht ganz^^
sorry bin noch anfänger
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 12.04.12 11:27
Ich glaub, Du musst mal etwas mehr Quellcode "drumrum" posten. Und bitte genauer schreiben, was Du unter "Funktioniert nicht" verstehst. Wir ein falsches Ergebnis ausgegeben, wird gar nichts ausgegeben, etc...
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 11:40
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 234: 235: 236: 237: 238: 239: 240: 241: 242: 243: 244: 245: 246: 247: 248: 249: 250: 251: 252: 253: 254: 255: 256: 257: 258: 259: 260: 261: 262: 263: 264: 265: 266: 267: 268: 269: 270: 271: 272: 273: 274: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342:
| unit Taschenrechner;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Buttons, StdCtrls, Math;
type TForm1 = class(TForm) Edit1: TEdit; Zahl1: TSpeedButton; Zahl2: TSpeedButton; Zahl3: TSpeedButton; Zahl4: TSpeedButton; Zahl5: TSpeedButton; Zahl6: TSpeedButton; Zahl7: TSpeedButton; Zahl8: TSpeedButton; Zahl9: TSpeedButton; Zahl0: TSpeedButton; Komma: TSpeedButton; IstGleich: TSpeedButton; Geteilt: TSpeedButton; Mal: TSpeedButton; Minus: TSpeedButton; Plus: TSpeedButton; Löschen: TSpeedButton; Neu: TSpeedButton; Ende: TSpeedButton; Vorzeichen: TSpeedButton; Bruch: TSpeedButton; Prozent: TSpeedButton; Wurzel: TSpeedButton; Quadrat: TSpeedButton; Hochy: TSpeedButton; procedure Zahl1Click(Sender: TObject); procedure Zahl2Click(Sender: TObject); procedure Zahl3Click(Sender: TObject); procedure Zahl4Click(Sender: TObject); procedure Zahl5Click(Sender: TObject); procedure Zahl6Click(Sender: TObject); procedure Zahl7Click(Sender: TObject); procedure Zahl8Click(Sender: TObject); procedure Zahl9Click(Sender: TObject); procedure Zahl0Click(Sender: TObject); procedure KommaClick(Sender: TObject); procedure IstGleichClick(Sender: TObject); procedure PlusClick(Sender: TObject); procedure NeuClick(Sender: TObject); procedure MinusClick(Sender: TObject); procedure MalClick(Sender: TObject); procedure GeteiltClick(Sender: TObject); procedure VorzeichenClick(Sender: TObject); procedure LöschenClick(Sender: TObject); procedure EndeClick(Sender: TObject); procedure BruchClick(Sender: TObject); procedure ProzentClick(Sender: TObject); procedure WurzelClick(Sender: TObject); procedure key(Sender: TObject; var Key: Char); procedure QuadratClick(Sender: TObject); procedure HochyClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation var Zahl: String; x,Zwischenergebnis: real; Operation: Integer;
{$R *.dfm}
procedure TForm1.BruchClick(Sender: TObject); begin if x <> 0 then begin x:= StrToFloat(Edit1.Text); x:= 1/x; Edit1.Text:= FloatToStr(x); Zahl:= Edit1.Text; end else ShowMessage('Von Null gibt es keinen Kerwert!'); end;
procedure TForm1.EndeClick(Sender: TObject); begin form1.Close; end;
procedure TForm1.GeteiltClick(Sender: TObject); begin if Operation = 0 then Zwischenergebnis:= x; if Operation = 4 then begin if x <> 0 then Zwischenergebnis:= Zwischenergebnis / x else ShowMessage('Division durch Null ist nicht möglich!'); end; Edit1.Text:= ''; x:=0; Operation:= 4; end;
procedure TForm1.HochyClick(Sender: TObject); begin if x <> 0 then begin x:= StrToFloat(Edit1.Text); x:= Power(x, Zwischenergebnis); Edit1.Text:= FloatToStr(x); Zahl:= Edit1.Text; end; end;
procedure TForm1.IstGleichClick(Sender: TObject); begin if Operation = 0 then Zwischenergebnis:= x; if Operation = 1 then Zwischenergebnis:= Zwischenergebnis + x; if Operation = 2 then Zwischenergebnis:= Zwischenergebnis - x; if Operation = 3 then Zwischenergebnis:= Zwischenergebnis * x; if Operation = 4 then begin if x <> 0 then Zwischenergebnis:= Zwischenergebnis / x else ShowMessage('Division durch Null ist nicht möglich!'); end; Operation:= 0; x:= Zwischenergebnis; Edit1.Text:= FloatToStr(Zwischenergebnis);
end;
procedure TForm1.key(Sender: TObject; var Key: Char); begin begin if ord(key) = VK_RETURN then IstGleich.Click; if ord(key) = VK_BACK then Löschen.Click; if ord(key) = VK_ESCAPE then Ende.Click; if ord(key) = VK_SPACE then Neu.Click; end; case key of '1': Zahl1.click; '2': Zahl2.click; '3': Zahl3.click; '4': Zahl4.click; '5': Zahl5.click; '6': Zahl6.click; '7': Zahl7.click; '8': Zahl8.click; '9': Zahl9.click; '0': Zahl0.click; '+': Plus.click; '-': Minus.click; '/': Geteilt.click; '*': Mal.click; ',': Komma.click; '.': Komma.click; end; end;
procedure TForm1.KommaClick(Sender: TObject); begin if Pos(',',Edit1.Text)= 0 then begin Edit1.Text:= Edit1.Text + Komma.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end; end;
procedure TForm1.LöschenClick(Sender: TObject); var i,j: Integer; begin j:= 0; if Copy(Edit1.Text,1,1) = '-' then j:= 1; i:= length(Edit1.Text); if i > 1 + j then begin Edit1.text:= Copy(Edit1.text,1,i-1); Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end; end;
procedure TForm1.MalClick(Sender: TObject); begin if Operation = 0 then Zwischenergebnis:= x; if Operation = 3 then Zwischenergebnis:= Zwischenergebnis * x; Edit1.Text:= ''; x:=0; Operation:= 3; end;
procedure TForm1.MinusClick(Sender: TObject); begin if Operation = 0 then Zwischenergebnis:= x; if Operation = 2 then Zwischenergebnis:= Zwischenergebnis - x; Edit1.Text:= ''; x:=0;
Operation:= 2; end;
procedure TForm1.NeuClick(Sender: TObject); begin Zwischenergebnis:= 0; Edit1.Text:= ''; Operation:= 0; end;
procedure TForm1.PlusClick(Sender: TObject); begin if Operation = 0 then Zwischenergebnis:= x; if Operation = 1 then Zwischenergebnis:= Zwischenergebnis + x; Edit1.Text:= ''; x:=0; Operation:= 1; end;
procedure TForm1.ProzentClick(Sender: TObject); begin if x <> 0 then begin x:= StrToFloat(Edit1.Text); x:= (Zwischenergebnis/100) * x; Edit1.Text:= FloatToStr(x); Zahl:= Edit1.Text; end; end;
procedure TForm1.QuadratClick(Sender: TObject); begin if x <> 0 then begin x:= StrToFloat(Edit1.Text); x:= sqr(x); Edit1.Text:= FloatToStr(x); Zahl:= Edit1.Text; end; end;
procedure TForm1.VorzeichenClick(Sender: TObject); begin x:= StrToFloat(Edit1.Text); x:= -x; Edit1.Text:= FloatToStr(x); Zahl:= Edit1.Text; end;
procedure TForm1.WurzelClick(Sender: TObject); begin if x <> 0 then begin x:= StrToFloat(Edit1.Text); x:= sqrt(x); Edit1.Text:= FloatToStr(x); Zahl:= Edit1.Text; end; end;
procedure TForm1.Zahl0Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl0.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl1Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl1.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl2Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl2.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl3Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl3.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl4Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl4.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl5Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl5.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl6Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl6.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl7Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl7.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl8Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl8.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
procedure TForm1.Zahl9Click(Sender: TObject); begin Edit1.Text:= Edit1.Text + Zahl9.Caption; Zahl:= Edit1.Text; x:= StrToFloat(Zahl); end;
end. | Moderiert von Narses: Beiträge zusammengefasstund zwar ist es so:
wenn ich z.B. 3^3 rechnen will
gebe ich über meinen Taschenrechner 3 dann klick ich auf die Taste und dann wieder 3 ein so sollte er
funktionieren.
Bei mir ist aber wenn ich 3 klicke und dann die Taste kommt einfach eine 1...
|
|
Obl
Hält's aus hier
Beiträge: 3
Delphi 2007 Enterprise, Delphi XE2 Enterprise
|
Verfasst: Do 12.04.12 12:02
Das wird daran liegen das in der Variable "Zwischenergebnis" noch ein 0 steht.
Und 3 hoch 0 ist nun mal 1.
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 12.04.12 12:03
Setze doch mal einen BreakPoint bei Zeile 113 (F5) und lass laufen, ich wette Zwischenergebnis ist 0
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 12:07
hab das mal gemacht und du hast recht kommt ech 0 raus^^
Ihr merkt schon ich bin ziemlicher Anfänger^^
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Do 12.04.12 12:21
na und jeder hat mal angefangen ...
Vielleicht solltest Du Hoch wie die anderen Operatoren behandeln + - etc.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Hazel 
      
Beiträge: 26
|
Verfasst: Do 12.04.12 14:02
Danke bummi
werd ich mal probieren
Moderiert von Narses: Beiträge zusammengefasst
So vielen vielen dank an alle
werde das morgen mal weiter versuchen hab da jetzt keinen Nerv mehr für
Ich hätte noch eine frage:
Jetzt möchte ich das wenn ich den Taschenrechner starte und ihn maximiere sich der komplette Taschenrechner maximiert also die Buttons usw.
hab schon im Internet gesucht aber nichts passendes gefunden
Schon mal vielen Danke
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Do 12.04.12 15:03
Hazel hat folgendes geschrieben : |
Ich hätte noch eine frage: |
Neue Frage = neues Thema eröffnen, bitte.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|