Baixe o app para aproveitar ainda mais
Prévia do material em texto
ALGORITMOS Variáveis Indexadas Vetores e Matrizes Variáveis Indexadas VARIÁVEIS INDEXADAS ESTRUTURAS DE DADOS HOMOGÊNEAS •Nem sempre os dados do tipo primitivo são suficientes para representar todas e quaisquer informações que possam surgir. • Em muitas aplicações os dados a serem processados precisam ser organizados em estruturas de dados mais elaboradas como, por exemplo, vetores, matrizes e registros. •Os vetores e matrizes esses dados são representados pelos arrays. •Array é um nome genérico para definir um vetor de qualquer dimensão. •Uma variável pode ser interpretada como um elemento e uma estrutura de dados, como um conjunto. •Quando uma determinada Estrutura de Dados é composta de variáveis com o mesmo tipo primitivo, temos um conjunto homogêneo de dados. •Podemos considerar que uma variável composta homogênea seja como uma alcateia, e seus elementos (variáveis) sejam como os lobos (que são da mesma espécie). Variáveis Indexadas ARRAYS UNIDIMENSIONAIS - VETORES VETORES •As estruturas unidimensionais homogêneas são os chamados vetores. • O array unidimensional é o array mais simples (é uma matriz constituída por uma única linha ou por uma única coluna). •Ele é apenas uma sequência linear de elementos guardados consecutivamente na memória. •Imagine um edifício com um número finito de andares, representado uma estrutura de dados e seus andares, partições dessa estrutura. •Visto que os andares são uma segmentação direta do prédio, estes serão chamados de estrutura composta unidimensional (ou seja, uma dimensão). Imagine o trabalho de um entregador, que tem que entregar uma encomenda em determinado andar de um edifício, por exemplo, do INSS. Cada andar do edifício é um departamento. Para realizar a entrega, é necessário que ele saiba primeiramente o nome do edifício e depois se preocupar com o número do andar. Variáveis Indexadas ARRAYS UNIDIMENSIONAIS - VETORES VETORES O mesmo acontece com os vetores, visto que são compostos por diversos dados e, como podem existir muitos vetores, torna-se necessário determinar primeiro qual vetor contém o dado desejado e depois especificar em qual posição este se encontra. Considere outro exemplo o conjunto de meses do ano. Os meses janeiro, fevereiro,......, dezembro recebem o mesmo tipo de nome: mês. MÊS(1) MÊS(2) MÊS(3) .... MÊS(7) .... MÊS(12) Logo, a palavra MÊS pode representar 12 elementos diferentes, dependendo do valor indicado dentro dos parênteses que é o índice do conjunto MÊS. Por exemplo, julho se encontra na sétima posição do vetor MÊS. Variáveis Indexadas ARRAYS BIDIMENSIONAIS - MATRIZES MATRIZES • Considere agora que o entregador tenha que entregar uma encomenda em um determinado andar de um edifício residencial. • Cada andar do edifício tem vários apartamentos. • Para realizar a entrega, é necessário que ele saiba primeiramente o nome do edifício, o número do andar e o número do apartamento Considere que o entregador tenha uma entrega para o Edifício Boa Morada, terceiro andar, apartamento 4. Endereço: Boa Morada, andar 3, apartamento 4. Que poderia ser resumido para a forma matricial: Boa_Morada(3,4) Variáveis Indexadas ARRAYS BIDIMENSIONAIS - MATRIZES MATRIZES •Neste exemplo, para identificar cada endereço do edifício, seria necessário utilizar uma matriz 4x4, uma vez que o edifício tem 4 andares e cada andar tem 4 apartamentos (Boa_Morada (I),(J), I=1,...,4 e J=1,...,4). • O índice I representa os andares e o índice J representa o número dos apartamentos •Exemplos: Boa_Morada (1,J) J=1,..4 representa todos os apartamentos do primeiro andar Boa_Morada (2,3)� segundo andar, apartamento 3 •Matrizes são estruturas de dados homogêneas que, para a identificação completa de cada um dos seus elementos, necessita que seja especificado: o nome da matriz seguido de dois índices que identificam os elementos da matriz. • O primeiro índice indica a linha e o segundo elemento indica a coluna. Variáveis Indexadas ARRAYS UNIDIMENSIONAIS - VETOR DECLARAÇÃO DE UMA ARRAY UNIDIMENSIONAL - VETOR •Para usarmos um vetor (ou uma matriz) precisamos primeiramente definir em detalhes como é constituído o tipo e, depois, declarar uma variável, associando um identificador de variável ao identificador do tipo vetor. •O que diferencia a declaração de uma matriz da declaração de qualquer outra variável é a parte que segue o nome, isto é, os pares de colchetes ([ e ]) ou de parênteses ( ), dependendo da linguagem, que envolvem um número inteiro e indica ao compilador a dimensão da array. Sintaxe Tipo nome[qtd] Ex: Real a[ 10] • declara a como um array do tipo real de dimensão 10. Inteiro s[20] • declara s como um array do tipo inteiro de dimensão 20. Caracter m[10][15] • declara m como um array do tipo caracter de dimensão 10 com 15 dígitos em cada elemento. •qtd é a dimensão do vetor. •É um valor inteiro. •Indica a quantidade de elementos do vetor. Variáveis Indexadas ARRAYS BIDIMENSIONAIS - MATRIZES DECLARAÇÃO DE UMA ARRAY UNIDIMENSIONAL - VETOR CONVENÇÃO •Seja o vetor a de n elementos: a [ i ] Nome do vetor índice do elemento O caso do prédio, o nome dado ao vetor é INSS e cada andar recebe um índice. Para o primeiro andar è INSS(1), segundo andar è INSS(2), para o j-ésimo andar è INSS(j), j=1,...,4. Todos os elementos do vetor recebem o mesmo nome “INSS”, o que varia é o índice. Os elementos dos arrays podem ser qualquer um dos tipos de dados básicos, podem ser inteiro, real, caractere, lógico, complexo. Variáveis Indexadas ARRAYS BIDIMENSIONAIS - MATRIZES DECLARAÇÃO DE UMA MATRIZ BIDIMENSIONAL - MATRIZ •Considere uma matriz A de L linhas e C colunas. Sintaxe Tipo nome[5] [10] Ex: Real a[4][3] •declara a como um array do tipo real com 4 linhas e 3 colunas Inteiro s[5][5] •declara s como um array do tipo real com 5 linhas e 5bcolunas Caracter m[10][2][15] •declara m como um array do tipo caracter com 10 linhas, 2 colunas e 15 dígitos em cada em. • qtdL é a dimensão da linha da matriz. • qtdC é a dimensão da coluna da matriz • qtdL e qtdC são valores inteiros. • qtdL*qtLC indica a quantidade de elementos da matriz Variáveis Indexadas ARRAYS BIDIMENSIONAIS - MATRIZES DECLARAÇÃO DE UMA MATRIZ BIDIMENSIONAL - MATRIZ •Considere uma matriz A de L linhas e C colunas. Sintaxe Tipo nome[qtdL] [qtdC] Ex: Real a[L][C] •declara a como um array do tipo real com L linhas e C colunas Inteiro s[L1][C1] •declara s como um array do tipo real com L1 linhas e C21colunas Caracter m[L2][C2][q] •declara m como um array do tipo caracter com L2 linhas, C colunas e q dígitos em cada em. • qtdL é a dimensão da linha da matriz. • qtdC é a dimensão da coluna da matriz • qtdL e qtdC são valores inteiros. • qtdL*qtLC indica a quantidade de elementos da matriz Variáveis Indexadas ARRAYS BIDIMENSIONAIS - MATRIZES DECLARAÇÃO DE UMA MATRIZ BIDIMENSIONAL - MATRIZ M(1,1) M(1,2) M(1,3) M(1,4) M(2,1) M(2,2) M(2,3) M(2,4) M(3,1) M(3,2) M(3,3) M(3,4) M(4,1) M(4,2) M(4,3) M(4,4) M(5,1) M(5,2) M(5,3) M(5,4) CONVENÇÃO •os arrays começam na posição (1,1) até aos números que declaramos, sendo neste caso (l,c). Seja a matriz M5x4 de 20 elementos (5 linhas e 4 colunas): i para linha j para colunas M[i][j] Nome da Matriz ÍNDICES: O índice de um elemento de uma array pode ser: • Constante inteira a(p), m(p,p)� p=1 • Variável inteira a(p), m(p,p)� p=1,....,n • Expressão tipo inteira a(p+2+p2), m(p,p)� p=1,....,n ALPHA(I, J-5, 2*I+7) Variáveis Indexadas LEITURA E IMPRESSÃO DE VETORES Algoritmo que lê a quantidade M de elementos de um vetor e em seguida leia os elementos deste vetor. Depois imprima o vetor lido. Algoritmo Inteiras N[10],M,K Início Escreva ‘Digite quantidade de elementos <10’ Leia M Escreva “Digite os ”, M, “ elementos do vetor” Para k de 1 até M faça Ler N(k) Fim_Para Escreva “ Elementos lidos “ Para k de 1 até M faça Escreva N[k] Fim_Para Fim_Algoritmo Variáveis Indexadas LEITURA E IMPRESSÃO DE MATRIZES Algoritmo que lê as quantidades L e C de elementos de uma matriz e em seguida leia os elementos desta matriz. Depois imprima o matriz lida. Algoritmo Inteiro X[10][10],i,j,L,C Inicio Escreva ‘Digite as dimensoes da matriz (L e C)’ Leia L, C Escreva ‘Digite os elementos da matriz’ Para i de 1 até L passo 1 Para j de 1 até C passo 1 Leia X[i][j] Fim_Para Fim_Para Escreva ‘A matriz lida eh' Para i de 1 até L passo 1 Escreva (X[i][j], j=1,C,1) Fim_Para Fim Variáveis Indexadas LEITURA E IMPRESSÃO DE MATRIZES Algoritmo que lê as quantidades L e C de elementos de uma matriz e em seguida leia os elementos desta matriz. Depois imprima o matriz lida. A linha i é fixada em 1, i=1 e são lidos os valores de todas as colunas (j=1,...C), ou seja, são lidos os valores a1j. Em seguida a linha i é fixada em 2, i=2 e novamente são e são lidos os valores de todas as colunas (j=1,...,C), ou seja, são lidos os valores a2j e assim sucessivamente até que sejam lidas os elementos da linha L, aLj Teste de mesa i =1 j=1 � ler X(1,1) i=1, j=2� ler X(1,2) i=1, j=3� ler X(1,3) ........ i=1,j=C� ler X(1,C) i =2 j=1 � ler X(2,1) i=2, j=2� ler X(2,2) i=2, j=3� ler X(2,3) ........ i=2,j=C� ler X(2,C) i =L j=1 � ler X(L,1) i=L, j=2 � ler X(L,2) i=L, j=3 � ler X(L,3) ........ i=L,j=C � ler X(L,C) M Variáveis Indexadas OPERAÇÃO COM ARRAYS M ,, 4 3 2 1 4 3 2 1 = = b b b b B a a a a A , 4 3 2 1 4 3 2 1 4 3 2 1 + + + + = = b b b b a a a a s s s s s para i=1,L faça s[i]� A[i]+B[i] fim_para SOMA DE DOIS VETORES Condição de soma: as arrays devem ter mesma dimensão Faça um algoritmo que leia dois vetores e realize a soma entre eles. Ex: Considere dois vetores A e B de dimensão L=4. Variáveis Indexadas OPERAÇÃO COM ARRAYS = = 333231 232221 131211 333231 232221 131211 , bbb bbb bbb B aaa aaa aaa A ijijij baR baR baR baR bababa bababa bababa BAR += += += += +++ +++ +++ =+= 323232 121212 111111 333332323131 232322221121 131312121111 , para i=1,L faça para j=1,C faça R[i][j]�A[i][j]+B[i][j] fim_para fim_para SOMA DE DUAS MATRIZES Condição de soma: as arrays devem ter mesma dimensão Faça um algoritmo que leia duas matrizes e realize a soma entre elas. Ex: Considere matrizes ALxC e BLxC Variáveis Indexadas OPERAÇÃO COM ARRAYS , 333231 232221 131211 = aaa aaa aaa A [ ] [ ] 1Nji condição secundaria diagonal ji condição principal diagonal +=+=⇒ ==⇒ 312213 332211 aaads aaadp DIAGONAIS DE UMA MATRIZ DE ORDEM N Variáveis Indexadas OPERAÇÃO COM ARRAYS = = 333231 232221 131211 333231 232221 131211 , bbb bbb bbb B aaa aaa aaa A BAR *= = = = ∑ = cbj lai BAR kj ca k ikij ,...., ,...., * 1 1 1 33132312131113 32132212121112 31132112111111 *** *** *** bababar bababar bababar ++= ++= ++= 33332332133133 32332232123132 31332132113131 *** *** *** bababar bababar bababar ++= ++= ++= Para i=1,la,1 faça Para j=1,cb,1 faça R[i][j]=0 Para k=1,ca,1 faça R[i][j]=A[i][k]*B[k][j]+R[i][j] Fim_para Fim_para Fim_para PRODUTO DE DUAS MATRIZES Faça um algoritmo que leia duas matrizes Anxm e B pxq e realize a multiplicação entre elas. Para poder multiplicar as matrizes � m=p ca�colunas de A, la� linhas de a, cb�colunas de b, lb�linhas de b. Exemplo: considere n=la=3, m=ca=3 , p=lb=ca e q=cb=3. Variáveis Indexadas OPERAÇÃO COM ARRAYS TRANSPOSTA DE UMA MATRIZ Faça um algoritmo que leia uma matriz ALxC e obtenha a usa transposta (AT). == = 332313 322212 312111 333231 232221 131211 , aaa aaa aaa AR aaa aaa aaa A T Rij= Aji - as posições das linhas e colunas se invertem. -Uma vez lida a matriz A, (aij), para obter a transposta basta imprimir os elementos aji. para i=1,L faça para j=1,C faça R[i][j] = A[j][i] fim_para fim_para Variáveis Indexadas OPERAÇÃO COM ARRAYS ORDENAÇÃO DE VETORES: Considere um vetor com os elementos 4 7 3 1 2 A filosofia adotada na construção desse algoritmo é a seguinte: �comparam-se os números 2 a 2, isto é, o primeiro com o segundo, o primeiro com o terceiro, e assim sucessivamente. �Sempre que o seguinte for maior que o anterior, troca-se a posição dos mesmos Um processo semelhante é utilizado para realizar a ordenação em ordem decrescente, bastando trocar o sinal de maior para menor. Variáveis Indexadas OPERAÇÃO COM ARRAYS ORDENAÇÃO DE VETORES: Considere um vetor com os elementos 4 7 3 1 2 Dado um vetor, comparar todos os seus elementos um a um e ordena-los em ordem crescente e decrescente. Algoritmo ordenacao Início Inteiras V[100],J,N,K,AUX Escreva ‘DIGITE O COMPRIMENTO DO VETOR’ Leia N Escreva ‘DIGITE OS ELEMENTOS INTEIROS DO VETOR’ Para k de 1 até N faça Leia V[k]) Fim_Para Escreva ‘ VETOR ORIGINAL’ Para k de 1 até N faça Escreva V[k] Fim_Para Escreva ‘ ORDEM CRESCENTE’ Para k de 1 até N-1 faça Para J de k+1 até N faça Se (V[k] > V[J]) AUX=V[k] V[k]=V[J] V[J]=AUX Fim_Se Fim_Para Fim_Para Para k de 1 até N faça Escreva V[k] Fim_para Escreva ‘ORDEM DECRESCENTE’ Para k de 1 até N-1 faça Para J de k+1 até N faça Se (V[k] < V[J]) AUX=V[k] V[k]=V[J] V[J]=AUX Fim_Se Fim_Para Fim_Para Para k de 1 até N faça Escreva V[k] Fim_Para Fim Variáveis Indexadas OPERAÇÃO COM ARRAYS ORDENAÇÃO DE VETORES: Fazer um algoritmo que construa dois vetores: o primeiro com o nome dos alunos e o segundo como as notas dos alunos. Ordene os dois vetores pela ordem crescente de notas e imprima os dois vetores ordenados. Lógica: Para resolver este problema é necessário ler dois vetores, ordenar um e o outro deve acompanhar a ordenação. Neste caso, deve-se utilizar duas variáveis auxiliares e cada uma delas deve ser do mesmo tipo da variável do vetor que será ordenado. O critério de ordenação é feito apenas para um vetor, os demais apenas acompanham o ordenamento. Exemplo: Aux é real, pois o vetor nota é real. Aux2 é caracter, pois o vetor nome é caracter. O critério de ordenação é feito com o vetor nota, o vetor nome apenas acompanha a ordenação. Se nota[i]>nota[j] então AUX=nota[i] nota[i]=nota[j] nota[J]=AUX AUX2=nome[i] nome[i]=nome[j] nome[j]=AUX2 Fim se Variáveis Indexadas OPERAÇÃO COM ARRAYS ORDENAÇÃO DE MATRIZES E VETORES SIMULTANEAMENTE Considere o problema de ordenar uma matriz e um vetor simultaneamente, sendo que a matriz e o vetor têm tipos de dados diferentes ( por exemplo: matriz real e vetor caracter). Para ordenar uma matriz, deve-se estabelecer qual a linha ou coluna que comandará a ordenação. As demais linhasou colunas acompanharão a ordenação. Na prática será realizada uma ordenação de vetor (linha ou coluna). Variáveis Indexadas OPERAÇÃO COM ARRAYS ORDENAÇÃO DE MATRIZES E VETORES SIMULTÂNEAMENTE Fazer um algoritmo que leia o nome de N alunos e as notas de 3 provas de cada um deles. Calcule as médias de cada um. As notas deverão ser lidas por meio de uma matriz 3x3 e depois a média deverá ser acrescentada gerando uma nova matriz 4x4. Ordene a matriz de acordo com a ordem decrescente de médias e ordene simultaneamente o vetor nome. Imprima um relatório com o nome, as notas e as médias ordenadas de cada aluno em ordem decrescente de médias. Variáveis Indexadas OPERAÇÃO COM ARRAYS Algoritmo ordenacao_matrizes_vetores real aluno [20][4],aux caracter nome[20][10] ,aux2[10] Inteiro i,j,k,n Escreva ‘Digite a quantidade de alunos <=20’ Leia n //LEITURA DOS DADOS Para i de 1 até n passo 1 faça Escreva'Digite o nome do aluno ',i Leia nome[i] Escreva'Digite as tres notas do aluno',i Para j de 1 até 3 passo 1 faça Leia aluno[i][j] fim para aluno[i][4]=(aluno[i][1]+aluno[i][2]+aluno[i][3])/3 Fim_para Como o tipos de dados são diferentes (caractere e real) não podem ser lidos uma única matriz. Deve-se utilizar um vetor para o nome e uma matriz para as notas. Como as notas e a média são todas locais, elas podem ser alocadas em uma matriz. Ordenação da coluna das médias. A ordenação é feita como um vetor convencional, já que a coluna é fixa ( coluna 4) Variáveis Indexadas OPERAÇÃO COM ARRAYS // Continuação !ORDENAÇÃO DA COLUNA 4 DA MATRIZ, COLUNA DAS MÉDIAS Para i de 1 até n-1 passo 1 faça Para j de i até n passo 1 faça Se(aluno[i][4] < aluno[j][4] ) então AUX=aluno[i][4] aluno[i][4]=aluno[j][4] aluno[j][4]=AUX // Ajuste do vetor nome AUX2=nome[i] nome[i]=nome[j] nome[j]=AUX2 !ORDENAÇÃO DAS DEMAIS COLUNAS DA MATRIZ Para k de 1 até n passo 1 faça aux=aluno[i][k] aluno[i][k]=aluno[j][k] aluno[j][k]=aux Fim_para Fim_se Fim_para Fim_para Ordenação do vetor nome acompanha a ordenação da coluna 4. Ordenação das demais colunas acompanha a ordenação da coluna 4 através dos índices i e j. O loop k indica que cada uma das demais colunas serão ordenadas acompanhando a ordenação das médias. Variáveis Indexadas OPERAÇÃO COM ARRAYS !IMPRESSÃO DOS DADOS Escreva 'Nome Notas Media' Para i de 1 até n Escreva nome[i] Para j de 1 até 4 Escreva aluno[i][j] Fim_para Fim_para Fim Algoritmo
Compartilhar