Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   DIV Problem (Integer?) (https://www.delphipraxis.net/160618-div-problem-integer.html)

Decadoria 23. Mai 2011 06:57

DIV Problem (Integer?)
 
Hallo Ihr :D
Ich hab n problem und finde meinen Fehler nicht!
Und zwar geht es darum das ich in meinem Programm eine Rechnung machen will,
als ergebnis will ich aber nur GANZE zahlen ausgegeben bekommen.

Ich hab daher jetzt in meiner Rechnung mit DIV statt / gerechnet..
Allerdings bekomme ich nun immer folgende Fehlermeldung:


[Fehler] Unit1.pas(42): Operator ist auf diesen Operandentyp nicht anwendbar

Hier Nochmals mein Quelltext... Kann mir jemand sagen was ich jetzt Falsch gemacht habe???

var
Form1: TForm1;
L,H,L2,H2:real;


procedure TForm1.RechneClick(Sender: TObject);

begin
L:=strtoint (Laenge.text);
H:=strtoint (Hoehe.text);

if L>H then begin
L2:=L;
H2:=(L div 3)*2;
end
else
begin
H2:=H;
L2:=(H div 3)*2;
end;

Hoehe2.text:=inttostr(H2) ;
Laenge2.Text:=intttostr(L2) ;

end;


LG Deca

DeddyH 23. Mai 2011 07:03

AW: DIV Problem (Integer?)
 
DIV funktioniert nur mit ganzen Zahlen, L ist aber vom Typ real.

P.S.: Willkommen in der DP :dp:

mkinzler 23. Mai 2011 07:04

AW: DIV Problem (Integer?)
 
Warum deklarist du die Variablen als Reals und nicht als Integer?

himitsu 23. Mai 2011 08:01

AW: DIV Problem (Integer?)
 
Warum sind eigentlich
Delphi-Quellcode:
L,H,L2,H2:real;
global deklariert, obwohl sie nur lokal benötigt werden?


Zitat:

Zitat von mkinzler (Beitrag 1102283)
Warum deklarist du die Variablen als Reals und nicht als Integer?

Vorallem da du ja eigentlich überall Integer haben wolltest.
siehe
Delphi-Quellcode:
L:=strtoint
,
Delphi-Quellcode:
intttostr(L2)
,
Delphi-Quellcode:
div
und vorallem
Zitat:

DIV Problem (Integer?)
Zitat:

[Fehler] Unit1.pas(42): Operator ist auf diesen Operandentyp nicht anwendbar
Operator = dein DIV
Operandentyp = Typ deiner Variable
Also, da kann man aus der Fehlermeldung herauslesen, daß die Variable einen unpassenden Typen besitzt, welcher nicht mit dieser Operation vereinbar ist.
PS: Für Fließkommazahlen nutzt man das
Delphi-Quellcode:
/
als Divisionsoperator.



Man hätte nicht alles fett schreiben müssen und der Code paßt auch ganz gut in ein [code]...[/code] oder sogar ein [delphi]...[/delphi] (der Knopf mit dem roten Helm) rein. :zwinker:
Für Fehlerstellen macht sich z.B. ein Kommentar ala
Delphi-Quellcode:
// <<<<< hier ist es
nicht verkehrt.

Decadoria 23. Mai 2011 09:33

AW: DIV Problem (Integer?)
 
Aaaaaa Danke schön :D

Ich hatte das problem das am anfang immer die fehlermeldung kam das InttoFloat nicht möglich ist ^-^
Aber habe das problem behoben xD

danke euch xD

und das mit [delphi] und Code und so wusste ich nich - . - sorry

Deep-Sea 23. Mai 2011 09:44

AW: DIV Problem (Integer?)
 
Zitat:

Zitat von Decadoria (Beitrag 1102311)
[...] die fehlermeldung kam das InttoFloat nicht möglich ist [...]

So eine Funktion gibt es auch nicht. Für was auch?!

himitsu 23. Mai 2011 10:26

AW: DIV Problem (Integer?)
 
Er/Sie/Es meinte vermutlich StrToFloat und die Zuweisung an einen Integer. :stupid:

Decadoria 23. Mai 2011 13:02

AW: DIV Problem (Integer?)
 
Also ne xD Das mit Int und Floats hab ich noch nich kapiert xD

Ich krieg dauerhaft Fehlermeldungen - .-

Code:
procedure TForm1.RechneClick(Sender: TObject);

var V,L,H,L2,H2:integer;

begin
L:=strtoint (Laenge.text);
H:=strtoint (Hoehe.text);
V:= L div H;

if V>1.5 then
  begin
  H:= L div 1.5; // [Fehler] Unit1.pas(47): Operator ist auf diesen Operandentyp nicht anwendbar
  end
else
  begin
  L:=1.5*H;
  end
end;

Hoehe2.text:=inttostr(H2) ;
Laenge2.Text:= intToStr(L2) ;
omg - . - Warum ist mein Operator jetz nich anwendbar?? ich hab das doch als Integer deklariert ö.ö

Sorry bin zu blöd für Delphi glaub ich langsam xD

DeddyH 23. Mai 2011 13:04

AW: DIV Problem (Integer?)
 
Delphi-Quellcode:
Integerergebnis := Integer div Integer;
Alle 3 Teile müssen ganzzahlig sein, sonst kannst Du DIV nicht anwenden. 1,5 geht also nicht.

Deep-Sea 23. Mai 2011 13:05

AW: DIV Problem (Integer?)
 
Weil 1,5 nun mal keine ganze Zahl ist, der div-Operator aber nur für ganze Zahlen zu nutzen ist. Wenn du durch 1,5 teilen musst, musst du den normalen Teilungsoperator "/" nutzen. Um das Gleitkommaergebnis dieser Operation wieder in eine ganze Zahl zu wandeln hilft z.B. die Funktion Delphi-Referenz durchsuchenRound.

Decadoria 23. Mai 2011 13:14

AW: DIV Problem (Integer?)
 
[Fehler] Unit1.pas(47): Inkompatible Typen: 'Integer' und 'Extended'
krieg ich wenn ich / nehm statt DIV

DeddyH 23. Mai 2011 13:19

AW: DIV Problem (Integer?)
 
Wir drehen uns hier im Kreis. Was genau möchtest Du denn erreichen?

Decadoria 23. Mai 2011 13:21

AW: DIV Problem (Integer?)
 
Ich will das so rechnen wie es da steht >> also teilen ^^

Allerdings soll er am ende nur GANZE zahlen ausgeben^^

Deswegen dachte ich an INT und DIV ^^ etc - . - xD

Deep-Sea 23. Mai 2011 13:25

AW: DIV Problem (Integer?)
 
Zitat:

Zitat von Deep-Sea (Beitrag 1102355)
Um das Gleitkommaergebnis dieser Operation wieder in eine ganze Zahl zu wandeln hilft z.B. die Funktion Delphi-Referenz durchsuchenRound.

Wenn du eine Zahl mit / teilst, kommt nun mal eine Gleitkommazahl raus. Diese kann man nicht ohne weiteres einer ganzen Zahl zuweisen.
Also entweder du nutzt eine Funktion wie Round, wie ich ja schon sagte (auch wenn's scheinbar keiner gelesen hat :roll:) oder du rechnest komplett mit Gleitkommazahlen und gibst das Ergebnis nicht mit FloatToStr sondern mit Delphi-Referenz durchsuchenFormat (o.ä.) aus. Dort kannst du dann immer noch bestimmen, wie viele Nachkommastellen du anzeigen willst.

DeddyH 23. Mai 2011 13:26

AW: DIV Problem (Integer?)
 
Genau, durchgängig mit Fließkommazahlen rechnen und nur die Ausgabe auf ganze Zahlen beschränken.

Decadoria 23. Mai 2011 13:28

AW: DIV Problem (Integer?)
 
hmm ich versuchs mal xD

ich kenn Round nich :D

DeddyH 23. Mai 2011 13:30

AW: DIV Problem (Integer?)
 
Round

Deep-Sea 23. Mai 2011 13:32

AW: DIV Problem (Integer?)
 
Zitat:

Zitat von Decadoria (Beitrag 1102369)
ich kenn Round nich :D

  1. Der Name ist ja auch so kompliziert gewählt, dass man sich nichts drunter vorstellen kann, gell?
  2. Eine Hilfe hat Delphi ja auch nicht.
  3. Soll heißen? Alles was du nicht kennst, willst du auch nicht kennenlernen? Damit wirst du nicht weit kommen :wink:

Decadoria 23. Mai 2011 13:37

AW: DIV Problem (Integer?)
 
aaaaa xD doch klar will ich das kennenlernen etc ^^ aber ich hatte mich auch ma über round informiert und hat trotzdem nix geklappt ^^ deswegen bin ich auf DIV gegangen was auch nich ging und dann war ich planlos xD

DeddyH 23. Mai 2011 13:42

AW: DIV Problem (Integer?)
 
Die Datentypen müssen schon passen, da ist Delphi sehr pingelig. Übrigens würde ich es begrüßen, wenn Du in angemessenem Deutsch posten würdest. Nichts gegen einen gelegentlichen Smiley, aber bitte in überschaubarer Anzahl, wir sind ja nicht im Chat hier.

himitsu 23. Mai 2011 14:00

AW: DIV Problem (Integer?)
 
Wobei man auch nichtganzzahlige Divisionen bei DIV verwenden kann ... und zwar dann, wenn man die Divisor und Dividend auf ganzahlige Werte erweitert. :stupid:
Delphi-Quellcode:
x := y / 1.5; // float

x := Trunc(y / 1.5); // integer (abgerundet)
x := Round(y / 1.5); // integer (gerundet)

x := y * 2 div 3; // integer (abgerundet)
x := (y * 2 + 2{*1}) div 3; // integer (aufgerundet)
x := (y * 2 + 1{*2}) div 3; // integer (nahezu gerundet)

*1 = 3 - 1 = Divisor - 1 = höchster Wert eines Divisionsergebnisses
*2 = 3 / 2 = Divisor / 2 = Hälfte des Divisors

Deep-Sea 23. Mai 2011 14:14

AW: DIV Problem (Integer?)
 
Zitat:

Zitat von himitsu (Beitrag 1102382)
Wobei man auch nichtganzzahlige Divisionen bei DIV verwenden kann ... und zwar dann, wenn man die Divisor und Dividend auf ganzahlige Werte erweitert. :stupid:

OMG! Also in Mikrocontrollern ist das ja ok - ohne FPU ist das sonst oft kontraproduktiv. Aber in einem PC lohnt sich dieser Umweg imho nicht wirklich.

Fehlen in deiner schönen Auflistung nicht auch noch Delphi-Referenz durchsuchenFloor und Delphi-Referenz durchsuchenCeil als grundlegende Funktionen zu dem Thema? :P

DeddyH 23. Mai 2011 14:18

AW: DIV Problem (Integer?)
 
Habt Ihr noch mehr zur Verwirrung des TE beizutragen? :tongue:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 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