Ir ao conteúdo

Posts recomendados

Postado

estou com duvida no meu trabalho de programacao, eu gostaria de saber se tem como eu usar 2 vetores na mesma funcao void.

 

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>

bool Existe(int cartelaA[],int tam, int valor){
    for(int i = 0;i<tam;i++){
        if(cartelaA==valor)
            return true;
    }
    return false;
}

void GeraAleatorios(int cartelaA[],int Limite){
    srand(time(NULL));

    int v;
    for(int i=0;i<5;i++){
        v = Limite+ rand() % 15;
        while(Existe(cartelaA,i,v)){
            v = rand() % 15;
        }
        cartelaA = v;
    }

}

int main()
{
    srand(time(NULL));
    int cartelaA[5];
    int cartelaB[5];
    GeraAleatorios(cartelaA,1);
        GeraAleatorios(cartelaB,16);

     for(int i = 0;i<5;i++){
        cout<<cartelaA<<" - ";
    }  cout<<"\n";
     for(int i = 0;i<5;i++){
        cout<<cartelaB<<" - ";
    }

    return 0;
}
 

 


   

 

  • Obrigado 1
Postado

@Felipe Hoffmeister     sim , você pode usar quantos vetores você quiser em qualquer parte do programa ,   mas como você não usou o botão  <>  que está desenhado lá na barra de ferramentas da janela de postar

1141254913_barradeferramentas.JPG.212d44257947c292bdd785478c75d98d.JPG

, seu código ficou faltando alguns caracteres como os [ i ]  que sumiram do seu código e assim fica difícil saber o que você pretendia fazer nesse código , então poste o enunciado e diga o que quer que ele faça ,.

Postado

@Felipe Hoffmeister     vi , mas esse código não está funcionando ,  e você não disse o que quer que ele faça ,  então seu  código organizado e com algumas modificações ,  poderia ser assim  :

#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <iomanip>
#define pow if(i<4)cout<<" - ";
#define pausar for(int u=0;u<60000000;u++);
using namespace std;
bool Existe(int cartelaA[],int tam, int valor){
    for(int i = 0;i<tam;i++)/* não precisa de chaves pois tem apenas um comando dentro do loop  */
        if(cartelaA[i]==valor)
            return true;/* por que o número já existe no vetor */
    return false;
}
void GeraAleatorios(int cartelaA[],int Limite){
    int v;
    for(int i=0;i<5;i++){
        do v = rand() % 15 + Limite;/* não precisa de chaves pois tem apenas um comando dentro do loop  */
        while(Existe(cartelaA,i,v));
        cartelaA[i] = v;
    }
}
int main(){
    system("color ec");/* Hexadecimal                        */
                       /* 1º cor da Tela                     */
                       /* 2º cor das Letras                  */
    srand(time(NULL));          /* só precisa usar uma vez   */
    int cartelaA[5],cartelaB[5],u;
    GeraAleatorios(cartelaA,1); /* gera números de 1  até 15 */
    GeraAleatorios(cartelaB,16);/* gera números de 16 até 30 */
    for(int i = 0;i<5;i++){
        cout<<setw(2)<<cartelaA[i];/* setw diz quantos caracteres imprimir */
        pow;/* isso é uma macro , que está definida lá no define */
    }
    cout<<endl;
    for(int i = 0;i<5;i++){
        cout<<cartelaB[i];
        pow;
    }
    cout<<"\n\n"<<endl;
    do{
        cout<<"                |\r";pausar;
        cout<<"                /\r";pausar;
        cout<<"                -\r";pausar;
        cout<<"                "          ;
        cout<<(char)92<<"\r";/* carriage return , volta para o início da linha    */
        pausar;              /* isso é uma macro , que está definida lá no define */
    }while( ! kbhit() );
    return 0;
}

 

Postado
2 horas atrás, Felipe Hoffmeister disse:

consegui meu codigo estava errado por isso a duvida, mas valeu pela ajuda

 

 

Teve tempo de ler o código que postei, com a classe Cartela em C++ preenchendo as cartelas? Talvez fosse útil comparar com a sua versão final

 

Boa sorte

  • Curtir 1
Postado
2 horas atrás, arfneto disse:

 

Teve tempo de ler o código que postei, com a classe Cartela em C++ preenchendo as cartelas? Talvez fosse útil comparar com a sua versão final

 

Boa sorte

 

De todo modo, eis uma implementação possível para uma classe cartela, que já preenche as próprias considerando um limite para os números, a capacidade e um nome para cada cartela, importante se elas forem iguais e usadas em um jogo por exemplo. E aloca e libera memória automaticamente, o que não faz mal nenhum

O código

class Cartela
{
public:
    int        tamanho;
    int        limite;
    int*    valores;
    string    nome;

public:

    Cartela(string n, int t, int l)
    {
        nome = n;
        tamanho = t;
        limite = l;
        cout << "Criando cartela '" <<
            nome <<
            "' com " << tamanho << " valores entre 1 e " << limite << endl;
        valores = new int[tamanho];
        int v;
        // pra vida ficar mais fácil inicia todos os valores
        // com um valor maior que o limite
        for (int i=0; i<tamanho; i++) valores[i] = limite+1;
        srand((int)time(NULL));
        // aqui vamos preencher a cartela
        // um loop simples: a cada vez retorna um
    ,     // numero aleatorio. Como na cartela do bingo
    ,     // os valores ficam em ordem crescente
    ,     for (int i = 0; i < tamanho;)
    ,     {    // total de valores = tamanho
            v = rand() % limite + 1; // um valor entre 1 e o limite
            for (int n=0; n<tamanho; n++)
            {
                if (valores[n] > v)
                {    // achou o lugar: desloca todos pra abrir posicao
                    for (int j=tamanho-1; j>=n; j--)
                    {
                        if(valores[j]<limite+1)
                        {
                            valores[j+1] = valores[j];
                        }    // end if
                    }    // end for
                    valores[n] = v;
                    i++;
                    break;
                }
                if (valores[n] == v) break;
            }    // end for n
        }    // end for i
    }    // end Cartela()


    ~Cartela()
    { 
        cout << 
            "Destruindo cartela '" << 
            nome <<
            "' com " << tamanho <<
            " valores entre 1 e " << limite
            << endl;
        delete [] valores;
    };


    int mostra()
    {
        cout <<
            "\n    Cartela '" << nome <<
            "' com " << tamanho << 
            " valores. Limite: " <<    limite 
            << endl;
        for (int i=0; i<tamanho; i++)
        {
            cout << valores[i] << "\t";
            if (i%5 == 4) cout << endl;
        }    // end for
        cout << endl;
        return 0;
    }    // end mostra()


    int existe(unsigned int valor)
    {
        for (int i=0; i<tamanho; i++)
        {
            if (valores[i] == valor)
                return valor;
        }    // end for
        return -1;
    }    // end existe()

};    // end class Cartela

 

 

O enorme programa de teste

int main(int argc, char** argv)
{
    Cartela c("Cartela A", 20, 100);
    c.mostra();
    Cartela d("Bingo", 10, 50);
    d.mostra();
    return 0;
}    // end main()

Mostra isso

Criando cartela 'Cartela A' com 20 valores entre 1 e 100

    Cartela 'Cartela A' com 20 valores. Limite: 100
5       17      19      25      30
35      42      44      45      55
59      66      67      77      87
88      92      94      98      99

Criando cartela 'Bingo' com 10 valores entre 1 e 50

    Cartela 'Bingo' com 10 valores. Limite: 50
5       9       16      17      25
27      38      42      44      48

Download

O programa de teste pode ser baixado aqui

  • Curtir 1
Postado

Valeu pela ajuda, Eu ja consegui fazer a cartela numa matriz sem que nos numeros se repitam e de forma crescente, agora flata sortear o os numeros como você fez?

adicionado 4 minutos depois

meu programa esta assim agora

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
#include <conio.h>
void nomes(char nome1[],char nome2[], char nome3[], char nome4[], char nome5[])
{
    cout<<"\t\tBINGO\n";
    cout<<"Digite o nome do jogador da cartela 1:";
    cin.getline (nome1,256);
    cout<<"Digite o nome do jogador da cartela 2:";
    cin.getline (nome2,256);
    cout<<"Digite o nome do jogador da cartela 3:";
    cin.getline (nome3,256);
    cout<<"Digite o nome do jogador da cartela 4:";
    cin.getline (nome4,256);
    cout<<"Digite o nome do jogador da cartela 5:";
    cin.getline (nome5,256);
    system("cls");

}
void comparador(int vet[],int matA[][5],int matB[][5],int matC[][5],int matD[][5],int matE[][5]){

    for(int i=0; i<5; i++)
    {
        for(int j= 0; j>=0; j++)
        {
            if(matA[i][j]==vet[i]){
                cout<<"a";
                break;}

        }}

}
void organiza(int num[][5])
{
    for(int i=0; i<5; i++)
    {
        for(int j= 4; j>=0; j--)
        {
            for(int var1= j-1; var1>=0; var1--)
            {
                if(num[i][j]< num[i][var1])
                {
                    int var2= num[i][j];
                    num[i][j]= num[i][var1];
                    num[i][var1]=var2;
                }
            }
        }
    }
}
int existe(int matA[][5], int i, int j)
{
    for (int k = 0; k <= i; k++)
    {
        for (int l = 0; l < j; l++)
        {
            if (matA[i][j] == matA[k][l])
            {
                return 1;
            }
        }
    }
    return 0;
}
int existevet(int vetA[], int i)
{
    for (int j = 0; j < 5; j++)
    {
        if (vetA[i] == vetA[j])
        {
            return 1;
        }
    }
    return 0;
}

bool Existe(int valores[], int valor){
    for(int i = 0;i<75;i++){
        if(valores[i]==valor)
            return true;
    }
    return false;
}

void GeraAleatorios(int numeros[],int matA[][5],int matB[][5],int matC[][5],int matD[][5],int matE[][5]){
    srand(time(NULL));

    int v;
    for(int i=0;i<75;i++){
        v = 1+rand() % 75;
        while(Existe(numeros,v)){
            v = 1+rand() % 75;
        }
        numeros[i] = v;
        cout<<"\n"<<numeros[i];

         _sleep(1000);



    }

}


void gera(int matA[][5])
{
    int Limite;
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            if(i==0)
            {
                Limite =1;
            }
            if(i==1)
            {
                Limite =16;
            }
            if(i==2)
            {
                Limite =31;
            }
            if(i==3)
            {
                Limite =46;
            }
            if(i==4)
            {
                Limite =61;
            }
            while (1)
            {
                matA[i][j]= Limite + rand() % 15;
                if (!existe(matA, i, j))
                    break;
            }
        }
    }
}
void imprime(int matA[][5])
{
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout<<" "<<matA[i][j];
        }
        cout<<"\n";
    }
}
int main()
{
    srand(time(NULL));
    char nome1[256], nome2[256],  nome3[256],  nome4[256],  nome5[256];
    int matA[5][5],matB[5][5],matC[5][5],matD[5][5],matE[5][5];
    int vet[75];
    nomes( nome1, nome2,nome3,nome4,nome5);
    gera(matA);
    organiza(matA);
    gera(matB);
    organiza(matB);
    gera(matC);
    organiza(matC);
    gera(matD);
    organiza(matD);
    gera(matE);
    organiza(matE);

    cout<<"CARTELA 1 NOME: "<<nome1<<endl;
    imprime(matA);
    cout<<"CARTELA 2 NOME: "<<nome2<<endl;
    imprime(matB);
    cout<<"CARTELA 3 NOME: "<<nome3<<endl;
    imprime(matC);
    cout<<"CARTELA 4 NOME: "<<nome4<<endl;
    imprime(matD);
    cout<<"CARTELA 5 NOME: "<<nome5<<endl;
    imprime(matE);
    GeraAleatorios(vet,matA,matB,matC,matD,matE);





    return 0;
}

 

  • Curtir 1
Postado
1 hora atrás, Felipe Hoffmeister disse:

Valeu pela ajuda, Eu ja consegui fazer a cartela numa matriz sem que nos numeros se repitam e de forma crescente, agora flata sortear o os numeros como você fez?

Olá!

 

Acho que você está no caminho de uma solução. Mas está escrevendo muito e vai ter um trabalho danado por não usar C++ de fato e se manter nos limites do C onde você vai term que implementar tudo sózinho.

Exemplo: você escreveu

char nome1[256], nome2[256], nome3[256], nome4[256], nome5[256]; 
int matA[5][5],matB[5][5],matC[5][5],matD[5][5],matE[5][5]; int vet[75]; 
nomes( nome1, nome2,nome3,nome4,nome5); 
gera(matA); 
organiza(matA); 
gera(matB); 
organiza(matB); 
gera(matC); 
organiza(matC); 
gera(matD); 
organiza(matD); 
gera(matE); 
organiza(matE);

Mas se Cartela fosse uma classe você poderia usar:

class Cartela
{
public:
	int		tamanho;
	int		limite;
	int*	valores;
	string	nome;

    Cartela(string n, int t, int l)
    {
        /*
        Construtor com parâmetros

        Cria cartela para o jogador de nome n, com n numeros e 
        limite l, e preenche com numeros aleatorios em ordem crescente

        */
        nome = n;
        tamanho = t;
        limite = l;
        cout << "Criando cartela '" <<
            nome <<
            "' com " << tamanho << " valores entre 1 e " << limite << endl;
        valores = new int[tamanho];
        int v;
        // pra vida ficar mais fácil inicia todos os valores
        // com um valor maior que o limite
        for (int i = 0; i < tamanho; i++) valores[i] = limite + 1;
        srand((int)time(NULL));
        // aqui vamos preencher a cartela
        // um loop simples: a cada vez retorna um
        // numero aleatorio. Como na cartela do bingo
        // os valores ficam em ordem crescente
        for (int i = 0; i < tamanho;)
        {    // total de valores = tamanho
            v = rand() % limite + 1; // um valor entre 1 e o limite
            for (int n = 0; n < tamanho; n++)
            {
                if (valores[n] > v)
                {    // achou o lugar: desloca todos pra abrir posicao
                    for (int j = tamanho - 1; j >= n; j--)
                    {
                        if (valores[j] < limite + 1)
                        {
                            valores[j + 1] = valores[j];
                        }    // end if
                    }    // end for
                    valores[n] = v;
                    i++;
                    break;
                }
                if (valores[n] == v) break;
            }    // end for n
        }    // end for i
    }    // end Cartela()
                                               
                                               ... veja o resto no programa fonte

E a cartela já teria o método gera() associado a ela, bem como os métodos existe() e mostra() e o que mais você precisar. E o organiza() já faz parte da criação da cartela, com os números aparecendo já na ordem e sem repetição. Está tudo no código acima.

Não seria preciso separar os dados ou repetir os códigos. Essa é a parada de usar objetos. E pode conviver com cartelas de vários tamanhos e limites sem mudar uma linha do programa...

 

O sorteio dos números

O sorteio e a classificação dos números está no código acima: para simplificar fiz ao mesmo tempo: sorteia o número v e já coloca na ordem na cartela

Seus números

No caso do seu programa, qual a regra de formação dos números? Me parece que o limite é 100 eas cartelas tem 25 números. Mas em 5 faixas com 5 números com limite em 15, 30, 45 e 60. É isso? Confirme a regra de formação e posso te ajudar a construir as cartelas já nesse formato

 

Mais um palpite: comente seu código: pode ajudar a você e a quem por acaso for ler depois

 

Bom trabalho

 

  • Curtir 1
Postado

Ainda sobre as cartelas e classes e tal

 

C ou C++


A classe Cartela tem essa cara nesse exemplo

class Cartela
{
public:
    int        tamanho;
    int        limite;
    int* valores;
    string    nome;

public:
    Cartela();
    Cartela(string n, int t, int l);
    ~Cartela();

    int           existe(unsigned int valor);
    static int    init();
    int           mostra();
    void          muda_nome(string n);
};    // end class Cartela

E já faz umas coisas legais: Ao declarar uma cartela já acontece o preenchimento dos números. Já em ordem. E nas faixas corretas, de 15 em 15 até 75 e tal. Tem um método que mostra na tela o conteúdo e um outro que muda o nome da cartela, que pode ser útil ao escrever um jogo desses. E já aloca e libera memória conforme o necessário pelo tamanho da Cartela.

E novos métodos podem ser criados sem comprometer programas que já usam a classe.

Se declarar uma cartela do outro jeito, tipo

Cartela outra("Cartela 100", 30, 100)

Já cria uma cartela com 30 números entre 1 e 100 que pode servir para outro propósito. Ou

Cartela cartas("Poker Hand of 5", 5, 52)

Criaria uma cartela de 5 cartas entre 1 e 52, como uma mão de poquer :D 

 

E o Bingo?

 

Um próximo nível seria criar uma classe Bingo, que afinal é um conjunto de cartelas e umas funções

 

Exemplo

class Bingo
{
public:
    string         nome;
    int            total_cartelas;
    Cartela*       pCartelas;

    Bingo();
    Bingo(int n_cartelas);
    ~Bingo();
    void mostra();
    void mostra_detalhes();
    void muda_nome(string n);
};    // end class Bingo

Essa acima já criaria total_cartelas já preenchidas, daria um nome pra mesa, e para comodidade já alocaria e liberaria memória usada pelas Cartelas todas.

 

O método mostra() para esse código

    Bingo    bingo(3);
    bingo.mostra();

Mostraria

Bingo: jogo 'Um bingo' com '3' cartelas
1: 'cartela1'
2: 'cartela2'
3: 'cartela3'

É só um resumo pra ver se está funcionando e se as cartelas tem o nome certo. Por outro lado, mostra_detalhes() em 

    Bingo    bingo(3);
    bingo.mostra_detalhes();

Mostra as 3 cartelas...

Bingo: jogo 'Um bingo' com '3' cartelas

    Cartela 'cartela1' com 25 valores. Limite: 75
1       6       7       8       15
18      22      23      25      29
34      41      43      44      45
55      56      58      59      60
65      67      69      71      73


    Cartela 'cartela2' com 25 valores. Limite: 75
1       6       11      14      15
19      21      25      27      28
32      33      38      43      45
48      49      50      57      60
62      64      67      68      73


    Cartela 'cartela3' com 25 valores. Limite: 75
3       6       8       11      13
16      21      24      26      30
31      34      38      39      41
48      50      57      59      60
61      62      64      65      71

E as cartelas são todas da classe... Cartela. Então para acessar uma cartela desse jogo, tipo a terceira

    Bingo    bingo(3);
    (bingo.pCartelas+2)->mostra();

Mostraria claro a mesma cartela 3 da lista acima

    Cartela 'cartela3' com 25 valores. Limite: 75
3       6       8       11      13
16      21      24      26      30
31      34      38      39      41
48      50      57      59      60
61      62      64      65      71

Para continuar implementado o jogo, basta ir criando os métodos de sorteio início de rodada, sorteio dos números, a parte gráfica das cartelas e a parte da rede de jogadores e coisas assim...

Mas veja até a diferença de criar por exemplo 5 cartelas

 

assim, C-like para 5 cartelas

char nome1[256], nome2[256], nome3[256], nome4[256], nome5[256]; 
int matA[5][5],matB[5][5],matC[5][5],matD[5][5],matE[5][5]; int vet[75]; 
nomes( nome1, nome2,nome3,nome4,nome5); 
gera(matA); 
organiza(matA); 
gera(matB); 
organiza(matB); 
gera(matC); 
organiza(matC); 
gera(matD); 
organiza(matD); 
gera(matE); 
organiza(matE);

Ou  assim no "modo C++" para 400 --- ou qualquer número --- de cartelas

Bingo    novaMesa(400);
novaMesa.nudarNome("Nova Mesa");

E as cartelas já estão "organizadas". E o nome delas vai de cartela1 até cartela400 e tal.

 

E a construção em si de um jogo não fica difícil no exemplo, uma vez que temos a classe Cartela. Basta iniciar o gerador de números aleatórios, alocar a memória para as cartelas e criá-las. Veja um exemplo: 

    Bingo(int n_cartelas)
    {    // construtor comum para n cartelas
        Cartela::init();    // inicia o gerador srand()
        nome = "Um bingo";
        total_cartelas = n_cartelas;
        pCartelas = new (Cartela[total_cartelas]);
        string        prefixo = "cartela";
        string        nome = "";
        for (int i = 1; i <= total_cartelas; i++)
        {
            nome = prefixo;
            nome.append(to_string(i));
            pCartelas[i - 1].muda_nome(nome);
        }    // end for
    }

Isso já aloca a memória necessária, cria as cartelas, preenche e nomeia todas elas. Só que não se precisa mais programar isso ou a parte das cartelas: você pode ir construindo a partir daí. Essa é a razão de usar classes.

 

Esse exemplo está em Programa de teste completo

 

Rodo esses exemplos em Windows 10 com o compilador grátis do Visual Studio, mas deve rodar igual em qualquer um.


 

  • Curtir 2

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!