Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi einfaches Rechenproblem (https://www.delphipraxis.net/114630-einfaches-rechenproblem.html)

STS301 28. Mai 2008 14:28


einfaches Rechenproblem
 
hi

In der Schule sollen wir einen einfachen Flächenberechner machen, nur wo liegt bei dem Quellcode der Fehler:


Delphi-Quellcode:
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;
Wo list da der Wurm?

Sherlock 28. Mai 2008 14:33

Re: einfaches Rechenproblem
 
Ist eigentlich ganz einfach, und der Fehler ist auch wirklich selbsterklärend :lol:

Schau doch mal :
Delphi-Quellcode:
var
  a,b,c,d: integer;
und dann:
Delphi-Quellcode:
d:= c/2; //Inkompatible Typen: 'Integer' und 'Extended'
Delphi-Quellcode:
final.Caption:= IntToStr(c/2);//  Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann
was kann denn bei c/2 rauskommen, wenn c...sagen wir mal den Wert 3 hat? Wäre das Ergebnis ein Integer?

Und dann dies hier:
Delphi-Quellcode:
c:= a*3.41592654; //Inkompatible Typen: 'Integer' und 'Extended'
Was für ein Ergebnis erwartest du hier? Wenn zum Beispiel a den Wert 1 hat? Wäre das Ergebnis ein Integer?

Darum kommen die Fehler. Prüfe Deine Datentypen, und nimm vielleicht die eine oder andere Konvertierung vor.

Sherlock

RavenIV 28. Mai 2008 14:37

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.

STS301 28. Mai 2008 14:41

Re: einfaches Rechenproblem
 
danke, habe es jetzt mit Real gelöst. Habe nicht gedacht, dass Integer keine Zahlen, sondern nur Integerdefinierte Variablen nimmt. :thumb:

Sherlock 28. Mai 2008 14:58

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 Delphi-Referenz durchsuchenDIV

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

r2c2 28. Mai 2008 15:47

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: http://r2c2.weingut-rehn.de/content5..._Variablen.htm
- 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

Sherlock 28. Mai 2008 15:50

Re: einfaches Rechenproblem
 
Ist mir klar, nur wollte ich mit diesem Vorurteil aufräumen:
Zitat:

Zitat von STS301
danke, habe es jetzt mit Real gelöst. Habe nicht gedacht, dass Integer keine Zahlen, sondern nur Integerdefinierte Variablen nimmt. :thumb:

Sherlock

Khabarakh 28. Mai 2008 15:59

Re: einfaches Rechenproblem
 
Zitat:

Zitat von r2c2
- nimm besser Double statt Real. Real sollte man nicht mehr verwenden...

Lang, lang ist's her ;) . Heutzutage ist Real nicht mehr dieser lustige 6-Byte-Type, sondern ein generischer Typ, der *damdamdadam*... im derzeitigen Compiler ein Synonym für Double ist :zwinker: . Real sollte also genauso wie Integer die erste Wahl sein, wenn man nicht besondere Ansprüche an Genauigkeit und Wertebereich hat.

STS301 28. Mai 2008 16:02

Re: einfaches Rechenproblem
 
danke für die Tipps.

r2c2 28. Mai 2008 20:33

Re: einfaches Rechenproblem
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von r2c2
- nimm besser Double statt Real. Real sollte man nicht mehr verwenden...

Lang, lang ist's her ;) . Heutzutage ist Real nicht mehr dieser lustige 6-Byte-Type, sondern ein generischer Typ, der *damdamdadam*... im derzeitigen Compiler ein Synonym für Double ist :zwinker: . Real sollte also genauso wie Integer die erste Wahl sein, wenn man nicht besondere Ansprüche an Genauigkeit und Wertebereich hat.

Ui, dann muss ich wohl eine meiner meine Gebetsmühlen umstellen. Seit wann ist das so? IIRC war das in D6 noch anders...

mfg

Christian


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.
Seite 1 von 2  1 2      

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