gerar numeros aleatorios para revista aleatoria

20/07/2020

0

alguem me ajuda pfv
estou fazendo uma revista aleatoria sendo assim a pessoa que estara mechendo no programa ira escolher a porcentagem de pessoas que estarão sendo passadas pela revista ta essa parte eu fiz porem ele esta gerando numero repetido o que posso fazer para n gerar

with dm.IB_Pesquisa,sql do
//pega a quatidade de funcionarios
begin
close;
clear;
add(''select distinct *'');
add(''from funcionarios a,'');
add('' cartoes b'');
add(''where a.cod_pessoa = B.cod_pessoa'');
OPEN;
end;
dm.IB_Pesquisa.Last;
Nro_funcionarios := dm.IB_Pesquisa.RecordCount;

with dm.IB_Pesquisa,sql do
//pega a porcentagem escolhida pelo usuario
begin
close;
clear;
add(''select distinct * from REVISTAALEATORIA'');
OPEN;
end;


Nro_RevistaPorcentagem := dm.IB_Pesquisa.FieldByName(''PORCENTAGEMREVISTA'').AsInteger;

Sporcentagem := ((Nro_funcionarios * Nro_RevistaPorcentagem)div 100);
//fez a porcentagem para saber quantos funcionaios iram passar pela revista


for I := 1 to Sporcentagem do // 10 - valorRevista
begin
randomize;
num := Round(random(Nro_funcionarios)); // quantidade pessoas no banco
Label16.Caption:= FloatToStr(num);
//inicio salva banco
dm.IB_pessoasRevista.Open;
dm.IB_pessoasRevista.Append;
dm.IB_pessoasRevista.FieldByName(''COD_pessoa'').AsString := Label16.Caption;
dm.IB_pessoasRevista.post;
dm.IBTransaction1.Commit;
//fim salva banco
num := Round(random(99999));
Label2.Caption := IntToStr(num);
{...}

END;
end;
Lucas

Lucas

Responder

Posts

21/07/2020

Emerson Nascimento

tente algo assim:
var
  A_Funcionarios_revista: array of integer; // guarda os funcionários selecionados
  i, Nro_funcionarios, Nro_RevistaPorcentagem, Nro_funcionarios_revista: integer;
  num: integer;

  function ExisteNum( vetor: array of integer; Numero: integer ): boolean;
  var
    i: integer;
  begin
    Result := False;
    for i := Low(vetor) to High(vetor) do
      if vetor[i] = numero then
      begin
        Result := True;
        exit;
      end;
  end;
begin
  // pega a quatidade de funcionarios
  with dm.IB_Pesquisa, dm.IB_Pesquisa.sql do
  begin
    close;
    clear;
    add('select count(a.cod_pessoa) total from funcionarios a');
    add('inner join cartoes b on b.cod_pessoa = a.cod_pessoa');
    open;
  end;
  Nro_funcionarios := dm.IB_Pesquisa.fields[0].AsInteger;

  // pega a porcentagem escolhida pelo usuario
  with dm.IB_Pesquisa, dm.IB_Pesquisa.sql do
  begin
    close;
    clear;
    // não entendi esta instrução, principalmente o uso do distinct
    add('select * from REVISTAALEATORIA');
    open;
  end;
  Nro_RevistaPorcentagem := dm.IB_Pesquisa.FieldByName(''PORCENTAGEMREVISTA'').AsInteger;

  // quantos funcionários irão passar pela revista
  Nro_funcionarios_revista := ((Nro_funcionarios * Nro_RevistaPorcentagem) div 100);
  if Nro_funcionarios_revista = 0 then Nro_funcionarios_revista := 1;

  randomize; // chamado uma única vez
  while Length(A_Funcionarios_revista) <> Nro_funcionarios_revista do
  begin
    num := Round(random(Nro_funcionarios)+1); // quantidade pessoas no banco
    if not ExisteNum( A_Funcionarios_revista, num ) then
    begin
      SetLength(A_Funcionarios_revista,Length(A_Funcionarios_revista)+1);
      A_Funcionarios_revista[High(A_Funcionarios_revista)] := num;
    end;
  end;

  dm.IB_pessoasRevista.Open;
  for i := Low(A_Funcionarios_revista) to High(A_Funcionarios_revista) do
  begin
    num := A_Funcionarios_revista[i];
    Label16.Caption:= IntToStr(num);
    dm.IB_pessoasRevista.Append;
    dm.IB_pessoasRevista.FieldByName(''COD_pessoa'').AsString := Label16.Caption;
    dm.IB_pessoasRevista.post;
//  fim salva banco
    Label2.Caption := IntToStr(num);
//    { ... }
  end;
  dm.IBTransaction1.Commit;

end;
Responder

24/07/2020

Lucas

tente algo assim:
var
  A_Funcionarios_revista: array of integer; // guarda os funcionários selecionados
  i, Nro_funcionarios, Nro_RevistaPorcentagem, Nro_funcionarios_revista: integer;
  num: integer;

  function ExisteNum( vetor: array of integer; Numero: integer ): boolean;
  var
    i: integer;
  begin
    Result := False;
    for i := Low(vetor) to High(vetor) do
      if vetor[i] = numero then
      begin
        Result := True;
        exit;
      end;
  end;
begin
  // pega a quatidade de funcionarios
  with dm.IB_Pesquisa, dm.IB_Pesquisa.sql do
  begin
    close;
    clear;
    add(''select count(a.cod_pessoa) total from funcionarios a'');
    add(''inner join cartoes b on b.cod_pessoa = a.cod_pessoa'');
    open;
  end;
  Nro_funcionarios := dm.IB_Pesquisa.fields[0].AsInteger;

  // pega a porcentagem escolhida pelo usuario
  with dm.IB_Pesquisa, dm.IB_Pesquisa.sql do
  begin
    close;
    clear;
    // não entendi esta instrução, principalmente o uso do distinct
    add(''select * from REVISTAALEATORIA'');
    open;
  end;
  Nro_RevistaPorcentagem := dm.IB_Pesquisa.FieldByName(''''PORCENTAGEMREVISTA'''').AsInteger;

  // quantos funcionários irão passar pela revista
  Nro_funcionarios_revista := ((Nro_funcionarios * Nro_RevistaPorcentagem) div 100);
  if Nro_funcionarios_revista = 0 then Nro_funcionarios_revista := 1;

  randomize; // chamado uma única vez
  while Length(A_Funcionarios_revista) <> Nro_funcionarios_revista do
  begin
    num := Round(random(Nro_funcionarios)+1); // quantidade pessoas no banco
    if not ExisteNum( A_Funcionarios_revista, num ) then
    begin
      SetLength(A_Funcionarios_revista,Length(A_Funcionarios_revista)+1);
      A_Funcionarios_revista[High(A_Funcionarios_revista)] := num;
    end;
  end;

  dm.IB_pessoasRevista.Open;
  for i := Low(A_Funcionarios_revista) to High(A_Funcionarios_revista) do
  begin
    num := A_Funcionarios_revista[i];
    Label16.Caption:= IntToStr(num);
    dm.IB_pessoasRevista.Append;
    dm.IB_pessoasRevista.FieldByName(''''COD_pessoa'''').AsString := Label16.Caption;
    dm.IB_pessoasRevista.post;
//  fim salva banco
    Label2.Caption := IntToStr(num);
//    { ... }
  end;
  dm.IBTransaction1.Commit;

end;

onde que eu ponho isto aqui
var
A_Funcionarios_revista: array of integer; // guarda os funcionários selecionados
i, Nro_funcionarios, Nro_RevistaPorcentagem, Nro_funcionarios_revista: integer;
num: integer;
?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar