Ir ao conteúdo
  • Cadastre-se

C++ Trabalho da faculdade - Programa Megasena


Posts recomendados

2024322_162316_Algoritmos_II_Avaliacao_Processual_20241_Bimestre_1_1.pdf preciso de ajuda, a parte que verifica o total de acerto de numeros e o sorteio manual não funcionam

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

int sorteio_manual(){
    int i, numeroSorteioM, numeroDigitadoM, verificaNumeroM, numeroJaDigitadoM, numerosM[6];
while(i < 6){
        printf("Digite um numero entre 1-60: ");
        scanf("%d", &numeroSorteioM);

        if(numeroDigitadoM <= 0 || numeroDigitadoM > 60){
            printf("Numero invalido, por favor digite um numero entre 1 e 60!\n");
        }else {
            numeroJaDigitadoM = 0; // flag controlar se encontramos o numero
            for(verificaNumeroM = 0; verificaNumeroM < i; verificaNumeroM++){
                if(numerosM[verificaNumeroM] == numeroDigitadoM){
                    numeroJaDigitadoM = 1;
                    printf("Numero ja digitado\n");
                    break;
                } if (numeroJaDigitadoM == 0){
                numerosM[i] = numeroDigitadoM; // Insere o numero
                i++; // incrementa o total de numeros digitados
            }

        }
}
}
}

int exibe_numeros_sorteio(int verificaNumero, int x){
int i, j, numeros[10], numerosSorteados[10], numeroSorteado, numeroJaSorteado, acertos = 0;
srand(time(NULL));
    printf("\n\n NUMEROS SORTEADOS: \n");
    i = 0;
    while(i < 6){

        numeroSorteado = rand() % 60;
        numeroJaSorteado = 0;
        for(verificaNumero = 0; verificaNumero < i; verificaNumero++){
            if(numerosSorteados[verificaNumero] == numeroSorteado){
                numeroJaSorteado = 1;
            }
        }

        if(numeroJaSorteado == 0){
            numerosSorteados[i] = numeroSorteado;
            i++;
            printf("%d ", numeroSorteado);
        }
    }

    // VERIFICAR O TOTAL DE ACERTOS
    for(i = 0; i < x; i++){
        for(j = 0; j < x; j++){
            if(numerosSorteados[i] == numeros[j]){
                acertos++;
            }
        }
    }

    printf("\nTOTAL DE ACERTOS: %d\n", acertos);

}


int main(){
    int sorteio, numeros[10], x, i = 0, numeroDigitado, numeroJaDigitado, verificaNumero;
    

    printf("Digite a quantidade de numeros que voce quer jogar: ");
    scanf("%d", &x);

       while(i < x){
        printf("Digite um numero entre 1-60: ");
        scanf("%d", &numeroDigitado);

        if(numeroDigitado <= 0 || numeroDigitado > 60){
            printf("Numero invalido, por favor digite um numero entre 1 e 60!\n");
        }else {
            numeroJaDigitado = 0; // flag controlar se encontramos o numero
            for(verificaNumero = 0; verificaNumero < i; verificaNumero++){
                if(numeros[verificaNumero] == numeroDigitado){
                    numeroJaDigitado = 1;
                    printf("Numero ja digitado\n");
                    break;
                }
            }

            if (numeroJaDigitado == 0){
                numeros[i] = numeroDigitado; // Insere o numero
                i++; // incrementa o total de numeros digitados
            }
        }
    }
    printf("%d", numeros[i]);
    printf("Menu\n1- Sorteio manual\n2- Sorteio automatico\n");
    scanf("%d", &sorteio);
        switch (sorteio)
        {
        case 1:
            sorteio_manual();

            break;
        case 2:
            exibe_numeros_sorteio(verificaNumero, x);

            break;
        }

    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@santicide   você postou no tópico de C++ , mas esse código é todo da linguagem C ,  e então você vai fazer em Qual linguagem ?  ,   e pode ser na linguagem  C mesmo , então essa função sorteio_manual não funciona pois está em loop infinito , já que essa variável "i" que foi criada mas não  foi inicializada e assim ela terá um valor aleatório qualquer , 

#define     _WIN32_WINNT 0x600
#define     _h GetStdHandle(STD_OUTPUT_HANDLE)
#include    <stdio.h>
#include    <conio.h>
#include    <iso646.h>
#include    <stdlib.h>
#include    <iostream>
#include    <string.h>
#include    <windows.h>
#include    <math.h>
#include    <time.h>
#include    <stdbool.h>
#include    <locale.h>
using namespace std;
int sorteio_manual()
{
    int i,                  /// var não inicializada , pode ter qq valor 
        numeroSorteioM = 0, /// inicializa uma variAvel "int" 
        numeroDigitadoM, verificaNumeroM, numeroJaDigitadoM, 
        numerosM[6] = {0};  /// inicializando um vetor de "int" todos elementos zerados 
    while(i < 6)            /// só vai entrar nesse loop se i for menor que 6
    {                       /// e só vai sair qundo "i" for maior Que zero
        printf("Val I= %d\n",i); /// para ver o valor da var "i"

e essas funções são ineficazes pois não recenem nenhum argumento e nem retornam nada .

Link para o comentário
Compartilhar em outros sites

o que é sorteio manual em um programa em C no tópico C++, que é outra linguagem, diferente de C e de C#?

 

procure deixar SEMPRE main como a primeira função do programa. Se possível em um arquivo separado. É melhor pra você e para quem lê seu programa    

Seu programa, em C e não C++, tem muitos problemas.

 

Pode conseguir terminar assim, mas vai ter um trabalho do inf3rn0 e vai ter dificuldades pra testar, para mudar algo e pra reaproveitar algo no futuro.

 

A julgar pelo conjunto dos programas que se vê aqui acho que tudo acontece pela maneira como ensinam isso (ou não ensinam), e pala qualidade (ou falta de) dos livros que temos.

 

De volta ao código

 

seu programa sequer compila.

 

Veja esse trecho
 

int sorteio_manual() {
    int i, numeroSorteioM, numeroDigitadoM, verificaNumeroM, numeroJaDigitadoM, numerosM[6];
    while (i < 6) {
        printf("Digite um numero entre 1-60: ");
        scanf("%d", &numeroSorteioM);

 

Isso quer dizer que nem testou nada.

 

  • Quanto acha que fale i?
  • acha que scanf retornou o que? Acha que não importa? Leia o manual
  • declare uma variável por linha: é grátis
  • inicialize todas
  • não use esses nomes gigantes. Não ajudam em nada. Pelo contrário, fica muito ruim de ler o programa
  • escreva em torno dos dados. O que é um sorteio?
  • use argumentos
  • teste o código em partes. Não tente escrever tudo junto. Vai levar muito mais tempo
  • se está testando entende que deve usar srand() com um valor conhecido e não o contrário: não use time()
  • entenda que só deve chamar srand uma vez. Provavelmente em main logo no inicio do programa. E não a cada sorteio... E muito menos na hora de mostrar os números
  • Obrigado 1
  • Haha 1
Link para o comentário
Compartilhar em outros sites

Em 17/04/2024 às 16:40, santicide disse:

o sorteio manual não funcionam

Eu entendo, e tu compreendes, que os programas são simulações\representações pouco ou quase nada perto da realidade material das coisas; logo, não existe o sorteio material, real ou manual em sistemas analógicos e digitais: há somente algoritmos.

 

E DAÍ

Supostamente, o exercício é algo acerca de iteração sobre vetores e números randomizados (ou qualquer coisa semelhante) que, para mim, resolve em Algoritmo de Embaralhamento.

 

Sugiro que defina uma função que tem como argumento formal um vetor e que retorna o valor dum elemento desse vetor; bolas é um bom nome para o vetor. Antes exclua (aplique exclusão lógica) a bola sorteada de bolas.

 

Além de retornar uma bola do vetor, aquela função aplica em bolas a cada chamada o algoritmo de embaralhamento, o que, para mim, confere razoavelmente com 'sorteio manual ': ação de agitar o saquinho de bolas e pegar uma.

 

Acho que isso agradará teu professor! A mim, muito agradaria.

 

***Se essa não é a pergunta, então, desculpe-me.

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Então

  • o problema postado como de C++ é um programa em C
  • `sorteio_manual()` é o que se costuma chamar de aposta
  • `exibe_numeros_sorteio()` é, ou inclui, o que se costuma chamar de sorteio
  • e a conferência da aposta está embutida em `exibe_numeros_sorteio()` usando um parâmetro

 E como está o código agora?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Ansi C disse:

Quem costuma chamar isso de aposta? 

 

Mais ou menos como está no enunciado, aposta --- ou sorteio manual --- é quando por exemplo o sujeito vai na lotérica, pega o formulário e marca entre 6 e 15 dezenas. Aí ele vai ao caixa e registra o tal sorteio_manual e paga pelo sorteio manual. Ou aposta.

 

O próximo passo é aguardar o sorteio, aqui chamado de exibe_numeros_sorteio().

 

Depois disso tem a fase da conferência, aqui sendo uma opção de exibe_numeros_sorteio(), ao que parece.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!