Con questa procedura è possibile generare una serie di combinazioni di lettere, comprese nel parametro "vocabolario". Come secondo parametro impostiamo anche la lunghezza della combinazione.
La funzione "usa" è quella che deve essere personalizzata così da poter utilizzare le varie combinazioni a seconda delle proprie esigenze .
procedure GeneraUsa(vocabolario:string;DimOutput:integer);
var
y:array of integer;
i,j,max,l:integer;
procedure usa;
begin
//funzione da applicare ad ogni stringa creata
end;
procedure add(var a:array of integer;p:integer );
begin
if a[p]
else begin
a[p]:=1;
add(a,p-1);
end;
end;
function pot(b,p:integer):integer;
var t:integer;
begin
if p=0 then result:=1
else begin
t:=1;
while p>0 do begin
t:=t*b;
dec(p);
end;
result:=t;
end;
end;
begin
l:=length(vocabolario);
setlength(y,DimOutput);
for i := 0 to high(y) do y[I]:=1;
max:=pot(l,high(y)+1)-1;
j:= high(y);
for I := 1 to max do begin
usa;
add(y,j);
end;
usa;
end;
Come esempio, se imposto come vocabolario le lettere "agz" e una lunghezza pari a 2 ottengo:
aa - ag -az - ga - gg - gz - za - zg - zz
cioè una serie di combinazioni (32) delle lettere fornite.





