Número+combinatorio

=__**Cálculo del número combinatorio**__=

Escribir un programa que calcule el número combinatorio m sobre n, siendo m ≥ n.

Siendo
 * [[image:Número_Combinatorio.JPG]]

> **Sin utilizar subprogramas**

code format="pascal" PROGRAM NumCombinatorio1 ; VAR M, N, i : Integer ; rNumCombinat, M_Fact, N_Fact, M_N_Fact : Real ;

BEGIN {  Programa principal - } REPEAT WriteLn ('Cálculo del Nº combinario',             ' M sobre N'); Write ('M: ') ; ReadLn (M) ; Write ('N: ') ; ReadLn (N) ;

IF M < N THEN BEGIN Writeln ; Writeln ('Se debe cumplir que M >= N') ; Writeln ; END ; UNTIL M >= N ;

M_Fact := 1 ; FOR i := 1 TO M DO      M_Fact := M_Fact * i ;

N_Fact := 1 ; FOR i := 1 TO N DO      N_Fact := N_Fact * i ;

M_N_Fact := 1 ; FOR i := 1 TO M - N DO      M_N_Fact := M_N_Fact * i ;

rNumCombinat := M_Fact / (N_Fact * M_N_Fact) ;

WriteLn ('El valor es: ', rNumCombinat :0:2) ;

ReadLn ; END. { FIN DE NumCombinatorio1.PAS } code > **Definiendo una FUNCIÓN que calcula el factorial de un número** code format="pascal" PROGRAM NumCombinatorio2 ;

FUNCTION Fact (iNumero : Integer) : Real ; VAR rFactorial : Real ; i         : Integer ; BEGIN rFactorial := 1 ; FOR i := 1 TO iNumero DO      rFactorial := rFactorial * i ;

Fact := rFactorial ; END ;

{--- Variables del Programa Principal -} VAR M, N : Integer ; rNumCombinat, M_Fact, N_Fact, M_N_Fact : Real ;

BEGIN {  Programa principal - } REPEAT WriteLn ('Cálculo del Nº combinario',             ' M sobre N'); Write ('M: ') ; ReadLn (M) ; Write ('N: ') ; ReadLn (N) ;

IF M < N THEN BEGIN Writeln ; Writeln ('Se debe cumplir que M >= N') ; Writeln ; END ; UNTIL M >= N ;

M_Fact  := Fact (M) ;

N_Fact  := Fact (N) ;

M_N_Fact := Fact (M-N) ;

rNumCombinat := M_Fact / (N_Fact * M_N_Fact) ;

WriteLn ('El valor es: ', rNumCombinat :0:2) ;

ReadLn ; END. { FIN DE NumCombinatorio2.PAS } code

code format="pascal" PROGRAM NumCombinatorio3 ;

FUNCTION Fact (iNumero : Integer) : Real ; VAR rFactorial : Real ; i         : Integer ; BEGIN rFactorial := 1 ; FOR i := 1 TO iNumero DO      rFactorial := rFactorial * i ;

Fact := rFactorial ; END ;

{--- Variables del Programa Principal -} VAR M, N       : Integer ; rNumCombinat : Real ;

BEGIN { Programa Principal ---} REPEAT WriteLn ('Cálculo del Nº combinario',             ' M sobre N'); Write ('M: ') ; ReadLn (M) ; Write ('N: ') ; ReadLn (N) ;

IF M < N THEN BEGIN Writeln ; Writeln ('Se debe cumplir que M >= N') ; Writeln ; END ; UNTIL M >= N ;

rNumCombinat := Fact (M) / (Fact (N) * Fact (M - N)) ;

WriteLn ('El valor es: ', rNumCombinat :0:2) ;

ReadLn ; END. { FIN DE NumCombinatorio3.PAS } code