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;
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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)