Ajude nosso projeto a se manter online.

Matrizes em Funções

Neste tutorial de nossa apostila de C++, vamos aprender como trabalhar com matrizes e funções, aprendendo a declarar, invocar e usar estes dois importantes tópicos, conjuntamente.

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.

Array de arrays em C++

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.

Nenhum comentário:

Postar um comentário