• Jueves 2 de Mayo de 2024, 16:59

Autor Tema:  Numeros combinatorios  (Leído 1582 veces)

party_metal

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Numeros combinatorios
« en: Miércoles 4 de Marzo de 2009, 22:04 »
0
Hola estoy programando que dados n y k introducidos por el usuario te devuelve el numero combinatorio con la formula (n,k)=n!/k!(n-k)!
He hecho esto que funciona pero para numeros en plan 8,1 o 9,3 osea con n>=8 no me funciona...
¿Alguna pista?
Gracias!
Código: Pascal
  1.  
  2. program lost;
  3. var
  4.  g,h,resul2:integer;
  5.  esValido:boolean;
  6. procedure opcion_user_combinatorio( var n:integer; var k:integer);
  7.  {Datos:Se introduce la n y k del numero combinatorio}
  8.  {Devuelve:}
  9.   begin
  10.    writeln('Introduce un numero entero que ser  la n del numero combinatorio');
  11.    readln(n);
  12.    writeln('Introduce un numero entero que ser  la k del numero combinatorio');
  13.    readln(k);
  14.   end;
  15.  
  16.  function validar_dato_combinatorio(n,k:integer):boolean;
  17.   {Datos:n y k}
  18.   {Devuelve:La validaci¢n de n y k con un booleano}
  19.    begin
  20.   validar_dato_combinatorio:=(n >= k);
  21.    end;
  22.  
  23.  function evaluar_numero_combinatorio( n,k :integer):integer;
  24.   var
  25.    numerador,denominador:integer;
  26.    function factorial(n:integer):integer;
  27.     var
  28.      aux,i:integer;
  29.     begin
  30.      aux:=1;
  31.      for i:=n downto 1 do
  32.       aux:=aux*i;
  33.      factorial:=aux;
  34.     end;
  35.    begin
  36.     numerador:=factorial(n);
  37.     denominador:=factorial(k)*factorial(n-k);
  38.     evaluar_numero_combinatorio:=numerador div denominador;
  39.    end;
  40.  procedure mostrar_combinatorio(evaluar_numero_combinatorio:integer);
  41.   begin
  42.    writeln('El resultado es',evaluar_numero_combinatorio);
  43.   end;
  44. {programa principal}
  45. begin
  46.       opcion_user_combinatorio(g,h);
  47.       esValido:=validar_dato_combinatorio(g,h);
  48.       if esValido then
  49.        begin
  50.         resul2:=evaluar_numero_combinatorio(g,h);
  51.         mostrar_combinatorio(resul2);
  52.        end
  53.       else
  54.        writeln('Datos introducidos incorrectos');
  55. readln;
  56. end.
  57.  
  58.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Numeros combinatorios
« Respuesta #1 en: Jueves 5 de Marzo de 2009, 10:36 »
0
Lógico, la combinatoria y el factorial son para números enteros, no reales.

party_metal

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Numeros combinatorios
« Respuesta #2 en: Viernes 6 de Marzo de 2009, 02:02 »
0
Hola?
Lógico porque yo no estoy metiendo numeros reales porque evidentemente todo está hecho con integers y aparte cuando puse que meto 8,1 quiere decir n=8 y k=1...
De todas maneras gracias pero ya he solucionado el problema. Lo que pasa es que al ser un factorial tan grande poniendo las varibles como integer se excede de rango y me salen cosas raras... :)

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Numeros combinatorios
« Respuesta #3 en: Viernes 6 de Marzo de 2009, 02:05 »
0
Cita de: "party_metal"
Lógico porque yo no estoy metiendo numeros reales porque evidentemente todo está hecho con integers y aparte cuando puse que meto 8,1 quiere decir n=8 y k=1...
Am, vale  <_< estoy atontao...

Cita de: "party_metal"
Lo que pasa es que al ser un factorial tan grande poniendo las varibles como integer se excede de rango y me salen cosas raras...
Jeje, a mí también me pasó. Hay que tener cuidado con los factoriales porque se hacen grandes ¡muy deprisa!