como faço para gerar combinações aleatórias????
Bom dia, tem geito de um programa gerar aleatóriamente combinações de numeros??? por exemplo forneço ao programa os seguinte numeros:
06,10,20,30,40,60,55,85,99. e ele fara todas as combinaçoes possiveis com estes mesmos.
Se alguem puder me dar uma luz agradeço
Miguel
Obs uso delphi5 e paradox
06,10,20,30,40,60,55,85,99. e ele fara todas as combinaçoes possiveis com estes mesmos.
Se alguem puder me dar uma luz agradeço
Miguel
Obs uso delphi5 e paradox
Miguel
Curtidas 0
Respostas
Bacalhau
01/09/2003
Antes de irmos ao Delphi, é bom pensar um pouco e ver os problemas que temos entre mãos:
1. Não sabemos quantos números irão ser dados à partida.
2. Temos de guardar todos os números introduzidos.
3. Temos de gerar as combinações dos números referidos.
Solução
1. Vamos criar um contador de números e uma estrutura que guarde os números; nada melhor que uma array dinâmica. Cá vai:
var i, m : integer;
numeros : array of integer;
combinacoes : array of array of integer;
Depois temos de arranjar uma repetição para ´caçarmos´ os números.
Como ponto de paragem (perfeitamente arbitrário) decidi que a entrada pára quando o utilizador digitar -1. A nossa array vai aumentando à medida que o utilizador insere números. Cá vai:
i := 0;
setlength(numeros,1);
repeat
<o utilizador coloca um número e é guardado na variável ´m´>
// se for diferente de (-1) incrmenta ´i´ e aumenta a array
if m <> (-1) then
i := i + 1;
numeros[i - 1] := m;
setlength(numeros,max(numeros) + 1); // aumentei a array
end;
until m = (-1);
No final deste ciclo, capturámos o número de números lidos (....) que está em ´i´ e a nossa array dinamica contém os números.
A partir daqui faz-se um ciclo ´for´ do tipo
for m := 0 to max(numeros) - 1 do
begin
.....
end;
onde a array combinacoes vai guardar o que for feito no ciclo for. É claro que vai haver dificuldade em fazer crescer a array que agora tem 2 dimensões.
Mas como o colega já tem aqui uma proposta (nada mais...) para resolver o problema, sugiro que complete o que falta entre o begin e o end (os pontinhos, os pontinhos...).
Se ainda assim não der manda um mail para virtual.viegas@netc.pt
Boa sorte
bacalhau
1. Não sabemos quantos números irão ser dados à partida.
2. Temos de guardar todos os números introduzidos.
3. Temos de gerar as combinações dos números referidos.
Solução
1. Vamos criar um contador de números e uma estrutura que guarde os números; nada melhor que uma array dinâmica. Cá vai:
var i, m : integer;
numeros : array of integer;
combinacoes : array of array of integer;
Depois temos de arranjar uma repetição para ´caçarmos´ os números.
Como ponto de paragem (perfeitamente arbitrário) decidi que a entrada pára quando o utilizador digitar -1. A nossa array vai aumentando à medida que o utilizador insere números. Cá vai:
i := 0;
setlength(numeros,1);
repeat
<o utilizador coloca um número e é guardado na variável ´m´>
// se for diferente de (-1) incrmenta ´i´ e aumenta a array
if m <> (-1) then
i := i + 1;
numeros[i - 1] := m;
setlength(numeros,max(numeros) + 1); // aumentei a array
end;
until m = (-1);
No final deste ciclo, capturámos o número de números lidos (....) que está em ´i´ e a nossa array dinamica contém os números.
A partir daqui faz-se um ciclo ´for´ do tipo
for m := 0 to max(numeros) - 1 do
begin
.....
end;
onde a array combinacoes vai guardar o que for feito no ciclo for. É claro que vai haver dificuldade em fazer crescer a array que agora tem 2 dimensões.
Mas como o colega já tem aqui uma proposta (nada mais...) para resolver o problema, sugiro que complete o que falta entre o begin e o end (os pontinhos, os pontinhos...).
Se ainda assim não der manda um mail para virtual.viegas@netc.pt
Boa sorte
bacalhau
GOSTEI 0