Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos e Programação I Aula 8 – Notas de aula Matrizes ou Vetores bidimensionais. Matrizes ou vetores bidimensionais Uma matriz é um vetor bidimensional. Possui índices (posições) para as linhas e para as colunas. Os índices sempre iniciam em zero. o Para uma matriz com L linhas e C colunas, os índices das linhas variam de [0, L-1] e os índices das colunas variam de [0, C-1] o Por exemplo, para uma matriz A com 3 linhas e 4 colunas, os índices ou posições dos elementos são compostos pela linha e pela coluna. Um elemento de A é referenciado por aij. Os índices iniciam sempre na posição zero, tanto para linha quanto para a coluna, como representado na matriz a seguir: � = � ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� � A declaração de uma variável do tipo Matriz na linguagem C segue o formato: tipo nome[quantidade_de_linhas][quantidade_de_colunas]; onde: tipo é o tipo de dados dos elementos que serão armazenados; nome é o nome da variável (nome da matriz) quantidade_de_linhas é um valor numérico que indica quantas linhas estarão armazenadas na matriz, do tipo de dado especificado. quantidade_de_colunas é um valor numérico que indica quantas colunas estarão armazenadas na matriz, do tipo de dado especificado. Os elementos são referenciados por índices (posições) de linha e coluna. Na ilustração a seguir, há a representação de uma matriz de elementos inteiros, com 3 linhas e 4 colunas, declarada como int A[3][4]. � = � ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� ��� � Para acessar um elemento da matriz, deve-se usar o nome da matriz e o valor dos índices da linha e da coluna do elemento, entre colchetes. Por exemplo, o elemento a12 da matriz é referido como A[1][2]. Assim, para listar todos os elementos da matriz na tela, seguinte código é válido: Índices de um elemento da matriz: linha e coluna Elemento da matriz int i, j; int A[3][4]; for(i=0;i<3;i++) //laço de repetição que percorre as linhas da matriz for(j=0;j<4;j++) //laço de repetição que percorre as colunas da matriz printf(“A[%d][%d] = %d\n”, i, j, A[i][j]); É importante ter bem claro os conceitos de índice da matriz e valor de elemento da matriz. Os índices são um indicativo da posição do elemento (é a referencia da posição do elemento em determinada linha e coluna). Já o valor de um elemento da matriz é o conteúdo armazenado em determinada posição da matriz. Para fazer a leitura dos elementos de uma matriz, utiliza-se a função scanf , como para qualquer outra variável. Um elemento da matriz é lido de cada vez. Por isso, existem sempre dois laços de repetição: um para percorrer as linhas da matriz e outro, as colunas. Um elemento da matriz é referenciado com seus índices e na função scanf é utilizado & antes do elemento, como no exemplo a seguir: int i, j; int A[3][4]; for(i=0;i<3;i++) //laço que percorre as linhas da matriz for(j=0;j<4;j++){ //laço que percorre as colunas da matriz printf(“Digite o elemento a[%d][%d]:”, i, j); scanf(“%d”, &A[i][j]); } - IMPORTANTE: na linguagem C não existe controle automático de final da matriz, assim como dos vetores. O compilador não os identificará como erros. Porém, isto representa erros de programação, pois uma matriz declarada como 2x2 não possui os elementos de índices 10 e 20, possui apenas os elementos de índice na linha 0 e 1 e coluna também 0 e 1. Este tipo de erro de programação tende a provocar o funcionamento incorreto do programa. Exercícios com Matrizes: 1. Escreva um programa em C para ler os valores e somar duas matrizes 4 x 4. Mostrar a matriz resultante. #include<stdio.h> void main (void) { int a[4][4], b[4][4], c[4][4], i, j; printf ("Digite os elementos da matriz A:\n"); for(i=0;i<4;i++) for (j=0;j<4;j++) scanf("%d", &a[i][j]); printf ("Digite os elementos da matriz B:\n"); for (i=0;i<4;i++) for (j=0;j<4;j++) scanf("%d", &b[i][j]); /* calcular a matriz soma */ for(i=0;i<4;i++) for(j=0;j<4;j++) c[i][j] = a[i][j] + b[i][j]; printf ("Mostra a matriz C\n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf ("%d ", res[i][j]); printf("\n"); } } 2. Transpor uma matriz 3x4 para outra 4x3. Transpor uma matriz significa transformar suas linhas em colunas e vice-versa. #include<stdio.h> void main (void) { int a[3][4], aT[4][3], i, j; printf ("Digite os elementos da matriz:\n"); for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%d", &a[i][j]); for(i=0;i<3;i++) for(j=0;j<4;j++) b[j][i] = a[i][j]; printf ("Matriz transposta:\n"); for(i=0;i<4;i++) { for(j=0;j<3;j++) printf ("%d ", mat2[i][j]); printf("\n"); } } 3. Ler duas matrizes inteiras de ordem 4 e verificar se a soma dos elementos das diagonais principais são iguais. #include<stdio.h> void main (void) { int m1[4][4], m2[4][4], i, j, soma1, soma2; printf ("Digite os da primeira matriz:\n"); for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) scanf("%d", &m1[i][j]); printf ("Digite os elementos da segunda matriz:\n"); for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) scanf("%d", &m2[i][j]); //Soma dos elementos da Diagonal Principal da matriz 1 for (i = 0, soma1 = 0; i < 4; i++) soma1 = soma1 + m1[i][i]; //Soma dos elementos da Diagonal Principal da matriz 2 for (i = 0, soma2 = 0; i < 4; i++) soma2 = soma2 + m2[i][i]; if (soma1 == soma2) printf("Somas das diagonais principais igual"); else printf("Somas das diagonais principais diferentes"); } 4. Escreva um programa em C que leia uma matriz 10 x 5 e armazene a i-ésima linha da matriz em um vetor de 10 elementos. #include<stdio.h> void main (void) { int matriz[10][5], i, j, vet[5]; srand(time()); for (i = 0; i < 10; i++) for (j = 0; j < 5; j++) matriz[i][j]=rand()%50; printf ("Digite o índice de uma linha da matriz:\n"); scanf("%d", &i); /* armazena a i-esima linha da matriz no vetor e a exibe*/ for (j = 0; j < 5; j++){ vet[j] = matriz[i][j]; printf ("%d ", vet[j]); } } 5. Implementar um algoritmo para multiplicar duas matrizes 4 x 4 de números inteiros. #include<stdio.h> void main (void) { int mat1[4][4], mat2[4][4], res[4][4], i, j, k; /* ler as matrizes */ printf ("Digite os elementos da primeira matriz:\n"); for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) scanf("%d", &mat1[i][j]); printf ("Digite os elementos da segunda matriz:\n"); for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) scanf("%d", &mat2[i][j]); for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) { res[i][j] = 0; for (k=0; k<4; k++) res[i][j] = res[i][j] + mat1[i][k] * mat2[k][j]; } printf ("\nMatriz resultante:\n"); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf ("%d ", res[i][j]); printf("\n"); } } Leituras e exercícios: EVARISTO, Jaime. Aprendendo a programar programando na linguagem C. Maceió: Vivali, 2007. SCHILDT, Herbert. C completo e total. São Paulo: Makron Books, 1997. CORMEN, Thomas H et al. Algoritmos: teoria e prática. Rio de Janeiro: Campus, 2002.
Compartilhar