Entwickler-Ecke

Sonstiges (Delphi) - tachenrechner will nicht dividieren!


Sinjai - Sa 01.03.08 22:36
Titel: tachenrechner will nicht dividieren!
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 - 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); //rundet dein Ergebnis
  Kommazahl := 12/3//teilt mit Kommastelle
end;


Marc. - 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. ;)


Sinjai - 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 - Sa 01.03.08 22:47

ok danke leute habs schon. mit div geht es


Timosch - Sa 01.03.08 22:50

user profile iconSinjai 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.

user profile iconSinjai 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: http://www.christian-stelzmann.de/artikel/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)


Sinjai - So 02.03.08 19:59

ok danke das hat echt geholfen ps:kla interessiert mich das xD


Sinjai - So 02.03.08 20:10


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 user profile iconAXMD: Delphi-Tags hinzugefügt


Timosch - So 02.03.08 20:19

user profile iconSinjai 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 user profile iconAXMD: 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?


Sinjai - 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 - 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


Timosch - So 02.03.08 21:37

user profile iconSinjai 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?
user profile iconTimosch hat folgendes geschrieben:

Und schau dir mal das hier an: http://www.christian-stelzmann.de/artikel/crashkurs.htm. Das ist ein Einsteigertutorial, in dem genau solche Sachen behandelt werden. Hilft wirklich weiter.

Wenn ich etwas fett schreibe, dann hat das einen Grund. Nach der Lektüre eines Tutorials würde dir einiges klar werden.

user profile iconSinjai 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.
user profile iconSinjai 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.