[Back to MATH SWAG index] [Back to Main SWAG index] [Original]

    {
    I'm working on some statistical process control Charts and am
    learning/using Pascal. The current Chart Uses permutations and
    I have been successful in determing the number of combinations
    possible, but I want to be able to choose a few of those possible
    combinations at random For testing purposes.

    Through some trial and error, I've written the following Program
    which calculates the number of possible combinations of x digits
    with a certain number of digits in each combination. For example
    a set of 12 numbers With 6 digits in each combination gives an
    answer of 924 possible combinations. After all that, here is the
    question: Is there a Formula which would calculate what those 924
    combinations are? (ie: 1,2,3,4,5,6 then 1,2,3,4,5,7 then 1,2,3,4,5,8
    ... 1,2,3,4,5,12 and so on? Any help would be appreciated and any
    criticism will be accepted.
    }

    Program permutations;

    Uses Crt;

    Type hold_em_here = Array[1..15] of Integer;

    Var  numbers,combs,bot2a : Integer;
         ans,top,bot1,bot2b : Real;
         hold_Array : hold_em_here;

    Function permutate_this(number1 : Integer) : Real;
    Var i : Integer;
        a : Real;
    begin
     a := number1;
     For i := (number1 - 1) doWNto 1 do a := a  * i;
     permutate_this := a;
    end;

    Procedure input_numbers(Var hold_Array : hold_em_here; counter : Integer);
    Var i,j : Integer;
    begin
     For i := 1 to counter do begin
      Write(' Input #',i:2,': ');
      READLN(j);
      hold_Array[i] := j;
     end;
    end;

    Procedure show_numbers(hold_Array : hold_em_here; counter : Integer);
    Var i,j : Integer;
    begin
     WriteLN;
     Write('Array looks like this: ');
     For i := 1 to counter do Write(hold_Array[i]:3);
     WriteLN
    end;

    begin
     ClrScr;
     WriteLN;
     WriteLN('  Permutations');
     WriteLN;
     Write('     Enter number of digits (1-15): ');
     READLN(numbers);
     Write('Enter number in combination (2-10): ');
     READLN(combs);
     top := permutate_this(numbers);
     bot1 := permutate_this(combs);
     bot2a := numbers - combs;
     bot2b := permutate_this(bot2a);
     ans := top/(bot1*bot2b);
     WriteLN('   total permutations For above is: ',ans:3:0);
     WriteLN;
     input_numbers(hold_Array,numbers);
     show_numbers(hold_Array,numbers);
    END.

[Back to MATH SWAG index] [Back to Main SWAG index] [Original]