Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   möchte modulo (Teilen) function neu programmieren (https://www.delphipraxis.net/37648-moechte-modulo-teilen-function-neu-programmieren.html)

Coder 8. Jan 2005 12:49


möchte modulo (Teilen) function neu programmieren
 
Hallo
Ich wollte die "mod" function nachprogrammieren..

aber irgendwie kommen da falsche Ergebnisse.


Delphi-Quellcode:
function mody(Zahl :longint; Teiler :longint): longint;
var fix3 : longint;
runden1 ,runden2, Fix2,Fix1, erst: real;
begin
erst := Zahl / Teiler;
Fix1 := (erst - round(erst));
fix2 := (Fix1 * Teiler);
runden1 := fix2 - round(fix2);
runden2 := runden1 * 10;
If runden2 > 5 Then Fix3 := round(fix2) + 1;
If runden2 <= 5 Then Fix3 := round(fix2);
result := Fix3;
end;

----------

habt Ihr eine Idee woran das liegt?

oder gibt es evtl source zu so einer Funktion?

[edit=Admin]Code in Delphi-Tags gesetzt. Künftig bitte selber machen. ;-) Mfg, Daniel[/edit]

Aenogym 8. Jan 2005 12:51

Re: möchte modulo (Teilen) function neu programmieren
 
hi,

aber wozu willst du das rad neu erfinden? in delphi gibt es doch die mod() funktion.
und außerdem, nächstes mal bitte die [delphi]-tags benutzen, dann wird dein code schln formatiert und man kann ihn besser lesen

Aenogym

Oxmyx 8. Jan 2005 12:57

Re: möchte modulo (Teilen) function neu programmieren
 
Wieso so kompliziert? Den Modulo berechnet man einfacher mit:

Zahl - (Zahl div Teiler) * Teiler

Nothine 8. Jan 2005 18:00

Re: möchte modulo (Teilen) function neu programmieren
 
Zitat:

Zitat von Coder
oder gibt es evtl source zu so einer Funktion?

den gibt mit sicherheit irgendwo, aber wozu, wenn man schonmal im binärsystem dividieren musste (wenn schon für nix anderes ist informatikunterricht zumindest dafür gut :mrgreen:), ist es eigentlich recht einfach, eine mod funktion (bzw. div, da beides in einem rutsch berechnet wird) nachzuprogrammieren.

Dazu muss man lediglich wissen, dass im binärsystem ausgehend vom höchstwertigsten bit des dividenten, die zahl der der abzufragenden bits immer weiter erhöhend, auf den wert des divisors überprüft wird, sollte dieser erreicht oder überschritten sein wird er abgezogen und es wird weitergerechnet. das könnte z.B. so aussehen:
Delphi-Quellcode:
procedure _shld(var Dest,Source: Cardinal);
begin
  Dest  := Dest shl 1;
  Dest  := Dest or Byte( (Source and $80000000) > 0 );
  Source := Source shl 1;
end;

function _Mod(Dividend,Divisor: Cardinal): Cardinal;
var Count: Byte;
begin
  Result := 0;
  Count := 32; // 31 bits, also 31 mal schieben
  repeat
    _shld(Result,Dividend); // schiebe nächstes bit in result
    if Result >= Divisor then // s.o., bedingung erfüllt?
      Result := Result - Divisor; // falls ja, divisor abziehen
    Dec(Count);
  until Count = 0;
end;
und @Aenogym:
klar, wozu das rad neuerfinden, aber wenn man verstehen will was im rechner passiert wenn man (X mod Y) irgendwo hinschreibt isses manchma unabdinglich :wink:


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