Baixe o app para aproveitar ainda mais
Prévia do material em texto
matrizes Matrizes são arranjos de duas ou mais dimensões. Assim como nos vetores, todos os elementos de uma matriz são do mesmo tipo, armazenando informações semanticamente semelhantes. Matrizes bidimensionais são arranjos de duas dimensões. São necessários dois índices para acessar cada um de seus elementos, um para cada uma das dimensões Em pseudolinguagem, uma matriz bidimensional é declarada com o seguinte tipo: arranjo [<índice menor da dimensão 1>..<índice maior da dimensão 1>, <índice menor da dimensão 2>..<índice maior da dimensão 2> ]de <tipo da matriz>)onde <índice menor da dimensão n> e <índice maior da dimensão n> são os valores limites que definem o intervalo de índices válidos para cada uma das dimensões, e <tipo da matriz> é o tipo dos dados passíveis de serem armazenados nessa matriz. A seguir, alguns exemplos de acesso a um elemento de uma matriz, considerando a matriz bidimensional notas antes declarada: ■ primeira nota do primeiro aluno: notas[1,1] ■ primeira nota do aluno 3, considerando i = 3 e j = 1 (sendo i e j variáveis inteiras): notas[i, j] ■ quinta nota do segundo aluno, considerando i = 4: notas[2, i+1] ler (notas[1,1]) notas[1,2] ← notas[1,1] se notas [1,1] = 10 então escrever (notas[1,1]) a Preenchimento da matriz por leitura, percorrendo linha por linha: para i de 1 incr 1 até MAX faça para j de 1 incr 1 até MAX faça ler(tabela[i,j]) b Escrita da matriz completa, percorrendo linha por linha: para i de 1 incr 1 até MAX faça para j de 1 incr 1 até MAX faça escrever(tabela[i,j]) c Somatório dos elementos da última coluna: soma ← 0 para i de 1 incr 1 até MAX faça soma ← soma + tabela[i,MAX] escrever('Somatório dos elementos da última coluna = ', soma) d Somatório dos elementos da diagonal principal. Observe que neste caso, teoricamente, dois índices deveriam ser usados para acesso à matriz tabela, já que ela é bidimensional. No entanto, como os elementos da diagonal principal têm índices com valores iguais para linha e coluna (0,0 – 1,1 – 2,2 – etc.), uma única variável pode ser usada como índice para as duas dimensões: soma ← 0 para i de 1 incr 1 até MAX faça soma ← soma + tabela[i,i] escrever('Somatório dos elementos da diagonal principal = ', soma) e Somatório dos elementos da diagonal secundária. Observar que, a partir do índice da linha, é possível calcular o índice da coluna, o que, mais uma vez, permite resolver o problema usando apenas uma variável como índice: soma ← 0 para i de 1 incr 1 até MAX faça soma ← soma + tabela[i,((MAX – i) + 1)] escrever('Somatório elementos da diagonal secundária = ', soma) f Somatório de todos os elementos à esquerda da diagonal secundária: soma ← 0 para i de 1 incr 1 até MAX faça para j de 1 incr 1 até MAX faça se j < (MAX – i) então soma ← soma + tabela[i,j] escrever ('Somatório dos elementos à esquerda da diagonal secundária = ', soma) g Geração de dois vetores, um com o somatório das linhas (som_lin[MAX]) e o outro com o das colunas (som_col[MAX]): para i de 1 incr 1 até MAX faça {INICIALIZA VETORES EM ZERO} início som_lin[i] ← 0 som_col[i] ← 0 fim para i de 1 incr 1 até MAX faça para j de 1 incr 1 até MAX faça início som_lin[i] ← som_lin[i] + tabela[i,j] som_col[j] ← som_col[j] + tabela[i,j] fim matrizes com mais de duas dimensões Supondo que há 2 turmas, cada turma com 7 alunos, com 6 notas por aluno, a declaração da matriz para armazenar os dados correspondentes seria a seguinte: notas_turma (arranjo [1..2, 1..7, 1..6] de real) Exercícios 1. Considere as operações básicas que podem ser realizadas com uma matriz e assinale a alternativa que NÃO se refere a uma operação básica de manipulação de matrizes. D. Verificar quais números da matriz são números pares: para i de 1 ate linhas passo 1 faca para j de 1 ate colunas passo 1 faca se (valores[i,j] mod 2 = 0) escreval("Par: ",valores[i,j]) fimpara fimpara 2. Analise o seguinte programa em pseudocódigo: algoritmo "matrizes" var valores: vetor[1..3,1..4] de real calcula: real i,j: inteiro procedimento X inicio para i de 1 ate 3 passo 1 faca para j de 1 ate 4 passo 1 faca escreva("Digite valor: ") leia(valores[i,j]) fimpara fimpara fimprocedimento procedimento Y inicio para i de 1 ate 3 passo 1 faca escreval("") para j de 1 ate 4 passo 1 faca escreva(" ",valores[i,j]) fimpara fimpara fimprocedimento funcao Z:real var s : real inicio s <- 0 para i de 1 ate 3 passo 1 faca para j de 1 ate 4 passo 1 faca s <- s + valores[i,j] fimpara fimpara retorne s fimfuncao inicio //conjunto de comandos fimalgoritmo Analise as alternativas a seguir e selecione a que apresenta corretamente o "//conjunto de comandos" para realizar a seguinte lista de operações: - ler a matriz; - calcular o somatório dos elementos da matriz; - escrever a matriz; - mostrar o somatório dos elementos da matriz. C. inicio //conjunto de comandos X() calcula <- Z() Y() escreval ( "Somatorio: ", calcula ) fimalgoritmo Inicio //conjunto de comandos X() //le a matriz calcula <- Z() //calcula o somatorio Y() //escreve a matriz escreval( "Somatorio: ", calcula ) //mostra o valor do somatório fimalgoritmo 3. Deseja-se construir um algoritmo que leia uma matriz bidimensional quadrada, ou seja, que a quantidade de linhas seja igual à quantidade de colunas. Esse algoritmo deve ter uma função responsável por calcular o somatório dos elementos da diagonal secundária. Analise as alternativas a seguir e selecione a que apresenta a mais correta implementação da função que calcula o somatório dos elementos da diagonal secundária da matriz. C. funcao secundaria:real var s : real inicio s <- 0 para i de 1 ate linhas passo 1 faca para j de 1 ate colunas passo 1 faca se ((i+j) = (linhas+1)) entao s <- s + valores[i,j] fimse fimpara fimpara retorne s fimfuncao Função que calcula e retorna o somatório dos elementos da diagonal secundária da matriz. 4. Considere o seguinte algoritmo em pseudocódigo: algoritmo "matrizes" var valores: vetor[1..4,1..4] de real soma: vetor[1..4] de real i,j: inteiro procedimento ler inicio para i de 1 ate 4 passo 1 faca para j de 1 ate 4 passo 1 faca escreva("Digite valor: ") leia(valores[i,j]) fimpara fimpara fimprocedimento procedimento escrever inicio para i de 1 ate 4 passo 1 faca escreval("") para j de 1 ate 4 passo 1 faca escreva(" ",valores[i,j]: fimpara fimpara fimprocedimento inicio ler() escrever() fimalgoritmo Analise as alternativas a seguir e selecione a que apresenta a correta implementação de uma função que calcula o somatório dos elementos de cada linha e armazene esse somatório em um vetor. A. procedimento somatorio inicio para i de 1 ate 4 passo 1 faca soma[i] <- 0 para j de 1 ate 4 passo 1 faca soma[i] <- soma[i] + valores[i,j] fimpara fimpara fimprocedimento Essa função calcula corretamente o somatório dos elementos de cada linha e armazena o somatório em um vetor. 5. Considere a estrutura, as características e o funcionamento das matrizes. Analise as alternativas a seguir e determine qual é a falsa. C. As variáveis utilizadas para indexar elementos de uma matriz podem ser do tipo real. As variáveis utilizadas para indexar elementos de uma matriz devem ser do tipo inteiro. Desafio! Seu desafio é construir um algoritmo em pseudocódigo que leia uma matriz bidimensional (5 x 5) , calcule e mostre o seu MINMAX. O MINMAX de uma matriz é o maior valor/elemento da linha onde está o menor valor/elemento da matriz considerada. Portanto, para construir um algoritmo que defina o MINMAX de uma matriz, é preciso: - ler a matriz; - encontrar as coordenadas do MENOR elemento da matriz (linha e coluna); - encontrar o maior elemento da linha do MENOR elemento (esse é o MINMAX); - escrever a matriz lida; - escrever o valor do elemento MINMAX. Acompanhe uma implementação do algoritmo MINMAX. algoritmo "minmax" var valores: vetor[1..5,1..5] de realprocedimento lerValores var L, K : inteiro inicio para L de 1 ate 5 passo 1 faca para K de 1 ate 5 passo 1 faca escreva("Valor: ") leia(valores[L,K]) fimpara fimpara fimprocedimento procedimento escreverValores var L, K : inteiro inicio para L de 1 ate 5 passo 1 faca escreval(" ") para K de 1 ate 5 passo 1 faca escreva(" ", valores[L,K]) fimpara fimpara fimprocedimento funcao minmax: real var L, K, LM, KM : inteiro maximo : real inicio //encontrar coordenadas no menor elemento da matriz LM <- 1 KM <- 1 para L de 2 ate 5 passo 1 faca para K de 1 ate 5 passo 1 faca se (valores[L,K] < valores[LM,KM]) entao LM <- L KM <- K fimse fimpara fimpara escreval(" ") escreval("Menor[",LM,",",KM,"]= ",valores[LM,KM]) //encontrar o maior elemento na linha do menor elemento maximo <- valores[LM,1] para K de 2 ate 5 passo 1 faca se (valores[LM,K] > maximo) entao maximo <- valores[LM,K] fimse fimpara retorne(maximo) fimfuncao inicio lerValores() escreverValores() escreval("MINMAX: ",minmax()) fimalgoritmo
Compartilhar