CI208 - Programação de Computadores Aula 25: Funções com Arrays Prof. MSc. Diego Roberto Antunes diegor@inf.ufpr.br www.inf.ufpr.br/diegor Universidade Federal do Paraná Setor de Ciências Exatas Departamento de Informática
Últimas aulas Arrays Multidimensionais (Matrizes)
Relembrando Vetores como parâmetros de funções
Vetores como parâmetros No protótipo e na definição da função, declaramos o array como argumento informando seu tipo e nome, sendo necessário incluir os colchetes para informar ao compilador que este argumento recebe um array: int maior_array(int a[ ]){... } Na chamada da função, passamos como parâmetro apenas o nome do array: resultado = maior_array(valores);
Exemplo prático Fazer uma função que recebe um array de inteiros como parâmetro e retorna o maior elemento. #define TAMANHO 10 int encontra_maior(int a[]){ "int i, maior; "maior = a[0];"" "i = 1;" "while (i < TAMANHO) { " "if(maior < a[i]){ " " "maior = a[i]; " "} " "i = i + 1; "} "return maior; }"
Exemplo prático Fazer uma função que recebe um array de inteiros como parâmetro e retorna o maior elemento. int main(){ "int i = 0, valores[tamanho]; "cout << Insira 10 valores: << endl; "while (i < TAMANHO) { " "cin >> valores[i]; " "i = i+ 1; "} "cout << O maior valor eh: << encontra_maior(valores); }"
Vetores como parâmetros Vimos então a passagem de vetores como parâmetro e aprendemos a: 1. passar o vetor como parâmetro na chamada da função; 2. declarar o vetor como argumento na função; Note que na declaração da função, omitimos o tamanho do vetor. Em arrays unidimensionais, especificar o tamanho é opcional. É uma questão de estilo, porém, recomenda-se especificar o tamanho. int encontra_maior(int a[])... OU int encontra_maior(int a[tamanho])...
Arrays Multidimensionais Como argumentos de funções
Matrizes como parâmetros O uso de arrays multidimensionais (matrizes) como parâmetros de funções, funciona semelhante a passagem de parâmetros de vetores. A diferença essencial é: quando o parâmetro de uma função é um array multidimensional, todas as dimensões deste array, exceto a primeira, precisam obrigatoriamente ser especificadas no cabeçalho e no protótipo.
Matrizes como parâmetros A diferença essencial é: quando o parâmetro de uma função é um array multidimensional, todas as dimensões deste array, exceto a primeira, precisam obrigatoriamente ser especificadas no cabeçalho e no protótipo. Definição da função: tipo_retorno nome_funcao (tipo_array nome_array[lin][col]){ "... }
Matrizes como parâmetros Quando a função é chamada, apenas o nome do array multidimensional é passado como parâmetro (assim como funcionava com vetores); É importante lembrar que o tipo de dado do array que está sendo passado como parâmetro deve ser consistente com o tipo de dado do argumento que está no cabeçalho da função!
Exemplo Escreva uma função que recebe como parâmetro do tipo int: um array tabela. Sua função deve buscar e retornar o menor elemento desta matriz. Escreva um programa principal que solicite ao usuário uma matriz de tamanho 5 x 5 e então utilize a função escrita anteriormente para buscar o menor elemento da matriz e, então, mostrá-lo na tela.
Exemplo Escreva uma função que recebe três parâmetros do tipo int: um array tabela e seu tamanho M e N. Sua função deve buscar e retornar o menor elemento desta matriz. Escreva um programa principal que solicite ao usuário uma matriz de tamanho M x N e então utilize a função escrita anteriormente para buscar o menor elemento da matriz e, então, mostrá-lo na tela.
IMPORTANTE Ao passar um array como parâmetro, o compilador automaticamente faz a passagem de parâmetros por referência. Assim, ao passar um array como argumento, alterações no array feitas dentro da função alteram o conteúdo do array passado como parâmetro real na chamada da função. Essa é a diferença entre passar variáveis e arrays como parâmetros.
Exercícios
1) Faça uma função genérica para ler do teclado uma matriz. Sua função deve receber como parâmetros dois números inteiros (que indicam o tamanho da matriz) e uma matriz (array bidimensional para armazenar os dados lidos). A função deve ser utilizada nos programas seguintes. 2) Faça uma função genérica para mostrar na tela uma matriz. Sua função deve receber como parâmetros dois números inteiros (que indicam o tamanho da matriz) e uma matriz (array bidimensional onde os dados estão armazenados). A função deve ser utilizado nos programas seguintes. 3) Faça um programa que solicite uma matriz de inteiros de tamanho M x N ao usuário e então chame uma função e passe a matriz como parâmetro (bem como seu tamanho). Esta função deve substituir todos os números negativos por seu módulo. Ao final mostre na tela a matriz modificada. 4) Faça um programa que contenha e use uma função que receba uma matriz N x N como parâmetro e retorna a média aritmética dos elementos abaixo da diagonal principal. 5) Escreva uma função que recebe três parâmetros do tipo int: uma matriz e seu tamanho (M e N). Esta função deve verificar e retornar se existem elementos repetidos ou não. Escreva um programa principal que solicite ao usuário uma matriz de tamanho M x N e, então, chame a função e mostre na tela se existem elementos repetidos ou não.