Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mod Anweisung funktioniert nicht (https://www.delphipraxis.net/94939-mod-anweisung-funktioniert-nicht.html)

Cr3at0r 28. Jun 2007 12:17


Mod Anweisung funktioniert nicht
 
Guten Mittag,

folgender Quellcode:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Zahl, Rest: real;
    Zaehler, Teiler: Integer;
begin
  Zahl := StrToFloat(Edit1.Text);
  Zaehler := 0;
  Rest := 0;
  Teiler := 2;
  Repeat
    Rest := Zahl Mod Teiler; //<--[Fehler] Teiler.pas(37): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
    Zahl := Zahl / 2;
  Until
    Rest <>0;

  Label1.Caption := FloatToStr(Zaehler);
end;
Wo liegt der Fehler? Finde ihn nicht.

SirThornberry 28. Jun 2007 12:18

Re: Mod Anweisung funktioniert nicht
 
mod funktioniert nur mit ganzzahlen. Zahl ist jedoch vom Typ "real"

Cr3at0r 28. Jun 2007 12:24

Re: Mod Anweisung funktioniert nicht
 
Args ja stimmt, dank dir.

SirThornberry 28. Jun 2007 12:29

Re: Mod Anweisung funktioniert nicht
 
für Realzahlen kannst du so den Rest berechnen (alle Variablen sind vom Typ Real bei dem Beispiel):
Delphi-Quellcode:
lRest := lDivident - Trunc(lDivident / lDivisor) * lDivisor;

Cr3at0r 28. Jun 2007 12:34

Re: Mod Anweisung funktioniert nicht
 
Mit Integer geht es nun, aber jetzt läuft die repeat..until Schleife immer ins nirgendwo. :(

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Zahl, Rest, Zaehler, Teiler: Integer;
begin
  Zahl := StrToInt(Edit1.Text);
  Zaehler := 0;
  Teiler := 2;
  Repeat
    Rest := Zahl Mod Teiler;
    Zahl := Zahl XOR 2;
    Inc(Zaehler);
  Until
    Rest <> 0;

  Label1.Caption := FloatToStr(Zaehler);
end;
Dabei sollte sie ja eigentlich stoppen sobald Rest <> 0 wird, tut sie irgendwie nicht. :(
Ne Idee woran das liegen mag?

3_of_8 28. Jun 2007 12:37

Re: Mod Anweisung funktioniert nicht
 
Tja, da kannst du vermutlich lange warten.

Zahl:=Zahl xor 2; macht nichts anderes, als das 1. Bit von Zahl (von 0 beginnend) immer zu "wechseln". Mehr auch nicht.

hoika 28. Jun 2007 12:41

Re: Mod Anweisung funktioniert nicht
 
Halo,

was willst du durch das xor erreichen ?

4 xor 2 = 6
6 xor 2 = 4

Endlos-Schleife, weil 4 und 6 keinen Rest bei mode 2 haben.


Heiko
PS:
Das xor hat der Taschenrechner von Windows ausgerechnet ... ;)

Cr3at0r 28. Jun 2007 12:47

Re: Mod Anweisung funktioniert nicht
 
Hatte in der Hilfe gelsen das es unter anderem ein Teiler für Integer Werte sein soll, muss ich mich verlesen haben. :oops:
Wie dem auch sei, hab ich durhc die Formel von SirThornberry das hinbekommen, danke euch.

sirius 28. Jun 2007 13:05

Re: Mod Anweisung funktioniert nicht
 
Zitat:

Zitat von Cr3at0r
Hatte in der Hilfe gelsen das es unter anderem ein Teiler für Integer Werte sein soll, muss ich mich verlesen haben. :oops:
Wie dem auch sei, hab ich durhc die Formel von SirThornberry das hinbekommen, danke euch.

Die Hilfe meinte sichlerlich "shr" :zwinker:


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