Autor Beitrag
Sinjai
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 113

Win 7
Delphi 2010 Arch., C# VS 2008
BeitragVerfasst: 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.

ausblenden 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;

_________________
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp
Delphi 7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp
Delphi 7
BeitragVerfasst: Sa 01.03.08 22:47 
ok danke leute habs schon. mit div geht es
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: 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.)
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp
Delphi 7
BeitragVerfasst: So 02.03.08 19:59 
ok danke das hat echt geholfen ps:kla interessiert mich das xD
Sinjai Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp
Delphi 7
BeitragVerfasst: So 02.03.08 20:10 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: So 02.03.08 20:19 
user profile iconSinjai hat folgendes geschrieben:
ausblenden 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?

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
Sinjai Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39

xp
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: So 02.03.08 20:51 
Hallo Sinjai,

warum nimmst Du nicht die Anregungen des Vorschreibers Timosch und wandelst es so um:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: 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: www.christian-stelzm...rtikel/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:
ausblenden 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):

ausblenden 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:

ausblenden 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