Buscar

08-Matrizes

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 20 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

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 6, do total de 20 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

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 9, do total de 20 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

Estruturas de Dados Homogêneas III - Matrizes 
Resolução dos Exercícios 
Primeira Lista (Slide 39) 
 
1) Quais são os elementos do vetor referenciados pelas expressões abaixo ? 
 a)1.1 b)0.6 c)Este elemento nao existi. 
 
2) Qual é a diferença entre os números “3” das duas instruções abaixo ? 
O numero 6 é a quantidade de linha que a matriz MAT tem. 
O numero 3 é a qunatidade de colunas que a matriz MAT tem. 
O numero 5 é o valor da posiçao 'linha 6' 'coluna 3' da matriz MAT. 
 
3) Faça um programa para exibir a soma de duas matrizes quadradas 3 x 3. Deverá ser criado um 
procedimento para ler uma matriz (será chamado duas vezes com parâmetros diferentes) e um 
segundo procedimento que irá imprimir a soma das matrizes passadas como parâmetro. 
#include <stdio.h> 
#include <stdlib.h> 
void lermatriz(int mat[3][3]) 
{ 
 int i,j; 
 for(i=0;i<3;i++) 
 { 
 for(j=0;j<3;j++) 
 { 
 printf("digite o elemento da posiçao %d %d da matriz",i,j); 
 scanf("%d",&mat[i][j]); 
 } 
 } 
} 
void imprimesoma(int mat1[3][3],int mat2[3][3]) 
{ 
 int matsoma[3][3],i,j; 
 for(i=0;i<3;i++) 
 { 
 printf("\n"); 
 for(j=0;j<3;j++) 
 { 
 matsoma[i][j] = mat1[i][j]+mat2[i][j]; 
 printf(" %d ",matsoma[i][j]); 
 } 
 } 
} 
 
int main() 
{ 
 int mat1[3][3],mat2[3][3]; 
 lermatriz(mat1); 
 lermatriz(mat2); 
 printf("a matriz soma sera:\n"); 
 imprimesoma(mat1,mat2); 
 return 0; 
} 
 
4) Faça um programa que leia uma matriz quadrada de tamanho 10 e um procedimento que inverta as 
linhas pelas colunas em uma segunda matriz de mesmo tamanho. Imprima ao final a segunda matriz. 
#include <stdio.h> 
#include <stdlib.h> 
void invert(int mato[10][10]) 
{ 
 int matd[10][10],i,j; 
 for(i=0;i<10;i++) 
 { 
 printf("\n"); 
 for(j=0;j<10;j++) 
 { 
 matd[i][j]=mato[j][i]; 
 printf(" %d ",matd[i][j]); 
 } 
 } 
} 
int main() 
{ 
 int mat[10][10],i,j; 
 for(i=0;i<10;i++) 
 { 
 for(j=0;j<10;j++) 
 { 
 printf("digite o elemento da posiçao %d %d da matriz",i,j); 
 scanf("%d",&mat[i][j]); 
 } 
 } 
 invert(mat); 
 return 0; 
} 
 
5) Faça um procedimento que receba uma matriz quadrada 5 x 5 e crie uma matriz identidade. Imprima 
a matriz após sua inicialização em um outro procedimento. 
void Identidade(int m[5][5]) 
{ 
 int i,j; 
 for(i=0;i<5;i++) 
 for(j=0;j<5;j++) 
 { 
 if(i==j) 
 m[i][j]=1; 
 else 
 m[i][j]=0; 
 } 
} 
void imprime_matriz(int m[5][5]) 
{ 
 int i,j; 
 for(i=0;i<5;i++) 
 { 
 for(j=0;j<5;j++) 
 { 
 printf(“%d\t”,m[i][j]); 
 } 
 printf(“\n”); 
 } 
} 
 
6) Crie uma função que receba uma matriz de números reais e retorne a soma dos elementos desta 
matriz. 
#include <stdio.h> 
#include <stdlib.h> 
float soma(float mat[3][3]) 
{ 
 float somatorio=0; 
 int i,j; 
 for(i=0;i<3;i++) 
 { 
 for(j=0;j<3;j++) 
 { 
 somatorio=somatorio+mat[i][j]; 
 } 
 } 
 return (somatorio); 
} 
int main() 
{ 
 float mat[3][3],resultado; 
 int i,j; 
 for(i=0;i<3;i++) 
 { 
 for(j=0;j<3;j++) 
 { 
 printf("digite o elemento da posiçao %d %d da matriz: ",i,j); 
 scanf("%f",&mat[i][j]); 
 } 
 } 
 resultado=soma(mat); 
 printf("a soma dos elementos da matriz é %.2f",resultado); 
 return 0; 
} 
 
7) Faça um programa que leia um vetor de dimensão 5 e uma matriz quadrada de dimensão 5. Crie um 
procedimento que multiplique o vetor pela matriz. Imprima o resultado. 
#include <stdio.h> 
#include <stdlib.h> 
void multiplica(int mat[3][3],int vet[5]) 
{ 
 int i,k,vetr[5]={0,0,0,0,0}; 
 for(k=0;k<5;k++) 
 { 
 for (i=0;i<5;i++) 
 { 
 vetr[k]=vetr[k]+vet[i]*mat[k][i]; 
 } 
 } 
 printf("o vetor resposta é \n"); 
 for(k=0;k<5;k++) 
 { 
 
 printf(" %d ",vetr[k]); 
 } 
} 
int main() 
{ 
 int mat[5][5],vet[5]; 
 int i,j; 
 for(i=0;i<5;i++) 
 { 
 for(j=0;j<5;j++) 
 { 
 printf("digite o elemento da posiçao %d %d da matriz: ",i,j); 
 scanf("%d",&mat[i][j]); 
 } 
 } 
 for(i=0;i<5;i++) 
 { 
 printf("digite o elemento da posiçao %d do vetor: ",i); 
 scanf("%d",&vet[i]); 
 } 
 multiplica(mat,vet); 
 return 0; 
} 
Segunda Lista(Slide 50) 
1)Desenvolva um programa que leia uma matriz de números reais, um escalar e um procedimento para 
calcular a multiplicação da matriz pelo escalar. Imprima o resultado e um segundo procedimento. 
#include <stdio.h> 
#define M 3 
#define N 3 
 
void multiplicaEscalar ( float matriz[M][N], float escalar) 
{ 
 int i, j; 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < N; j++) 
 matriz[i][j] *= escalar; 
 } 
} 
 
void imprimeResultado ( float matriz[M][N]) 
{ 
 int i, j; 
 printf("\n\nNova matriz:\n"); 
 for (i = 0; i < M ; i++) 
 { 
 for (j = 0; j < N; j++) 
 { 
 printf("%7.2f", matriz[i][j]); 
 } 
 printf("\n"); 
 } 
} 
 
int main() 
{ 
 float m[M][N], alfa; 
 int i,j; 
 
 printf("Entre os elementos da matriz: \n\n"); 
 for (i = 0; i < M ; i++) 
 { 
 for (j = 0; j < N; j++) 
 { 
 printf("Elemento a%d,%d: ",i+1,j+1); 
 scanf("%f", &m[i][j]); 
 } 
 } 
 printf("Digite o escalar: "); 
 scanf("%f", &alfa); 
 
 multiplicaEscalar(m, alfa); 
 imprimeResultado(m); 
 
 return 0; 
} 
 
 
 
2)Faça um programa que leia uma matriz 7 x 5 e imprima a terceira coluna. 
 
#include <stdio.h> 
int main() 
{ 
 float m[7][5]; 
int i,j; 
 
printf("Entre os elementos da matriz: \n\n"); 
for (i = 0; i < 7 ; i++) 
{ 
 for (j = 0; j < 5; j++) 
 { 
 printf("Elemento a%d,%d: ", i+1, j+1); 
 scanf("%f", &m[i][j]); 
 } 
} 
 
printf("\n \nTerceira coluna:\n"); 
for (i = 0; i < 7 ; i++) 
 printf("%7.2f\n", m[i][2]); 
 
return 0; 
} 
 
3)Faça um programa que leia uma matriz quadrada de dimensão 10, uma função que encontre o maior 
valor desta matriz e uma função que encontre o menor valor. Imprima os valores encontrados na 
função principal. 
 
#include <stdio.h> 
#define N 10 
 
float maior(float matriz[N][N]) 
{ 
 float aux; 
 int i, j; 
 
 aux = matriz[0][0]; 
 for (i = 0; i < N ; i++) 
 { 
 for (j = 0; j < N; j++) 
 { 
 if ( aux <= matriz[i][j]) 
 aux = matriz[i][j]; 
 } 
 } 
 
 return aux; 
} 
 
float menor(float matriz[N][N]) 
{ 
 float aux; 
 int i, j; 
 
 aux = matriz[0][0]; 
 for (i = 0; i < N ; i++) 
 { 
 for (j = 0; j < N; j++) 
 { 
 if ( aux >= matriz[i][j]) 
 aux = matriz[i][j]; 
 } 
 } 
 
 return aux; 
} 
 
int main() 
{ 
 float m[N][N]; 
 int i,j; 
 
 printf("Entre os elementos da matriz: \n\n"); 
 for (i = 0; i < N ; i++) 
 { 
 for (j = 0; j < N; j++) 
 { 
 printf("Elemento a%d,%d: ", i+1, j+1); 
 scanf("%f", &m[i][j]); 
 } 
 } 
 
 printf("\nMaior elemento: %.2f", maior(m)); 
 printf("\nMenor elemento: %.2f", menor(m)); 
 
 return 0; 
} 
 
4)Faça um programa que leia uma matriz 6 x 3 e um procedimento que gere duas matrizes 3 x 3, a 
primeira com as 3 primeiras linhas e a outra com as restantes. 
 
#include <stdio.h> 
 
void dividir(float matriz[6][3]) 
{ 
 float m1[3][3], m2[3][3]; 
 int i,j; 
 
 for (i = 0; i < 3 ; i++) 
 { 
 for (j = 0; j < 3; j++) 
 m1[i][j] = matriz[i][j]; 
 } 
 for (i = 3; i < 6 ; i++) 
 { 
 for (j = 0; j < 3; j++) 
 m2[i-3][j] = matriz[i][j]; 
 } 
 
 printf("\n\nMatriz1: \n"); 
 for (i = 0; i < 3 ; i++) 
 { 
 for (j = 0; j < 3; j++) 
 printf("%7.2f", m1[i][j]); 
 printf("\n"); 
 } 
 
 printf("\n\nMatriz 2: \n"); 
 for (i = 0; i < 3 ; i++) 
 { 
 for (j = 0; j < 3; j++) 
 printf("%7.2f", m2[i][j]); 
 printf("\n"); 
 } 
} 
 
int main() 
{ 
 float m[6][3]; 
 int i,j; 
 
 printf("Entre os elementos da matriz: \n\n"); 
 for (i = 0; i < 6 ; i++) 
 { 
 for (j = 0; j < 3; j++) 
 { 
 printf("Elemento a%d,%d: ", i+1, j+1); 
 scanf("%f", &m[i][j]); 
 } 
 } 
 
 dividir(m); 
 
 return 0; 
} 
 
 
5)Faça um programa que leia uma matriz de caracteres 5 x 10 e uma função que conte quantas letras 
“a” aparecem na matriz. Você poderá fazer a leitura letra a letra ou considerar que cada linha da matriz 
é uma string. 
 
#include <stdio.h> 
#define M 5 
#define N 10 
 
int contA (char matriz[M][N]) 
{ 
 int i, j, cont = 0; 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < N; j++) 
 { 
 if(matriz[i][j] == 'a') 
 cont++; 
 } 
 } 
 return cont; 
} 
 
int main() 
{ 
 char m[M][N]; 
 int i,j; 
 
 /* caso entre um caracter por vez 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < N; j++) 
 scanf("%c",&m[i][j]); 
 } 
 */ 
 
 // caso considere que cada linha da matriz é uma string 
 for (i = 0; i < M; i++) 
 gets(m[i]); 
 
 printf("\nForam encontrados %d caracteres 'a' na matriz.",contA(m)); 
 
 return 0; 
} 
 
 
6)Faça um programa que leia 3 vetores reais de dimensão 10 e um procedimento que gere uma matriz 
(10 x 3) onde cada coluna é dada por um destes vetores. 
#include <stdio.h> 
#define M 10 
 
void matriz (float v1[], float v2[], float v3[]) 
{ 
 float m[M][3]; 
 int i, j; 
 
 for (i = 0; i < M; i++) 
 m[i][0] = v1[i]; 
 
 for (i = 0; i < M; i++) 
 m[i][1] = v2[i]; 
 
 for (i = 0; i < M; i++) 
 m[i][2] = v3[i]; 
 
 printf("\n\nNova matriz:\n"); 
 for (i = 0; i < M ; i++) 
 { 
 for (j = 0; j < 3; j++) 
 { 
 printf("%7.2f", m[i][j]); 
 } 
 printf("\n"); 
 } 
} 
 
int main() 
{ 
 float v1[M],v2[M],v3[M]; 
 int i; 
 
 for (i = 0; i < M; i++) 
 { 
 printf("Vetor 1 - a%d: ", i+1); 
 scanf("%f",&v1[i]); 
 } 
 
 for (i = 0; i < M; i++) 
 { 
 printf("Vetor 2 - a%d: ", i+1); 
 scanf("%f",&v2[i]); 
 } 
 
 for (i = 0; i < M; i++) 
 { 
 printf("Vetor 3 - a%d: ", i+1); 
 scanf("%f",&v3[i]); 
 } 
 
 matriz(v1,v2,v3); 
 
 return 0; 
} 
 
 
7)Crie uma matriz tridimensional onde as linhas indicam as notas de matemática, história e geografia 
em três provas de 10 alunos e crie uma função que verifique quantos alunos passaram, ou seja, os 
que tenham média aritmética > 60 nas 3 disciplinas. 
 
#include <stdio.h> 
#include <stdbool.h> 
#define M 10 
 
int contAlunos(float m[M][3][3]) 
{ 
 int i, j, k , cont = 0; 
 float media; 
 bool aprov; 
 
 for (i = 0; i < M; i++) 
 { 
 aprov = true; 
 for ( k = 0; k < 3; k++) 
 { 
 media = 0; 
 for (j = 0; j < 3; j++) 
 { 
 media += m[i][j][k]; 
 } 
 media /= 3; 
 if (media < 60) 
 aprov = false; 
 } 
 if ( aprov ) 
 cont++; 
 } 
 return cont; 
} 
 
int main() 
{ 
 float m[M][3][3]; 
 int i, j; // i = alunos | j = provas | k = matérias 
 
 printf("Digite as notas de Matematica:\n\n"); 
 for (i = 0; i < M; i++) 
 { 
 printf("Aluno %d: ", i+1); 
 for ( j = 0; j < 3; j++) 
 scanf("%f", &m[i][j][0]); 
 } 
 
 printf("\nDigite as notas de Historia:\n\n"); 
 for (i = 0; i < M; i++) 
 { 
 printf("Aluno %d: ", i+1); 
 for ( j = 0; j < 3; j++) 
 scanf("%f", &m[i][j][1]); 
 } 
 
 printf("\nDigite as notas de Geografia:\n\n"); 
 for (i = 0; i < M; i++) 
 { 
 printf("Aluno %d: ", i+1); 
 for ( j = 0; j < 3; j++) 
 scanf("%f", &m[i][j][2]); 
 } 
 
 printf("\n\n%d alunos passaram nas tres materias.", contAlunos(m)); 
 
 return 0; 
} 
 
 
8)Faça um programa para ler a quantidade de um total de 5 produtos que uma empresa tem em suas 7 
lojas e imprimir em uma tabela: 
a) o total de cada produto nestas lojas 
b) a loja que tem menos produtos 
#include <stdio.h> 
#define M 5 
#define N 7 
 
int main() 
{ 
 int m[M][N]; 
 int i, j; 
 int aux, indice, total; 
 
 for (j = 0; j < N; j++) 
 { 
 for (i = 0; i < M; i++) 
 { 
 printf("Quantidade de produto %d na loja %d: ", i+1, j+1); 
 scanf("%d",&m[i][j]); 
 } 
 } 
 
 indice = 0; 
 total = 0; 
 for (i = 0; i < N; i++) 
 total += m[i][0]; 
 aux = total; 
 
 for (j = 1; j < N; j++) 
 { 
 total = 0; 
 for (i = 0; i < M; i++) 
 total += m[i][j]; 
 if (total < aux) 
 { 
 aux = total; 
 indice = j; 
 } 
 } 
 
 printf("\n "); 
 for (j = 0; j < N; j++) 
 printf("Loja %d ", j+1); 
 printf("\n"); 
 for (i = 0; i < M; i++) 
 { 
 printf("Produto %d", i+1); 
 for (j = 0; j < N; j++) 
 { 
 printf("%8d", m[i][j]); 
 } 
 printf("\n"); 
 } 
 
 printf("\nA loja %d eh a que possui menos produtos.", indice+1); 
 
 return 0; 
} 
 
9)Idem ao exercício 1, agora com o seguinte “Menu”: 
Escolha uma opção de cálculo para matrizes: 
1) Soma 
2) Diferença 
3) Transposta 
4) Produto 
5) Sair 
Opção:__ 
Na opção (3) o usuário só precisa fornecer uma matriz, nas opções (1), (2) e (4) o usuário deve 
fornecer duas matrizes. 
Observação, a matriz deve ser 3x3. 
#include <stdio.h> 
#define M 3 
 
void entraMatriz(int m[M][M]) 
{ 
 int i, j; 
 printf("\nEntre os dados da matriz:\n"); 
 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < M; j++) 
 { 
 printf("a%d,%d: ", i+1, j+1); 
 scanf("%d",&m[i][j]); 
 } 
 } 
} 
 
void imprimeMatriz(int m[M][M]) 
{ 
 int i, j; 
 printf("\nMatriz:\n"); 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < M; j++) 
 printf("%6d", m[i][j]); 
 printf("\n"); 
 } 
} 
 
void soma(int a[M][M], int b[M][M]) 
{ 
 int c[M][M]; 
 int i, j; 
 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < M; j++) 
 { 
 c[i][j] = a[i][j] + b[i][j]; 
 } 
 } 
 imprimeMatriz(c); 
} 
 
void subtracao(int a[M][M], int b[M][M]) 
{ 
 int c[M][M]; 
 int i, j; 
 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < M; j++) 
 { 
 c[i][j] = a[i][j] - b[i][j]; 
 } 
 } 
 imprimeMatriz(c); 
} 
 
void transposta(int a[M][M]) 
{ 
 int b[M][M]; 
 int i, j; 
 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < M; j++) 
 { 
 b[i][j] = a[j][i]; 
 } 
 } 
 imprimeMatriz(b); 
} 
 
void produto(int a[M][M], int b[M][M]) 
{ 
 int c[M][M]; 
 int i, j, r; 
 
 for (i = 0; i < M; i++) 
 { 
 for (j = 0; j < M; j++) 
 { 
 c[i][j] = 0; 
 for (r = 0; r < M; r++) 
 c[i][j] += a[i][r] * b[r][i]; 
 } 
 } 
 imprimeMatriz(c); 
} 
 
int main() 
{ 
 int m1[M][M], m2[M][M]; 
 int n; 
 printf("Programa para operacoes de matrizes:"); 
 
 do 
 { 
 printf("\n\nEscolha uma opcaoo de calculo para matrizes:\n"); 
 
printf("1)Soma\n2)Diferenca\n3)Transposta\n4)Produto\n5)Sair\nOpcao:__"); 
 scanf("%d",&n);switch(n) 
 { 
 case 1: entraMatriz(m1);entraMatriz(m2); 
 soma(m1,m2); 
 break; 
 case 2: entraMatriz(m1);entraMatriz(m2); 
 subtracao(m1,m2); 
 break; 
 case 3: entraMatriz(m1); 
 transposta(m1); 
 break; 
 case 4: entraMatriz(m1);entraMatriz(m2); 
 produto(m1,m2); 
 break; 
 case 5: 
 break; 
 default: printf("\nOpcao invalida!\n"); 
 break; 
 } 
 } while(n!= 5); 
 
 return 0; 
} 
 
10) Implemente as subrotinas abaixo para que o programa funcione corretamente. 
void lematriz(int a[10][10],int m,int n) 
{ 
 int i,j; 
 for(i=0;i<m;i++) 
 { 
 for(j=0;j<n;j++) 
 { 
 printf("digite o elemento %d %d da matriz; ",i,j); 
 scanf("%d",&a[i][j]); 
 } 
 } 
} 
void copiazera(int a[10][10],int b[10][10],int m,int n) 
{ 
 int i,j; 
 for(i=0;i<m;i++) 
 { 
 for(j=0;j<n;j++) 
 { 
 a[i][j]=b[i][j]; 
 b[i][j]=0; 
 } 
 } 
} 
void imprimematriz(int a[10][10],int m,int n) 
{ 
 int i,j; 
 for(i=0;i<m;i++) 
 { 
 printf("\n"); 
 for(j=0;j<n;j++) 
 { 
 printf(" %d ",a[i][j]); 
 } 
 } 
}

Outros materiais