1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Usando o random e dividio igualmente

Discussão em 'Progress 4GL' iniciado por muertebr, Junho 7, 2010.

  1. muertebr

    muertebr Membro Participativo

    Como que poderia usar o comando 'Random' e dividir igualmente as partes.

    Estou precisando gerar um arquivo de sorteio de equipe dos funcionarios da empresa, onde pega pela matricula e gera um arquivo onde estes serão dividos em 4 equipes aleatóriamente, descobri o random que joga os numeros aleatórios pra mim, só que estou precisando que 20 funcionarios, fique 5 para cada equipe.

    Isso ele não consegue fazer.
    alguem poderia dar uma dica?
  2. kirchner

    kirchner Membro Participativo Moderador

    muertebr,

    Tem uma idéia aqui simples, mas parece que funciona. Coloca os nomes em uma tabela temporária, faz um FOR EACH com BY random e agrupa de 4 em 4 na mão.

    Aqui um exemplo simples com o banco sports2000:
    Código:
    for each customer by random(1, 10000):
    disp custnum name.

    A cada execução a ordem dos dados é diferente.
  3. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Caro colega,

    Segue um exemplo, pode não ser o melhor, mas foi o que consegui imaginar neste momento para você:

    Código:
    DEF VAR cFuncionario   AS CHARACTER    NO-UNDO INIT "Adão,Bruno,Eduardo,Carlos,João,César,Paulo,Edson,Jair,Otávio,Lucas,Albert,Kely,Leandro,Juliana,Felipe,Thiago,Rodrigo,Daniel,Ana".
    DEF VAR iRandon        AS INTEGER      EXTENT 5.
    
    DEF TEMP-TABLE tt-nomes
        FIELD tt-codigo     AS INTEGER  
        FIELD tt-nome       AS CHARACTER
        FIELD tt-equipe     AS INTEGER.
    
    DEF VAR iEquip          AS INTEGER.
    
    DO iEquip = 1 TO NUM-ENTRIES(cFuncionario):
    
        CREATE tt-nomes.
        ASSIGN tt-nomes.tt-codigo = 10000 + iEquip
               tt-nomes.tt-nome   = ENTRY(iEquip,cFuncionario).
               
    END.
    
    REPEAT WHILE AVAIL tt-nomes:
    
        FIND FIRST tt-nomes
             WHERE tt-nomes.tt-equipe = 0 NO-ERROR.
    
        ASSIGN iEquip = RANDOM(1,4).
    
        IF iRandon[iEquip] < 5 AND AVAIL tt-nomes THEN
            ASSIGN tt-nomes.tt-equipe = iEquip
                   iRandon[iEquip]    = iRandon[iEquip] + 1.
        
    END.
    
    FOR EACH tt-nomes
          BY tt-nomes.tt-equipe:
    
        DISP tt-nomes.
    
    END.
    

Compartilhe esta Página