Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos Aplicados a Engenharia Aula 20 Os direitos desta obra foram cedidos à Universidade Nove de Julho Este material é parte integrante da disciplina, oferecida pela UNINOVE. O acesso às atividades, conteúdos multimídia e interativo, encontros virtuais, fóruns de discussão e a comunicação com o professor devem ser feitos diretamente no ambiente virtual de aprendizagem UNINOVE. Uso consciente do papel. Cause boa impressão, imprima menos. Aula 20: Matrizes Objetivo: Capacitar para trabalhar com matrizes, dado o acúmulo de conhecimento suficiente para declarar matrizes de diferentes dimensões e tipos, como inicializar matrizes, como referenciar um elemento particular da matriz e como passar uma matriz para uma função. Na aula passada foi apresentado o uso de vetores. Uma matriz pode ser definida como uma cadeia de vetores de mesmo tipo, ou seja, para ser uma matriz, a estrutura dela deve possuir ao menos 2 linhas e duas colunas de dados. Como veremos nesta aula, o estudo de matrizes é análogo ao de vetores. Definindo uma matriz Com dois pares de colchetes, obtemos uma matriz de duas dimensões e, com cada par de colchetes adicionais, obtemos matrizes com uma dimensão a mais. Um bom exemplo para o uso de uma matriz é a geração de jogos para a loteria. Veja o código a seguir: #include <stdio.h> #include <stdlib.h> #define JOGOS 20 #define N 6 // loteria.c // Imprime 20 combinações de jogos para a Sena int main(){ int matriz[JOGOS][N], k, j; for(k = 0; k < JOGOS; k++) for(j=0; j < N; j++) matriz[k][j] = rand()%60+1; for(k=0; k < JOGOS; k++) { printf("Combinacao %2d: ",k+1); for(j = 0; j < N; j++) printf("%2d ",matriz[k][j]); printf("\n"); } system("PAUSE"); return 0; } Inicialização de matrizes de duas dimensões Matrizes de duas dimensões são inicializadas da mesma forma que os vetores, isto é, os elementos são colocados entre as chaves depois do sinal de igual e separados por vírgulas. Como cada elemento de uma matriz de duas dimensões é por sua vez uma matriz, então, cada elemento deve estar entre chaves e os elementos internos devem ser separados por vírgulas. Veja o exemplo a seguir. Matrizes como argumentos de funções Até o momento vimos que quando uma função é chamada, devemos especificar quais variáveis serão transferidas para a função. As matrizes também podem ser passadas como argumento para uma função. Veja o programa a seguir: #include <stdio.h> #include <stdlib.h> int main() { int matriz[3][3] = {{1,2,3}, {2,3,4}, {3,3,5}}, i, k; for (i=0;i<3;i++) { for (k=0;k<3;k++) printf("%d ",matriz[i][k]); printf("\n"); } system("PAUSE"); return 0; } #include <stdio.h> #include <stdlib.h> void imprime(int[][3],int,int); int main() { int matriz[3][3] = {{1,2,3}, {2,3,4}, {3,3,5}}, i, k; for (i=0;i<3;i++) { for (k=0;k<3;k++) imprime(matriz,i,k); printf("\n"); } system("PAUSE"); return 0; } void imprime(int matriz[][3],int i,int k){ printf("%d ",matriz[i][k]); } O método de passagem de endereço da matriz para a função consiste em informar no protótipo o segundo elemento da matriz, ou seja, o elemento de colunas. Se esse elemento não for informado, será impossível saber onde estão os valores. Por que é feito dessa maneira? As matrizes são consideradas um tipo de dado bastante grande, pois são formadas por diversas variáveis. Por causa disso, em linguagem C, determina-se ser mais eficiente existir uma única cópia da matriz na memória, sendo, portanto, irrelevante o número de funções que a acessam. Assim, não são passados os valores contidos na matriz, somente o seu endereço de memória. Vetores são passados da mesma forma? Não, mas de uma forma muito similar. Veja o exemplo: Como a função usa o endereço para acessar os elementos da matriz original, significa que as alterações que a função efetuar nos elementos da matriz afetarão a matriz original. #include <stdio.h> #include <stdlib.h> #define TAMANHO 10 void imprime(int[],int); int main() { int vetor[TAMANHO] = {1,2,3,4,5,6,7,8,9,10}, i; for (i=0;i<TAMANHO;i++) imprime(vetor,i); printf("\n\n"); system("PAUSE"); return 0; } void imprime(int vetor[],int i){ printf("%d ",vetor[i]); } Referências DASGUPTA, Sanjoy; PAPADIMITRIOU, Christos; VAZIRANI, Umesh. Algoritmos. São Paulo: McGraw Hill, 2009. HEINEMAN, George T.; POLLICE, Gary; SELKOW, Stanley. Algoritmos: o guia essencial. Rio de Janeiro: Alta Books, 2009. MANZANO, André Luiz N. G.; MANZANO, Maria Izabel N. G. Estudo dirigido de informática básica. São Paulo: Érica, 2008. MANZANO, José Augusto N. G. Estudo dirigido de linguagem C. São Paulo: Érica, 2009. MANZANO, José Augusto N. G.; OLIVEIRA, Jayr Figueiredo de Oliveira. Algoritmos, Lógica para desenvolvimento de programação de computadores. São Paulo: Érica, 19 ed., 2006. MIZRAHI, Victorine Viviane. Treinamento em linguagem C. São Paulo: Pearson, 2008. 2v. SCHILDT, Herbert. Mayer. C completo e total. São Paulo: Pearson, 2006. VILARIM, Gilvan. Algoritmos de programação para Iniciantes. São Paulo: Ciência Moderna, 2004.
Compartilhar