Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Transposition (https://www.delphipraxis.net/167347-transposition.html)

foerster7892 25. Mär 2012 16:55

Delphi-Version: 5

Transposition
 
HiHo

kann mir wer erklären warum mein Array bugged??

Delphi-Quellcode:
function transposition(u,k:string):string;           //u=Klartext; k=Schlüssel
var sk: Array of Integer;
    kboard: Array of Array of char;
    y,x,i,j,p: integer;
begin
  transposition := '';
  setlength(kboard, length(k));
  if not((length(u)/length(k))=(trunc(length(u)/length(k)))) then y := trunc(length(u)/length(k))
  else y := trunc(length(u)/length(k))+1;
  for i := 0 to length(k)-1 do
    setlength(kboard[i],y);
  x := 0;                                            //x-Spalte in der Tabelle
  for i := 0 to length(k)-1 do
    for j := 0 to y-1 do kboard[i,j] := ' ';
  for i := 1 to length(u) do
  begin
    if ((i mod length(k)) = 1) and (i > 1) then inc(x);
    kboard[i-x*length(k)-1,x] := u[i];
    Form1.ListBox1.items.add(kboard[i-x*length(k)-1,1]); //<- erste Ausgabe der 2. Array Spalte richtig, wenn ich danach das Array wieder aufrufe kommen falsche Ausgaben in der Listbox
  end;
  setlength(sk, length(k));
  for i := 1 to length(k) do
  begin
    p := 1;
    for j := 1 to length(k) do
      if (Ord(k[i]) > Ord(k[j])) or ((k[i] = k[j]) and (j < i)) then inc(p);
    sk[i-1] := p;
  end;
  for i := 1 to length(k) do
  begin
    x := 0;
    repeat
      inc(x);
    until i = sk[x-1];
    for j := 0 to y-1 do
      if kboard[x-1,j] <> ' ' then transposition := transposition + kboard[x-1,j];
  end;
end;
seh einfach nur meinen Fehler nicht, wäre dankbar für nen zweiten der draufguckt.


/lazarus

Uwe Raabe 25. Mär 2012 18:13

AW: Transposition
 
Keine Ahnung was du willst, aber du schreibst in den zweiten Index x, liest aber immer die 1:

Zitat:

Zitat von foerster7892 (Beitrag 1158483)
Delphi-Quellcode:
    kboard[i-x*length(k)-1,x] := u[i];
    Form1.ListBox1.items.add(kboard[i-x*length(k)-1,1]);

Für x<>1 sieht das nicht koscher aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.

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