Jump to content

Código de Loteria - Matriz e vetores C++


Vitera148

Recommended Posts

Posted

Olá Pessoal!

Estou fazendo um código em c++ que simula uma loteria, o usuário entra com 6 números inteiros, o código mostra os números em uma matriz 6x10, realiza o sorteio e mostra quanto números o usuário acertou. Estou com dificuldades para gerar a matriz, alguém pode me ajudar? 

 

A matriz deve ficar dessa ser impressa em uma forma similar a essa [Cartão de aposta]: 

-->Informe o 1 Número: 17
-->Informe o 2 Número: 01
-->Informe o 3 Número: 22

--------------------------
     CARTÃO RESPOSTA
--------------------------
01 -- -- -- -- -- -- -- -- --
-- -- -- -- -- -- 17 -- -- --
-- 22 -- -- -- -- -- -- -- -- 

 

Eis o código que tenho até agora: 

#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <set>

const size_t amount = 6;

typedef std::set<int> bilhete_t;

bilhete_t NumerosUsuario()
{
    bilhete_t bilhete;
    while (bilhete.size() < amount)
    {
        std::cout << "\n Por Favor entre com o numero " << (bilhete.size()+1) << ":";

        int entry;
        if(std::cin >> entry)
        {
            if(entry >= 1 && entry <= 60)
            {
                if (bilhete.end() != bilhete.find(entry))
                    std::cout << "Numero duplicado "  << entry;
                else
                    bilhete.insert(entry);
            } else
                std::cout << "Numero fora do intervalo [1..60]: "  << entry;

            continue;
        }

        std::cin.clear();
        std::string discard;
        std::cin >> discard;
        std::cout << "Bad input '" << discard << "' discarded";
    }
    return bilhete;
}

bilhete_t NumerosSorteados()
{
    bilhete_t bilhete;
    while (bilhete.size() < amount)
        bilhete.insert(rand() % 40 + 1);
    return bilhete;
}

std::ostream& operator<<(std::ostream& os, bilhete_t const& t)
{
    std::copy(t.begin(), t.end(), std::ostream_iterator<int>(os, "; "));
    return os;
}

int main()
{
    std::cout << "LOTERIA MEGA MALUCA:" << std::endl;
    std::cout << "---------------------------" << std::endl;
    std::cout << " 1) Jogar a Loteria "             << std::endl;
    std::cout << " 2) Sair do programa "           << std::endl;
    std::cout << "Por Favor faca uma selecao: ";
    char choice;
    std::cin >> choice;

    switch(choice)
    {
        case '1':
            {
                std::cout << "\n Por Favor, digite o seu nome: ";
                std::string name;
                std::cin  >> name;

                const bilhete_t user    = NumerosUsuario();
                const bilhete_t winning = NumerosSorteados();

                std::cout << "Bilhete do Usuario:    " << user    << "\n";
                std::cout << "Bilhete vencedor: " << winning << "\n";

                // Checa se venceu?
                bool ok = 0 == std::lexicographical_compare(
                        user.begin(), user.end(),
                        winning.begin(), winning.end());

                std::cout << "Resultado da aposta: " << (ok? "VENCEDOR":"Nao foi dessa vez") << "\n";
            }
        case '2':
            return 0;
        default:
            std::cout << "\n Essa nao e uma escolha valida." << std::endl;
    }

    std::cin.ignore(1<<24,'\n');
    std::cout << "\n Pressione enter...";
    std::string dummy;
    std::getline(std::cin, dummy);
}

 

Posted

olá vitera, não sei se entendi direito a sua dúvida, mas fiz um código em C em que imprimo os números na ordem correta simulando uma matriz 6x10, olha o resultado

image.png.489b45de787072d9af3749bc438022d3.png

Olha o código que fiz, espero que tenha te ajudado em algo

 1 #include <stdio.h>
  2
  3 void main(){
  4
  5   int vet[3] = {7,16,35};
  6
  7   int i,j,n = 1, x = 0;
  8   // i = linha, j = coluna, n = vai ser o número que vai simular os 60 números da cartela
  9   // x = vai ser o indice do vetor para comparar com o n
 10   for(i = 1; i <=6; i++){
 11     for(j = 1; j<=10; j++){
 12       if(n == vet[x]){
 13         printf("%d", n);
 14         x++;
 15       }
 16       else{
 17         printf("-");
 18       }
 19       n++;
 20     }
 21     printf("\n");
 22     j = 1;
 23   }
 24 }

abraços
 

Posted

Dei uma olhada bem por cima no código. Algumas dicas, baseando-se que você está tentando imprimir a cartela com a sobrecarga do operador <<:

1. Quando copiar/colar ou adaptar um código encontrado na internet, tente entender o que o código faz. Sobrecarregar o operador << me parece ser uma tentativa de matar uma formiga com um revólver. Não tente dar um passo maior que a perna.

2. Uma solução simples e fácil de implementar envolveria um uso cuidadoso de um único laço for, do operador de resto de divisão inteira (%) e de funções do cabeçalho iomanip. Depois de entender como você quer a sua saída e como pode implementá-la, aí sim, tente fazer generalizações baseadas em recursos mais avançados de C++.

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...