Combinações 4x4 em POO

      
      program COMB4P;
      { TURBO PASCAL 7 SOURCE
        DELPHI SOURCE
        Calculo de combinacoes de MAX elementos 4x4 em POO
        Joao Paulo Schwarz Schuler}
      {FPC Source Code}
      
      {$X+}
      {$F+}
      type TOnCalcEvent = procedure (X,Y,Z,W:longint);
      
      type TCombinacao = object
                         private
                         MAXIMO:longint;
                         OnCalc:TOnCalcEvent;
      
                         public
                         constructor Init(POnCalcEvent:TOnCalcEvent;PMAX:longint);
                         procedure Run;
                         destructor Done;
                         end;
      
      constructor TCombinacao.Init(POnCalcEvent:TOnCalcEvent;PMAX:longint);
      begin
      OnCalc:=POnCalcEvent;
      MAXIMO:=PMAX;
      end;
      
      procedure TCombinacao.Run;
      var X,Y,Z,W:integer;
      begin
      for X:=1 to MAXIMO do
          for Y:=succ(X) {X+1} to MAXIMO do
              for Z:=succ(Y) {Y+1} to MAXIMO do
                  for W:=succ(Z) {Z+1} to MAXIMO
                      do OnCalc(X,Y,Z,W);
      end;
      
      destructor TCombinacao.Done;
      begin
      end;
      
      
      const MAX = 5; { experimente outros valores}
      
      procedure Imprime(X,Y,Z,W:longint);
      const VIRG : char = ',';
      begin
      writeln('(',X,VIRG,Y,VIRG,Z,VIRG,W,')');
      end;
      
      var C:TCombinacao;
      begin
      C.Init(Imprime,MAX);
      C.Run;
      C.Done;
      end.