Fórum COMO POSSO SORTEAR UMA POSIÇÃO DE UM VETOR E IMPRIMIR AS INFORMAÇÕES QUE ESTÃO NESSA POSIÇÃO? #603397
02/07/2019
0
Bom, estou a um tempo estudando C/C++, e hoje me apareceu essa questão que não consigo resolver. Basicamente fiz uma struct para cadastrar o nome e o naipe das cartas em vetor de 20 posiçoes, e agora quero que o programa sorteie 3 posições desse vetor e imprima, mas tudo que imprime na tela é uns caracteres tipo(@ e G).
for(i=1 ; i <= 3 ; i++){
srand(time(NULL));
i = rand()%10;
printf("%c\\n", vermelhas[i]);Gabriel Smaniotto
Curtir tópico
+ 0
Responder
Posts
04/07/2019
João Júnior
Bom, estou a um tempo estudando C/C++, e hoje me apareceu essa questão que não consigo resolver. Basicamente fiz uma struct para cadastrar o nome e o naipe das cartas em vetor de 20 posiçoes, e agora quero que o programa sorteie 3 posições desse vetor e imprima, mas tudo que imprime na tela é uns caracteres tipo(@ e G).
for(i=1 ; i <= 3 ; i++){
srand(time(NULL));
i = rand()%10;
printf("%c\\\\n", vermelhas[i]);Há um problema em atribuir ao contador (i) do laço (for) o valor pseudoaleatório: se rand() % 10 gerar 4, por exemplo, o laço é terminado na primeira iteração. O certo é criar uma variável para receber o valor pseudoaleatório e aplicá-lo como índice do vetor. Um exemplo grosseiro:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main(){
int i = 0;
int flag = 0;
char cartas[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
srand(time(NULL));
for(i = 0; i < 3; i++){
flag = rand() % 10;
printf(" %c\\n", cartas[flag]);
}
printf("\\n");
system("pause");
return 0;
}Além disso, a semeadura (srand(time(NULL)) é melhor ficar fora do for para haja uma mesma semente que a cada chamada do rand produza um número diferente. Evidentemente, há repetições de pseudocódigos, caso esse que deve ser devidamente tratado.
Responder
Gostei + 0
04/07/2019
João Júnior
Bom, estou a um tempo estudando C/C++, e hoje me apareceu essa questão que não consigo resolver. Basicamente fiz uma struct para cadastrar o nome e o naipe das cartas em vetor de 20 posiçoes, e agora quero que o programa sorteie 3 posições desse vetor e imprima, mas tudo que imprime na tela é uns caracteres tipo(@ e G).
for(i=1 ; i <= 3 ; i++){
srand(time(NULL));
i = rand()%10;
printf("%c\\\\\\\\n", vermelhas[i]);Há um problema em atribuir ao contador (i) do laço (for) o valor pseudoaleatório: se rand() % 10 gerar 4, por exemplo, o laço é terminado na primeira iteração. O certo é criar uma variável para receber o valor pseudoaleatório e aplicá-lo como índice do vetor. Um exemplo grosseiro:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main(){
int i = 0;
int flag = 0;
char cartas[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'};
srand(time(NULL));
for(i = 0; i < 3; i++){
flag = rand() % 10;
printf(" %c\\\\n", cartas[flag]);
}
printf("\\\\n");
system("pause");
return 0;
}Além disso, a semeadura (srand(time(NULL)) é melhor ficar fora do for para haja uma mesma semente que a cada chamada do rand produza um número diferente. Evidentemente, há repetições de números pseudoaleatórios, caso esse que deve ser devidamente tratado.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)