| Autor |
Beitrag |
Bblackhawk
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 15:11
Hi @ all erstmal,
ich möchte ein programm basteln, dass große zahlen miteinander addiert und multipliziert...
die zahlen werden sehr groß, daher wollte ich listen verwenden um diese zu speichern...
Ich weiß, es gibt diverse andere methoden, aber ich würde gerne mit listen arbeiten...
Also nun meine frage(n)...
1. Wie erstelle ich am einfachsten eine einfach verkettete Liste ?
2. Wie kann ich die Multiplikation mit der Liste umsetzen? komme nicht so recht auf eine procedure...
Wäre nett, wenn ihr mir helfen könntet...
Vielen Dank im vorraus
Bblackhawk
P.S. wusste nich genau wo ich's reinschreiben sollte, daher hab ich das einfach mal hierrein gesetzt, passte meiner meinung nach am besten...
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 11.03.09 15:22
Hallo und
Es fragt sich ja erstmal wie die Listen aussehen sollen.
Grundsätzlich wäre eine Bibliothek wie BigInt sicherlich sehr viel sinnvoller:
sourceforge.net/projects/bigint-dl
Wenn die Geschwindigkeit nicht so wichtig ist, kannst du es auch selbst implementieren. Wie du schriftlich multiplizierst, solltest du doch eigentlich aus der Schule wissen.
de.wikipedia.org/wiki/Multiplikation
en.wikipedia.org/wik...iplication_algorithm
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 11.03.09 15:26
|
|
Bblackhawk 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 15:32
ich weiß, dass ich das mit BigInt einfacher haben könnte, möchte es aber gerne mit listen umsetzten... is komplizierter, aber ich würd das halt gerne so machen
zu dem multiplizieren... wie man das macht so schriftlich weiß ich, aber ich weiß nicht, wie ich das in delphi umsetzen kann 
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 11.03.09 15:37
Ja, wie stellst du dir deine Listen denn überhaupt vor? Vor der Umsetzung in Delphi musst du dir das ja erstmal überlegen. Ich meine was soll in den einzelnen Listenelementen denn drin stehen?
Und erst wenn du das hast, dann kannst du dir überlegen wie du das multiplizierst. Denn erst dann weißt du wie du an die einzelnen Stellen herankommst.
Und dann sollte die Multiplikation auch kein Problem mehr sein, wenn dir die Vorgehensweise soweit klar ist.
Was hat es eigentlich für einen Sinn dir das Leben so schwer zu machen und das Rad neu zu erfinden?
Dabei fällt mir auf:
Crossposts sollten angegeben werden.
forum.delphi-treff.d...owthread.php?t=26064
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mi 11.03.09 15:38
Hm. Weil es im DelphiTreff nicht mehr geht, probierst du es jetzt hier, oder wie? Aber ok.
Wie sieht denn dein Ansatz aus? Man kann das mit Listeneinträgen machen, ja. Ein Eintrag pro Ziffer, und dann so loslegen, wie man in der Schule schriftlich multipliziert. Zwei Ziffern multiplizieren geht ja im Typ Integer, wenn das größer als 9 ist, muss man mit Div 10 und Mod 10 die Einerstelle rausfinden und die Zehnerstelle im Übertrag speichern usw.
Ist nicht mal eben runtergeschrieben, aber prinzipiell sollte das doch kein Problem sein. 
_________________ We are, we were and will not be.
|
|
Bblackhawk 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 15:43
sry hab das mit crosspost vergessen... sry...
also in die lsite sollen große zahlen...
jedes listenelement eine stelle der zahl...
Bsp: Zahl: 546546 jede Zahl ein listenelement...
nun will ich 2 x beliebig lange zahlen miteinander multiplizieren... habe nun das problem, dass ich das nich so gebacken krieg...
und das hab ich leider nicht so wirklich verstanden... wie soll das gehen.. wenn ich 2 ziffern miteinander multipliziere, dann kommt das doch nich hin !?
Gausi hat folgendes geschrieben : |
Zwei Ziffern multiplizieren geht ja im Typ Integer, wenn das größer als 9 ist, muss man mit Div 10 und Mod 10 die Einerstelle rausfinden und die Zehnerstelle im Übertrag speichern usw.
|
kannste das mal bitte für dumme leute wie mich erklärn plz ??
danke schonmal
MfG
Bblackhawk
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mi 11.03.09 15:46
Nur mal doof gefragt: Kannst Du "trocken", also mit Papier und Stift 2 Zahlen schriftlich multiplizieren? Wenn nein, dann muss Du erst mal anfangen und Dir das aneignen. Erst dann kannst Du das Verfahren in Quellcode umsetzen.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Bblackhawk 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 15:48
Nersgatt hat folgendes geschrieben : | | Nur mal doof gefragt: Kannst Du "trocken", also mit Papier und Stift 2 Zahlen schriftlich multiplizieren? Wenn nein, dann muss Du erst mal anfangen und Dir das aneignen. Erst dann kannst Du das Verfahren in Quellcode umsetzen. |
das krieg ich noch so gerade hin ^^
aber wie gesagt, ich weiß nicht, wie ich das in delphi machen soll^^
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mi 11.03.09 15:59
Dann fang doch einfach mal an, den Algorhytmus umzusetzen.
Speichere Deine beiden Faktoren in Arrays und mache mit den Array das selbe, was Du sonst auf dem Papier machen würdest.
Fang einfach an und probier mal. Wenn Du dann nicht weiterkommst, dann poste hier Deine Versuche und wir werden Dir weiterhelfen.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Bblackhawk 
      
Beiträge: 18
|
Verfasst: Mi 11.03.09 16:07
mein erstes problem ist leider, dass meine listen noch nich ganz funktionieren... habt ihr eine fertige einfach verkettete liste für zahlen parat ?
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Mi 11.03.09 16:11
Bblackhawk hat folgendes geschrieben : | | mein erstes problem ist leider, dass meine listen noch nich ganz funktionieren... habt ihr eine fertige einfach verkettete liste für zahlen parat ? |
Was genau funktioniert nicht? Am besten eröffnest du einen neuen Thread, mit einer konkreten Frage zu deinem aktuellen Problem.
Ansonsten haben wir hier eine klasse SuFu (Suchfunktion) oder Google im Angebot...
Vielleicht sollte ich doch einmal ein Tutorial zu verketteten Listen schreiben, was ich bereits vor 2 Jahren vorhatte...
Grüße,
Marc
|
|
theChaoS
      
Beiträge: 38
|
Verfasst: Mo 20.04.09 18:16
Bblackhawk hat folgendes geschrieben : | | mein erstes problem ist leider, dass meine listen noch nich ganz funktionieren... habt ihr eine fertige einfach verkettete liste für zahlen parat ? |
Dass kommt mir SEHR bekant vor
Lass mich raten du bist im Gmy und in der 11 oder 12 ten ???
Ja das Problem hatte ich auch mal  .
Okay du machst folgendes du nimmst ENTWEDER (und das ist das besere) eine Verkette LIste für Strings. Denn dan kanst du ALLES abspeicheren und den string beim auslessen einfach konfertiren ODER du postest mal den quelltext und wir kucken wo es in der Liste hapert.
Wen gar nix meher geht sag bescheid weil ich hab noch so net liste irgenwo aber müst mal in den alten schulsachen kramen.
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 20.04.09 19:06
Hi
Ich hoffe doch wir werden es hinbekommen, eben den Aufbau zu erklären  blinde Arbeit mit fremdem Code kann doch ein wenig zu.. Verwirrungserscheinungen führen
Was ist denn so eine Liste? Gut, wir haben einen Datentyp. Um den wollen wir eine Struktur bauen, die es uns erlaubt, Nachfolger und Vorgänger des Listenelements zu ermitteln.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TListenElement = class (TObject) private FContent: Integer; FNext: TListenElement; FPrev: TListenElement; public end; |
Eventuell ohne das "private"(das regelt nur die Zugriffsrechte und macht unter Andwerem die Auswahl im Ergänzungsfeld etwas übersichtlicher), aber das sollte es in etwa sein. Jetzt benötigt ihr noch Methoden, also Prozeduren und Funktionsaufrufe der Klasse TListenElement, mit denen ihr denZugriff auf die Feldvariablen der Klasse steuert und, mit denen ihr euch die Arbeit erleichtert.
Das sind im Wesentlichen: - Content setzen und lesen
- Prüfen, ob Element erstes oder letztes Element der Liste(ob Nachfolger existiert)
- Element an dieses anhängen
Eventuell wollt ihr auch eine Listen-Klasse schreiben, die den Umgang mit den Elementen erleichtert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TListe = class(TObject) private FAktives: TListenElement; public function Weiter: Boolean; function Zurück: Boolean; function Lese: Integer; procedure Schreibe(aWert: Integer); end; |
So, das wäre das Grundprogramm für eine Liste. Wenn ihr nun z.B. noch wissen müsst, ob ihr am Listenende seid, ohne gleichzeitig zu versuchen, das nächste Element auszuwählen, kommen noch ein Paar Funktionen hinzu.
Ob zum Beispiel ein Nachfolger existiert, könnt ihr ganz einfach mit einem Vergleich auf nil sehen. nil bedeutet so viel wie "nichts", "nicht existent". Wortwörtlich "not in list". if Exists(FNext) wäre also gleichbedeutend mit if FNext <> nil bzw. if Assigned(FNext) then ...
Damit das auch klappt, müsst ihr die Feldvariable, die auf den Nachfolger zeigt, auf nil setzen, wenn ihr diesen noch nicht hinzugefügt oder schon freigegeben habt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| constructor TListenElement.Create; begin inherited Create; FNext := nil; FPrev := nil; end;
procedure TListenElement.HaengeAn(ANext: TListenElement); begin FNext := ANext; if ANext <> nil then ANext.FPrev := self; end; |
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Zuletzt bearbeitet von Hidden am Di 21.04.09 17:32, insgesamt 1-mal bearbeitet
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 20.04.09 19:43
Moin!
Hidden hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| constructor TListenElement.Create; begin inherited Create; end; | |
Auch wenn bei TObject theoretisch unnötig, bitte immer an den geerbten Konstruktor denken.
cu
Narses
PS: Das Initialisieren der Feldvariablen im Konstruktor ist übrigens nicht nötig, der Speicher einer Klasse wird immer mit 0 initialisiert geliefert (garantierte Eigenschaft von Klassen). 
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
|