Como Passar Matriz para Função
No estudo de arrays, vimos que existem algumas maneiras de declarar o cabeçalho de funções com arrays como parâmetros, da seguinte maneira:- tipo func(tipo *array);
- tipo func(tipo array[tamanho]);
- tipo func(tipo array[]);
Ou seja, basta passar o ponteiro (*array - estudaremos mais na frente) ou o só com o par de colchetes em aberto (array[]).
No caso de arrays bidimensionais, precisamos especificar o número de colunas da matriz que estamos enviando:
- void func(int arr[][COLUMN]);
Veja bem, o número de linhas não é obrigatório (até podemos passar), mas o número de colunas, sim.
Vamos declarar e inicializar uma matriz 2x2 e em seguida enviara para a função show(), que vai simplesmente exibir ela na forma de uma tabela, veja como fica nosso código:
#include <iostream> using namespace std; void show(int arr[][2], int row) { for (int i=0 ; i<row ; i++){ for(int j=0 ; j<2 ; j++) cout<<arr[i][j]<<" "; cout<<endl; } } int main() { int arr[][2]={ {1,2}, {3,4} }; show(arr, 2); return 0; }Note algumas coisas importantes, no código acima.
Primeiro, passamos a matriz arr[][2] para a função, com o número de colunas.
Mas e o número de linhas? Como a função vai saber o tanto de linhas, para imprimir a tabela ?
Ela não sabe, por isso passamos outro parâmetro na função, o inteiro 'row'.
Matriz em C++: Passagem por referência
Toda passagem de dados para funções que envolvem arrays, é por referência. Sempre.Ou seja, passou um array pra uma função? Ela vai acessar diretamente o array e seus dados, direto na memória. Não é uma cópia que vai pra função, não é passagem por valor, ok?
Isso quer dizer uma coisa: cuidado! As funções podem modificar seus arrays, lembre-se sempre disso.
O código abaixo introduz a função 'init', que vai receber um array e inicializar cada elemento dele, perguntando pro usuário:
#include <iostream> using namespace std; const int COLS = 3; const int ROWS = 3; void init(int arr[][COLS], int ROWS) { for(int i=0 ; i<ROWS ; i++) for(int j=0 ; j<COLS ; j++){ cout << "matrix["<<i+1<<"]["<<j+1<<"]: "; cin >> arr[i][j]; } } void show(int arr[][COLS], int ROWS) { for (int i=0 ; i<ROWS ; i++){ for(int j=0 ; j<COLS ; j++) cout<<arr[i][j]<<" "; cout<<endl; } } int main() { int arr[ROWS][COLS]; init(arr, ROWS); show(arr, ROWS); return 0; }Para melhorar a organização, já definimos as linhas (ROWS) e colunas (ROLS) como variáveis globais do tipo constantes, para não ter perigo de ninguém, em algum local do código, alterar seus valores. Isso deixa o código mais claro e seguro, para manutenção.
Exercício de Matriz em C++
Crie uma matriz 4x4, onde cada linha representa as notas de um aluno, e cada coluna é uma matéria diferente. Você deve criar uma função que vai preenchendo as notas dos alunos, uma por uma, assinalando qual é a matéria e qual é o aluno.Em seguida, seu programa deve exibir, de maneira organizada, as notas de cada aluno, bem como a média de cada um, a média da turma para cada matéria, e a média geral, de todos alunos de todas as notas.
Postem sua solução nos comentários.
Não sei se seria neste formato, mas o que importa é tentar:
ResponderExcluir#include
using namespace std;
int main() {
int i, j;
float mat[4][4];
string matpes[4], vet[4];
cout << "Por gentileza informe as 4 materias dos Alunos(as):\n";
for (i = 0; i < 4; i++) {
cin >> matpes[i];
}
for (i = 0; i < 4; i++) {
cout << endl;
cout << "Por gentileza informe o nome do(a) Aluno(a): ";
cin >> vet[i];
for (j = 0; j < 4; j++) {
cout << "Qual a nota do(a) Aluno(a) " << vet[i] << " Referente a materia " << matpes[j] << ": ";
cin >> mat[i][j];
}
}
cout << "Segue Notas dos(as) alunos(as):\n";
float soma2 = 0;
for (i = 0; i < 4; i++) {
float soma = 0;
cout << endl << vet[i] << ": " << endl;
for (j = 0; j < 4; j++) {
cout << matpes[j] << ": " << mat[i][j] << endl;
soma += mat[i][j];
soma2 += mat[i][j];
}
cout << "A media de " << vet[i] << ": " << soma / 4 << endl;
}
float mat1 = 0, mat2 = 0, mat3 = 0, mat4 = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (j == 0)
mat1 += mat[i][j];
else if (j == 1)
mat2 += mat[i][j];
else if (j == 2)
mat3 += mat[i][j];
else
mat4 += mat[i][j];
}
}
cout << "Media das materias:\n";
cout << matpes[0] << ": " << mat1 / 4 << endl;
cout << matpes[1] << ": " << mat2 / 4 << endl;
cout << matpes[2] << ": " << mat3 / 4 << endl;
cout << matpes[3] << ": " << mat4 / 4 << endl;
cout << "Media geral: " << soma2 / 16 << endl;
return 0;
}
Não sei se seria assim, mas o que importa é tentar fazer:
ResponderExcluir#include
using namespace std;
int main() {
int i, j;
float mat[4][4];
string matpes[4], vet[4];
cout << "Por gentileza informe as 4 materias dos Alunos(as):\n";
for (i = 0; i < 4; i++) {
cin >> matpes[i];
}
for (i = 0; i < 4; i++) {
cout << endl;
cout << "Por gentileza informe o nome do(a) Aluno(a): ";
cin >> vet[i];
for (j = 0; j < 4; j++) {
cout << "Qual a nota do(a) Aluno(a) " << vet[i] << " Referente a materia " << matpes[j] << ": ";
cin >> mat[i][j];
}
}
cout << "Segue Notas dos(as) alunos(as):\n";
float soma2 = 0;
for (i = 0; i < 4; i++) {
float soma = 0;
cout << endl << vet[i] << ": " << endl;
for (j = 0; j < 4; j++) {
cout << matpes[j] << ": " << mat[i][j] << endl;
soma += mat[i][j];
soma2 += mat[i][j];
}
cout << "A media de " << vet[i] << ": " << soma / 4 << endl;
}
float mat1 = 0, mat2 = 0, mat3 = 0, mat4 = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (j == 0)
mat1 += mat[i][j];
else if (j == 1)
mat2 += mat[i][j];
else if (j == 2)
mat3 += mat[i][j];
else
mat4 += mat[i][j];
}
}
cout << "Media das materias:\n";
cout << matpes[0] << ": " << mat1 / 4 << endl;
cout << matpes[1] << ": " << mat2 / 4 << endl;
cout << matpes[2] << ": " << mat3 / 4 << endl;
cout << matpes[3] << ": " << mat4 / 4 << endl;
cout << "Media geral: " << soma2 / 16 << endl;
return 0;
}