Compago

...free knowledge

 
  • Increase font size
  • Default font size
  • Decrease font size
Home Manuali Programmazione Generare combinazioni di lettere con delphi

Generare combinazioni di lettere con delphi

E-mail Stampa PDF

Con questa procedura è possibile generare una serie di combinazioni di lettere, comprese nel parametro "vocabolario". Come secondo parametro dovremo impostare la dimensione originale del vocabolario, mentre come terso parametro impostiamo anche la lunghezza della combinazione.

//calcola le disposizioni semplici, ovvero senza ripetizioni, delle lettere
//comprese nel vocabolario, di dimensione len
//le disposizioni possono essere di dimensione dim <= len
//esempio vocabolario="abc" disposizioni di dimesione 2 :
//ab ac ba bc ca cb
procedure P(var temp: string; vocabolario: string;len,dim:integer);
var
  J: cardinal;
  subset, temp2: string;
begin
  if Length(vocabolario) = (Len - dim) then begin
    //usa la disposizione trovata
    Write(' (' + temp + ')');
  end
  else
    for J := 1 to Length(vocabolario) do begin
      subset := vocabolario;
      temp2 := temp + subset[J];
      Delete(subset, J, 1);
      P(temp2, subset,len,dim);
    end;
end;
 
var
  Tmp,S: string;
begin
  writeln('Combinazioni delle lettere "abcd" a gruppi di 2:');
  s:='abcd';
  P(Tmp,s,length(s),2);
  writeln;
  readln;
end.

Come esempio, se imposto come vocabolario le lettere "abcd" e una lunghezza pari a 2 ottengo:

 

(ab) (ac) (ad) (ba) (bc) (bd) (ca) (cb) (cd) (da) (db) (dc)

cioè una serie di disposizioni semplici (n!/(n-k)!=4!/(4-2)!=24/2=12) delle lettere fornite.

Se invece nelle disposizioni di lettere volessimo includere anche le ripetizioni la funzione verrebbe semplificata:

//calcola le disposizioni con ripetizioni delle lettere
//comprese nel vocabolario, di dimensione len
//le disposizioni possono essere di dimensione dim <= len
//esempio vocabolario="abc" disposizioni di dimesione 2 :
//aa ab ac ba bb bc ca cb cc
procedure D(var temp:string;vocabolario:string;len,dim:integer);
var
  i: Integer;
  temp2: string;
begin
  if Length(temp) = dim then begin
    //usa la disposizione trovata
    Write(' (' + temp + ')');
  end
  else
    for i := 1 to Length(vocabolario) do begin
      temp2 := temp + vocabolario[i];
      D(temp2, vocabolario,len,dim);
    end;
end;
 
var
  Tmp,S: string;
begin
  writeln('Combinazioni delle lettere "abcd" a gruppi di 2:');
  s:='abcd';
  D(Tmp,s,length(s),2);
  writeln;
  readln;
end.
 

Quello che otterremo sarà:

 (aa) (ab) (ac) (ad) (ba) (bb) (bc) (bd) (ca) (cb) (cc) (cd) (da) (db) (dc) (dd)

cioè una serie di combinazioni pari a nk=42=16, dove n è la dimensione del vocabolario mentre k è la dimensione delle disposizioni.

Ultimo aggiornamento ( Venerdì 03 Settembre 2010 10:32 )  
Loading

Login




Chiudi