| Autor |
Beitrag |
r@cer
Hält's aus hier
Beiträge: 13
Win 7, Ubuntu 10.10
Delphi 5 Prof., Lazarus
|
Verfasst: Mi 25.08.10 22:46
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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 25.08.10 22:54
Hi und  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?
Darüberhinaus empfehle ich Dir dringest einen Blick in Christians Crashkurs zu werfen, um grundlegende Problem aus dem Weg zu räumen.
PS: QuellCode lässt sich mit den Delphi-Tags [delphi] [/delphi ] darstellen.
Zuletzt bearbeitet von Marc. am Mi 25.08.10 22:58, insgesamt 3-mal bearbeitet
Für diesen Beitrag haben gedankt: r@cer
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 25.08.10 22:56
Hallo und  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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Tankard
      

Beiträge: 217
Erhaltene Danke: 96
|
Verfasst: 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.
Für diesen Beitrag haben gedankt: r@cer
|
|
r@cer 
Hält's aus hier
Beiträge: 13
Win 7, Ubuntu 10.10
Delphi 5 Prof., Lazarus
|
Verfasst: 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
      

Beiträge: 217
Erhaltene Danke: 96
|
Verfasst: Mi 25.08.10 23:36
der fehler hat nichts mit der div korrektur zu tun.
|
|
r@cer 
Hält's aus hier
Beiträge: 13
Win 7, Ubuntu 10.10
Delphi 5 Prof., Lazarus
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
r@cer 
Hält's aus hier
Beiträge: 13
Win 7, Ubuntu 10.10
Delphi 5 Prof., Lazarus
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 25.08.10 23:47
lösch mal die rot markierte zeile. Ich glaube, das Problem erledigt sich dann.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Für diesen Beitrag haben gedankt: r@cer
|
|
r@cer 
Hält's aus hier
Beiträge: 13
Win 7, Ubuntu 10.10
Delphi 5 Prof., Lazarus
|
Verfasst: 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
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: 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
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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. 
|
|