shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Sorteio de numero aleatório


From: Claudio Lisias
Subject: Re: [shell-script] Sorteio de numero aleatório
Date: Thu, 22 Apr 2004 14:55:49 -0300

Pessoal, ao invés de trabalhar com um vetor utilizando um while para verificar 
em todos os campos do vetor se o número dado aleatoriamente já existe, gravem 
os números em um arquivo e façam a busca para verificar se o número já foi 
gravado com "grep -q". É bem mais rápido.


Att.
Claudio Lisias da Silva
Suporte de Faturamento 3C
ANIMUS - Tecnologia da Informação
55 (21) 2515-8800
55 (21) 2515-8826
clisias@animus_ti.com.br

  ----- Original Message ----- 
  From: address@hidden 
  To: address@hidden 
  Sent: Thursday, April 22, 2004 2:47 PM
  Subject: Re: [shell-script] Sorteio de numero aleatório


  > Eu estava procurando a mesma solução só que entre 1 e 20. Então devo
  > trocar o 99 por 19?
  Sim,  Marco.

  > Outra dúvida, e se eu quiser embaralhar os números de 1 a 20, como posso
  > fazer? Fiz um script usando a variavel $RANDOM e jogando o número em um

  Olha Marco, eu nao sei seu estou ajundando ou atrapalhando, mas lá vai.
  Eu fiz um script agora pra embaralhar os numeros do jeito que você quer,
  só que eu nao tenho à minha disposição um local pra testar a sintaxe, por
  isso, o script provavelmente nao vai rodar de primeira.

  Eu vou mandar o "pseudo-codigo" comentado e um exemplo da execucao para
  torna-lo o mais claro possivel, mas eu nao tenho como corrigir os erros
  de sintaxe no bash. Outra coisa: eu estou usando vetor no bash, pelo que
  eu saiba nao sao todas as versoes de bash que aceitam isso, apesar de ter
  a impressao que o bash2 (versao que aceita vetores) já está bem difundido.

  Portanto, SE voce (ou alguem da lista :) tem uma versao de bash que aceita
  vetor e SE voce conseguir entender os passos do algoritmo de forma que
  voce consiga corrigir os meus erros, ENTAO eu acho que esse script vai
  servir pra
  você e deve ser mais rapido que o seu.

  #!/bin/bash
  # embaralha.sh
  #
  # Embaralha os numeros entre a($1) e b($2)

  if [$# -ne 2]; then
     echo "Sintaxe: embaralha.sh <inicio> <fim>"
     exit
  fi

  if [$1 -ge $2]; then
     echo "O primeiro arqumento ($1) deve ser menor que o segundo ($2)"
     exit
  fi

  INICIO = $1
  FIM = $2
  TAM = $(( $FIM - $INICIO + 1 ))

  # Monta um vetor de TAM posicoes com os numeros para
  # serem embaralhados
  i=1
  while [ $i <= $TAM ]; do
     vetor[$i] = $(( $INICIO + $i ))
     i = $(($i + 1))
  done

  # Escolhe TAM numeros aleatorios
  while [ $TAM -gt 0 ]; do
     num =`echo $[ ( $RANDOM * $TAM / 32767 ) + 1 ]`
     # procura o num-esimo elemento diferente de -1 em vetor
     cont=1 # conta o numero de elementos diferentes de -1
     j=1    # variavel indice do vetor
     while [ $j -le $TAM -a $cont -le $num ]; do # "-a" deve ser igual a "&"
        if [ vetor[$j] -ne -1 ]; then
           $cont = $(( $cont + 1 ))
        fi
     done
     echo vetor[$j] " - "
     vetor[$j] = -1
     TAM=$(( $TAM - 1 ))
  done

  ---------------------------------------------------------
  Exemplo do funcionamento
  ---------------------------------------------------------
  bash$ embaralha.sh 1 6

  INICIO=1
  FIM   =6
  TAM   =6
          +---+---+---+---+---+---+
  vetor = | 1 | 2 | 3 | 4 | 5 | 6 |
          +---+---+---+---+---+---+

  while ($TAM < 0) # como TAM=6, o script entra no laço
  num = 5
  o quinto numero diferente de -1 é o 5
  imprime o 5 na tela
  vetor[5] = -1
          +---+---+---+---+---+---+
  vetor = | 1 | 2 | 3 | 4 |-1 | 6 |
          +---+---+---+---+---+---+
  TAM = 5
  # fim do while

  while ($TAM < 0) # como TAM=5, o script entra no laço
  num = 3
  o terceiro numero diferente de -1 é o 3
  imprime o 3 na tela
  vetor[3] = -1
          +---+---+---+---+---+---+
  vetor = | 1 | 2 |-1 | 4 |-1 | 6 |
          +---+---+---+---+---+---+
  TAM = 4
  # fim do while

  while ($TAM < 0) # como TAM=4, o script entra no laço
  num = 3
  o terceiro numero diferente de -1 é o 4
  imprime o 4 na tela
  vetor[4] = -1
          +---+---+---+---+---+---+
  vetor = | 1 | 2 |-1 |-1 |-1 | 6 |
          +---+---+---+---+---+---+
  TAM = 3
  # fim do while

  while ($TAM < 0) # como TAM=3, o script entra no laço
  num = 1
  o primeiro numero diferente de -1 é o 1
  imprime o 1 na tela
  vetor[1] = -1
          +---+---+---+---+---+---+
  vetor = |-1 | 2 |-1 |-1 |-1 | 6 |
          +---+---+---+---+---+---+
  TAM = 2
  # fim do while

  while ($TAM < 0) # como TAM=2, o script entra no laço
  num = 2
  o segundo numero diferente de -1 é o 6
  imprime o 6 na tela
  vetor[6] = -1
          +---+---+---+---+---+---+
  vetor = |-1 | 2 |-1 |-1 |-1 |-1 |
          +---+---+---+---+---+---+
  TAM = 1
  # fim do while

  while ($TAM < 0) # como TAM=1, o script entra no laço
  num = 1
  o primeiro numero diferente de -1 é o 2
  imprime o 2 na tela
  vetor[2] = -1
          +---+---+---+---+---+---+
  vetor = |-1 | 2 |-1 |-1 |-1 |-1 |
          +---+---+---+---+---+---+
  TAM = 0
  # fim do while

  Termina o programa
  Saida:
  3 - 5 - 4 - 1 - 6 - 2 -




  ---------------------------------------------------------------------
  Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
  ---------------------------------------------------------------------
  Sair da lista: address@hidden
  ---------------------------------------------------------------------
  Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
  ---------------------------------------------------------------------



        Yahoo! Groups Sponsor 
             
              
              
                            Mais... Boa Forma Superinteressante 
                   
             
       


------------------------------------------------------------------------------
  Links do Yahoo! Grupos

    a.. Para visitar o site do seu grupo, acesse:
    http://br.groups.yahoo.com/group/shell-script/
      
    b.. Para sair deste grupo, envie um e-mail para:
    address@hidden
      
    c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço 
do Yahoo!. 



[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]