Baixe o app para aproveitar ainda mais
Prévia do material em texto
7.6 – Matrizes em Funções Podemos utilizar matrizes como parâmetros de funções com alguns cuidados simples. Ao declarar os parâmetros que serão utilizados na função, declaramos um parâmetro para a matriz e um parâmetro para seu tamanho separadamente. Fazemos isso para que possamos utilizar matrizes de qualquer tamanho utilizando a mesma função. Ao criar o parâmetro referente à matriz, usamos um conjunto de colchetes vazios para indicar que se trata de uma matriz e não de uma variável simples. No entanto, quando utilizarmos esta função, passamos para ela somente o nome da matriz, sem os parênteses: o programa “já sabe” que uma matriz será enviada, pois já declaramos isso no protótipo da função. O programa abaixo mostra uma função que soma todos os elementos de uma matriz. #include <iostream> using namespace std; int soma( int matriz[], int tamanho) { int resultado = 0; for (int i = 0; i < tamanho; i++){ resultado = resultado + matriz[i]; } return resultado; } int main() { const int TAMANHO = 4; int sequencia[TAMANHO]; int result = 0; for (int i = 0; i < 4; i++) { cout << "Entre com o elemento numero "<<(i+1)<<" da sequencia: "; cin >> sequencia[i]; cout << endl; } result = soma(sequencia, TAMANHO); cout << "A soma de todos os elementos da matriz e igual a "<<result<<"."<<endl; system("PAUSE > null"); return 0; } Também podemos utilizar funções que trabalhem com matrizes multidimensionais. Entretanto, ao criar o parâmetro da matriz é preciso declarar o tamanho de todas as dimensões da matriz com exceção da primeira. Por exemplo: int soma_tabela ( int matriz [ ] [3] [4], int elementos) { comandos; } A primeira dimensão é deixada em branco, para ter seu tamanho definido pelo outro parâmetro “elementos”. Entretanto, as outras duas dimensões tem seu tamanho definido respectivamente em 3 e 4. Caso deixássemos estas outras duas dimensões sem um tamanho definido, o programa não seria compilado. É muito importante notar que, ao trabalhar com matrizes dentro de funções, estamos trabalhando com a própria matriz, ou melhor, com o endereço dos dados desta matriz. Normalmente, quando trabalhamos com variáveis dentro de uma função, estamos trabalhando com cópias destes valores. Entretanto, isso não é verdade para matrizes, por razões que veremos no módulo sobre ponteiros. Por enquanto, basta saber que quando trabalhamos com matrizes dentro de funções, qualquer modificação feita na matriz é feita para valer. Se somarmos mais 10 a todos os valores de uma matriz em uma função, quando a função terminar a matriz estará modificada. Esta característica é muito útil para contornar o fato que não podemos utilizar uma matriz como retorno de uma função: não precisamos que a função retorne uma matriz, só precisamos fazer com que a função altere a matriz. Por exemplo, o programa abaixo usa uma função para ordenar os números dentro de uma matriz. #include <iostream> using namespace std; int ordena( int matriz[], int tamanho) { int temp = 0; for (int i = 0; i < tamanho; i++){ for (int j = i; j < tamanho; j++){ if (matriz[j] < matriz [i]) { temp = matriz[i]; matriz[i] = matriz[j]; matriz[j] = temp; } } } } int main() { const int TAMANHO = 4; int sequencia[TAMANHO] = {27, 12, 42, -8}; cout <<"Sequencia original: "; for (int i = 0; i < 4; i++) { cout << sequencia[i]<<" "; } cout<<endl; ordena(sequencia, TAMANHO); cout <<"Sequencia ordenada: "; for (int i = 0; i < 4; i++) { cout << sequencia[i]<<" "; } cout<<endl; system("PAUSE > null"); return 0; }
Compartilhar