analise combinatoria

Delphi

03/04/2011

 boa noite pessoal, estou precisando de um codigo sobre analise combinatoria
         peguei um codigo na net, mais ele so funciona até 10 numeros dai para fente ele dá erro.
o codigo é de alexandre crivellaro, e foi pego ai mesmo no dev media, mais não estou conseguindo fazer com que ele gere sequencias acima de 10 numeros. se alguém puder olhar ou o proprio alexandre , agradeço muito

procedure next_combination (pos: integer);
begin
  if (pos = 0) then Exit;
  inc (combination[pos]);
  if (combination[pos] > max_values[pos]) then begin
     next_combination (pos - 1);
     combination[pos] := combination[pos - 1] + 1;
  end;
end;
Interface com o usuário
A
 interface do programa é bem simples e pede três parâmetros: os valores 
de N e K e os valores que queremos fazer as combinações. Por exemplo, 
podemos usar nomes de times de futebol para preparar uma tabela de jogos
 ou números da Mega Sena. Enfim, qualquer tipo de informação numérica ou
 textual. Veja Figura 2.
 
Figura 2. Interface com o usuário
Abaixo segue a listagem completa do programa, veja Listagem 1.
 
Listagem 1. Descrição da listagem
unit binomial_generator;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TfrmGenerator = class(TForm)
...
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  frmGenerator: TfrmGenerator;
  N, K: Integer;
  values: Array [1..100] of string;
  max_values: array[1..100] of Integer;
  combination: array[1..100] of Integer;
 
procedure generate (N, K: Integer);
 
implementation
{$R *.dfm}
//------------------------------------------------------------------------------
procedure TfrmGenerator.Button1Click(Sender: TObject);
var s: String;
    i: Integer;
begin
  N := StrToInt (Edit1.Text);
  K := StrToInt (Edit3.Text);
  s := Edit2.Text;
  s := s + ',';
  for i := 1 to N do begin
      values[i] := Copy (s, 1, Pos(',', s)-1);
      delete (s, 1, Pos(',', s));
  end;
  for i := 1 to K do begin
      max_values[K-i+1] := N-i+1;
      combination[i] := i;
  end;
  generate (N, K);
end;
//------------------------------------------------------------------------------
procedure next_combination (pos: integer);
begin
  if (pos = 0) then Exit;
  inc (combination[pos]);
  if (combination[pos] > max_values[pos]) then begin
     next_combination (pos - 1);
     combination[pos] := combination[pos - 1] + 1;
  end;
end;
//------------------------------------------------------------------------------
function fat (n: Integer):Integer;
var i: Integer;
begin
  Result := 1;
  for i := 2 to n do
      Result := Result * i;
end;
//------------------------------------------------------------------------------
procedure generate (N, K: Integer);
var n_comb, i, j: Integer;
    f: TextFile;
    s: String;
begin
  n_comb := fat (N) div (fat(K) * fat(N-K));
  ShowMessage ('Number of Combinations: ' + IntToStr (n_comb));
  Screen.Cursor := crHourGlass;
  AssignFile (f, ExtractFilePath (ParamStr (0)) + 'out.csv');
  ReWrite (f);
  for i := 1 to n_comb do begin
      s := '';
      for j := 1 to K do
          s := s + values[combination[j]] + ';';
      WriteLn (f, s);
      next_combination (K);
  end;
  CloseFile (f);
  Screen.Cursor := crDefault;
end;
end.sucesso a todos 
geraldo


Geraldo Leal

Geraldo Leal

Curtidas 0

Respostas

Geraldo Leal

Geraldo Leal

03/04/2011

boa tarde a todos, não tem niguém ai que possa me ajudar com este codigo de analise combinatoria, ou aonde eu possa obter ajuda, ou um suporte sobre este assunto.
grato
geraldo leal

GOSTEI 0
Assis Ferreira

Assis Ferreira

03/04/2011

boa tarde a todos, não tem niguém ai que possa me ajudar com este codigo de analise combinatoria, ou aonde eu possa obter ajuda, ou um suporte sobre este assunto.
grato
geraldo leal

Amigo creio que voce postar esse codigo lá no site activedelphi.com.br os caras resolverm pra você
GOSTEI 0
Wilson Junior

Wilson Junior

03/04/2011

Explique melhor o que você quer, não consegui entender direito.

Aguardo retorno.
GOSTEI 0
Geraldo Leal

Geraldo Leal

03/04/2011

boa tarde wilson, o que preciso é o que está no codigo que postei, porem o que está
acontecendo neste codigo ai, é que ele somente gera numeros até 7 ou 8 combinações de 10 ou 11 se
passar ele da o resultado 0 e eu preciso que ele gere por exemplo. o jogo da lotofacil. que tem 25 numeros
 vamos dizer que quero combinar 15 numeros em um total de 18 ou seja, se eu acertar os 15 numeros no meio
dos 18 eu ganho. e preciso da possibilidade de que ele faça o seguinte.  se eu acertar 15 numeros nos 18
eu tenho garantido 15 ou 14 ou 13 porque quando eu escolho garantia de 14 acertos, os cartões são muito menos
na combinação.
obrigado pelo retorno seu e do outro amigo ai.
sucesso
geraldo leal

GOSTEI 0
Geraldo Leal

Geraldo Leal

03/04/2011

https://www.devmedia.com.br/articles/viewcomp.asp?comp=1479
este link, esta este codigo que postei. o mesmo é do alexandre.
porem não consegui contato com ele
obrigado pelo retorno seu e do outro amigo ai.
sucesso
geraldo leal

GOSTEI 0
POSTAR