GARANTIR DESCONTO

Fórum Gerar numeros aleatórios sem repetir #402245

02/06/2011

0

Fiz esse código abaixo para gerar numeros aleatórios de 1 á 10:

procedure TForm1.Button2Click(Sender: TObject);
var
   Num: Byte;
   a : integer;
begin
    Randomize;
    for a := 1 to 10 do
      begin
        Num := Random(10);
        Memo1.Lines.Add(IntToStr(Num));
      end;
end;



porém tenho 2 problemas ai;

1 > Queria gerar um numero aleatório de 1 á 10 e não de 0 á 10, nesse caso está gerando numero 0.

2 > Está repetindo os numeros e não poderia repetir.

Tipo queria que gerasse os numeros e bagunçasse com ele, algém poderia me ajudar com esses 2 probleminhas, pois já pesquisei sobre o Random e não consegui resolver.
Robson Morais

Robson Morais

Responder

Posts

03/06/2011

Marco Salles

const
 C=10;
var
  I, A, P : Integer;
  Num: array[0..C - 1] of Integer;
begin
randomize;
  for I := 0 to C - 1 do
    Num[I] := I+1;
  for I := C - 1 downto 0 do
  begin
    P := Random(I+1);
    A := Num[I];
    Num[I] := Num[P];
    Num[P] := A;
  end;

  for I := Low(Num) to High(Num) do
     Memo1.Lines.Add(IntToStr(Num[I]));
 Memo1.Lines.Add('*******');

Responder

Gostei + 0

03/06/2011

Robson Morais

Deu certo, mas eu queria assim que a minha constante const C=10; podesse receber o valor de uma variavel que é a quantidade de numeros aleatórios que vai ter que gerar.
Responder

Gostei + 0

03/06/2011

Marco Salles

Deu certo, mas eu queria assim que a minha constante const C=10; podesse receber o valor de uma variavel que é a quantidade de numeros aleatórios que vai ter que gerar.


e qual a dificuldade ??? basta utilizar em vez de constantes uma variavel e a matriz ser DINAMICA em vez de
constante . Vc consegue cara .


So uma dica valiosa . Este método postado o processamento dele é rápido comprado com outros similares que espalhados pela rede , porem quando o C aumenta a performance pode cair mais ao fato do carregamento que se faz do memo do que o processamento em si

  for I := Low(Num) to High(Num) do
     Memo1.Lines.Add(IntToStr(Num[I]));  // isto consome tempo devido a apresentação dos dados

Então para melhorar a performance se deve lançar mão de dois métodos definidos na classe TStrings
BeginUpdate e EndUpdate

Memo1.Lines.BeginUpdate;
  for I := Low(Num) to High(Num) do
     Memo1.Lines.Add(IntToStr(Num[I]));
Memo1.Lines.EndUpdate;

Responder

Gostei + 0

04/06/2011

Robson Morais

ficou show de bola.....


var
  I, A, P : Integer;
  Num: array of Integer;
begin

  SetLength(Num,Qtd);// Recebe a quantidade de suportes

....etc



obrigado pela ajuda
Responder

Gostei + 0

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

Aceitar