Ir ao conteúdo
  • Cadastre-se

C++ Do while com booleand em C++ parando quando encontrar os valores pré-definidos


Genlath
Ir à solução Resolvido por devair1010,

Posts recomendados

Bom dia, preciso de ajuda com um programa teste. Ele é tipo mega sena, sorteia 6 números aleatórios entre 1 e 60, mas gostaria que ele parasse o loop infinito ao encontrar os números mensurados anteriormente...

Segue a minha ideia...

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <iostream>
using namespace std;
int resp;


void ordenar_num(int num[6]) {

    int i, j, aux;
    
    for (i = 0; i < 6; i++)
    {
        for (j = i + 1; j <= 5; j++)
        {
            if (num[j] < num[i])
            { 
                aux = num[i];
                num[i] = num[j];
                num[j] = aux;
            }
        }
    }

    printf("RESULTADO: \n\n\n ");
    
    for (i = 0; i < 6; i++) {
        printf("%i \t", num[i]);
    
    }
    printf("\n");
        
}

int main() {
    ofstream out ("teste.txt");
    int i, j,num, numero[6];
    srand(time(0));
    bool childUpset = true;
do{
    for (i = 0; i < 6; i++) {
        numero[i] = rand() % 60+1;
    }

    
    for (i = 0; i < 6; i++)
    {
        for (j = i + 1; j <= 5; j++)
        {
            do {
                if (numero[j] == numero[i])
                {
                    numero[i] = rand() % 60+1;
                }
            } while (numero[j] == numero[i]);
        }
    }

    printf("Antes da Organizacao: \n\n\n");
    //sortear os numeros
    for (i = 0; i < 6; i++) {
        printf(" %i \t", numero[i]);
        
    }
    printf("\n");
    
    ordenar_num(numero);



//Aqui seria a condição de parar o looping...
   /* for (numero[i] = 7, numero[i] = 11, numero[i] = 19, numero[i] = 25, numero[i] = 35; numero[i] = 60; i++)
    {
        
        break;
    }*/

    printf("\t\nDigite 1 para repetir \n");
    printf("\n");
    
    //scanf("%d", &resp);
    
{
printf (" %i \t", numero[i]);
}
}while     (childUpset == true); 

    
    system("PAUSE");
    out.close();
    return 0;
}

 

Desde já agradeço a ajuda de vocês!
 

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

  • Solução

@Genlath    para que o loop termine você precisa estipular uma condição ,  e você colocou uma o "childUpset" do tipo bool ,  então você pode usar um contador de quantos jogos você quer que sejam gerados ,  e ao atingir esse valor a variável childUpset receba o valor false ,  e seu código modificado ficou assim  :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <iostream>
using namespace std;
void ordenar_num(int num[6])
{
    int i, j, aux;
    for (i = 0; i < 6; i++)
    {
        for (j = i + 1; j <= 5; j++)
        {
            if (num[j] < num[i])
            {
                aux    = num[i];
                num[i] = num[j];
                num[j] = aux   ;
            }
        }
    }
    printf("RESULTADO organizado --:  ");
    for (i = 0; i < 6; i++)
    {
        printf("%2d - ", num[i]);
    }
    printf("\b\b \n");
}
int main()
{
    ofstream out ("teste.txt");
    int i, j,num, numero[6];
    int qtd,cont=0,flg;
    printf("a Qtd de cartoes ");
    scanf("%d",&qtd);
    printf("Gerando os bumeros\n\n");
    srand(time(0));
    bool childUpset = true;
    do
    {
        printf("Antes da Organizacao --:  ");
        for (i = 0; i < 6; i++)
        {
            do
            {
                numero[i] = rand() % 60+1;     /// gera numeros de 1 ate 60
                int flg=0;                     /// marca como nenhum repetido
                for(j=0; j<6; j++)
                {
                    if(numero[i] == numero[j]) /// verif o num gerado com todos no vetor
                    {
                        flg=1;                 /// marca como repetido
                        break;                 /// sai desse loop for j
                    }
                }
            }while( flg == 1);                 /// repete se houver algum repetido no vetor
            printf("%2d - ", numero[i]);
        }
        printf("\b\b \n\n%2d Jogo\n",cont+1);
        ordenar_num(numero);
        printf("\n");
        cont += 1;                            /// incrementa o contador
        if(qtd == cont)                       /// se for igual a qtd pedida
            childUpset = false;               /// marca como false
    }while(childUpset == true);               /// condicao de sair do loop é false
    system("pause");
    out.close();
    return 0;
}

 

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!