Autor Beitrag
Mentor86
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Mi 18.06.03 10:25 
Hi Leute,

wie kann ich ein StringGrid füllen? Es soll ein Vigeneré Quadrat werden.
:arrow: Bitte schreibt mir den Quelltext!

MfG
Mentor86

Moderiert von user profile iconTino: Titel geändert.
Mentor86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Mi 18.06.03 16:47 
Hi, ich habe jetzt die erste Zeile alleine geschafft, aber ich weiss nicht wie ich es hinkriegen soll, dass jetzt unter jeder Spalte das Alphabet hinkriegen soll. Ich habe folgenden Quelltext benutzt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var i,x,y,z:integer;
begin
x:=0;
y:=0;
z:=65;
for i:=1 to 26 do
begin
stringgrid.cells[x,y]:=chr(z);
x:=x+1;
z:=z+1;
end;
end;



Kann mir jemand helfen?
MfG Mentor

Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt

_________________
Man kann Probleme nicht mit Denkweisen lösen, die zu ihnen geführt haben.
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mi 18.06.03 17:05 
Hört sich doch schon besser an ;) Ich finde es nur nicht gut wenn jemand sagt: Schreibt mir den Quellcode. Probier es doch so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
function vigenere(x,y: integer; grbuchst: boolean): char;
var anfang, ende: char;

function betw(x,a,b: integer): integer;
begin
  if x<a then result:=b-(a-x)
  else if x>b then result := a+(x-b)
  else result := x;
end;

begin
  if grbuchst then begin
    anfang := 'A';
    ende := 'Z';
  end
  else begin
    anfang := 'a';
    ende := 'z';
  end;
  result := Chr(betw(Ord(anfang)+(x-1)+(y-1), Ord(anfang), Ord(ende)));
end;


Aufrufen kannst du das dann mit

Stringgrid1.Cells[x,y] := vigenere(x-1,y-1,true);

Falls du denkst: Eigentlich unsinnig, im aufruf -1 und in der Funktion +1, dann denk daran, das dein Stringgrid von 0 ausgeht und das vigenere quadrat an sich unter 1 die reihe versteht, die mit B anfängt (BCDEFGHI...XYZA)

Jedenfalls nach meinem Kryptographie Buch (Geheime Botschaften - Simon Singh)

Der Parameter grbuchst gibt an ob grossbuchstaben zurückggegeben werden sollen. die funktion betw ist eigentlich nur zur besseren übersicht.

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Mi 18.06.03 17:35 
mit dem +1 -1 musst du noch gucken, ich weiß nicht genau

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Mentor86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Mi 18.06.03 18:07 
Danke, ich treff mich gleich mit ´nem Freund, wir werden dann mal schauen, ob wir das hinkriegen.
MfG Mentor

_________________
Man kann Probleme nicht mit Denkweisen lösen, die zu ihnen geführt haben.
Mentor86 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Fr 20.06.03 17:56 
Hi, wir haben jetzt das in der Schule nochmal bvesprochen und der Lehrer hat uns eine Lösung gegeben. Ich verstehe sie nicht ganz. (Vielleicht muss man da Mathe-Profi sein). Kann mir jemand erklären, was da genau passiert? Ich wäre ihm sehr dankbar.

Der Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
vigqua:ARRAY[1..26,1..26of char;

procedure TForm1.Button1Click(Sender: TObject);
var s, z, i, j :integer; 
begin
i:=0
for z:=1 to 26 do 
  begin 
  for s:=1 to 26-i do 
    vigqua[s,z]:=chr(s+64+i); 
  j:=0
  for s:=26-i+1  to 26 do 
    begin 
    j:=j+1
    vigqua[s,z]:=chr(64+j) 
    end
  i:=i+1
  end
for i:=1 to 26 do 
for j:=1 to 26 do
stringgrid.cells[i-1,j-1]:=vigqua[i,j];
end;


MfG Mentor

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.

_________________
Man kann Probleme nicht mit Denkweisen lösen, die zu ihnen geführt haben.
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Fr 20.06.03 18:13 
mit diesem stück füllt er das stringgrid mit den buchstaben, die in vigqua an stelle [i,j] stehen.

ausblenden Delphi-Quelltext
1:
2:
3:
for i:=1 to 26 do 
  for j:=1 to 26 do 
    stringgrid.cells[i-1,j-1]:=vigqua[i,j];


Mit folgendem füllt er das dreieck halt so, daß in zeile eins in das Alphabet normal abgetragen wird. Wenn zeile (z) gleich 2 ist, wird in spalte (s) 1 das b geschrieben. Bis zum 'Z'.
Wenn das soweit fertig ist, ist das letzte Feld noch frei. Das erste freie Feld ermittelt er mit s := 26-i+1 und da füllt er in das feld halt den buchstaben 64+j. Ist j = 1, dann wird das A eingefüllt, und so weiter und so fort...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  i:=0
  for z:=1 to 26 do begin 
    for s:=1 to 26-i do 
      vigqua[s,z]:=chr(s+64+i); 
    j:=0
    for s:=26-i+1 to 26 do begin 
      j:=j+1
      vigqua[s,z]:=chr(64+j) 
    end
    i := i+1;
  end;


[edit]@tino:Danke fürs einfügen der Delphi-tags [edit]
Gruß
Ken


Zuletzt bearbeitet von CenBells am Fr 20.06.03 19:29, insgesamt 1-mal bearbeitet
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Fr 20.06.03 18:29 
Was hat denn dein Lehrer an meiner Funktion auszusetzen? Du musst sie evt. noch um + oder - 1 anpassen aber ads sollte ja kein Problem sein...

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.