Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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 .

Postado

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
Postado
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
Postado

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
Postado
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

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...