Ir ao conteúdo
  • Cadastre-se

C++ Gerar matriz com valores pré-determinados


Posts recomendados

Gerar automaticamente (sem ler do usuário) uma matriz 5 x 5 cujos elementos são: 1   2   3   4   5

                                                                                                                                         6   7   8   9   10

                                                                                                                                        11  12 13 14 15

                                                                                                                                        16  17 18 19 20

                                                                                                                                        21  22 23 24 25

 

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

@Geraldo Carvalho   para gerar automaticamente , e parece que serão números inteiros , você pode usar um comando da linguagem  c  , que é o rand() % valor máximo + valor mínimo ,  então depois de criar a matriz , coloque dentro de dois loop 's para que sejam armazenados nas várias posições dessa matriz .  faça seu código sobre esse exercício e poste ele aqui , para que possamos ajudar   .

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

@devair1010 fiz este comando que você disse,porém este gera os numeros aleatorios e estou precisando que eles fiquem em ordem na sequencia

#include<iostream>
#include<cstdlib>
#include<time.h>
using namespace std;
int main()
{
    int mat[5][5],i,j;
    srand(time(NULL));
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            mat[i][j]=rand()%25,1;
            cout<<mat[i][j]<<"  ";
        }
        cout<<endl;
    }
}

 

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

1 hora atrás, Geraldo Carvalho disse:

fiz este comando que você disse,porém este gera os numeros aleatorios e estou precisando que eles fiquem em ordem na sequencia

 

Como eu te disse, você não vai usar nenhum comando. Se chamam literais. constantes. Só vai declarar o trem e listar os valores. 
 

4 horas atrás, arfneto disse:

Você tem um livro sobre C++? Sua escola assina alguma biblioteca online de referência?

 

Não?

 

"Gerar automaticamente sem ler do usuário" é uma descrição meio besta.

 

E se for colocar um a um basta um loop, um for para colocar os int de 1 a 25 nas colunas L e C por exemplo, e claramente L e C vão de 0 a 4, certo?

 

 

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@arfneto vou tentar fazer dessa maneira entao

#include<iostream>
using namespace std;
int main()
{
    float mat[5][5] = {{1,2,3,4,5},
                     {6,7,8,9,10},
                     {11,12,13,14,15},
                     {16,17,18,19,20},
                     {21,22,23,24,25}};

    cout<<mat[5][5];
    return 0;
}

pode me ajudar observando o que há de errado mo codigo?pois nao esta dando!

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

@Geraldo Carvalho   a declaração está certa , faltou escrever o que está dentro da matriz ,

#include <iostream>
#include <iomanip>
using namespace std;
int main(                ){
    int i,j               ;
    float mat[5][5] =     {
          { 1, 2, 3, 4, 5},
          { 6, 7, 8, 9,10},
          {11,12,13,14,15},
          {16,17,18,19,20},
          {21,22,23,24,25}
    };
    for(i=0;i<5;i++){
        for(j=0;j<5;j++){
            cout<<setw(3)<<mat[i][j]<<"  ";
        }
        cout<<endl;
    }
    cout<<endl<<endl<<endl;
    return 32768;
}

 

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

19 minutos atrás, Geraldo Carvalho disse:

pode me ajudar observando o que há de errado mo codigo?pois nao esta dando!

 

Para isso dar certo você precisa explicar para o compilador o que é "<<" para uma matriz 5x5 de int. Ou uma matriz qualquer NxN. Isso se chama operator overloading.

 

Uma vez que você faça isso você pode escrever como tentou, ou quase isso. Sem fazer nada não consegue nada.

 

Sem fazer nada precisa tratar cada um dos 25 int e fazer como quer. Não pode usar '<<' e esperar que funcione. 

Postei um exemplo de como fazer isso nesse forum, meses atras, para vários operadores em especia esse. Pode pesquisar aqui no conteúdo direto no perfil de cada usuário. Eu não tenho agora um índice.

 

Em resumo você cria uma classe para esse tipo de matriz e implementa as funções de que precisa. E o resto funciona "no automático".  C++  é perfeita para esse tipo de uso. Abstrações de dados sem perder performance. E sem muito trabalho.

 

 

 

adicionado 53 minutos depois

Exemplo

 

Usando recortar e colar, um exemplo com essas matrizes e o uso tradicional, C-like, e um exemplo possível em C++, no mesmo programa...

 

Um exemplo da classe

class Int5x5
{
public:
    int v[5][5];
	Int5x5();
	Int5x5(char);
	Int5x5(int);
};

Bem inútil, mas serve para esse mínimo exemplo. Eis a ideia: se você declarar algo disso, pode usar 3 opções:

  • Int5x5 Coisa e a matriz vai ser preenchida com valores a partir de 1
  • Int5x5 coisa(500) e a matriz vai ser preenchida com valores a aprtir de 500
  • Int5x5('?') e a matriz vai ser preenchida com valores aleatórios entre 1 e 1000

Se precisar de mais opções, escreva mais funções: a mágica do polimorfismo.

 

É claro que na prática pode escrever para uma matriz NxN

 

Um "overload básico para '<<'


Basta declarar isso

ostream& operator<< (ostream&, Int5x5&);

E escrever algo como


ostream& operator<< (ostream& saida, Int5x5& m)
{
	cout << "\nMatriz 5x5 (<<)\n" << endl;
	for (int l = 0; l < 5; l = l + 1)
	{
		for (int c = 0; c < 5; c = c + 1)
			saida << setw(5) << m.v[l][c];
		saida << endl;
	};
	return saida;
}

E é só isso mesmo.

 

É claro que na prática pode redefinir quase todos os operadores.

 

Resultado 

Um teste em C++ do que tentou fazer


Matriz 5x5 (<<)

    1    2    3    4    5
    6    7    8    9   10
   11   12   13   14   15
   16   17   18   19   20
   21   22   23   24   25

Matriz 5x5 (<<)

  -32  -31  -30  -29  -28
  -27  -26  -25  -24  -23
  -22  -21  -20  -19  -18
  -17  -16  -15  -14  -13
  -12  -11  -10   -9   -8

Matriz 5x5 (<<)

  326  308  422  857  802
  670  118   62  679  871
  606  978   52  567  368
  578  633  306  261  468
  733  958  241  600  568


Para essas linhas de C++
 

	cout << "\nUm teste em C++ do que tentou fazer\n" << endl;
	Int5x5 uma(1);
	cout << uma;
	Int5x5 outra(-32);
	cout << outra;
	Int5x5 sorteio('X');
	cout << sorteio;

Um programa com os exemplos mais comuns, e esses

#include <iomanip>
#include <iostream>

using namespace std;

class Int5x5
{
public:
    int v[5][5];
	Int5x5();
	Int5x5(char);
	Int5x5(int);
};

ostream& operator<< (ostream&, Int5x5&);

int imprime_uma(int*);

int main(int argc, char** argv)
{
	// o simples 
	int tabela5x5[5][5] =
	{
		{  1,  2,  3,  4,  5 },
		{  6,  7,  8,  9, 10 },
		{ 11, 12, 13, 14, 15 },
		{ 16, 17, 18, 19, 20 },
		{ 21, 22, 23, 24, 25 }
	};

	cout << "O comum agora\n\n" << endl;

	// como declarado 
	cout << "\ntabela5x5 declarada\n\n" << endl;
	for (int l = 0; l < 5; l = l + 1)
	{
		for (int c = 0; c < 5; c = c + 1)
		{
			cout << setw(5) << tabela5x5[l][c];
		};
		cout << endl;
	};
	cout << endl;

	// preenche tabela
	int tabela[5][5]; // essa vai preencher no programa
	int valor = 1;
	for (int l = 0; l < 5; l = l + 1)
		for (int c = 0; c < 5; c = c + 1)
		{
			tabela[l][c] = valor;
			valor = valor + 1;
		};

	printf("\ntabela preenchida no programa\n\n");
	for (int l = 0; l < 5; l = l + 1)
	{
		for (int c = 0; c < 5; c = c + 1)
		{
			cout << setw(5) << tabela5x5[l][c];
		};
		cout << endl;
	};
	cout << endl;

	printf("\nusando o endereco da tabela\n");

	printf("\ntabela declarada\n\n");
	imprime_uma(&tabela5x5[0][0]);

	printf("\ntabela preenchida\n\n");
	imprime_uma(&tabela[0][0]);

	cout << "\nUm teste em C++ do que tentou fazer\n" << endl;
	Int5x5 uma(1);
	cout << uma;
	Int5x5 outra(-32);
	cout << outra;

	Int5x5 sorteio('X');
	cout << sorteio;

	return 0;
};	// main()


int imprime_uma(int* v)
{
	for (int k = 0, l = 1;
		k < 25;
		k += 1, l = l + 1
		)
	{
		printf("%2d ", *(v + k));
		if (l > 4)
		{
			l = 0;
			printf("\n");
		};	// if()
	};	// for()


	return 0;
};

Int5x5::Int5x5()
{
	// o basico: a partir de 1
	Int5x5(1);
};

Int5x5::Int5x5(int N)
{
	// valores a partir de N
	int valor = N;
	for (int l = 0; l < 5; l = l + 1)
		for (int c = 0; c < 5; c = c + 1)
		{
			v[l][c] = valor;
			valor = valor + 1;
		};
};

Int5x5::Int5x5(char r)
{
	// tanto faz a letra. E so um exemplo
	// vai preencher com valores aleatorios entre 1 e 1000
	srand(r);
	for (int l = 0; l < 5; l = l + 1)
		for (int c = 0; c < 5; c = c + 1)
			v[l][c] = rand() % 1000 + 1;
};

ostream& operator<< (ostream& saida, Int5x5& m)
{
	cout << "\nMatriz 5x5 (<<)\n" << endl;
	for (int l = 0; l < 5; l = l + 1)
	{
		for (int c = 0; c < 5; c = c + 1)
			saida << setw(5) << m.v[l][c];
		saida << endl;
	};
	return saida;
}

 

  • Curtir 1
  • Obrigado 1
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...