Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prof. MSc Orlei José Pombeiro 1 Projeto Graduação Curso Análise de Sistemas Disciplina Estrutura de Dados Tema Aula 02 Professor Orlei José Pombeiro Coordenador Edson Pedro Ferlin Tutor Objetivos Gerais • Trabalhar os conceitos de estruturas unidimensionais e multidimensionais, criando novos tipos de dados. Específicos • Vetores • Matrizes • Registros Prof. MSc Orlei José Pombeiro 2 Conversa Inicial Quando interpretamos Vetores e Matrizes como Estruturas, é pelo fato que estamos agrupando em uma “única nova variável” um conjunto de várias variáveis de um determinado tipo único. Por exemplo, se precisamos armazenar a idade de uma pessoa, declaramos uma variável do tipo “inteiro” que pode se chamar “idade”. Mas se precisamos armazenar a idade de uma turma de 50 alunos, fica inviável declararmos 50 variáveis, para este caso declaramos um único “vetor” com “50 posição de inteiros”. Outra possibilidade de criarmos novos tipos de dados é a declaração de Registros. Registros são estruturas que podemos declarar com vários tipos de dados distintos. Deste modo, em uma “única nova variável” podemos colocar, por exemplo, o nome, e cpf e o email de uma determinada pessoa. E se associarmos com vetores, poderemos ter os dados cadastrais de ‘N’ pessoas em uma única vaiável. Vídeo 1 – Conversa inicial Contextualização A representação de um vetor física pode ser visualizada na imagem a seguir, onde temos um possível vetor de 10 posições. Mas atentos para um fato muito importante, o 1º elemento de um vetor esta na posição ‘Zero’, o 2º elemento do vetor esta na posição ‘Um’, e assim sucessivamente. E por que isso? Por que quando declaramos um vetor, o endereço de memória deste vetor é o endereço do primeiro elemento, assim todos os demais são inseridos a partir deste primeiro endereço. Elemento: 1º 2º 3º 4º 5º 6º 7º 8º 9º 10º Índice: 0 1 2 3 4 5 6 7 8 9 Valores no Vetor: 6 8 2 13 21 5 9 0 63 7 Deste modo, o “Primeiro elemento” do vetor, que é o “Número 6”, foi inserido no “Índice 0” do vetor. Já o “Valor 13”, foi inserido no “Índice 3”, que é a posição 4 do vetor. Isto para uma turma, e se se tivermos 10 turmas? Para este caso utilizamos o conceito Prof. MSc Orlei José Pombeiro 3 de Matriz, que nada mais é que a relação “linhas por colunas”. Então se necessitamos levantar as idades de 10 turmas com 50 alunos cada, criamos uma única matriz com 10 linhas e 50 colunas do tipo “Inteiro”. Multiplicando 10 x 50, significa que podemos armazenar 500 idades. A representação física pode ser visualizada na imagem a seguir, onde temos uma possível matriz de 10 colunas e 4 linhas, totalizando 40 posições de armazenamento de dados. Similar ao conceito de vetor onde o primeiro elemento esta na posição ‘0’, aqui também trabalhamos com o fato que o primeiro elemento da matriz esta na posição ‘0 0 ’, ou seja na Linha ‘0’ e Coluna ‘0’. Para referenciarmos onde esta, ou foi armazenado o valor na matriz, utilizamos a nomenclatura “Linha” e “Coluna”. Assim, dizemos que o “Número 4” esta armazenado na “Linha 0 e Coluna 0”, posição (0, 0) da matriz. Já o “Número 13” esta na “Linha 1 Coluna 4”, posição (1, 4) da matriz. E assim sucessivamente. Linhas\Colunas 0 1 2 3 4 5 6 7 8 9 0 4 23 1 13 2 7 53 3 32 91 Tanto no caso de vetor quando de matriz, quando declarados, eles somente pode ser de um único tipo, seja de números inteiros ou reais, seja de caracteres ou strings. Outro questão, é que não podemos declarar um vetor ou matriz onde cada posição é de um tipo diferente de dado. Outra questão a ser levantada aqui com relação a Vetores e Matrizes, diz respeito as literaturas. Algumas literaturas não abordam a nomenclatura “Vetor”. Para referenciar o Vetor utilizam a nomenclatura “Matriz Unidimencional”, ou seja de uma dimensão. Já a “Matriz” com mais de uma dimensão e referenciada como “Matriz Multidimencional”, isto por que ela pode ter duas ou mais dimensões. Sim, uma matriz pode ter quantas dimensões quisermos 2, 3, 4, 5. O difícil é conseguir abstrair a quantidade e não se perder na hora de escrever as linhas de código. Um detalhe importante, é que quando declaramos em um programa uma Matriz, os espaços reservados na memória para os elementos desta Matriz estão em sequencia, seja qual dimensão tenhamos criado. Sendo que o endereço desta Matriz passa a ser o endereço de memória do primeiro elemento da matriz. Para esta aula vamos trabalho com o conceito de Prof. MSc Orlei José Pombeiro 4 “Vetor” para matrizes de uma dimensão e “Matriz” para matrizes com duas ou mais dimensões. Mas há casos onde desejamos armazenar tipos de dados diferentes para uma turma de 30 pessoas por exemplo. Podemos querer armazenar o nome, a idade, a altura e o peso, por exemplo. Para estes casos temos a possibilidade de criar Registros. E associando a Vetores, podemos criar “Vetores de Registros”. Podemos definir Registros como “variáveis de tipos diferentes de dados agrupadas em um único novo tipo de variável”. Ainda sobre Registros, na literatura é possível encontrar as nomenclaturas “Estruturas” e “Variáveis Compostas Heterogêneas”, para referenciar “Registros”. Vídeo 2 – Contextualização Tema 1 - Vetor Vamos começar analisando o Vetor, onde cada elemento (variável) esta em sua posição previamente definida. Vamos imaginar uma fila de alunos de uma turma com 30 alunos na sala, onde cada aluno possui uma idade que pode ser a mesma ou não de seus demais colegas da fila. Se quisermos armazenar em um Vetor de números inteiros a idade destes alunos em um algoritmo e obtermos a média das idades, fazemos assim: Vetor com 30 posições Prof. MSc Orlei José Pombeiro 5 main() { int x, soma, idade[30]; soma = 0; for(x=0; x<30; x++) { printf(“Informe a idade do %d º aluno:”, x+1); scanf(“%d”, &idade[x]); soma += idade[x]; } printf(“A média de idade dos alunos é %f”, soma/30 ); } Vetor com 30 posições 18 16 17 18 19 17 17 18 20 23 16 20 20 .......... Utilizado somente variáveis inteiras, uma variável ‘x’ para contar a quantidade utilizada, a variável ‘soma’, para conter a somatória das idades e por último uma variável ‘idade’ que é declarada como com vetor com 30 posições. A variável soma, como vai conter o somatório dos valores, deve ser inicializada com ‘0’. Observar que a estrutura de repetição ‘for’ é executada 30 vezes, e que a cada loop é solicitada a idade, armazena em uma posição específica do vetor e já é acrescentada a variável que vai conter a somatória total. Quando solicitamos a idade do aluno, utilizamos a variável ‘x’ para nos auxiliar no número do aluno, ele é somada de uma unidade, pois iniciou em zero (ou seja sempre com um a menos). No vetor utilizamos esta variável ‘x’ para posicionar no vetor cada idade de acordo com a ordem de entrada. Pois no primeiro loop o x vale ‘0’, no segundo ele passa a valer ‘1’, no terceiro ‘2’ e assim sucessivamente devido ao incremento de uma unidade que ocorre no comando “x++”, até atingir a condição de fim do loop “x<30”. Ao final apresentamos o resultado da soma dividindo direto por 30 pois sabemos que estraram exatamente 30. Vídeo 3 – Tema 1 Prof. MSc Orlei José Pombeiro 6 Tema 2 – Matriz Como ficaria a mesma situação para 10 turmas. Neste caso utilizamos matrizes. Pois assim, teremos em cada linha (com30 colunas) uma turma. Matriz de 10 linhas e com 30 colunas main() { int x, y, idade[10][30]; int soma[10] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }; for(y=0; y<10; y++) { for(x=0; x<30; x++) { printf(“Informe a idade do %d º aluno da turma %d:”, x+1, y+1); scanf(“%d”, &idade[y][x]); soma[y] += idade[y][x]; } } for(y=0; y<10; y++) printf(“A média de idade dos alunos da turma %d é %f \n”, y+1, soma[y]/30 ); } Matriz de 10 linhas e com 30 colunas 18 19 17 18 25 17 22 18 22 16 18 18 25 .... 22 18 18 21 17 21 19 19 19 31 16 17 27 .... 24 16 17 16 18 19 19 18 18 18 25 21 19 .... 17 22 18 17 21 17 18 16 17 22 27 19 25 .... 21 25 16 16 18 24 25 25 22 18 17 21 19 .... 19 19 19 16 18 19 21 18 17 22 18 16 16 .... 19 18 31 25 21 18 18 21 21 21 22 22 16 .... 19 27 18 21 19 22 31 18 22 18 18 19 21 .... 27 17 21 17 19 21 22 17 22 21 18 25 16 .... 25 18 18 16 17 19 25 18 16 18 17 21 19 .... Prof. MSc Orlei José Pombeiro 7 Nosso vetor idade, agora passa a ser uma matriz com duas dimensões e nossa variável soma que tinha o propósito de armazenar a somatória das idades da turma, agora passa a ser um vetor, pois precisamos de 10 somatórias distintas. Podemos observar que na declaração do vetor soma, já inicializamos com ‘0’ todos os elementos do vetor. Como temos uma matriz de duas dimensões e necessitamos passar por todas as linhas e colunas, agora precisamos de dois loops para percorrer a matriz. O primeiro ‘y’ nos auxiliará a percorrer as linhas, já o segundo ‘x’ continua a nos ajudar a percorrer as colunas. Observem que a cada nova linha, as colunas são novamente inicializadas com o índice ‘0’. Da mesma formar que utilizamos o ‘x’ para nos auxiliar a identificar o número do alunos que deve fornecer a idade, utilizamos a variável ‘y’ para nos auxiliar a identificar a turma que deve fornecer as respectivas idades. A somatória das idades de cada turma, agora estará em um vetor com 10 posições, mesmo número das turmas, onde cada posição conterá a somatória da respectiva turma. Para mostrar a média de cada turma agora, necessitamos de outro loop para percorrer o vetor das somatórias e mostrar um a um. Vídeo 4 – Tema 2 Tema 3 - Registro E como ficaria se resolvêssemos trabalhar não só com a idade, mas com o peso e a altura do aluno também? Em um primeiro momento podemos pensar em ter 3 vetores, ou 3 matrizes, uma para cada tipo de dado que necessitamos. Mas vamos ver como funciona utilizando “Registros”. Registros são estruturas que criamos em programação e a esta estrutura criada colocamos campos de diferentes tipos, de acordo com a nossa necessidade. Deste modo teremos “uma variável” que pode armazenar diferentes tipos de dados. Aqui também podemos associar o conceito de “Vetor” e de “Registro”, criando um “Vetor de Registros”. Onde em cada posição do Vetor, ou invés de termos um único valor (por exemplo, um número inteiro), teremos um registro com todos os campos que nos interessa. Prof. MSc Orlei José Pombeiro 8 ..... Para trabalharmos com registros, temos que primeiro declarar esta nova estrutura e depois declarar variáveis para trabalhar com esta estrutura. Lembrando que somente variáveis é que podem armazenar conteúdos. Para criarmos uma nova Estrutura de Dados, temos que declarar uma “Struct” ou “Registro” (é possível encontrar as duas nomenclaturas na literatura). Há apenas uma formar de declarar a estrutura, mas podemos declarar variáveis desta estrutura de diferentes modos. A declaração da nova estrutura deve vir precedida da palavra “struct” seguida do nome que se vai dar a estrutura, no nosso caso declaramos como “Dados”. Ela é limitada por chaves { } e dentro colocamos os tipos da dados que nos interessa. Podemos colocar inclusive outras estruturas previamente criadas. Uma coisa é criar a nova estrutura, outra coisa é criar variáveis deste novo tipo. Sim, pois após ser criada, passa a ser um tipo como é o “int” o “float” a “string”. Então temos que declarar variáveis deste novo tipo, podendo inclusive ser vetores e matrizes. Para o nosso caso criamos a variável “dados”, que passa a ser um vetor de 50 posições do tipo “Aluno”. Como são 3 dados que queremos a média, criamos também 3 variáveis para conter estas somatórias para a realização do cálculo da média. Modo 1 Modo 2 struct Dados { struct Dados { char nome[45]; char nome[45]; int idade; int idade; float peso, altura; float peso, altura; }; } pessoa, vet_pessoas[10]; struct Dados pessoa, vet_pessoas[10]; Aqui declaramos primeiro a estrutura e depois declaramos variáveis para trabalhar com esta estrutura. A estrutura vai possui um campo nome do tipo “char”, um campo idade do tipo “int” e dois campos do tipo “float”, uma para armazenar o peso e outro para armazenar a altura. Como estrutura é um novo “tipo de dado”, temos que criar variáveis para trabalhar Prof. MSc Orlei José Pombeiro 9 com este novo tipo de dado. No primeiro modo, a declaração da variável esta fora da estrutura, deste modo temos que colocar a frente do nome da variável “pessoa” o tipo de dado que ela vai poder receber, no caso “pessoa”. Já no segundo modo de declaração de estrutura, podemos colocar já na estrutura as variáveis que vão trabalhar com ela. Estas devem ficar entre o “fecha chaves” e o “;”. O diferencial aqui esta em como é trabalho com os dados desta estrutura. Para armazenar os dados em um registro, utilizamos o ponto (.) para indicar em qual campo vamos armazenar os dados. Ex.: gets(pessoa.nome); pessoa.idade = 37; pessoa.peso = 73; Para o caso de “vetores de registros”, temos que informar também em qual posição do vetor serão armazenados os dados. Podemos aqui imaginar que cada posição se refere aos dados de uma pessoa distinta. Ex.: gets(vet_pessoa[2].nome); strcpy(pessoa[7].nome, ‘Alberto Roberto’); vet_pessoa[2].idade = 37; vet_pessoa[7].idade = 21; vet_pessoa[2].peso = 73; vet_pessoa[7].peso = 65; Vídeo 5 – Tema 3 Prof. MSc Orlei José Pombeiro 10 Aplicação Vamos colocar a seguinte necessidade: “Criar um programa que armazena a idade, o peso e a altura de 50 pessoas. Após armazenado os dados, informar quantos estão com o peso acima da média deste grupo”. main() { struct Dados { int idade; float peso, altura; }; struct Dados pessoa[50]; int x, qtd_peso = 0; float media = 0; for(x=0; x<50; x++) { printf(“Informe a idade, a altura e o peso do %d º:”, x+1); scanf(“%d %f %f”, pessoa[x].idade, pessoa[x].altura, pessoa[x].peso); media += pessoa[x].peso; } media = media/50; for(x=0; x<50; x++) if(pessoa[x].peso > media) qtd_peso++; printf(“A quantidade de pessoas acima da média do peso é: %d”, qtd_peso ); } Vídeo 6 – Aplicação Prática Síntese Nesta aula pudemos acompanhar a aplicabilidade dos vetores, matrizes e registros em estruturas computacionais. Pois é constante a necessidade de agrupamento de um mesmo tipo de dado para um conjunto de indivíduos ou objetos. Assim como o agrupamento de tipos diferentes de dados para conjuntos deindivíduos. Vídeo 7 – Síntese Prof. MSc Orlei José Pombeiro 11 Exercícios 1. Elaborar um programa que leia, some e imprima o resultado da soma entre dois vetores inteiros de 50 posições; main() { int vet1[50], vet2[50], x; for( x=0; x< 50; x++) { printf(“Informar o %dº valor do Vetor 1: ”, x+1); scanf(“%d” , &vet1[x]; printf(“Informar o %dº valor do Vetor 2: ”, x+1); scanf(“%d” , &vet2[x]; } for( x=0; x< 50; x++) printf(“O valor da soma dos elementos do vetor é: %d \n”, vet1[x]+vet2[x]); } 2. Faça um programa que carregue 2 vetores de 10 elementos numéricos cada um e imprima um vetor resultante de intercalação destes 2 vetores; main() { int vet1[10], vet2[10], vetR[20], x; for( x=0; x< 10; x++) { printf(“Informar o %dº valor do Vetor 1: ”, x+1); scanf(“%d” , &vet1[x]; printf(“Informar o %dº valor do Vetor 2: ”, x+1); scanf(“%d” , &vet2[x]; } for( x=0; x< 10; x++) { vetR[2 * x] = vet1[x]; vetR[(2 * x) + 1] = vet2[x]; } for( x=0; x< 20; x++) printf(“O valor do vetor resultante é: %d \n”, vetR[x]); } Prof. MSc Orlei José Pombeiro 12 3. Faça um programa que carregue 1 vetor de 6 elementos numéricos inteiros. Calcule e imprima a quantidade de números pares e impares; main() { int vet[6], x, par=0; for( x=0; x< 6; x++) { printf(“Informar o %dº valor: ”, x+1); scanf(“%d” , &vet[x]; } for( x=0; x< 6; x++) if(vet[x] % 2) == 0) par++; printf(“A quantidade de números pares é: %d”, par); printf(“A quantidade de números ímpares é: %d”, 6-par); } 4. Faça um programa que carregue um vetor de 9 elementos numéricos inteiros. Calcule e imprima os números primos e suas respectivas posições; main() { int vet[9], x, y, flag; for( x=0; x< 9; x++) { printf(“Informar o %dº número: ”, x+1); scanf(“%d” , &vet[x]; } for( x=0; x< 9; x++) { flag=1; for(y=2; y < vet[x]; y++) if( vet[x] % y) == 0) flag = 0; if(flag) printf(“O número %d que esta na posição %d é primo\n”, vet[x], x); } } Prof. MSc Orlei José Pombeiro 13 5. Faça um programa que receba a temperatura média de cada mês do ano e armazene essas temperaturas em um vetor. Calcule e imprima a maior e a menor temperatura do ano e em que mês estas temperaturas aconteceram; main() { float temp[12], maior=-100, menor=100; int x, mes_maior, mes_menor; char mes[13] = {“”, “Janeiro” , “Fevereiro”, “Março”, “Abril”, “Maio”, “Junho”, “Julho”, “Agosto”, “Setembro”, “Outubro”, “Novembro”, “Dezembro” }; for( x=1; x< 13; x++) { printf(“Informar a temperatura de %s: ”, mes[x]); scanf(“%f” , &temp[x-1]); if(temp[x-1] > maior) { maior = temp[x-1]; mes_maior = x-1; } if(temp[x-1] < menor) { menor = temp[x-1]; mes_menor = x-1; } } printf(“A maior temperatura foi em %s\n”, mes[mes_maior]); printf(“A menor temperatura foi em %s\n”, mes[mes_menor]); } Prof. MSc Orlei José Pombeiro 14 6. Faça um programa que receba a quantidade de peças vendidas por cada vendedor e armazene essas quantidades em um vetor. Receba também o preço da peça vendida de cada vendedor e armazene esses preços em outro vetor. Existem apenas 10 vendedores, e cada vendedor pode vender apenas um tipo de peça, isto é, para cada vendedor existe apenas um preço. Calcule e imprima a quantidade total de peças vendida por todos vendedores e, para cada vendedor, calcule e imprima o valor total da venda, isto é, a quantidade de peças * o preço da peça; main() { float preco[10]; int quant[10], x, total=0; for( x=0; x< 10; x++) { printf(“Informar a quantidade e o preço unitário das peças vendidas pelo %dº vendedor\n ”, x+1); scanf(“%d %f” , &quant[x], &preco[x]); total += quant[x]; } for(x=0; x<10; x++) printf(“A valor total das vendas do vendedor %d foi de %f\n”, x+1, quant[x] * preco[x]); printf(“A quantidade total de peças vendidas foi %d\n”, total); } 7. Faça um programa que receba as notas da primeira prova de 10 alunos e armazene essas notas em um vetor. Receba as notas da segunda prova de 10 alunos e armazene em outro vetor. Calcule e imprima a média entre essas duas notas de cada aluno; main() { float nota1[10], nota2[10]; int x; for( x=0; x< 10; x++) { printf(“Informar a 1ª e a 2ª nota do aluno %d: ”, x+1); scanf(“%f %f” , ¬a1[x], ¬a2[x]); } for(x=0; x< 10; x++) printf(“A media do aluno %d é %f\n”, x+1, (nota1[x] + nota2[x])/2); } Prof. MSc Orlei José Pombeiro 15 8. Faça um programa que receba a nota de 10 alunos e armazene essas notas em um vetor. Calcule e imprima: a. a média da classe; b. a quantidade de alunos aprovados, isto é, com a media >= a 7; c. a quantidade de alunos reprovados, isto é, com média < 7; main() { float nota[10], media=0; int x, apr=0; for( x=0; x< 10; x++) { printf(“Informar a nota do aluno %d: ”, x+1); scanf(“%f” , ¬a[x]); } for( x=0; x< 10; x++) { media += nota[x]; if(nota[x] >= 7) apr++; } printf(“A media da classe foi de %f\n”, media/10); printf(“%d alunos foram aprovados\n”, apr); printf(“%d alunos foram reprovados\n”, 10-apr); } Prof. MSc Orlei José Pombeiro 16 9. Criar um algoritmo que, dado dois vetores inteiros de 20 posições, efetue as respectivas operações indicadas por um outro vetor de 20 posições de caracteres também fornecido pelo usuário, contendo as quatro operações aritméticas em qualquer combinação e armazenando os resultados em um quarto vetor; main() { float resul[20]; int num1[20], num2[20], x; char oper[20]; for( x=0; x< 20; x++) { printf(“Para o %dº cálculo, informar 1º número, operador e 2º número\n ”, x+1); scanf(“%d %c %d” , &num1[x], &oper[x], &num2); } for( x=0; x< 20; x++) switch(oper[x]) { case ‘+’: resul[x] = num1[x] + num2[x]; break; case ‘-’: resul[x] = num1[x] - num2[x]; break; case ‘*’: resul[x] = num1[x] * num2[x]; break; case ‘/’: resul[x] = num1[x] / num2[x]; break; } printf(“A media da classe foi de %f\n”, media/10); printf(“%d alunos foram aprovados\n”, apr); printf(“%d alunos foram reprovados\n”, 10-apr); } Prof. MSc Orlei José Pombeiro 17 10. Faça um programa que carregue valores inteiros positivos em uma matriz 3x3 e imprima o maior elemento dessa matriz; main() { int mat[3][3], x, y, maior=0; for( x=0; x< 3; x++) for(y=0; y < 3; y++) { printf(“Informe %dº valor\n ”, (x*3)+y+1); scanf(“%d” , &mat[x][y]); } for( x=0; x< 3; x++) for(y=0; y < 3; y++) if(mat[x][y] > maior) maior = mat[x][y]; printf(“A maior elemento da matriz é %d”, maior); } 11. Faça um programa que receba o estoque atual de 4 produtos (colunas) que estão armazenados em 4 armazéns (linhas) e coloque estes dados em uma matriz 5x4. Sendo que a última linha da matriz contém o custo de cada produto, calcule e imprima: a. a quantidade de itens armazenados em cada armazém; b. qual armazém possui maior estoque do produto 2; c. qual armazém possui menor estoque do produto 4; d. qual o custo total de cada produto; e. qual o custo total de cada armazém; main() { int mat[5][4], x, y, soma, maior2=0, menor4=999999, arma_maior, arma_menor; for( x=0; x< 4; x++) for(y=0; y < 4; y++) { printf(“Informe o estoque do %dº produto do armazém %d\n ”, y+1, x+1); scanf(“%d” , &mat[x][y]); } Prof. MSc Orlei JoséPombeiro 18 for( y=0; y < 4; y++) { printf(“Informe o preço do %dº produto”, y+1); scanf(“%d”, mat[4][y]); } for( x=0; x< 4; x++) { soma = 0; for(y=0; y < 4; y++) soma += mat[x][y]; printf(“O armazém %d possui %d itens\n ”, x+1, soma); } for( x=0; x< 4; x++) { if(mat[x][1] > maior2) { maior2 = mat[x][1]; arma_maior = x+1; } if(mat[x][1] < menor4) { menor4 = mat[x][1]; arma_menor = x+1; } } printf(“O armazém %d possui o maior estoque do produto 2\n ”, arma_maior); printf(“O armazém %d possui o menor estoque do produto 4\n ”, arma_menor); for( y=0; y< 4; y++) { soma = 0; for(x=0; x<4; x++) soma += mat[x][y]; printf(“O custo total do produto %d é %d\n ”, y+1, soma*mat[5][y]); } for( x=0; x< 4; x++) { soma = 0; for(y=0; y<4; y++) soma += mat[x][y] * mat[5][y]; printf(“O custo total do armazém %d é %d\n ”, x+1, soma); } } Prof. MSc Orlei José Pombeiro 19 12. Faça um programa que receba as vendas semanais (de um mês) de 5 vendedores de uma loja e armazene essas vendas em uma matriz. Calcule e imprima: a. total de vendas no mês de cada vendedor; b. total de vendas de cada semana (todos os vendedores juntos); c. total de vendas do mês; main() { int vendas[5][4], x, y, total; for( x=0; x< 5; x++) for(y=0; y < 4; y++) { printf(“Informe a venda da %dª semana do vendedor %d\n ”, y+1, x+1); scanf(“%d” , &vendas[x][y]); } for( x=0; x< 5; x++) { total=0; for(y=0; y < 4; y++) total += vendas[x][y]; printf(“No mês o vendedor %d vendeu %d\n ”, x+1, total); } for( y=0; y< 4; y++) { total=0; for(x=0; x < 5; x++) total += vendas[x][y]; printf(“Na %d semana o total vendido foi de %d\n ”, y+1, total); } total=0; for( x=0; x< 5; x++) for(y=0; y < 4; y++) total += vendas[x][y]; printf(“O total de vendas no mês foi de %d\n ”, total); } Prof. MSc Orlei José Pombeiro 20 13. Faça um programa que carregue uma matriz 4x4 com números reais, calcule e imprima a soma dos elementos da diagonal principal; main() { float matriz[4][4], soma=0; int x, y; for( x=0; x< 4; x++) for(y=0; y < 4; y++) { printf(“Informe um número qualquer ”); scanf(“%f” , &matriz[x][y]); } for( x=0; x< 4; x++) soma += matriz[x][x]; printf(“A soma dos elementos da diagonal principal é %f ”, soma); } 14. Faça um programa que carregue em uma matriz 3x2 com números inteiros, calcule e imprima o maior elemento da matriz com sua respectiva posição, linha e coluna; main() { int numeros[3][2], maior=0, posx, posy, x, y; for( x=0; x< 3; x++) for(y=0; y < 2; y++) { printf(“Informe um número qualquer ”); scanf(“%d” , &numero[x][y]); } for( x=0; x< 3; x++) for(y=0; y < 2; y++) if(numero[x][y] > maior) { maior = numero[x][y]; posx = x; posy = y; } printf(“O maior número é o %d, e esta na linha %d e na coluna %d ”, maior, posx, posy); } Prof. MSc Orlei José Pombeiro 21 15. Criar um algoritmo que realize a multiplicação de duas matrizes 3x3. Lembrando da regra matemática para a multiplicação de matrizes, onde o valor do elemento da matriz resultante é o resultado da multiplicação da linha da primeira matriz pela coluna da segunda matriz. Ex.: R11 = (A11 * B11) + (A12 * B21) + (A13 * B31); main() { int matizA[3][3], matizB[3][3], matizC[3][3], x, y; printf(“Informe os números da Matriz A: ”); for( x=0; x< 3; x++) for(y=0; y < 3; y++) { printf(“Elemento: %d - %d\n”, x, y); scanf(“%d” , &matrizA[x][y]); } printf(“Informe os números da Matriz B: ”); for( x=0; x< 3; x++) for(y=0; y < 3; y++) { printf(“Elemento: %d - %d\n”, x, y); scanf(“%d” , &matrizB[x][y]); } for( x=0; x< 3; x++) for(y=0; y < 3; y++) matrixC[x][y] = 0; for( x=0; x< 3; x++) for(y=0; y < 3; y++) matrixC[x][y] += (matrizA[x][y] * matrizB[y][x]); for( x=0; x< 3; x++) { for(y=0; y < 3; y++) printf(“%d ”, matrizC[x][y]); printf(“\n”); } } Prof. MSc Orlei José Pombeiro 22 Referências Livros o MIZRAHI, Victorine Viviane; Treinamento em Linguagem C: módulo 1 e 2, Ed. Person Education do Brasil, São Paulo, 1990. o SCHILDT, Herbert; C Completo e Total, Ed. Person Education do Brasil, São Paulo, 1997. o HOLZNER, Steven; C++ Black Book, Makron Books, São paulo, 2002. o TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J.; Estruturas de Dados Usando C, Ed. Person Education do Brasil, São Paulo. Ebooks o DEITEL, C How to Program; Ed. Person Education do Brasil, 2012. http://www.pearson.com.br/servicos.asp?pag_id=82&area_pai=59&id_p=3 o GADDIS; Starting Out with C++: Pearson New International E:From Control Structures through Objects, Brief Edition-EB, Ed. Person Education do Brasil, 2013, http://www.pearson.com.br/servicos.asp?pag_id=82&area_pai=59&id_p=3 o GADDIS; Starting Out with C++: From Control Structures thr:International Edition-EB, Ed. Person Education do Brasil, 2011, http://www.pearson.com.br/servicos.asp?pag_id=82&area_pai=59&id_p=3 Sites o http://www.cprogressivo.net/2013/10/Estrutura-de-dados-dinamica-em-C-Listas-Filas- Pilhas-Arvores.html o http://www.cin.ufpe.br/~garme/public/(ebook)Estruturas%20de%20Dados%20Usand o%20C%20(Tenenbaum).pdf o http://www.mlaureano.org/livro/livro_estrutura_conta.pdf o https://www.youtube.com/watch?v=Symvpn9J3FM o http://www.inf.puc-rio.br/~inf1620/material.html o https://programacaodescomplicada.wordpress.com/indice/linguagem-c/
Compartilhar