Ajuda com gerador de letras e numeros aleatorios.

Pedui

Membro
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.
 
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/


 
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
 
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.
 
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:
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
 
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)
{ 
 
[COLOR="#FF0000"]srand (time(NULL));[/COLOR]
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.
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.
 
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.
 
Back
Topo