Baixe o app para aproveitar ainda mais
Prévia do material em texto
VETORES E MATRIZES Disciplina: Introdução à programação para EE Prof. Stelmo Magalhães Barros Netto SUMÁRIO Vetor Matriz Inicialização Detalhes extras para Fortran Alocação dinâmica 2 VETORES E MATRIZES Matriz de uma dimensão (vetor ou array) Índice indica a posição de um elemento no vetor Indexação Portugol: vetor[2] = ? 4 Fortran: vetor(2) = ? 1 Exemplo: Crie um programa que calcula a média das 3 notas de um aluno. 3 𝑣𝑒𝑡𝑜𝑟 = 2 1 4 Índice Fortran 1 2 3 Índice port. studio 0 1 2 Índice Índice VETORES E MATRIZES. EXEMPLO. DIAG/PORTUGOL 4 Define um vetor de 3 elementos VETORES E MATRIZES. EXEMPLO. PORTUGOL/FORTRAN 5 Define um vetor de 3 elementos Define um vetor de 3 elementos VETORES E MATRIZES 6 Prática: Dado um vetor qualquer de N elementos, determinar o seu módulo e o vetor unitário correspondente. Entrada v = [𝑥1 𝑥2 𝑥3 𝑥4] Saída Módulo ou norma-euclidiana do vetor Vetor unitário Processamento Módulo de v 𝑣 = 𝑥1 2 + 𝑥2 2 + 𝑥3 2 + 𝑥4 2 Vetor unitário 𝑢 = 𝑣 𝑣 = 𝑥1 𝑥2 𝑥3 𝑥4 𝑣 = 𝑥1 𝑣 𝑥2 𝑣 𝑥3 𝑣 𝑥4 𝑣 VETORES E MATRIZES 7 Prática: Dado 2 vetores x e y de N elementos, determinar o produto escalar. Entrada x = [x1 x2 x3] e y = [y1 y2 y3] Saída O produto escalar: 𝑥 ∗ 𝑦𝑇 Processamento VETORES E MATRIZES Matriz de duas dimensões 𝑀2𝑥3 = 2 1 4 1 0 3 Indexação Portugol: M[1][2] = ? 3 Fortran: M(1)(2) = ? 1 8 P 0 1 Fortran 1 2 3 Fortran 1 2 Port. Studio 0 1 2 Linha Coluna Linha Coluna VETORES E MATRIZES. EXEMPLO. DIAG/PORTUGOL 9 Exemplo: Crie um programa que leia as 3 notas de 2 alunos. VETORES E MATRIZES. EXEMPLO: PORTUGOL/FORTRAN 10 VETORES E MATRIZES. EXEMPLO: PORTUGOL/FORTRAN 11 VETORES E MATRIZES Prática: Utilizar o exemplo anterior para encontrar o vetor média dos M alunos. 12 VETORES E MATRIZES 13 Prática: Dado duas matrizes de qualquer dimensão, A e B, verifique se os elementos de A são os mesmos de B. Entrada 𝐴 = 𝑎11 𝑎12 𝑎21 𝑎22 e 𝐵 = 𝑏11 𝑏12 𝑏21 𝑏22 Saída Uma mensagem informando se as matrizes são iguais ou diferentes. Processamento A=B, se 𝑎11 = 𝑏11 𝑒 𝑎12 = 𝑏12 𝑒 𝑎21 = 𝑏21 𝑒 𝑎22 = 𝑏22 A≠B, caso uma das comparações for falsa VETORES E MATRIZES 14 Prática: Dado duas matrizes quaisquer, A e B, realize a soma e subtração de A com B. Entrada 𝐴 = 𝑎11 𝑎12 𝑎21 𝑎22 e 𝐵 = 𝑏11 𝑏12 𝑏21 𝑏22 Saída Matriz soma e subtração Processamento Matriz soma 𝑆 = 𝐴 + 𝐵 = 𝑎11 𝑎12 𝑎21 𝑎22 + 𝑏11 𝑏12 𝑏21 𝑏22 = 𝑎11 + 𝑏11 𝑎12 + 𝑏12 𝑎21 + 𝑏21 𝑎22 + 𝑏22 VETORES E MATRIZES Inicialização Portugol Fortran inteiro i[3] = {2,3,5} real, dimension(3)::i = [2,3,5] real, dimension(3)::i = (/2,3,5/)inteiro i[] = {2,3,5} cadeia str = "Eu gosto de Fortran" character(19)::str = "Eu gosto de Fortran" character, dimension(19)::str = ['E','u',' ','g','o','s','t','o',' ','d','e',' ','F','o','r','t','r','a','n'] inteiro sqrs[3][2] = {{1, 1}, {2, 4}, {3, 9}} real, dimension(3,2)::sqrs = reshape([1,1,2,4,3,9],[3,2],[0,0],[2,1]) inteiro sqrs[ ][2] = {{1, 1}, {2, 4}, {3, 9}} 15 Função transforma um vetor em uma matriz Dimensão da matriz Direção de organização: 2-coluna/1-linha VETORES E MATRIZES Inicialização (Fortran) Pode-se inicializar todos os elementos com um valor constante real, dimension(3)::notas = 0.0 !Inicializa os elementos com 0.0 real, dimension(2,3)::notas = 1.0 !Inicializa os elementos com 1.0 Usando laço do implícito: (expr1, expr2, ..., indice = valIn, valFn, incr) – executa as expressões expr1, expr2 e etc. a cada valor de indice. real, dimension(3)::vetor = [(i,i=1,3)] ! O mesmo que vetor = [1,2,3] integer, dimension(25)::vetor2 = [((0,i=1,4),5*j, j=1,5)] ! vetor2 = [0,0,0,0,5, 0,0,0,0,10, ...] Operações aritméticas elemento por elemento notas = notas - 2 !Subtrai de 2 cada elemento do vetor Operações aritméticas vetoriais (elemento por elemento) c = a + b !O mesmo que c(1) = a(1) + b(1), c(2) = a(2) + b(2), .... 16 VETORES E MATRIZES Inicialização (Fortran) Exemplo com vetor 17 VETORES E MATRIZES Inicialização (Fortran) Exemplo com matriz 18 VETORES E MATRIZES Mudando os limites de indexação de um vetor (Fortran) REAL, DIMENSION(limInf:limSup) :: vetor REAL, DIMENSION(-1:1) :: v !O índice começa em -1 e vai até 1: -1, 0, 1 19 Exemplo: mudando o índice para [0, N - 1], onde N é o número de elementos VETORES E MATRIZES Mudando os limites de indexação de uma matriz (Fortran) REAL, DIMENSION(limInfLin:limSupLin, limInfCol:limSupCol) :: matriz real, dimension(-1:1,-2:0)::mat !Matriz 3x3, com índices de linha [-1, 1] e colunas [-2,0] 20 Exemplo: mudando o índice para [0, NX - 1], onde NX é o número de linhas ou colunas VETORES E MATRIZES Vetores e matrizes podem ser exibidas sem laço 21 / quebra a linha no ponto onde foi colocado Aplicado 2 vezes para o grupo de valores formatados (2 valores) OBS: Exibe o transposto da matriz VETORES E MATRIZES Pode-se utilizar funções intrínsecas em vetores e matrizes REAL, DIMENSION(4) :: a = [ -1., 2., -3., 4.] a = abs(a) !aplica o módulo a cada elemento É possível utilizar um subconjunto (seção) de elementos dos vetores Vetor(IndiceInical:IndiceFinal:Incremento) REAL, DIMENSION(4) :: a = [ -1., 2., -3., 4.] WRITE(*,*) a(2:3:1) 22 2.0000 -3.0000 Exibe VETORES E MATRIZES Seção de vetor Vetor(IndiceInical:IndiceFinal:Incremento) IndiceInical:IndiceFinal:Incremento indiceInical:indiceFinal !O incremento é unitário indiceInical: !O valor de indiceFinal é o do último elemento indiceInical::inc !O valor de indiceFinal é o do último elemento :indiceFinal !O valor de indiceInical é o do primeiro elemento :indiceFinal:incr !O valor de indiceInical é o do primeiro elemento ::incremento : Pode-se utilizar um vetor de índices para indexar um segundo vetor INTEGER, DIMENSION(5) :: vec = [1, 6, 4, 1, 9 ] REAL, DIMENSION(10) :: a = [1., -2., 3., -4., 5., -6., 7., -8., 9., -10.] WRITE(*,*) a(vec) !Exibe [1., −6., −4., 1., 9.] 23 VETORES E MATRIZES É possível utilizar um subconjunto (seção) de elementos para matrizes write(*,*) 𝑎 : , 1 Exibe: 1 6 11 16 21 write(*,*) 𝑎 1, : Exibe: 1 2 3 4 5 write(*,*) Exibe: 1 3 5 6 8 10 11 13 15 - 24 VETORES E MATRIZES Operações com índices podem ser usadas com variáveis character Exemplo 25 Armazena apenas 8 caracteres Operador de concatenação Saída: ABCDEFGH 123456BC EFG ABCDEFGH123456BCEFG VETORES E MATRIZES Funções intrínsecas para vetores e matrizes 26 Função Propósito ALLOCATED(vetor) Retorna .true. se a alocação foi bem sucedida; .false., caso contrário LBOUND(vetor [, dim]) Retorna todos os limites inferiores (LI) do vetor, se não foi passado dim; ou o LI da dimensão dim UBOUND(vetor [, dim]) Retorna todos os limites superiores (LS) do vetor, se não foi passado dim; ou o LS da dimensão dim SHAPE(vetor) Retorna a forma do vetor SIZE(vetor [, dim]) Retorna a extensão do vetor ao longo da dimensão dim; ou tamanho total, se dim não for passado [par] – parâmetro opcional VETORES E MATRIZES Exemplo: 27 Saída A forma da matriz e 11 4 O tamanho da matriz e: 44 Os limites inferiores da matriz sao: -5 0 Os limites superiores da matriz sao:5 3 VETORES E MATRIZES Funções intrínsecas transformacionais: Operam sobre todo o vetor/matriz 28 Função Propósito ALL(mascara) Retorna .true. se todos os valores em mascara são .true. ANY(mascara) Retorna .true. se algum elemento em mascara é .true. COUNT(mascara) Retorna o número de elementos em .true. DOT_PRODUCT(vetA, vetB) Retorna o produto escalar MATMUL(matA, matB) Retorna a multiplicação das matrizes TRANSPOSE(matriz) Retorna a transposta de uma matriz SUM(vet[, mascara]) Retorna a soma dos elementos de vet nas posições .true. PRODUCT(vet[, mascara]) Retorna o produto dos elementos de vet nas posições .true. MIN/MAXVAL(vet[, mascara]) Retorna o menor/maior elemento de vet das posições .true. MIN/MAXLOC(vet[, mascara]) Retorna a posição do menor/maior elemento ... VETORES E MATRIZES Exemplo: 29 Saída 1.4 2.1 VETORES E MATRIZES Construtor where: Usado para selecionar operações sobre elementos Exemplo: Dado 𝑎 = −1 0 2 3 , vimos que podemos fazer: logv = log(a), mas existem elementos que não podem ser calculados 30 Em vez de: DO i = 1, ndim1 DO j = 1, ndim2 IF ( a(i,j) > 0. ) THEN logv (i,j) = LOG(a(i,j)) ELSE logv(i,j) = -99999. END IF END DO END DO Podemos: WHERE ( a > 0. ) logv = LOG(a) ELSEWHERE logv = -99999. END WHERE Forma geral: WHERE (expr1) !atribuicao1 ELSEWHERE (expr2) !atribuicao2 ELSEWHERE !atribuicao3 END WHERE Forma geral: WHERE (expr) !atribuicao VETORES E MATRIZES Construtor FORALL: Executa instruções em um intervalo, dado uma condição lógica Exemplo: 31 Saída: -1.00000000 0.00000000 1.41421354 1.73205078 0.00000000 0.00000000 0.707106769 0.577350259 VETORES E MATRIZES Alocação dinâmica: Utilizado para determinar o tamanho de vetores e matrizes em tempo de execução. Quando alocada, ao termino do uso, é necessário desalocar Sintaxe !Declaração das variáveis alocáveis TIPO, ALLOCATABLE, DIMENSION(:) :: vetor TIPO, ALLOCATABLE, DIMENSION(:,:) :: matriz !Leitura de tamanho, numLin e numCol .... allocate( vetor(tamanho) ) !Alocando allocate( matriz(numLin,numCol) ) !Alocando .... deallocate(vetor) !Desalocando deallocate(matriz) !Desalocando 32 VETORES E MATRIZES Exemplo com vetor: 33 VETORES E MATRIZES Exemplo com matriz: 34 FIM Dúvidas? Sugestões? 35
Compartilhar