Prévia do material em texto
Algoritmos Gellars M. S. Tavares Aula 10 2 CONTEÚDO PROGRAMÁTICO DESTA AULA Matriz bidimensional Declarar matrizes bidimensionais; Trecho de atribuição; Trecho de entrada; Trecho de saída ; Operações básicas; Entendendo a matriz de char ; MATRIZES BIDIMENSIONAIS 3 a11 a12 a13 ... a1n a21 a22 a23 ... a3n a31 a32 a33 ... a3n ... ... ... ... ... am1 am1 am2 ... amn Amxn 8 9 7 8.5 9 5 7 8 10 4 6 7 6 5 9 5.5 Notas4x4 4 MATRIZES BIDIMENSIONAIS 2 9 3 10 1 20 13 7 A4x2 4 7 6 8 2 9 6 10 B4x2 6 16 9 18 3 29 19 17 S4x2 = + Operação – Somar duas matrizes Aplicação: Controle de Vendas bimestral de quatro produtos de duas lojas 5 MATRIZES BIDIMENSIONAIS 70 30 150 300 50 200 120 80 100 130 70 200 A4x3 Resulta em uma matriz 4x1 Operação – Somar linhas 250 550 300 400 Somalinha Aplicação: Controle trimestral de quatro despesas 6 MATRIZES BIDIMENSIONAIS 70 30 150 300 50 200 120 80 100 130 70 200 A4x3 Operação – Somar colunas Aplicação: Controle mensal das despesas durante três meses. Somacoluna 620 230 650 7 MATRIZES BIDIMENSIONAIS int float double char long long int ... Dimensionando Matriz - bidimensional 8 Praticando MATRIZES BIDIMENSIONAIS 9 1) Armazenar 3 notas e a média de 40 alunos. 2) Armazenar quantidade vendida de 100 produtos em seis meses. MATRIZES BIDIMENSIONAIS 10 3) Armazenar os 13 salários de 50 funcionários. 4) Controle de pressão arterial em uma semana com 24 aferições por dia. MATRIZES BIDIMENSIONAIS 11 5) Armazenar três saltos de 12 atletas de salto em distância. 6) Armazenar a profissão de 200 pessoas com até 20 caracteres. MATRIZES BIDIMENSIONAIS 12 7) Armazenar o nome de 100 pessoas até 30 caracteres. char nome[100] [31]; MATRIZES BIDIMENSIONAIS 13 Matriz do tipo float com 5 linhas e 4 colunas que deverá armazenar três notas e a média, totalizando 20 variáveis Armazenamento na Memória Principal MATRIZES BIDIMENSIONAIS 14 O nome de uma matriz corresponde ao primeiro endereço do conjunto de endereços da Memória Principal. Para nos deslocarmos entre linhas e localizarmos o primeiro endereço de uma linha da matriz, usamos a expressão abaixo. Armazenamento na Memória Principal Endereço-base + número de colunas da matriz * deslocamento linha * tamanho do tipo MATRIZES BIDIMENSIONAIS 15 Para nos deslocarmos entre colunas de uma linha e localizarmos o primeiro endereço do elemento, usamos a expressão abaixo. Armazenamento na Memória Principal Endereço calculado pela fórmula anterior + deslocamento coluna * tamanho do tipo MATRIZES BIDIMENSIONAIS 16 MATRIZES BIDIMENSIONAIS 2000 Localizando: elemento linha 2/ coluna 3 Armazenamento na Memória Principal 17 MATRIZES BIDIMENSIONAIS Armazenamento na Memória Principal Localizando a linha 2 2000 + 4(colunas) * 2(deslocamento linha) * 4(tamanho do float) = 2032 0 1 2 3 4 Endereço base 18 MATRIZES BIDIMENSIONAIS Localizando a coluna 3 Armazenamento na Memória Principal e n d e r e ç o 2032 + 3(deslocamento coluna) * 4(tamanho do float) = 2044 X 19 MATRIZES BIDIMENSIONAIS Vamos praticar 20 MATRIZES BIDIMENSIONAIS Suponha que um médico deseje contratar você para construir um programa que possa armazenar nome completo, peso, altura e IMC de 10 pacientes. Ele lhe entregou um desenho parecido com o do próximo slide. 21 MATRIZES BIDIMENSIONAIS 22 Uma matriz 10 x 30 char MATRIZES BIDIMENSIONAIS 23 Uma matriz 10 x 3 float MATRIZES BIDIMENSIONAIS 24 Declarando as Matrizes MATRIZES BIDIMENSIONAIS 25 Quando armazenamos um nome numa Matriz Unidimensional, tratamos como se ela fosse uma variável simples. gets(nome); MATRIZES BIDIMENSIONAIS 26 0 1 2 3 4 5 6 7 8 9 10 11 12 13 28 29 14 15 ... 0 1 2 3 4 5 6 7 8 0 Quando armazenamos nomes numa matriz Bidimensional, tratamos como se ela fosse uma matriz Unidimensional. gets(nome[variavel]); MATRIZES BIDIMENSIONAIS 27 27 valor é uma expressão que pode envolver constante ou operações com outra(s) matriz(es). TRECHO de ATRIBUIÇÃO MATRIZES BIDIMENSIONAIS 28 A matriz Bidimensional mat é assumida como tendo quatro linhas. DECLARAÇÃO / ATRIBUIÇÃO Temos que informar o tamanho da coluna MATRIZES BIDIMENSIONAIS 29 A matriz Bidimensional pal é assumida como tendo quatro linhas. DECLARAÇÃO / ATRIBUIÇÃO MATRIZES BIDIMENSIONAIS 30 TRECHO de ENTRADA Numérico – bidimensional MATRIZES BIDIMENSIONAIS 31 TRECHO de ENTRADA mas o trecho é de Unidimensional. Matriz de char: declarada como Bidimensional, char nomematriz[tamanholinha][tamanhocoluna]; for(var=0; var<tamanholinha; var++) { cout<<“ \n Mensagem: “; gets(nome[var]); } MATRIZES BIDIMENSIONAIS 32 TRECHO de SAÍDA Numérico – bidimensional MATRIZES BIDIMENSIONAIS 33 Declarada como Bidimensional, mas o trecho é de Unidimensional. TRECHO de SAÍDA char – bidimensional MATRIZES BIDIMENSIONAIS 34 O programa do Médico VAMOS EXERCITAR? 35 #include<iostream> #include<cstdlib> #include<cstring> #include<cmath> #define TL 3 using namespace std; int main() { int L, C; float dadospaciente[TL][3]; char nome[TL][30]; SOLUÇÃO 36 // TRECHO DE ENTRADA for(L=0; L< TL; L++) { fflush(stdin); // limpa o buffer cout<<"Digite "<<L+1<<" Nome: "; gets(nome[L]); strupr(nome[L]); //converte todos os caracteres para maiúsculo cout<<"Digite Peso: "; cin>>dadospaciente[L][0]; cout<<"Digite Altura: "; cin>>dadospaciente[L][1]; dadospaciente[L][2]= dadospaciente[L][0] / pow(dadospaciente[L][1],2); } SOLUÇÃO 37 // TRECHO DE SAÍDA system(“cls”); cout<<“\n FICHAS INDIVIDUAIS \n”; cout<<“\n ------------------------------------ \n”; for(L=0; L< TL; L++) { cout<<“ \n Nome: “ << nome[L]; cout<<“ \n Peso: “ <<dadospaciente[L][0]; cout<<“ \n Altura: “ <<dadospaciente[L][1]; cout<<“ \n IMC: “ <<dadospaciente[L][2]; cout<<“ \n ------------------------------------ \n”; } system(“pause”); } SOLUÇÃO 38 SOLUÇÃO 39 SOLUÇÃO 40 Vamos praticar agora? Algoritmos Gellars M. S. Tavares Atividade 10 42 PROBLEMA Construa um programa em C++ que leia e armazene o nome e valor de compra de cinco produtos. Calcule e armazene o valor da venda com 10% em cima do valor da compra. Imprimir uma listagem com o nome dos produtos, valor da compra e valor da venda. 43 SOLUÇÃO #include<iostream> #include<cstdlib> #include<cstring> using namespace std; int main() { int x; float preco[5][2]; char nome[5][20]; 44 // TRECHO DE ENTRADA for(x=0;x<=4;x++) { fflush(stdin); //limpa o buffer cout<<"Digite "<<x+1<<" Nome: "; gets(nome[x]); strupr(nome[x]); cout<<"Digite Valor da compra: "; cin>>preco[x][0]; } SOLUÇÃO 45 //TRECHO DE SAÍDA system(“cls”) //limpando a tela for(x=0;x<=4;x++) { preco[x][1] = preco[x][0]*1.1; //Calculando os 10% cout<<“\n Produto: “<<nome[x] ; cout<<“\n Valor da Compra: “<<preco[x][0] ; cout<<“\n Valor da Venda: “<<preco[x][1]; cout<<“\n ...................\n"; } system("pause"); return 0; } SOLUÇÃO 46 SOLUÇÃO 47 SOLUÇÃO