program lost;
var
 g,h,resul2:integer;
 esValido:boolean;
procedure opcion_user_combinatorio( var n:integer; var k:integer);
 {Datos:Se introduce la n y k del numero combinatorio}
 {Devuelve:}
  begin
   writeln('Introduce un numero entero que ser  la n del numero combinatorio');
   readln(n);
   writeln('Introduce un numero entero que ser  la k del numero combinatorio');
   readln(k);
  end;
 
 function validar_dato_combinatorio(n,k:integer):boolean;
  {Datos:n y k}
  {Devuelve:La validaci¢n de n y k con un booleano}
   begin
  validar_dato_combinatorio:=(n >= k);
   end;
 
 function evaluar_numero_combinatorio( n,k :integer):integer;
  var
   numerador,denominador:integer;
   function factorial(n:integer):integer;
    var
     aux,i:integer;
    begin
     aux:=1;
     for i:=n downto 1 do
      aux:=aux*i;
     factorial:=aux;
    end;
   begin
    numerador:=factorial(n);
    denominador:=factorial(k)*factorial(n-k);
    evaluar_numero_combinatorio:=numerador div denominador;
   end;
 procedure mostrar_combinatorio(evaluar_numero_combinatorio:integer);
  begin
   writeln('El resultado es',evaluar_numero_combinatorio);
  end;
{programa principal}
begin
      opcion_user_combinatorio(g,h);
      esValido:=validar_dato_combinatorio(g,h);
      if esValido then
       begin
        resul2:=evaluar_numero_combinatorio(g,h);
        mostrar_combinatorio(resul2);
       end
      else
       writeln('Datos introducidos incorrectos');
readln;
end.