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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar