![]() |
einfaches Rechenproblem
hi
In der Schule sollen wir einen einfachen Flächenberechner machen, nur wo liegt bei dem Quellcode der Fehler:
Delphi-Quellcode:
Wo list da der Wurm?
var
a,b,c,d: integer; begin ... else if drei = true then //drei:boolean begin a:= StrToInt(lengh.text); b:= StrToInt(brigh.Text); c:= a*b; d:= c/2; //Inkompatible Typen: 'Integer' und 'Extended' final.Caption:= IntToStr(d); end else if kreis = true then //kreis:boolean begin a:= StrToInt(lengh.Text); b:= StrToInt(brigh.Text); c:= a*3.41592654; //Inkompatible Typen: 'Integer' und 'Extended' final.Caption:= IntToStr(c/2);// Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann end; |
Re: einfaches Rechenproblem
Ist eigentlich ganz einfach, und der Fehler ist auch wirklich selbsterklärend :lol:
Schau doch mal :
Delphi-Quellcode:
und dann:
var
a,b,c,d: integer;
Delphi-Quellcode:
d:= c/2; //Inkompatible Typen: 'Integer' und 'Extended'
Delphi-Quellcode:
was kann denn bei c/2 rauskommen, wenn c...sagen wir mal den Wert 3 hat? Wäre das Ergebnis ein Integer?
final.Caption:= IntToStr(c/2);// Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann
Und dann dies hier:
Delphi-Quellcode:
Was für ein Ergebnis erwartest du hier? Wenn zum Beispiel a den Wert 1 hat? Wäre das Ergebnis ein Integer?
c:= a*3.41592654; //Inkompatible Typen: 'Integer' und 'Extended'
Darum kommen die Fehler. Prüfe Deine Datentypen, und nimm vielleicht die eine oder andere Konvertierung vor. Sherlock |
Re: einfaches Rechenproblem
c:= a*3.41592654;
c ist ein Integer. a*3.14 ergibt niemals Integer. Falscher Datentyp final.Caption:= IntToStr(c/2); IntToStr erwartet einen Integer. c/2 ergibt keinen Integer. |
Re: einfaches Rechenproblem
danke, habe es jetzt mit Real gelöst. Habe nicht gedacht, dass Integer keine Zahlen, sondern nur Integerdefinierte Variablen nimmt. :thumb:
|
Re: einfaches Rechenproblem
Äh, das ist aber nicht die Lösung, Du kannst ruhig Integer weiter verwenden, DU musst nur mit ihnen richtig umgehen. Ein Integer nimmt sehr wohl Zahlen auf, aber eben nur ganzzahlige. Wenn du dann das Ergebnis einer Multiplikation mit einem Real oder das Ergebnis einer Division in ein Integer speichern willst, musst Du dafür sorgen, daß es bestimmt keinen Nachkommaanteil gibt. Das erreichst Du entweder durch Rundungsfunktionen, oder im Falle des Dividierens, zum Beispiel durch ganzzahlige Division mittels
![]() Edit: Natürlich kannst Du auch alles in Float machen, aber ich wollte nur darauf hinweisen, daß Du Deine ganzen Berechnungen auch mit Integern machen kannst. Natürlich um den Preis einer niedrigeren Genauigkeit, weil ja die Nachkommastellen fehlen. Sherlock |
Re: einfaches Rechenproblem
Floats sind wohl für den Anwendungsbereich besser als integers. Guck dir mal an, was er da macht...
Noch ein paar Hinweise: - nimm besser Double statt Real. Real sollte man nicht mehr verwenden... - mach das = true weg. Warum? siehe hier: ![]() - breite heißt auf englisch width. brigh gibts nicht - Pi ist in Math schon definiert. Kannst du einfach verwenden - benenn deine Variablen besser. Bei so kleinen programmen geht das noch, aber, wenn sie größer werden wirst du dich bei nichts sagenden Bezeichnern nicht sonderlich gut zurecht finden - ... mfg Christian |
Re: einfaches Rechenproblem
Ist mir klar, nur wollte ich mit diesem Vorurteil aufräumen:
Zitat:
|
Re: einfaches Rechenproblem
Zitat:
|
Re: einfaches Rechenproblem
danke für die Tipps.
|
Re: einfaches Rechenproblem
Zitat:
mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz