8
I have a job for my course, and it is necessary to make a program similar to the game of megasena. It’s almost done, but I’m finding a small problem and I need help.
Job dice: maximum 10 players can bet, each can bet from 6 up to 15 numbers in the range [1.60].
In function sorteiaNumerosSena()
, I draw 6 random numbers and allocate them in a 6 position vector. This function is within the function pegaApostasJogadores()
. I want to return the vector numerosApostas[]
for the function and use it in another function to be displayed and compared to the bets of the players. I am not managing to return this vector. Could someone tell me a better solution or method to solve this? The complete code is just below.
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
#include <time.h>
int pegaNumeroJogadores (); // Protótipo
int validaNumeroJogadores (int numeroJogadores); // Protótipo
int pegaApostasJogadores (int qtdeJogadores); // Protótipo
int validaQuantidadeApostas (int quantidadeApostas); // Protótipo
int validaApostaJogador (int apostaDoJogador); // Protótipo
int sorteiaNumerosSena (); // Protótipo
int mostraApostas (int contadorLinha, int contadorColuna, int apostasJogadores[][14], int *vetorApostas, int qtdeJogadores); // Protótipo
int verificaGanhador (int contadorLinha, int contadorColuna, int apostasJogadores[][14], int *vetorApostas, int qtdeJogadores, int *sorteados); // Protótipo
int main (void) {
// Declarações locais
int qtdeJogadores;
// Instruções
setlocale(LC_ALL, "Portuguese");
qtdeJogadores = pegaNumeroJogadores();
pegaApostasJogadores(qtdeJogadores);
return 0;
}
int pegaNumeroJogadores () {
// Declarações locais
int numeroJogadores;
// Instruções
printf("Insira a quantidade de jogadores\n> ");
scanf("%d", &numeroJogadores);
numeroJogadores = validaNumeroJogadores(numeroJogadores);
return numeroJogadores;
}
int validaNumeroJogadores (int numeroJogadores) {
// Declarações locais
// Instruções
while ((numeroJogadores <= 0) || (numeroJogadores > 10)) {
printf("Quantidade inválida de jogadores, insira novamente.\n> ");
scanf("%d", &numeroJogadores);
}
return numeroJogadores;
}
int pegaApostasJogadores (int qtdeJogadores) {
// Declarações locais
int contadorColuna, contadorLinha, quantidadeApostas, apostaDoJogador, vetorApostas[9], apostasJogadores[9][14], sorteados;
// Instruções
for (contadorLinha = 0; contadorLinha < qtdeJogadores; contadorLinha++) {
printf("Jogador de número %d, quantos números jogará?\n> ", contadorLinha+1);
scanf("%d", &quantidadeApostas);
vetorApostas[contadorLinha] = quantidadeApostas;
for (contadorColuna = 0; contadorColuna < quantidadeApostas; contadorColuna++) {
printf("%dº número da aposta: ", contadorColuna+1);
scanf("%d", &apostaDoJogador);
apostaDoJogador = validaApostaJogador(apostaDoJogador); /* Valida a aposta do jogador */
apostasJogadores[contadorLinha][contadorColuna] = apostaDoJogador;
}
}
system("cls");
sorteados = sorteiaNumerosSena();
printf("%d\n", sorteados);
mostraApostas(contadorLinha,contadorColuna,apostasJogadores,vetorApostas,qtdeJogadores);
verificaGanhador(contadorLinha,contadorColuna,apostasJogadores,vetorApostas,qtdeJogadores,sorteados);
}
int validaQuantidadeApostas (int quantidadeApostas) {
// Declarações locais
// Instruções
while ((quantidadeApostas < 6) || (quantidadeApostas > 15)) {
printf("Quantidade de apostas inválida, favor inserir outra.\n> ");
scanf("%d", &quantidadeApostas);
}
return quantidadeApostas;
}
int validaApostaJogador (int apostaDoJogador) {
// Declarações locais
// Instruções
while ((apostaDoJogador <= 0) || (apostaDoJogador > 60)) {
printf("Sua aposta é inválida, favor utilizar outra.\n> ");
scanf("%d", &apostaDoJogador);
}
return apostaDoJogador;
}
int sorteiaNumerosSena () {
// Declarações locais
static int numerosSorteio[6];
int contador, auxiliar, troca;
// Instruções
printf("SORTEIO DE 6 NÚMEROS ALEATÓRIOS\n");
srand((unsigned)time(NULL));
for (contador = 1; contador <= 6; contador++) {
numerosSorteio[contador] = (1+rand()%60);
for (auxiliar = 1; auxiliar <= contador; auxiliar++) {
if (numerosSorteio[auxiliar] == numerosSorteio[contador]) {
numerosSorteio[contador] = (1+rand()%60);
}
}
}
for (contador = 1; contador <= 6; contador++) {
for (auxiliar = contador+1; auxiliar <= 6; auxiliar++) {
if (numerosSorteio[contador] > numerosSorteio[auxiliar]) {
troca = numerosSorteio[auxiliar];
numerosSorteio[auxiliar] = numerosSorteio[contador];
numerosSorteio[contador] = troca;
}
}
//printf("Números sorteados: %d\n", numerosSorteio[contador]);
}
}
int mostraApostas (int contadorLinha, int contadorColuna, int apostasJogadores[][14], int *vetorApostas, int qtdeJogadores) {
// Instruções
for (contadorLinha = 0; contadorLinha < qtdeJogadores; contadorLinha++) {
printf("Apostas do %dº jogador: ", contadorLinha+1);
for (contadorColuna = 0; contadorColuna < vetorApostas[contadorLinha]; contadorColuna++) {
printf("%d ", apostasJogadores[contadorLinha][contadorColuna]);
}
printf("\n");
}
}
int verificaGanhador (int contadorLinha, int contadorColuna, int apostasJogadores[][14], int *vetorApostas, int qtdeJogadores, int *sorteados) {
// Declarações locais
int contador, acertos;
// Instruções
for (contadorLinha = 0; contadorLinha < qtdeJogadores; contadorLinha++) {
for (contadorColuna = 0; contadorColuna < vetorApostas[contadorLinha]; contadorColuna++) {
for (contador = 1; contador <= 6; contador++) {
if (apostasJogadores[contadorLinha][contadorColuna] == sorteados[contador]) {
acertos++;
}
}
}
if (acertos == 6) {
printf("Jogador %d, você acertou os 6 números! És o novo milionário nacional!!\n", contadorLinha+1);
}
else {
printf("Jogador %d, você obteve %d acertos.\n", contadorLinha+1,acertos);
}
}
}
A funny note: it seems that on both sides of the Atlantic one of the first programs is always the lottery/mega sena/Euromillions :)
– Omni
ATTENTION: in C arrays are indexed
0
ton - 1
. In your code you’re indexing1
ton
and therefore wasting 1 element and accessing another element that does not exist.– pmg