![]() |
Schriftliche Division
Hi,
ich bin dabei so Sachen wie schriftliche Addition, Multiplikation, etc. zu implentieren. So weit so gut. Alles klappt nur jetzt hänge ich bei der Division und weiß wirklich nicht mehr weiter. Hier ist die Ausgangssituation. Ich habe 2 Arrays von 1..x bestehend aus 0..9. Nun will ich die beiden dividieren. +, - und * waren einfach doch jetzt sitzte ich auf dem Trockenen. Wie kann/muss ich da ran gehen? PS: Suche hat mich nicht weitergebracht |
Re: Schriftliche Division
meinst du so???
Delphi-Quellcode:
das gibts auch nocht
zahl1 div zahl2
Delphi-Quellcode:
die variablen kannst du auch durch arrays ersetzen. musst bloß den index dann richtig angeben.
zahl1 / zahl2
|
Re: Schriftliche Division
Hallo,
mit MOD kannst du den "Rest" berechnen. Gruß, ManuMF |
Re: Schriftliche Division
Erstmal THX. Das ist mir schon klar, aber ich weiss nicht, wie ich das konkret anwenden muss...
Oder sitze ich gerade auf dem Schlauch? |
Re: Schriftliche Division
Entschuldingung, aber was meinst du mit "schriftliche Division". Das kenne ich nur auf dem Papier, nicht im Computer :gruebel:
|
Re: Schriftliche Division
hie mal ein bsp mit deinen arrays
Delphi-Quellcode:
in array a wird immer das ergebnis aus der division von array b und c gespeichernt.
for i:=0 to 9 do
begin a[i]:=b[i] div c[i]; // wenn du eine ganze Zahl raus haben willst a[i]:=b[i] / c[i]; // wenn du eine komma zahl haben willst --> genaue ergebnis end; ich hoffe ich konnte dir weiter helfen. mfg christian18 |
Re: Schriftliche Division
ähm.. er will doch "schriftlich", also so wie als mensch, dividieren.
Also(Ich führe jetzt hier mal einen "Stack" ein, wenn auf den gepusht wird, heisst das, dass zu seinem wert addiert wird; ergebnis ist immer das ergebnis aus einer vorherigen operation): -Vom Dividenden so viele ziffern auf den shiften(=vom anfang nehmen), bis die daraus sich ergebende zahl größer als der divisor ist, diese zahl auf den stack pushen -stack durch divisor teilen, ergebnis brunden, ergebnis zum Ergebnisarray dazu, selbes ergebnis * divisor, ergebnis vom stack abziehen -wieder vom dividenden shiften, auf den stack pushen bis stackwert größer als divisor -wieder teilen usw., bis du nicht mehr shiften kannst. das was dann noch im "Dividendenstack" übrig bleibt, ist dein rest. ich werde das mal in code fassen, das ist ja hier eher wirr.... |
Re: Schriftliche Division
Zitat:
Hier mal der Ausgang. Zwei Zahlen vom Typ BigInt...
Delphi-Quellcode:
... wobei jede Stelle des arrays auch die Dezimalstelle der Zahl darstellt. Nun will ich 2 Zahlen vom Typ BigInt dividieren.
type
Zahl = 0..9; // Eine Dezimalstelle... BigInt = array [1..BigIntSize] of Zahl; Also, nur noch mal kurz die Vorhergehensweise zusammengefasst:
|
Re: Schriftliche Division
Vorschlag eines Anfängers (Pseudocode):
Aufgabe: x := a/b; a,b,x : Double; aInt,bInt,Rest, : Integer; aStr,a1Str,a2Str,bStr,xStr : string; n : integer (Anzahl der gewünschten Nachkommastellen des Ergebnisses) aStr := FloatToStr(a); bStr := Float to Str(b); Nachkommastellen von b ermitteln und in aStr den Dezimalpunkt um die entsprechenden Stellen nach rechts verschieben (evtl. mit Nullen auffüllen) aStr aufteilen in a1Str(=Vorkomma-Anteil) und a2Str(=Nachkomma-Anteil) aInt := IntToStr(a1String); bInt := IntToStr(bStr); xStr := IntToStr(aInt DIV bInt) + '.'; // ergibt den ganzzahligen Anteil von x Rest := aInt MOD bInt; zum Rest solange die nächste Nachkommastelle (aus a2Str) bzw. eine Null anhängen, bis Rest DIV bInt > 0, Ergebis an xStr anhängen und das ganze wieder von vorne, bis die gewünschte Zahl der Nachkommastellen von x erreicht ist. Das sollte klappen - ich kann's aber nicht ausprobieren, da ich im Büro kein Delphi installiert habe. mfg gfjs |
Re: Schriftliche Division
Liste der Anhänge anzeigen (Anzahl: 1)
naja... also zwischendrin benutze ich ganz normal div und mod, das jetzt auhc noch selbstzuschrieben, wäre wohl ein wenig overdosed. ich häng mal den von mir produzierten Code an.
Leider ungetestet, da ich die Umwandlung von Zahl in Array noch nicht raus hab. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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 by Thomas Breitkreuz