Mandar um cafézinho para o programador:


Me ajude a transformar café em código!

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.

2 comentários:

  1. Não sei se seria neste formato, mas o que importa é tentar:

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

    ResponderExcluir
  2. Mauricio Matos Maia10 de maio de 2024 às 13:01

    Não sei se seria assim, mas o que importa é tentar fazer:

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

    ResponderExcluir

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo