Baixe o app para aproveitar ainda mais
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]); } } }
Compartilhar