Vectores e Matrizes APROG () Aula 12
Conteúdo Conceito de Variáveis Indexadas Vectores Processamento de vectores 2
O que são variáveis indexadas? São variáveis múltiplas Ao contrário das variáveis simples, podem guardar diversos valores do mesmo tipo simultaneamente. Dizem-se indexadas porque a cada elemento corresponde um valor de um índice que o identifica. Para que servem? Permitem armazenar e manipular blocos de informação de tamanho arbitrário de forma expedita. 3
Tipos de variáveis indexadas Tipos de variáveis indexadas Vectores variáveis indexadas unidimensionais, em que a posição de um elemento é dada por um só índice. Matrizes variáveis indexadas bidimensionais, em que a posição de um elemento é dada por dois índices, um referente à linha e outro à coluna. 4
variável simples 12 variável indexada 12 5 35 92 102 57 23 48 índice 0 1 2 3 4 5 6 7 Cada elemento da variável indexada é identificado pelo nome da variável e pela sua posição (índice) Exemplo: numeros(3) - 4ª posição da variável indexada numeros 5
Vectores AllStars Pelé Eusébio Figo Cristiano Ronaldo Deco Zidane Platini Cole Matthaus Maldini Owen 1 2 3 4 5 6 7 8 10 11 12 Nºdo jogador (*) Uma equipa de futebol pode ser representada por um vector, em que o nome da equipa corresponde ao nome do vector a cada jogador corresponde um número que equivale ao seu índice no vector (*) é possível fazer com que os índices de um vector comecem em 1, usando Option Base 1 6
Vectores - Sintaxe Sintaxe Dim <nome>(<dimensão>) as <tipo de dados> Exemplos Const NumAlunos = 60 Dim v(50) as Single, v1(10) as Integer Dim turma(numalunos) as Integer v1(1) NumAlunos é uma constante que representa o valor 60, logo é o mesmo que escrever o literal 60. ISEP DEI, Angelo Martins 2006 7 Variáveis Indexadas
Processamento de vectores Problema: Armazenar e actualizar 100 preços Solução A: Solução B: 100 variáveis simples 1 variável indexada com 100 elementos Armazenamento Dim preço1 as single Dim preço2 as single... Dim preço100 as single Armazenamento Dim preços(100) as single Actualização (5%) Actualização 5% preço1 = preço1 * 1.05 preço2 = preço2 * 1.05... preço100 = preço100 * 1.05 For i = 1 To 100 preços(i) = preços(i) * 1.05 Next i 8
Vectores Exemplo Elabore um programa que leia as notas de uma turma e que apresente numa ListBox as notas dos alunos que estejam acima da media. Uma turma pode ter no máximo 60 alunos. Porque é preciso um vector? Para identificar as notas que se encontram acima da média, é necessário calcular primeiro a média. Seria preciso ler as notas duas vezes, se não houvesse a possibilidade de guardar as notas num vector. No enunciado não é especificado o número de alunos a ler, só que há um limite de 60. Assim, o utilizador terá de introduzir o número de alunos a processar numa TextBox. ISEP DEI, Angelo Martins 2006 9 Variáveis Indexadas
Vectores - Form txtna - TextBox para introdução do número de alunos. lblmed - Label para apresentação da média. lstqh - ListBox com os alunos acima da média. lstnotas - ListBox para apresentação das notas de toda a turma. ISEP DEI, Angelo Martins 2006 10 Variáveis Indexadas
Resolução I Option Base 1 Option Explicit Private Sub cmdsair_click() End End Sub Vector com capacidade para 60 inteiros. Private Sub cmdler_click() Dim notas(60) As Integer, soma As Long Dim x As Integer, med As Single, na As Integer lstnotas.clear lstqh.clear txtmed.text = "" Limpa os valores de corridas anteriores. na = Val(txtNA.Text) If na < 1 Or na > 60 Then MsgBox "Erro: Nº de alunos inválido!", vbcritical Else É fundamental verificar que o número de alunos é positivo e não ultrapassa a capacidade do vector. ISEP DEI, Angelo Martins 2006 11 Variáveis Indexadas
Resolução II For x = 1 To na Do notas(x) = Val(InputBox("Nota do aluno " & x)) Loop While notas(x) < 0 Or notas(x) > 20 soma = soma + notas(x) Next med = soma / na For x = 1 To na lstnotas.additem x & " - " & notas(x) If notas(x) > med Then lstqh.additem x & " - " & notas(x) End If Next txtmed.text = med End If End Sub (continuação) Leitura do valor para a posição x do vector. O valor de x vai variar entre 1 e o valor de na. Se a nota actual for superior à média, então adiciona-a à ListBox. Sendo um vector uma variável múltipla, para o processar é sempre necessário um ciclo! ISEP DEI, Angelo Martins 2006 12 Variáveis Indexadas