Como posso sortear uma posição de um vetor e imprimir as informações que estão nessa posição

1. Como posso sortear uma posição de um vetor e imprimir as informações que estão nessa posição

Gabriel Smaniotto
gabrielsmani

(usa Outra)

Enviado em 02/07/2019 - 01:12h

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]);
}



  


2. Re: Como posso sortear uma posição de um vetor e imprimir as informações que estão nessa posição

João Paulo
princknoby

(usa Arch Linux)

Enviado em 02/07/2019 - 20:56h

Vamos dar uma analisada no seu código:

for(i=1 ; i <= 3 ; i++){
srand(time(NULL));
i = rand()%10;
printf("%c\n", vermelhas[i]);
}

Preste atenção no que eu coloquei em negrito, você está atribuindo a i um valor aleatório, isso pode te gerar vários problemas, um deles, e acho que o principal:
Você precisa executar o laço 3 vezes certo? Pois precisa de 3 números aleatórios. Porém, você está sorteando números de 0 a 9. Então vamos supor que no primeiro sorteio seja sorteado o número 4. Porém o seu laço, seu for, só será executado enquanto i for menor ou igual a 3. Portanto nessa ocasião o seu laço seria encerrado no primeiro sorteio!

A solução pra isso é criar outra variável para armazenar os valores sorteados!
Não sei que tipo de dado você quer imprimir, mas fiz um código aqui imprimindo números. Talvez te ajude a entender um pouco.

EDIT: Li a sua pergunta novamente e vi que você disse exatamente o que queria fazer hu3hu3. Então peço desculpas, mas creio que o código abaixo pode te ajudar um pouco.

Segue o post:
Não repare a bagunça, e nem o código mal feito, faz um bom tempo que não programo nada.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void buffer_clean () {
int ch;
while ((ch=fgetc(stdin)) != '\n' && ch != EOF);
}

void pause () {
printf ("\nPress [ENTER] to continue . . .");
scanf ("%*c");
}

/*Não se preocupe com essas funções void buffer_clean e void pause*/

int main () {

int i, vermelhas[5], nroSorteado[3], x;

for (i = 0; i < 5; i++) {
printf ("Valor posicao %d: ", i);
scanf ("%d", &vermelhas[i]);
buffer_clean();
}

x=0;
srand((unsigned)time(NULL));
for(i=0 ; i < 3 ; i++){
nroSorteado[x] = rand() % 5;
printf ("\nPosicao sorteada: %d\n", nroSorteado[x]);
printf ("Valor nessa posicao: %d\n", vermelhas[nroSorteado[x]]);
x++;
}

pause();
return 0;
}





3. Re: Como posso sortear uma posição de um vetor e imprimir as informações que estão nessa posição

Gabriel Smaniotto
gabrielsmani

(usa Outra)

Enviado em 11/07/2019 - 14:20h

Então fiz como você colocou para min, fiz algumas modificações, mas acho que importante mostrar todo o código para que compreenda melhor o que está acontecendo.
Quando o Valor é sorteado preciso que imprima na tela as informações que estão em no vetor Truco cor[40] naquela posição mas só em algumas posições isso acontece, em outras simplesmente não tem nada.
OBS*: antes de começar o código está o enunciado da questão.
/*Escolha um jogo de cartas, baseado em um “baralho tradicional” (cada carta tem seu naipe e seu valor) ou tipo “super trunfo” 
(cada carta possui um conjunto de atributos que deve ser descrito em uma estrutura).
Implemente uma função de distribuição (sorteio) de cartas para 2 jogadores, considerando que cada jogador irá receber 5 cartas.
Usando passagem de parâmetros por referência.*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <string.h>
#define MAX_CARTAS 40
using namespace std;
typedef struct Truco{
char naipe[7];
char numero;
};
Truco cor[40];
Truco vermelhas[20];
Truco pretas[20];
void cadastrocarta(char n[7], char num, Truco cor[], int *posnovetor){

do{
strcpy(cor[*posnovetor].naipe, n);
cor[*posnovetor].numero = num;
(posnovetor++);
}while(*posnovetor < 20);



int x=0, nroSorteado[3];
srand((unsigned)time(NULL));
for(int i=0 ; i < 3 ; i++){
nroSorteado[x] = rand() % 5;
printf ("\nPosicao sorteada: %d\n", nroSorteado[x]);
printf ("Valor nessa posicao: %d\n", vermelhas[nroSorteado[x]]);
cout << cor[nroSorteado[x]].numero << cor[nroSorteado[x]].naipe << endl;
x++;
}
}
int main(){
int ivermelhas = 0, ipretas = 0;
int i;

cadastrocarta("Ouro", '3', vermelhas, &ivermelhas);
cadastrocarta("Ouro", '2', vermelhas, &ivermelhas);
cadastrocarta("Ouro", 'a', vermelhas, &ivermelhas);
cadastrocarta("Ouro", 'k', vermelhas, &ivermelhas);
cadastrocarta("Ouro", 'j', vermelhas, &ivermelhas);
cadastrocarta("Ouro", 'q', vermelhas, &ivermelhas);
cadastrocarta("Ouro", '7', vermelhas, &ivermelhas);
cadastrocarta("Ouro", '6', vermelhas, &ivermelhas);
cadastrocarta("Ouro", '5', vermelhas, &ivermelhas);
cadastrocarta("Ouro", '4', vermelhas, &ivermelhas);

cadastrocarta("copaz", '3', vermelhas, &ivermelhas);
cadastrocarta("copaz", '2', vermelhas, &ivermelhas);
cadastrocarta("copaz", 'a', vermelhas, &ivermelhas);
cadastrocarta("copaz", 'k', vermelhas, &ivermelhas);
cadastrocarta("copaz", 'j', vermelhas, &ivermelhas);
cadastrocarta("copaz", 'q', vermelhas, &ivermelhas);
cadastrocarta("copaz", '7', vermelhas, &ivermelhas);
cadastrocarta("copaz", '6', vermelhas, &ivermelhas);
cadastrocarta("copaz", '5', vermelhas, &ivermelhas);
cadastrocarta("copaz", '4', vermelhas, &ivermelhas);



cadastrocarta("paus", '3', pretas, &ipretas);
cadastrocarta("paus", '2', pretas, &ipretas);
cadastrocarta("paus", 'a', pretas, &ipretas);
cadastrocarta("paus", 'k', pretas, &ipretas);
cadastrocarta("paus", 'j', pretas, &ipretas);
cadastrocarta("paus", 'q', pretas, &ipretas);
cadastrocarta("paus", '7', pretas, &ipretas);
cadastrocarta("paus", '6', pretas, &ipretas);
cadastrocarta("paus", '5', pretas, &ipretas);
cadastrocarta("paus", '4', pretas, &ipretas);

cadastrocarta("espadas", '3', pretas, &ipretas);
cadastrocarta("espadas", '2', pretas, &ipretas);
cadastrocarta("espadas", 'a', pretas, &ipretas);
cadastrocarta("espadas", 'k', pretas, &ipretas);
cadastrocarta("espadas", 'j', pretas, &ipretas);
cadastrocarta("espadas", 'q', pretas, &ipretas);
cadastrocarta("espadas", '7', pretas, &ipretas);
cadastrocarta("espadas", '6', pretas, &ipretas);
cadastrocarta("espadas", '5', pretas, &ipretas);
cadastrocarta("espadas", '4', pretas, &ipretas);






}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts