COMO POSSO SORTEAR UMA POSIÇÃO DE UM VETOR E IMPRIMIR AS INFORMAÇÕES QUE ESTÃO NESSA POSIÇÃO?

02/07/2019

0

C++

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

Gabriel Smaniotto

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

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar