home *** CD-ROM | disk | FTP | other *** search
- Program combinazioni;
- const DIM=10;
- type vettoreogg = array[1..DIM] of char;
- vettore = array[1..DIM] of integer;
- var oggetti : vettoreogg;
- n : integer; (* dimensione vettore(numero oggetti) *)
-
- Procedure carica (var v:vettoreogg);
- var i:integer;
- Begin
- write('numero oggetti -> ');
- readln(n);
- for i:=1 to n do
- Begin
- write('oggetto - ',i,' -> ');
- readln(v[i]);
- End;
- End;
-
-
- Procedure combina_2(v:vettoreogg);
- var i,j:integer;
- Begin
- writeln('Combinazioni di ',n,' della classe 2');
- for i := 1 to n do
- Begin
- for j := i+1 to n do
- write(v[i]:4,v[j]:1);
- writeln
- End;
- readln;
- End;
-
- Procedure combina_3(v:vettoreogg);
- var i,j,h:integer;
- Begin
- writeln('Combinazioni di ',n,' della classe 3');
- for i := 1 to n do
- for j := i+1 to n do
- begin
- for h:=j+1 to n do
- write(v[i]:4,v[j]:1,v[h]:1);
- writeln
- end;
- readln;
- End;
-
- procedure inizializza(var pc,pl:vettore; pk:integer);
- var i:integer;
- Begin
- for i:=1 to pk do
- Begin
- pc[i]:=i;
- pl[pk-i+1]:=n-i+1
- End;
- pc[pk]:=pc[pk]-1
- end;
-
- Procedure incrementa(var pc:vettore; pl:vettore; pk:integer);
- var cont1,cont2 : integer;
- incr : boolean;
- Begin
- cont1:= pk; incr:=false;
- repeat
- if pc[cont1] < pl[cont1] then
- begin
- incr := true;
- pc[cont1] := pc[cont1]+1 ;
- for cont2:=cont1 to pk do
- pc[cont2+1] := pc[cont2]+1 ;
- end
- else cont1 := cont1 -1;
- until (incr=true) or (pc[1]=pl[1])
- End;
-
- procedure combina_k(v:vettoreogg);
- var c,l : vettore;
- k,d : integer;
- Begin
- Write('Classe k ->');
- readln(k);
- inizializza(c,l,k); // inizializzazione dei due vettori c e l
- writeln('Combinazioni di ',n,' della classe ',k);
- repeat
- incrementa(c,l,k);
- for d:=1 to k do
- write(v[c[d]]);// ╚ presente un indicizzazione indiretta
- writeln;
- until c[1]=l[1]; // condizione d'uscita
- End;
-
-
-
- Begin (* Principale *)
- carica(oggetti);
- combina_2(oggetti);
- combina_3(oggetti);
- combina_k(oggetti);
- readln
- End.
-
-
-