Entwickler-Ecke

Sonstiges (Delphi) - Idee für ein Buchstabensalat-Programm


jul14n - Di 31.05.05 18:30
Titel: Idee für ein Buchstabensalat-Programm
hi ihr,
bin grad auf der suche nach einem Programm, dass aus einem Buchstabensalat ein lesbares Wort macht, indem es alle Möglichkeiten auflistet.

z.B.: HLIDEP --> .../ LPIHDE / DELPHI / IELHDP /...


Man gibt den Buchstabensalat in ein Edit ein, klickt auf einen Button und alle Möglichkeiten werden in einer listbox angezeigt.

hat jmd. eine idee, wie man das realisiren könnte?

gruß julian


alzaimar - Di 31.05.05 18:45

Du benötigst ein Programm, das sog. 'Permutationen' erstellt.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
program Permutation;
{$APPTYPE CONSOLE}

uses SysUtils;

var 
  R, Slen: Integer;

procedure P(var A: string; B: string);
var
  J: Word;
  C, D: string;
begin
  { P(N,N) >>  R=Slen  }
  if Length(B) = SLen - R then
  begin
    Write(' {' + A + '} '); {Per++}
  end 
  else
    for J := 1 to Length(B) do
    begin
      C := B;
      D := A + C[J];
      Delete(C, J, 1);
      P(D, C);
    end;
end;

begin
  P('DELPHI',5);
end.


jul14n - Di 31.05.05 18:54

oohh..
ich glaub ich verstehe dein programm nicht ganz, kannst du mir kurz sagen, was es macht?
ich kenn mich noch nicht soo gut aus.

thx
julian


alzaimar - Di 31.05.05 19:48

Ist doch klar: Das Programm erzeugt Syntaxfehler und totale Konfusion... :oops:
Ich habe geschlampt, sorry:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
program Project2;
{$APPTYPE CONSOLE}

uses SysUtils;

Procedure P (X : String);
Var
  D : String;

  procedure _P(var A: string; B: string);
  var
    J: Word;
    C, D: string;
  begin
    if Length(B) = 0 then
    begin
      Write(' {' + A + '} '); {Per++}
    end
    else
      for J := 1 to Length(B) do
      begin
        C := B;
        D := A + C[J];
        Delete(C, J, 1);
        _P(D, C);
      end;
  end;

Begin
  D:='';
  _P (D,X);
End;

begin
  P('DELPHI');
end.

Ich habe es von http://www.swissdelphicenter.ch und dann kurz modifiziert, ohne es zu testen.
Jetzt gehts: Das Programm erzeugt einfach alle Permutationen eines vorgegebenen Strings.


jul14n - Mi 01.06.05 14:35

:D ok, thx very much
julian


alzaimar - Mi 01.06.05 19:58

Nur so, aus Spass: Dieser Algorithmus verwendet Graycodes, um iterativ alle Permutationen eines beliebigen Strings zu erzeugen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
Procedure Permutations (aString : String);
Var
  d : Array Of Integer;
  g, j, i, n, v : Integer;
  p,c : String;

Begin
  n := Length (aString);
  setlength (d,n+1);
  d[1] := 1;
  For i := 2 to n do
    d[i] := i * d[i-1];
  For i := 0 to d[n]-1 do begin
    c := aString;
    p := '';
    v := i;
    for j:=n-1 downto 1 do begin
      g := j - (v div d[j]) + 1;
      p := p + c[g];
      delete (c, g, 1);
      v := v mod d[j];
      End;
    p := p + c;
    memo1.lines.Add (p);
    End;
End;