Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - kleines Problem mit einfacher Division
r@cer - Mi 25.08.10 22:46
Titel: kleines Problem mit einfacher Division
Hi an alle,
ich bin Programmieranfänger, d.h. ich habe gerade mit Delphi in der Schule angefangen. Dort mussten wir ein kleines Programm schreiben, mit dem man zwei Zahlen zusammen rechnen kann. Dass ganze soll mit zwei Edit-Fenstern und einem Button laufen und natürlich mit dem Quellcode. Der sah dann so aus: (hier funktionniert alles wunderbar)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var x,y,ergebnis:integer; begin x:=strtoint(edit_zahl1.text); y:=strtoint(edit_zahl2.text); ergebnis:=x+y; showmessage('Ergebnis = '+inttostr(ergebnis)); end; |
unsere Hausaufgabe ist es das selbe nur mit minus, mal und geteilt, also den restlichen Grundrechenarten durchzuführen. Mit dem Subtrahieren und Multiplizieren hat es ebenfalls auf Anhieb geklappt, doch als ich den selben Code auf die Division angepasst hatte, wurde die 6. Zeile rot hinterlegt. Ich weiß nur nicht wo der Fehler sein soll. Ich habs auch schon vergeblich mit double und float statt int versucht, aber da ich mich damit noch ganz einfach nicht auskenne wurde das natürlich auch nichts.
Also ich zeig euch einfach mal den zugehörigen Quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button4Click(Sender: TObject); var x,y,ergebnis:integer; begin x:=strtoint(edit_zahl7.text); y:=strtoint(edit_zahl8.text); ergebnis:=x/y; showmessage('Ergebnis = '+inttostr(ergebnis)); end; |
In der Zeile "ergebnis:=x/y;" wurde wie gesagt der Fehler angezeigt. Für euch professionelle Programmierer ist das bestimmt nur Kindergram, deshalb hoffe ich umso mehr, dass mir jemand helfen kann. ;)
würde mich freuen :)
lg r@cer
Moderiert von
Narses: Delphi-Tags hinzugefügt
Moderiert von
Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Mi 25.08.2010 um 23:13
Marc. - Mi 25.08.10 22:54
Hi und :welcome: im Forum!
r@cer hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); procedure TForm1.Button4Click(Sender: TObject); var x,y,ergebnis:integer; begin x:=strtoint(edit_zahl7.text); y:=strtoint(edit_zahl8.text); ergebnis:=x/y; showmessage('Ergebnis = '+inttostr(ergebnis)); end; | |
Integer ist ein Datentyp für natürliche Zahlen. Du brauchst allerdings bei einer Divison einen Typ, der Fließkommazahlen aufnehmen und darstellen kann, wie "Extended".
Entsprechend muss auch die Umwandlung der Zahl in Text angepasst werden: FloatToStr();
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button4Click(Sender: TObject); var x,y: Integer; result: Extended; begin x := strtoint(edit_zahl7.text); y := strtoint(edit_zahl8.text); ergebnis := x / y; showmessage('Ergebnis = '+FloatToStr(ergebnis)); end; |
Was passiert bei Y = 0? :roll: :idea:
Darüberhinaus empfehle ich Dir dringest einen Blick in
Christians Crashkurs [
http://www.christian-stelzmann.de/index_tutorials_crashkurs_reloaded.html] zu werfen, um grundlegende Problem aus dem Weg zu räumen. :)
PS: QuellCode lässt sich mit den Delphi-Tags [delphi] [/delphi
] darstellen.
elundril - Mi 25.08.10 22:56
Hallo und :welcome: im Delphi-Forum!
Dein "Fehler", wenn man es so nennen will, ist das es 2 unterschiedliche Divisionsmethoden gibt. Eine liefert eine Ganzzahl (Integer) zurück und die andere liefert eine Gleitkommazahl (Float) zurück. Du verwendest derzeit die für Float.
Lösung: Ersetzte dein "/" durch ein "div" und es sollte alles funktionieren. ;)
lg elundril
Tankard - Mi 25.08.10 22:58
da ergebnis vom typ integer ist, musst du div benutzen. da das ergebnis nur ne ganze zahl sein kann. / ist fuer floating point zahlen.
r@cer - Mi 25.08.10 23:21
Hi Marc,
vielen Dank füre deine Hilfe. Ich habe den Quellcode wie folgt abgeändert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button4Click(Sender: TObject); var x,y: Integer; result: Extended; begin x :=strtoint(edit_zahl7.text); y :=strtoint(edit_zahl8.text); result:=x / y; showmessage('Ergebnis = '+FloatToStr(result)); end; |
leider entsteht immer noch ein Fehler, nur diesmal um einiges weiter oben in folgender Zeile:
(das ist natürlich nur ein kleiner Ausschnitt des kompletten codes)
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure edit_zahl7Change(Sender: TObject); <--- diese Zeile wird rot hinterlegt |
@elundril
ich habe auch deinen kleinen Tipp ausprobiert (und auch noch mal danke deswegen),
und bin bei folgendem Code auf den selben Fehler gestoßen, wie ich ihn bereits Marc beschrieben habe, ein paar Zeilen weiter oben.
also ebenfalls in der Zeile "procedure edit_zahl7Change(Sender: TObject);"
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button4Click(Sender: TObject); var x,y,result:integer; begin x :=strtoint(edit_zahl7.text); y :=strtoint(edit_zahl8.text); result:=x div y; showmessage('Ergebnis = '+IntToStr(result)); end; |
Tankard - Mi 25.08.10 23:36
der fehler hat nichts mit der div korrektur zu tun.
r@cer - Mi 25.08.10 23:39
Aber auf jeden Fall har der Fehler was mit diesen acht Zeilen Quellecode zu tun.
Und er kam erst nachdem ich den Code so abgeändert hatte.
elundril - Mi 25.08.10 23:42
Was steht denn im Nachrichtenfenster von Delphi? Da sollte meisten "[Fehler]" oder bei der englischen Version "[Error]" stehen. Ohne der Fehlermeldung können wir leider nicht viel sagen.
Zum Beiträge löschen: Einfach auf "Beitrag melden" klicken und dann sagen das du dich verklickt hast. Das Team löscht dann den Beitrag. ;)
lg elundril
r@cer - Mi 25.08.10 23:44
Ok, diese beiden Zeilen wurden angezeigt:
[Fehler] Unit1.pas(35): Ungenügende Forward- oder External-Deklaration: 'TForm1.edit_zahl7Change'
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden
elundril - Mi 25.08.10 23:47
lösch mal die rot markierte zeile. Ich glaube, das Problem erledigt sich dann. ;)
lg elundril
r@cer - Mi 25.08.10 23:51
Ok vielen dank, das Programm läuft :)
und narürlich auch danke den Rest, ihr habt mir alle sehr geholfen.
lg r@cer
elundril - Do 26.08.10 00:01
Grund ist das du eine Methode deklariert hast, die du dann nicht ausformuliert hast. Du hast sozusagen dem Compiler gesagt: "Es gibt ne Methode mit diesem Namen". Und der sucht sich natürlich nen Wolf und findet die nicht. Deswegen: Wenn du mal unabsichtlich eine Methode erzeugt hast, entweder leer lassen (der Compiler optimiert die dann weg) oder auch die Deklaration löschen. ;)
lg elundril
Delete - Do 26.08.10 02:06
Es wäre hilfreicher, wenn du uns den Fehler nennen würdest, den die IDE ausgibt und nicht mit welcher Farbe die fehlerhafte Zeile unterlegt wird. ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!