![]() |
676 zufällige Schlüssel zuweisen
Hallo,
ich bins mal wieder, euer Delphi-Noob. In dieser Hausaufgabe muss ich einen Text aus einem Memofeld Buchstabenpaarweise verschlüsseln können. Also: Es gibt 676 verschiedene Buchstabenpaare; 26² nämlich. Diesen Buchstabenpaaren soll jeweils ein Schlüssel zugewiesen werden, das heißt, aus AB wird meinetwegen HJ, aus GF wird ZU und so weiter. Mein StringGrid ist im anhängten Bild dargestellt. Könntet ihr mir nun sagen, wie es möglich ist, per Zufall (random) 676 Schlüssel zuzuweisen, sodass sie rechts von den Buchstabenpaaren im StringGrid stehen? Gruß Informatik-LK |
Re: 676 zufällige Schlüssel zuweisen
Erzeuge zwei Listen mit allen Kombinationen. Mach eine Schleife über die 1. Liste und weise per Zufall jedem Eintrag einen Eintrag der 2. Liste zu und markiere den dann als belegt.
|
Re: 676 zufällige Schlüssel zuweisen
Zitat:
|
Re: 676 zufällige Schlüssel zuweisen
Erstmal welches Bild?
Da ja bestimmte jedes Buchstabenpaar in deiner Liste nur einmal vorkommen darf, ist es am Einfachsten erstmal die Liste der Reihe nach zu füllen und danach vermischts du einfach per Zufall diese Liste. z.B.:
Code:
Liste Füllen: AA=AA AB=AB ... ZZ=ZZ
10000 Mal machen ( i1 = Random(676); i2 = Random(676); Liste[i1] und Liste[i2] vertauschen ) |
Re: 676 zufällige Schlüssel zuweisen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke schon einmal für eure Antworten.
Sorry wegen dem Bild. Ist jetzt da. |
Re: 676 zufällige Schlüssel zuweisen
Ähm, tja.
Ich kenne Delphi erst seit September dieses Jahres, von daher kann ich leider mit euren Ratschlägen so nicht viel anfangen, da ich zum Beispiel nicht weiß, wie ich die Listen mit den Buchstaben fülle usw. Es ist zwar eine große Bitte, aber mir würde es viel mehr nützen, wenn ich den Quelltext [zur Lösung] sehen könnte, da ich es verstehe wenn ich ihn sehe, aber wenn ich ihn selber schreiben soll, habe ich enorme Probleme... Es wäre toll, wenn ihr mir einen Ansatz dazu geben könntet. |
Re: 676 zufällige Schlüssel zuweisen
sehr viele Zeilen niwa?
versuch's lieber etwa so (da Graue entspricht dem für was der Zelleninhalt steht und Schwarz sind die Überschriften)
Code:
[color=silver].[/color] Ax Bx Cx Dx ... Zx
xA [color=silver]AA BA CA ...[/color] xB [color=silver]AB BB ...[/color] xC [color=silver]AC ...[/color] ... xZ [color=silver]AZ ...[/color] |
Re: 676 zufällige Schlüssel zuweisen
Wäre vielleicht eine Idee, aber ich weiß immmer noch nicht, wie ich die Schlüssel zuweise... :(
|
Re: 676 zufällige Schlüssel zuweisen
wie ist den deine Liste definiert?
|
Re: 676 zufällige Schlüssel zuweisen
versuchs mal so:
Delphi-Quellcode:
Das Ergebnis ist dann:
procedure Zuweisen;
var schluessel: array[0..675] of string[2]; // 675 + 1 (nullstelle) = 676 x, y: Integer; {fuer die Schleife} zeichen1, zeichen2: integer; {zum zuweisen} begin Zeichen1 := ORD('A'); for x := 0 to 25 do begin Zeichen2 := ORD('A'); for y := 0 to 25 do begin schluessel[x*26+y] := Chr(Zeichen1) + Chr(Zeichen2); Zeichen2 := Zeichen2 + 1; end; Zeichen1 := Zeichen1 + 1; end; // Soviel zum Zuweisen end; [0]: AA [1]: AB ... [26]: AZ [27]: BA ... rollstuhlfahrer [EDIT] Fehler im Quelltext behoben [/EDIT] |
Re: 676 zufällige Schlüssel zuweisen
Für zusammenhängende Buchstabenpaare bietet sich ein Record an in der Art
Delphi-Quellcode:
Wie man sich wohl denken kann, kommt das Ursprungspaar in das Feld plain und die verschlüsselte Variante in das Feld crypted.
type TKeyPair = record
plain, crypted: string[2]; end; |
Re: 676 zufällige Schlüssel zuweisen
Hallo rollstuhlfahrer,
deine Idee ist zum Erstellen der Liste oder? DeddyH, ich weiß nicht so recht, was ich mit deinem Beitrag anfangen soll... sorry. |
Re: 676 zufällige Schlüssel zuweisen
@DeddyH: unnötiger Speicherverbrauch
Delphi-Quellcode:
Zugriff dann per etwas davon
Var Liste: Array['A'..'Z', 'A'..'Z'] of String[2];
// oder Var Liste: Array['A'..'Z'] of Array['A'..'Z'] of String[2];
Delphi-Quellcode:
Liste['A', 'Z'] = Feld AZ = Liste['A']['Z']
oder auch
Delphi-Quellcode:
oder
Var Liste: Array['A'..'Z'] of Array['A'..'Z'] of Array[0..2] of Char;
Var Liste: Array['A'..'Z'] of Array['A'..'Z'] of Record c1, c2: Char; End; ... |
Re: 676 zufällige Schlüssel zuweisen
Hab ich da was falsch verstanden? Ich dachte, jeder Buchstabenkombination soll eine andere zugewiesen werden (z.B. AA -> BG).
|
Re: 676 zufällige Schlüssel zuweisen
Soll eigentlich auch so sein. Wenn ich rollstuhlfahrer's Idee nehme, dann wird AA anscheinend 91 zugewiesen...
|
Re: 676 zufällige Schlüssel zuweisen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe gerade noch eine Idee: Schaut euch erstmal meine Form an (beachtet nur die StringGrids). Wenn das Programm gestartet wird, stehen ja bei den StringGrids jeweils in der nullten Spalte die 676 Buchstabenpaare.
Nun habe ich mir einfach gedacht, wenn ich den Button "Schlüssel" klicke, bekommen die Zellen aus der ersten Spalte des linken StringGrids (also die Spalte neben den Buchstabenpaaren) durch Zufall den Inhalt der nullten Spalte des rechten StringGrids. Ich wollte es in etwa so umsetzen:
Delphi-Quellcode:
Habt ihr eine Ahnung, was ich in die geschweiften Klammern schreiben müsste? Ich habe nämlich schon so einige Sachen ausprobiert, aber es hat alles nicht funktioniert.
Procedure ButtonKeysClick(Sender: TObject);
var i: longint; begin for i := 0 to 675 do StringGrid1.Cells[1,i] := {Inhalt der zufällig ausgewählten Zellen im rechten StringGrid der Spalte 0} end; Gruß |
Re: 676 zufällige Schlüssel zuweisen
ich glaub Rollstuhlfahrers Code könnte Funktionieren (sieht jedenfalls für mich so aus).
Delphi-Quellcode:
Var C1, C2, C3, C4: Char;
S: String[2]; Liste: Array['A'..'Z', 'A'..'Z'] of String[2]; i, i2, i3: Integer; // Liste zuweisen For C1 := 'A' to 'Z' do For C2 := 'A' to 'Z' do Liste[C1, C2] := C1 + C2; // Liste mischen For i := 0 to 10 do For C1 := 'A' to 'Z' do Liste[C1, Char(Ord('A') + Random(26))] := Liste[Char(Ord('A') + Random(26)), Char(Ord('A') + Random(26))]; // oder Liste mischen For i := 0 to 10000 do Begin C1 := Char(Ord('A') + Random(26)); C2 := Char(Ord('A') + Random(26)); C3 := Char(Ord('A') + Random(26)); C4 := Char(Ord('A') + Random(26)); S := Liste[C1, C2]; Liste[C1, C2] := Liste[C3, C4]; Liste[C3, C4] := S; End; |
Re: 676 zufällige Schlüssel zuweisen
Vielen Dank. Ich werde es probieren. :)
Eine kurze Frage noch: Von welchem Typ ist die Variable S ? |
Re: 676 zufällige Schlüssel zuweisen
nja, da du 2 Bchstaben hast ... also String
String, String[2] oder Array[0..1] of Char hab die Variablendefinitionen oben nachgetragen |
Re: 676 zufällige Schlüssel zuweisen
Ok, und was genau ist jetzt zu tun, um die Ergebnisse ins StringGrid zu übertragen?
|
Re: 676 zufällige Schlüssel zuweisen
Zitat:
In der ASCII-Code-Tabelle kommen alle Großbuchstaben hintereinaner und da sich die Schleifen nur 26 man ausführen, kann da nie eine Zahlenkombination rauskommen Das fnktioniert dann etwa so:
Delphi-Quellcode:
rollstuhlfahrer
type tschluessel= array[0..675] of string[2];
function Zuweisen: tschluessel var schluessel: array[0..675] of string[2]; // 675 + 1 (nullstelle) = 676 x, y: Integer; {fuer die Schleife} zeichen1, zeichen2: integer; {zum zuweisen} begin Zeichen1 := ORD('A'); for x := 0 to 25 do begin Zeichen2 := ORD('A'); for y := 0 to 25 do begin schluessel[x*26+y] := Chr(Zeichen1) + Chr(Zeichen2); Zeichen2 := Zeichen2 + 1; end; Zeichen1 := Zeichen1 + 1; end; Result := schluessel; end; procedure Anzeigen; var schluessel: tschluessel; i,y: Integer; begin Randomize; schluessel := Zuweisen; i := Random(675) + 1; // dass i nicht 0 sein kann for y := 0 to 675 do begin if i > StringGrid1.RowCount - 1 then i := 1; StringGrid1.Cells[1,i] := schluessel[y]; i := i + 1; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:30 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-2025 by Thomas Breitkreuz