Fórum Problemao com Matriz #228092
27/04/2004
0
Uma matriz a[0..19], com conteudos entre -20 a -50 ou de 20 a 50 aleatorios.. ou seja:
a - (1)-21 (2) 48 (3) 25 . . .
o problema é que não estou conseguindo fazer isso...
a outra questao eh a seguinte matriz: B[0..199, 0..19], ou seja, 200x20.. preenchido com 0 e 1 aleatorios... o problema eh que nao consigo gerar os numeros aleatorios da matriz A e nao consigo da matriz B...estou usando o Randomize... Random(x), porem, que no caso da matriz B ele comeca a sair assim 0,0,0,0,0,1,0,0,1,0,0,0... repete d+ o mesmo valor...
Desde já agradeço a todos...
[]s
Fellipe.
Titanius
Curtir tópico
+ 0Posts
27/04/2004
Zumbi
entao seria..
matrizA[1,1] := randomRange(20,50);
ele ira gerar um numero randomico entre esses dois valores...
Gostei + 0
27/04/2004
Macario
so acrescentando, a resposta do nosso colega.
acrescente Randomize, antes de gerar a matriz isto garante que nao havera repetições.
Gostei + 0
27/04/2004
Titanius
Randomize; x := Random(1);
o problema eh q estah saindo sempre o 0...
como faco pra gerar este numero?
Gostei + 0
27/04/2004
Nildo
function Randomiza1e2: Byte; begin Randomize; if Random( 9999 ) mod 2 = 0 then Result := 1 else Result := 0; end;
O que eu fiz neste código? Simples, dei u mRandom de um número grande e verifiquei se o mesmo é PAR, assim ele funciona!
Espero telo ajudado!
Gostei + 0
27/04/2004
Marco Salles
[b:dec06b47db][color=red:dec06b47db]Primeiro[/color:dec06b47db]:[/b:dec06b47db]
A Instrução funcao [b:dec06b47db]randomRange[/b:dec06b47db](valorinicial, valorFinal); e de qual Delphi :?: :?: :?: Uso Delphi 5.0 e Quando Compila dá[b:dec06b47db] : [Error] Upodeapagarmesmo.pas(55): Undeclared identifier: ´RandomRange´[/b:dec06b47db]
[b:dec06b47db][color=red:dec06b47db]Segundo[/color:dec06b47db]:[/b:dec06b47db]
[b:dec06b47db]Porque Não [/b:dec06b47db]:?: :?: Eu uso Assim:
MatrisB[i,j]:=Random(2) e Funciona[b:dec06b47db] perfeitamente[/b:dec06b47db] :?: :?: :?: :?:
[b:dec06b47db][color=red:dec06b47db]Terceiro[/color:dec06b47db][/b:dec06b47db]: Para o Nosso Amigo[b:dec06b47db] ´Titanius´[/b:dec06b47db].. Dica:Na definição da matrizB Por se tratar de [b:dec06b47db]apenas [/b:dec06b47db]Zero ou Ums use [b:dec06b47db]Shortint[/b:dec06b47db] ao Inves de [b:dec06b47db]Integer[/b:dec06b47db]...Acredito que se ganha economia na memoria
Var
MatrizB:Array[0..199, 0..19] of [b:dec06b47db]Shortint [/b:dec06b47db]; e não
MatrizB:Array[0..199, 0..19] of [b:dec06b47db]integer [/b:dec06b47db];
Gostei + 0
27/04/2004
Titanius
A funcao RandomRange esta incluida na unit Math, voce tem q declara-la na uses.. funciona muito bem... quanto a declaracao da variavel, valeu pela dica...
Amigo nildo, vou testar esta funcao aqui, qualquer coisa comunico... valeu pessoal..
[]s
Fellipe H.
Gostei + 0
27/04/2004
Marco Salles
Ja quanto a Função Random não funciona com apenas dois números. Faz assim para dar um Random em dois numeros: com todo respeito pelo nosso amigo nildo tenho la minhas dúvisas... Eu Não Vejo problema em fazer assim:
[b:a6283ec42c]MatrisB[i,j]:=Random(2);[/b:a6283ec42c]..Não dá certo :?: :?: :?:
Gostei + 0
27/04/2004
Marcelo Saviski
Antes não funcionava pq tavam sendo usado o [color=green:d72f57606e]Random(1)[/color:d72f57606e], dai o equívoco
Gostei + 0
27/04/2004
Marco Salles
Esta é minha opinião também
Gostei + 0
27/04/2004
Titanius
Usando a funcao do nildo deu a o seguinte resultado:
00-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 38 01-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -13 02-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -40 03-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 112 . . . 195-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 25 196-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -28 197-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -119 198-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 46 199-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 140
ou seja, nao esta aleatorio os 0 e 1....
e usando o Random(2).. deu exatamente o mesmo resultado...
segue o meu codigo, pra melhor esclaredcimentos:
procedure TForm1.Button1Click(Sender: TObject); // Funcao randomica de 0 e 1 function Randomiza: Byte; var x: integer; begin Randomize; if Random(9999) mod 2 = 0 then Result := 1 else Result := 0; end; var Base: array[0..19] of Real; Populacao: array[0..199, 0..19] of ShortInt; SomaPop: array[0..199] of Real; cBase, bBase, i, j, LastMin, LastMax: integer; TempSoma, ValLastMin, ValLastMax: Real; s: string; begin // Limpa parte Visual Memo1.Lines.Clear; Memo2.Lines.Clear; Memo3.Lines.Clear; // Preenche a matriz Base for i := 0 to 19 do begin Randomize; cBase := Randomiza; Randomize; bBase := RandomRange(20, 50); if cBase <> 1 then bBase := bBase * -1; Base[i] := bBase; end; // Exibe a Matriz Base for i := 0 to 19 do begin s := s + FloatToStr(Base[i]) + ´ ´; end; Memo1.Lines.Add(s); //------------------------------------------- TempSoma := 0; for i := 0 to 199 do begin s := ´´; for j := 0 to 19 do begin // Preenche a Populacao Populacao[i, j] := Randomiza; s := s + IntToStr(Populacao[i, j]) + ´ ´; end; end; // Exibe na tela a matriz Populacao ValLastMin := 0; ValLastMax := 0; for i := 0 to 199 do begin TempSoma := 0; for j := 0 to 19 do begin TempSoma := TempSoma + (Base[j] * Populacao[i, j]); end; SomaPop[i] := TempSoma; if SomaPop[i] < LastMin then begin ValLastMin := SomaPop[i]; LastMin := i; end; if SomaPop[i] > LastMax then begin ValLastMax := SomaPop[i]; LastMax := i; end; if i < 10 then Memo2.Lines.Add(´0´ + IntToStr(i) + ´-> ´ + s + ´ SOMA -> ´ + FloatToStr(SomaPop[i])) else Memo2.Lines.Add(IntToStr(i) + ´-> ´ + s + ´ SOMA -> ´ + FloatToStr(SomaPop[i])); end; Memo3.Lines.Add(´Individuo Menos Adaptado:´); Memo3.Lines.Add(Memo2.Lines.Strings[LastMin]); Memo3.Lines.Add(´---------------------------´); Memo3.Lines.Add(´Individuo Mais Adaptado:´); Memo3.Lines.Add(Memo2.Lines.Strings[LastMax]); end;
Desde ja agradeço
Fellipe.
Gostei + 0
27/04/2004
Marcelo Saviski
00-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 38 01-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -13 02-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -40 03-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 112 . . . 195-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 25 196-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -28 197-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> -119 198-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 46 199-> 0 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 SOMA -> 140
tente com [color=green:7d9311843b]Round(Random)[/color:7d9311843b] ao invés de [color=green:7d9311843b]Randomiza[/color:7d9311843b]
Gostei + 0
27/04/2004
Maxwell_monteiro
Gostei + 0
27/04/2004
Titanius
Muito obrigado a todos...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)