Jump to content
Sign in to follow this  
Vitera148

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

 Read 1 minute

Recommended Posts

 Read 1 minute

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);
}

 

Share this post


Link to post
Share on other sites
Posted (edited)
 Read less than a minute

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
 

Edited by zthiagovalle

Share this post


Link to post
Share on other sites
Posted (edited)
 Read less than a minute

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

Edited by Vinicius Antunes Osti

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...