Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 2 Integerwerte in einem Integerwert reversibel speichern? (https://www.delphipraxis.net/97453-2-integerwerte-einem-integerwert-reversibel-speichern.html)

PeterPanino 10. Aug 2007 16:26

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Vielen Dank an alle für die fundierten Antworten!

idontwantaname 10. Aug 2007 16:32

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Zitat:

Zitat von sirius
Gestern noch 8bit und heute sind wir schon beim 32bit Prozessor. Damit ist die Grenze nicht mehr bei 128, sondern bei 32768.

Du meinst wohl "Gestern noch 16bit, heute sind wir schon beim 32bit Prozessor" ;)

SirThornberry 10. Aug 2007 16:40

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
er meinte tatsächlich 8 bezogen auf die Grenze von 128 welche eben die Mitte wäre bei 8bit-unsigned

sirius 10. Aug 2007 16:42

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Zitat:

Zitat von idontwantaname
Du meinst wohl "Gestern noch 16bit, heute sind wir schon beim 32bit Prozessor" ;)

Ich dachte damit an den KC87, den man in Thüringen sicherlich auch kannte :mrgreen:

@sir: Hagen meinte aber wie ich "signed". Ich wollte cuh gar nicht darauf weiter rumreiten. Ich musste bei Hagens Beitrag nur schmunzeln. :dp:

Polynom 10. Aug 2007 17:36

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Hallo !
Ich hab auch noch eine Idee, allerdings eher mathematisch und ich weiß nicht genau ob es funktioniert.

Man hat also seine 2 Zahlen, welche ganzzahlig sind und positiv sein müssen.
Jetzt nimmt man eine Primzahlen-Liste und nummeriert die Primzahlen (Im Programm könnte man das z.B. durch einen Array lösen).
Die zu den beiden Zahlen dazugehörigen Primzahlen werden miteinander multipliziert und man erhält eine Zahl.

Da ich denke, dass es etwas schlecht erklärt ist gibt's hier ein kleines Beispiel:
Die beiden Zahlen seien 4 und 6.
Primzahl-Liste:
Nr 1 -> 2
Nr 2 -> 3
Nr 3 -> 5
Nr 4 -> 7
Nr 5 -> 11
Nr 6 -> 13

Daraus folgt, dass man 7 und 13 miteinander multiplizieren muss. Das Ergebnis: 91
Die 91 wäre dann die Zahl, welche ausgegeben wird.

Und über Primfaktorzerlegung müsste man die ursprünglichen Primzahlen wieder herausfinden, welche dann anhand der Liste wieder in die Ausgangszahlen umgewandelt werden können.
Ich bin mir nur nicht sicher ob das Ergebnis eindeutig ist, oder ob es noch eine zweite Möglichkeit gibt...

Mit freundlichen Grüßen, Michael

BenjaminH 10. Aug 2007 17:51

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Primfaktorzerlegung ist eindeutig, das Verfahren wäre theoretisch also machbar.
Das Problem dabei ist, dass die zugeordneten Primzahlen unverhältnismäßig groß würden und man so durch die Zusammenführung der beiden Werte nichts gewinnen würde.
Außerdem dauert die Primfaktorzerlegung einfach zu lang(der Grund, weshalb RSA nicht geknackt werden kann). Und beim Suchen der x-ten Primzahl verhält sich das genauso(Natürlich in beiden Fällen erst bei Zahlen bestimmter Größenordnungen)

thkerkmann 10. Aug 2007 18:20

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Und ausserdem kannst Du nicht sagen, welches die erste und welches die zweite Zahl war.

Gruss

negaH 10. Aug 2007 20:37

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Ich meinte garnicht Bit, sondern beschrieb in pseudo-Mathematik den Sachverhalt so das der pfiffige Fragesteller eigentlich selbst in der Lange sein müsste das auf 8Bit,16,32,64 oder meintewegen auch 1024 Bit, mit oder ohne Vorzeichen, zusammenzureimen.

Es ist egal wieviel Bit man als Datentyp hat, die Fragestellung war

"wie kann man zwei Ganzzahlen, programmierdeutsch Integer, so kombinieren das man sie in einer anderen Zahl kodiert".

Nun, dazu wählt man eine neue Zahlenbasis die so groß ist das alle seine zu kombinierenden Zahlen da rein passen. Dann multipliziert man seine zusammenzubauenden Zahlen mit Potenzen zu dieser Basis.

Möchte man zb. 3 solcher Zahlen zwischen 0 bis 127 in eine Zahl packen wählen wir die Basis 128.

R := A * 128^2 + B * 128^1 + C * 128^0;

Und das beste daran ? Ganz einfache Mathemtik Klasse 4 oder 5 spätestens. Denn so funktionieren unsere Zahlen.

Mag sich jetzt belehrerisch und arrogant anhören, vielleicht sogar sarkastisch, aber so ist es.

Wir als Programmierer gewöhnen uns es allzuschnell an in unserer Sprache ein simples Problem zu beschreiben. Dabei benutzen wir aber garnicht die Basis der Informatik als Sprache, also die Mathematik, sondern wie Straßenjungen den Dialekt unserer Programmiersprache. Ich nehme mich da nicht aus in keinster Weise. Aber bestimmte Sachverhalte, eben wie die Zahlensysteme, müssen echt sitzen bei uns.

Gruß Hagen

negaH 10. Aug 2007 20:56

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Zitat:

Die zu den beiden Zahlen dazugehörigen Primzahlen werden miteinander multipliziert und man erhält eine Zahl.
Also du meinst das so ?

12 = 2*2*3
20 = 2*2*5

2*2*2*2*3*5 = 12 * 20

2*2*2*3 = 24
2*5 = 10

2*2*2*2*3*5 = 10 * 24

Gruß Hagen

Apollonius 10. Aug 2007 21:19

Re: 2 Integerwerte in einem Integerwert reversibel speichern
 
Nein. Er meinte, das die 12. und die 20. Primzahl miteinander multipliziert werden. Dann ist es selbstverständlich eindeutig (natürlich nicht bezüglich p*q=q*p). Allerdings werden die Zahlen sehr schnell sehr groß.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.
Seite 2 von 5     12 34     Letzte »    

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