AGB  ·  Datenschutz  ·  Impressum  







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

die Division eines Taschenrechners

Ein Thema von Kanikkl · begonnen am 11. Okt 2009 · letzter Beitrag vom 11. Okt 2009
 
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#7

Re: die Division eines Taschenrechners

  Alt 11. Okt 2009, 17:23
Darf ich an dieser Stelle anmerken, dass deine Multiplikation nicht korrekt ist, die funktion nur, wenn beide zahlen >1 sind und keine Kommastellen haben...
//edit: ah, aber nicht so richtig... da fehlt auch die nachkommabehandlung so ein bisschen: Beispiel: 0.1*5.5=0.6, was daran liegt dass du (um zu wissen, wie oft du die schleife durchlaufen musst) die variable durchlauf rundest.

Zur Division Ich habe mir folgendes überlegt. Nehmen wir mal die Funktion von DeddyH und nennen sie nicht Dividieren sondern "SimpleDIV(x:integer,y:integer):integer"

damit kannst du also gucken, wie oft quasi y in x reinpasst.

So und den rest (also die kommastellen) berechnest du jetzt über die gute alte Schuldivision


10:8=1,25
------
20
-16
------
40
-40
------
0

Jetzt zur konkreten Umsetzung:

Ich würde etwas elementarer anfangen.

Definiere dir erstmal einen eigenen Zahlentyp
z.B.

Delphi-Quellcode:
TDezimalstelle=0..9
TZahl=record
   Vorkomma:int64;
   Nachkomma:array of TDezimalstelle
Damit kannst du auch wunderschön auf die einzelnen Nachkommastellen zugreifen. Denn ich hatte jetzt gerade das problem, dass ich bei der Division den Wert, den SimpleDIV liefert mit 0.1 multiplizieren wollte, um ihn an die erste Nachkommastelle zu bringen, was aber nicht so recht funktionieren wollte. So kannst du jetzt sachen Zahl.Nachkomma[1]= irgendwas

Also:

Delphi-Quellcode:

 const Stellen=10;

type

  TDezimalStelle=0..9;
  TZahl=record
    Vorkomma:int64;
    Nachkomma:array of TDezimalStelle;
  end;

{...}

function SingleDIV(x,y:extended):integer;
begin
  Result := 0;
  while x >= y do
    begin
      Result := Result + 1;
      x := x - y;
    end;

end;

function TZahlToExtended(Zahl:TZahl):extended;
var i:integer;
{hier habe ich mir erlaubt, mathematische Funktionen einzubauen, da diese Funktion ja zunächst nur der Darstellung von Zahlen dient und nicht der internen Berechnung...}
begin
  result:=Zahl.Vorkomma;
  for i:=0 to Stellen do
   begin
    result:=result+(Zahl.Nachkomma[i] / (power(10,(i+1))));
   end;
end;


function dividieren(x,y: extended): extended;
var
i,j:integer;
Zahl : TZahl;
begin

  //berechne x/y

  setlength(Zahl.Nachkomma,Stellen+1);
  Zahl.Vorkomma:=SingleDIV(x,y);
  for i:=1 to Zahl.Vorkomma do
    x:=Subtrahieren(x,y);

  for j:= 0 to Stellen do
   begin
     x:=multiplizieren(x,10);
     Zahl.Nachkomma[j]:=SingleDIV(x,y);
     For i:=1 to Zahl.Nachkomma[j] do
       x:=subtrahieren(x,y);
   end;
  result:=TZahlToExtended(Zahl);

end;
Und nochwas:

In der Mathematik führt man die Subtraktion durch die Addition ein:

Also müsstest du, um es wirklich sauber zu machen sagen:

subtraktion(x,y):= addition(x,-y)

Selbes gilt für die Multiplikation (allerdings müsste man dann die division so umschreiben, dass sie keine Multiplikation mehr benutzt, sonst dreht man sich im Kreise)...aber das wäre ja durch eine kleine for schleife machbar.

Multiplikation:=Division(x,Division(1,y))
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
 


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 15:01 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