1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda com gerador de letras e numeros aleatorios.

Discussão em 'Programação' iniciada por Pedui, 3 de Novembro de 2012. (Respostas: 8; Visualizações: 4077)

  1. Eu gostava que alguém me pudesse dar uma ajuda a programar em c.
    Eu queria tentar fazer um programa que me gerasse combinações de letras e números com o seguinte formato.
    Exemplo:
    xxx-xxxx-xxx-xxx

    em que o x= tanto a letras como a números.
    Eu não percebo quase nada de c, mas tou a aprender por isso se alguém pudesse explicar como fazer algo como isto que eu apresentei, agradecia.
    Atenção que eu não quero só o codigo, eu quero criar o código, mas com alguma ajuda se possível.
    Agradeço desde já toda ajuda que possam dar.
     
  2. DarkT

    DarkT Power Member

    Uma ideia basica é teres um array com todos os numeros e letras!
    [a,b,c....,z,0,1,2,3....9] depois geravas um indice aleatorio e indexavas ao array e ai tinhas o teu caracter random... este e uma maneira facil de fazer e tens todo o controlo!
    PS: Nao te esquecas que tens que limitar o indice de 0 ate ao lenght do array :p

    para gerares numeros aleatorios podes usar esta funcao http://www.cplusplus.com/reference/clibrary/cstdlib/rand/


     
  3. gRmagic

    gRmagic Power Member

    eu fazia algo do genero

    um vetor [1,2,3...9,A,B....Z]

    portanto v[0]=1, v[x]=y

    usas a tal função para gerar valores aleatorios para x (atenção ao comprimento do vetor) e tens como resultado ou um numero ou uma letra :)

    ps: é o que foi dito a cima mas fui mais lento a responder
     
  4. DarkT

    DarkT Power Member

    gRmagic boa explicação fui 2 minutos mais rápido :p

    Mas pronto a minha ideia e essa mesmo :)
     
  5. Obrigado pela ajuda.
    Se calhar devia ter dito que não sabia mesmo nada.lol
    Como não sabia usar vetores como deve de ser e como os valores que queria seriam de 0 a 9 e de A a Z, pensei usar a tabela de ascii com a função de cast.
    Isto foi o que eu fiz.

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int numero_aleatorio (int max,int min)
    { 
     
    srand (time(NULL));
    return ((rand () % (max - min + 1)) + min);
    
    }
     
    main()
    {
          int a, b, c, d, e, f, g, h, i, j, k, l, m;
          char z;
          
          
    do{
          for(;;){
          a=numero_aleatorio (90,48); if(a >= 58 && a <= 64) { continue;}
          b=numero_aleatorio (90,48); if(b >= 58 && b <= 64) { continue;}
          c=numero_aleatorio (90,48); if(c >= 58 && c <= 64) { continue;}
          d=numero_aleatorio (90,48); if(d >= 58 && d <= 64) { continue;}
          e=numero_aleatorio (90,48); if(e >= 58 && e <= 64) { continue;}
          f=numero_aleatorio (90,48); if(f >= 58 && f <= 64) { continue;}
          g=numero_aleatorio (90,48); if(g >= 58 && g <= 64) { continue;}
          h=numero_aleatorio (90,48); if(h >= 58 && h <= 64) { continue;}
          i=numero_aleatorio (90,48); if(i >= 58 && i <= 64) { continue;}
          j=numero_aleatorio (90,48); if(j >= 58 && j <= 64) { continue;}
          k=numero_aleatorio (90,48); if(k >= 58 && k <= 64) { continue;}
          l=numero_aleatorio (90,48); if(l >= 58 && l <= 64) { continue;}
          m=numero_aleatorio (90,48); if(m >= 58 && m <= 64) { continue;} break;}
          
          printf(" %c%c%c-%c%c%c%c-%c%c%c-%c%c%c \n", char(a), char(b), char(c), char(d), char(e), char(f), char(g), char(h), char(i), char(j), char(k), char(l), char(m)  );
    printf("Deseja continuar? (s ou n): ");
    scanf(" %c", &z);
    } while(z=='s');
    system("pause");      
    }
    
    O problema é que o valor que o programa apresenta é semppre todo igual, do genero. AAA-AAAA-AAA-AAA.
    Eu acho que isso poderá ter que ver com o uso da função rand não estar muito bem feita. Se me puderem ajudar agradecia.
     
  6. gRmagic

    gRmagic Power Member

    Eu comecei a dar Java, acho que nao consigo fazer isto em C... era so * e &, mas vê se percebes o raciocínio do que eu fiz

    Código:
    import java.util.Scanner;
    import java.util.Random;
    
    public class Serial {
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.println("Quantas chaves deseja calcular?");
            int num = in.nextInt();
            String[] res= new String[13];
            for (int x = 1; x <= num; x++) {
                for (int i = 0; i <= 12; i++) {
                  
                    String a = carater(arb());
                    res[i]= a;
                }
                System.out.println(res[0] + res[1] + res[2] + "-" + res[3] + res[4] + res[5] + res[6] + "-" + res[7] + res[8] + res[9] + "-" + res[10] + res[11] + res[12]);
    
            }
        }
    
        public static int arb() {               //esta funçao retorna um valor arbitrario entre 0 e o (tamanho maximo do vetor)-1
            Random rndNumbers = new Random();
            int letras = rndNumbers.nextInt(35);
            return letras;
        }
    
        public static String carater(int num) {     //esta funçao tem como valor de entrada o numero gerado aleatoriamente na funçao "arb" e usa esse mesmo numero como indice do vetor para retornar o seu conteudo.
            String[] i = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "Y", "W", "X", "Z"};
            String c = i[num];
            return c;
        }
    }
    

    resultado para o valor de entrada 8:

    JR7-MG1J-FSM-YEQ
    H8T-WBH2-NXE-YWC
    UEL-WR24-Y1U-BOD
    U28-D3LH-D3Z-XWB
    R86-4G8R-UPN-BTI
    H45-JX6Z-5E3-NNU
    JGG-UPGB-1J5-178
    7B7-4ANB-UKX-EO1
     
    Última edição: 4 de Novembro de 2012
  7. Pois java é que ainda percebo menos. O que eu gostava mesmo era de perceber isto em c.
    em java já verifiquei que funciona, mas o que eu queria mesmo era perceber como funcionar em c. lol
    mas obrigado pela ajuda
     
  8. xBoShY

    xBoShY Power Member

    Ignorando os algoritmos utilizados e apenas respondendo o porquê do problema exposto:
    Código:
    srand (time(NULL));
    A seed deve ser gerada uma única vez. Neste caso, no inicio do programa e não a cada vez que corres a função.
     
  9. Obrigado. Já consegui por o programa a funcionar bastou-me tirar
    Código:
    srand (time(NULL));
    de dentro da função que já funcionou.
    Obrigado a todos.
     

Partilhar esta Página