Buscar

8Alg1 (1)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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.

Outros materiais