AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

einfaches Rechenproblem

Ein Thema von STS301 · begonnen am 28. Mai 2008 · letzter Beitrag vom 29. Mai 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von STS301
STS301

Registriert seit: 6. Nov 2007
668 Beiträge
 
Delphi 7 Personal
 
#1

einfaches Rechenproblem

  Alt 28. Mai 2008, 15:28
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?
Sebastian

ölpölp

Linux will rule the universe!!
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#2

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 15:33
Ist eigentlich ganz einfach, und der Fehler ist auch wirklich selbsterklärend

Schau doch mal :
Delphi-Quellcode:
var
  a,b,c,d: integer;
und dann:
d:= c/2; //Inkompatible Typen: 'Integer' und 'Extended' 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:
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
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 15:37
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.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von STS301
STS301

Registriert seit: 6. Nov 2007
668 Beiträge
 
Delphi 7 Personal
 
#4

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 15:41
danke, habe es jetzt mit Real gelöst. Habe nicht gedacht, dass Integer keine Zahlen, sondern nur Integerdefinierte Variablen nimmt.
Sebastian

ölpölp

Linux will rule the universe!!
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#5

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 15:58
Ä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
Oliver
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#6

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 16:47
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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#7

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 16:50
Ist mir klar, nur wollte ich mit diesem Vorurteil aufräumen:
Zitat von STS301:
danke, habe es jetzt mit Real gelöst. Habe nicht gedacht, dass Integer keine Zahlen, sondern nur Integerdefinierte Variablen nimmt.
Sherlock
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 16:59
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 . Real sollte also genauso wie Integer die erste Wahl sein, wenn man nicht besondere Ansprüche an Genauigkeit und Wertebereich hat.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von STS301
STS301

Registriert seit: 6. Nov 2007
668 Beiträge
 
Delphi 7 Personal
 
#9

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 17:02
danke für die Tipps.
Sebastian

ölpölp

Linux will rule the universe!!
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#10

Re: einfaches Rechenproblem

  Alt 28. Mai 2008, 21:33
Zitat von Khabarakh:
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 . 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
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz