AGB  ·  Datenschutz  ·  Impressum  







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

Schriftliche Division

Ein Thema von St.Pauli · begonnen am 4. Jan 2006 · letzter Beitrag vom 5. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von St.Pauli
St.Pauli

Registriert seit: 26. Dez 2004
351 Beiträge
 
Delphi 7 Personal
 
#1

Schriftliche Division

  Alt 4. Jan 2006, 21:47
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
Gruß St.Pauli
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#2

Re: Schriftliche Division

  Alt 4. Jan 2006, 22:06
meinst du so???
zahl1 div zahl2 das gibts auch nocht
zahl1 / zahl2 die variablen kannst du auch durch arrays ersetzen. musst bloß den index dann richtig angeben.
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#3

Re: Schriftliche Division

  Alt 4. Jan 2006, 22:08
Hallo,

mit MOD kannst du den "Rest" berechnen.

Gruß,
ManuMF
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Benutzerbild von St.Pauli
St.Pauli

Registriert seit: 26. Dez 2004
351 Beiträge
 
Delphi 7 Personal
 
#4

Re: Schriftliche Division

  Alt 4. Jan 2006, 22:13
Erstmal THX. Das ist mir schon klar, aber ich weiss nicht, wie ich das konkret anwenden muss...

Oder sitze ich gerade auf dem Schlauch?
Gruß St.Pauli
  Mit Zitat antworten Zitat
Kinimod8

Registriert seit: 9. Jan 2004
Ort: Barsbüttel
317 Beiträge
 
Delphi 6 Personal
 
#5

Re: Schriftliche Division

  Alt 4. Jan 2006, 22:17
Entschuldingung, aber was meinst du mit "schriftliche Division". Das kenne ich nur auf dem Papier, nicht im Computer
Dominik Peters
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#6

Re: Schriftliche Division

  Alt 4. Jan 2006, 22:18
hie mal ein bsp mit deinen arrays

Delphi-Quellcode:
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;
in array a wird immer das ergebnis aus der division von array b und c gespeichernt.

ich hoffe ich konnte dir weiter helfen.

mfg christian18
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Schriftliche Division

  Alt 4. Jan 2006, 22:23
ä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....
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von St.Pauli
St.Pauli

Registriert seit: 26. Dez 2004
351 Beiträge
 
Delphi 7 Personal
 
#8

Re: Schriftliche Division

  Alt 5. Jan 2006, 14:29
Zitat von DGL-luke:
-stack durch divisor teilen
Das wär schon das erste Problem. Ich kann nicht eine Zahl durch eine Zahl teilen, wenn ich gerade erst die Funktion dazu schreibe. Das mag jetzt ein bisschen wirr vorkommen, aber wenn der Divisor zum Beispiel 51431435415415251541566240261341656264134313421323 12321468671795... wäre, bekäme ich mit den herkömmlichen Variabeln und Funktionen Probleme.

Hier mal der Ausgang. Zwei Zahlen vom Typ BigInt...

Delphi-Quellcode:
type
  Zahl = 0..9; // Eine Dezimalstelle...
  BigInt = array [1..BigIntSize] of Zahl;
... wobei jede Stelle des arrays auch die Dezimalstelle der Zahl darstellt. Nun will ich 2 Zahlen vom Typ BigInt dividieren.

Also, nur noch mal kurz die Vorhergehensweise zusammengefasst:
  • Als Grungerüst benutzte ich eine repeat-Schleife, bis der Zähler i null erreicht (?)
  • Ich hole mir eine Zahl, beginnend von der größten Dezimalstelle ab, und füge die in ein Zwischen-Array ab. Hier stoße ich schon auf technische Umsetztungs-Probleme.
  • Dann probiere ich in einer neuen Schleife, wie lange ich brauche, bis der Divisor größer ist als der Dividend. Die Anzahl der Schritte ist mein Zwischenergebnis. Der Dividend - den erhhöhten Divisor ist mein Rest.
  • Dann muss ich wieder so lange Zahlen vom Dividend herunter holen, bis ich wieder teilen kann...
Habt ihr eine Idee, wie ich die Teile nun umsetzten kann?
Gruß St.Pauli
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Schriftliche Division

  Alt 5. Jan 2006, 14:54
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
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Schriftliche Division

  Alt 5. Jan 2006, 17:16
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.
Angehängte Dateien
Dateityp: pas u_divisor_175.pas (2,2 KB, 10x aufgerufen)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:10 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