Buscar

Aula 20

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.

Continue navegando