Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   größerer Datentyp als Extended (https://www.delphipraxis.net/76462-groesserer-datentyp-als-extended.html)

Mussi0 4. Sep 2006 22:54


größerer Datentyp als Extended
 
Hallo zusammen,

ich bin gerade an meine Grenzen gestossen und zwar soll mein Programm ein Palindrom erstellen.
Also sowas z.B. :

789 + 987 = 1776
----------------------------------------------------------------
1776 + 6771 = 8547
----------------------------------------------------------------
8547 + 7458 = 16005
----------------------------------------------------------------
16005 + 50061 = 66066
----------------------------------------------------------------
----------------------------------------------------------------
PALINDROM: 66066

Mein Problem ist nun, es kann natürlich sein das dass Palindrom so groß wird das es 1. nicht mehr in
den Integer-Wert passt 2. nicht mehr in den Extended-Typ.

Es wäre schön wenn Ihr mir helfen könntet!!!

Gruß
Muss!0

Meflin 4. Sep 2006 22:56

Re: größerer Datentyp als Extended
 
Moin!

Dafür gibt es mehrere sg. Hier im Forum suchenBigInt Units ;)


Mussi0 4. Sep 2006 22:59

Re: größerer Datentyp als Extended
 
Ahh...Danke das ging echt schnell..

ehmmm...wie funktioniert das denn?? muss ich dann die Unit einbinden und
dann auf die Funktionen darin zugreifen?

Gruß
Muss!0

Meflin 4. Sep 2006 23:09

Re: größerer Datentyp als Extended
 
Im Prinzip funktionieren die Units alle gleich. du bindest sie ein und kannst dann mit
Delphi-Quellcode:
Foo := TBigInt.Create('1234567890');
oder ähnlich einen BigInt erstellen und mit den Funktionen die in der Unit deklariert sind damit rechnen, z.B.
Delphi-Quellcode:
Foo1.Add(Foo2)
Das genaue verfahren ist allerdings von Unit zu Unit natürlich unterschiedlich ;)


Mussi0 5. Sep 2006 09:14

Re: größerer Datentyp als Extended
 
ahh...jetzt hab ichs verstanden, also wie ich die
Units einbinde und im allgemeinen Nutze wusst ich schon
nur leider konnte ich nichts damit anfangen wie ich
diese BigInt-Unit nutze!!!

Vielen Vielen Dank das hat mir sehr geholfen....

Gruß
Muss!0

negaH 5. Sep 2006 12:18

Re: größerer Datentyp als Extended
 
Suche mal nach meinem DECMath, das dürfte für dich intuitiver zu benutzen sein und bei weitem schneller als TBigInt in den mathm. Berechnungen. http://www.michael-puff.de/Developer...agen_Reddmann/ -> Datei DEC_5_1c.zip

Aber mal ne andere Frage:

Wie erzeugst du deine Palindrome mathematisch ? also mit welchem Algorithmus ?

Ich frage weil du nämlich dafür garnicht rechnen musst, also garkeine BigInt/IInteger oder sowas benötigst.
Betrachte mal deine Zahlen einfach als Strings die nur aus Ziffern bestehen können. Wir wissen zb. das wenn die Ziffern '5' +'3' = '8' erzeugt werden an letzter Stelle im String, das logischerweise an erster Stelle im String also eine '5' +'3' = '8' stehen muß. Dein Problem reduziert sich bei Strings mit gerader Länger also auf eine reine Spiegelung und eben die ausschließliche Berechnung von einzelnen Ziffern als Zeichen.

Gruß Hagen

negaH 5. Sep 2006 14:46

Re: größerer Datentyp als Extended
 
Beispiel:

wir gehen Top-Down vor, also erzeugen per Zufall einen Zahlen String wie zb.

"2345" und spiegeln diesen -> "2345" + "5432" ergibt "23455432". Nun wollen wir 2 Palindrome erzeugen die addiert exakt diese Zahl ergibt. Wir nehmen "12044021" und erzeugen

"2" - "1" = "1"
"3" - "2" = "1"
"4" - "0" = "4"
"5" - "4" = "1"

unser Palindrom ist also "11411411" + "12044021" = "23455432", fertig ohne Berechnungen großer Zahlen.

Klar dürfte sein das dieser einfach Algo. nicht alle Palindrome erzeugen kann, aber eben sehr viele und sehr große ohne aufwendige Zahlenberechnungen und auf direktem Wege ohne Trial&Error !

Gruß Hagen

Mussi0 5. Sep 2006 15:23

Re: größerer Datentyp als Extended
 
Hallo...

wenn ich doch nun 2345 habe als Integer bzw. überhaupt als Zahlwert kann ich diesen dann
doch zur Laufzeit dann in einen String umwandeln diesen dann "umdrehen" und dann wieder in eine Zahl und diese
dann addieren also dann: 2345 + 5432 = 7777 und nicht 23455432 sicher ist dies auch ein
Palindrom ABER ein schriftlicher und nicht (wie ich es möchte einen mathematischen!!).

Aber ich werde mich jetzt mal umsehen nach dieser DECMath und werde es damit probieren
trotzdem vielen Dank!!!

Gruß
Muss!0

PS: Könnte ich nicht einfach ohne eine Zahlenwert-Variable zu nutzen 2 Strings nehmen und die
einzelnen Stellen darin wie im dritten Schuljahr zusammenaddieren? Oder dürfte diese Methode
zu langsam sein? :gruebel:

Hatte was vergessen!! :wink:

negaH 5. Sep 2006 16:18

Re: größerer Datentyp als Extended
 
Zitat:

PS: Könnte ich nicht einfach ohne eine Zahlenwert-Variable zu nutzen 2 Strings nehmen und die
einzelnen Stellen darin wie im dritten Schuljahr zusammenaddieren? Oder dürfte diese Methode
zu langsam sein?
Ja kannst du, dies wäre mein nächster Vorschlag gewesen um mathematische Palindrome zu erzeugen. Du baust quasi einen Addierer für Dezimalzahlen -> Strings die Dezimalzahlen enthalten.

Aber sag mal, oben baust du ein Palindrom indem du sukzessive so lange gespiegelte Zahlen addierst bis ein echtes Palindrom entsteht. Ist dies Absicht und eine gundlegende Bedingung für deinen Algo ?

Wenn nicht dann kanst du so ein Palindrom in jedem Falle direkt berechnen, das beduetet dann auch das du nur die gewünschte Anzahl an Ziffern eingibst und ein Palindrom per Zufall erzeugt würde, in einem Schritt. Bei deiner Methode kann es sehr sehr lange dauern bis man ein großes Palindrom erzeugt hat.

Übrigens im DECMath DEMO findest du einen Algo. für Automorphe Zahlen, das sind Zahlen der Form X' = X^2 wobei alle Ziffern von X als Ziffern in X^2 enthalten sind. Zb.

Code:
X =                                                            42576 57676 91038 90995 89338 00226 07743 74008 17871 09376
X² = 18127 64889 37539 71252 85535 50988 19268 32151 66459 22506 42576 57676 91038 90995 89338 00226 07743 74008 17871 09376
Gruß Hagen

jfheins 5. Sep 2006 16:28

Re: größerer Datentyp als Extended
 
Du könntest vorerst auch einfach einen Int64 verwenden, derreicht für die normalen Sachen bestimmt auch ... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 Uhr.
Seite 1 von 2  1 2      

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