Autor |
Beitrag |
Sinjai
      
Beiträge: 39
xp
Delphi 7
|
Verfasst: Sa 01.03.08 22:36
also ich habe da ein problem.. ertsmal ich hab grad angefangen delphi zu lernen bin also noch ziehmlich noob. ich wollte einen taschenrecher programmiere. soweit, so gut. er rechnet bis jetzt plus, muns und mal. aber aus irgendeinem grund will er nicht teilen. immer wenn ich das geteilt zeichen eingebe und dann f9 zum ausführen, markiert er die zeile und da unten steht "inkompitable daten". was mache ich falsch?
|
|
DeadlyAppearance
      
Beiträge: 113
Win 7
Delphi 2010 Arch., C# VS 2008
|
Verfasst: Sa 01.03.08 22:41
Poste mal dein Code bitte.
Gehe aber ma davon aus, das du x / y teils und das Ergebnis in einen Integer zuweisen müchtest.
Aber da bei Geteilt eine Kommazahl rauskommt musst du eine Variable vom Typ Float erzeugen, oder
mir round arbeiten.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var GanzeZahl : Integer; Kommazahl : Float; begin GanzeZahl := round(12/3); Kommazahl := 12/3; end; |
_________________ Als du auf die Welt kamst, weintest du, und um dich herum freuten sich alle. Lebe so, daß, wenn du die Welt verläßt, alle weinen und du allein lächelst.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Sa 01.03.08 22:42
Moment, ich hole grad schnell meine Glaskugel heraus...
Ohne Code werden wir Dir wohl kaum weiterhelfen können, allerdings ist im Grunde auch schon klar, wo der Fehler liegen wird.
Du dividierst vermutlich mit " / " also mit Rest. Du brauchst also eine Variable vom Typ Real, Extended etc., die solche Werte auffassen können. Laut meiner Glaskugel benutzt du aber einen Integer-Typ.
Grüße,
Marc
€: Eine Zehntel-Sekunde zu langsam.
€: Statt Round empfiehlt sich auch div oder weniger gut Trunc(a / b)
Wenn unklarheiten bei Befehlen, diese markieren und F1 drücken. 
Zuletzt bearbeitet von Marc. am Sa 01.03.08 22:44, insgesamt 1-mal bearbeitet
|
|
Sinjai 
      
Beiträge: 39
xp
Delphi 7
|
Verfasst: Sa 01.03.08 22:44
ja genau ihr habt recht. ich versuche es mit dem / zeichen und integer. öhhm...ich weiß net wo ich den code posten kann xD. wei mache ich das denn dann anders? das chek ich net
|
|
Sinjai 
      
Beiträge: 39
xp
Delphi 7
|
Verfasst: Sa 01.03.08 22:47
ok danke leute habs schon. mit div geht es
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: Sa 01.03.08 22:50
Sinjai hat folgendes geschrieben: | ja genau ihr habt recht. ich versuche es mit dem / zeichen und integer. öhhm...ich weiß net wo ich den code posten kann xD. wei mache ich das denn dann anders? das chek ich net |
Bei kürzeren Quelltexten einfach hier reinsetzen, aber in Delphi-Tags einschließen (Im Beitragseditor Bereiche->Delphi+, dann den Quelltext reinkopieren, dann auf das - klicken). Bei längeren Quelltexten anhängen, unten im Beitragseditor.
Sinjai hat folgendes geschrieben: | ok danke leute habs schon. mit div geht es |
Aber ohne Rest. 4 div 3 gibt dir z.B. 1. Ich glaube kaum, dass dir das was hilft. Deklariere die Variablen stattdessen als Single, Double oder Extended, dann nehme /, und du bekommst genaue Kommazahlen. (Bei sowas hilft dir übrigens auch die Delphi-Hilfe weiter.)
Delphi-Quelltext 1: 2: 3: 4:
| var x : Extended; begin x:=StrToFloat(Edit1.Text)/StrToFloat(Edit2.Text); end; |
Wenn du das überall machst, dann kannst du in deinem Taschenrechner überall Kommazahlen verwenden. (Vorsicht: Evtl. Punkt statt Komma verwenden!) Zum Umrechnen von String in Zahl musst du dann statt StrToInt einfach StrToFloat verwenden.
Und schau dir mal das hier an: www.christian-stelzm...rtikel/crashkurs.htm. Das ist ein Einsteigertutorial, in dem genau solche Sachen behandelt werden. Hilft wirklich weiter.
Und falls es dich interessiert: Der Unterschied zwischen Single, Double und Extended ist die Genauigkeit. Für einen Taschenrechner empfiehlt sich also Extended. (Auch hier: Delphi-Hilfe->Einfache Typen)
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Sinjai 
      
Beiträge: 39
xp
Delphi 7
|
Verfasst: So 02.03.08 19:59
ok danke das hat echt geholfen ps:kla interessiert mich das xD
|
|
Sinjai 
      
Beiträge: 39
xp
Delphi 7
|
Verfasst: So 02.03.08 20:10
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: So 02.03.08 20:19
Sinjai hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button4Click(Sender: TObject); var zahl1, zahl2, zahl3, zahl4, zahl5, zahl6, zahl7, zahl8, Division : Integer; begin zahl7 := StrToInt(edit7.text); zahl8 := StrToInt(edit8.text); Division := zahl7 div zahl8; label16.caption := IntToStr(Division); end;
end. |
was muss ich jetzt hier ändern damit es klappt? irgendwie will das immer noch nicht hinhauen...
Moderiert von AXMD: Delphi-Tags hinzugefügt |
Hellsehen können wir nicht, also WAS haut nicht hin? Fehlermeldung?
Eigentlich müsste das funktionieren, aber wie gesagt: Das ist eine Ganzzahldivision. Wenn du richtig dividieren willst, nimmst du statt div / , statt Integer Extended, statt IntToStr FloatToStr und statt StrToInt StrToFloat. (Habe ich allerdings oben lang und breit erklärt...) Und ehrlich gesagt: Einen Taschenrechner, der nur Ganzzahlen beherrscht, benutzt niemand. Warum verwendest du also Integer?
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Sinjai 
      
Beiträge: 39
xp
Delphi 7
|
Verfasst: So 02.03.08 20:28
um ehrelich zu sein hab ich gar keine ahnung was integer überhaupt bringt... ich habe wie beshrieben das div in / geändert und integer in extended und auch das andre geändert. ich drücke f9 und er sagt : Es gibt keine überladene version von StrToFloat, die man diesen Argumenten aufrufen kann.
|
|
bflegel
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: So 02.03.08 20:51
Hallo Sinjai,
warum nimmst Du nicht die Anregungen des Vorschreibers Timosch und wandelst es so um:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var zahl7, zahl8, Division : extended; begin zahl7 := StrToFloat(edit1.text); zahl8 := StrToFloat(edit2.text); Division := zahl7/zahl8; label16.caption := FloatToStr(Division); end; |
bye
bflegel
_________________ I know all the jokes about my name
|
|
Timosch
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: So 02.03.08 21:37
Sinjai hat folgendes geschrieben: | ok danke das hat echt geholfen ps:kla interessiert mich das xD |
Wenn dich das interessiert, warum liest du dir es nicht durch?
Wenn ich etwas fett schreibe, dann hat das einen Grund. Nach der Lektüre eines Tutorials würde dir einiges klar werden.
Sinjai hat folgendes geschrieben: | ich habe wie beshrieben das div in / geändert und integer in extended und auch das andre geändert. ich drücke f9 und er sagt : Es gibt keine überladene version von StrToFloat, die man diesen Argumenten aufrufen kann. |
Ich habe gesagt, verwende Extended statt Integer, StrToFloat statt StrToInt, FloatToStr statt IntToStr und / statt div. Das hast du nicht. In deinem geposteten Quelltext ist noch alles beim alten. Vermutlich hast du den alten Quelltext gepostet, denn StrToFloat kommt nirgendwo vor.
Sinjai hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button4Click(Sender: TObject); var zahl1, zahl2, zahl3, zahl4, zahl5, zahl6, zahl7, zahl8, Division : [b]Integer[/b]; begin zahl7 := StrToInt(edit7.text); zahl8 := StrToInt(edit8.text); Division := zahl7 [b]div[/b] zahl8; label16.caption := IntToStr(Division); end;
end. |
|
Aber da ich mich eh nicht mehr vom PC weg bewegen kann (Bänderriss am Sprunggelenk):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button4Click(Sender: TObject); var zahl1, zahl2, zahl3, zahl4, zahl5, zahl6, zahl7, zahl8, Division : Extended; begin zahl7 := StrToFloat(edit7.text); zahl8 := StrToFloat(edit8.text); Division := zahl7 / zahl8; label16.caption := FloatToStr(Division); end;
end. |
Oder noch kürzer:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button4Click(Sender: TObject); begin Label6.Caption := FloatToStr(StrToFloat(edit7.text) / StrToFloat(edit8.text)); end; |
Dann kommst du sogar ohne Variablen aus.
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
|