Estruturas de Dados Vetores
Estruturas de Dados Tópicos Introdução Vetores Matrizes Registros Registro de Conjuntos Conjuntos de Registros
Estruturas de Dados Tópicos Introdução Vetores Matrizes Registros Registro de Conjuntos Conjuntos de Registros
Introdução Variável (Revisão do conceito) Analogia: uma caixa, na qual você pode dar o nome que lhe achar conveniente, e guardar o conteúdo que desejar Possui um tipo (caractere, lógico, inteiro ou real) O valor dentro da “caixa” que pode ser alterado de acordo com a execução do algoritmo
Introdução Agora imagine como ficaria na declaração de variáveis, declarando uma a uma, as 50 variáveis para o nome, depois as variáveis para as médias de cada aluno...
Introdução O problema começa quando se precisa declarar várias variáveis para atender a um fim. PROBLEMA: Receber o nome e as 4 notas de 50 alunos de uma escola, e depois listar o nome de cada aluno junto com sua média.
Introdução Os tipos primitivos (inteiro, real, caracter e lógico) não são suficientes para representar todos os tipos de informação. Particularmente quando temos mais de uma informação relacionada. Ex: Lista dos nomes dos alunos de uma sala, endereço de alguém etc. Utilizaremos os tipos primitivos para construir outras estruturas de dados mais complexas.
Estruturas de Dados Tópicos Introdução Vetores Matrizes Registros Registro de Conjuntos Conjuntos de Registros
Vetores Em casos como esse que é útil a utilização da estrutura de dados conhecida como vetor Um vetor é uma espécie de caixa com várias divisórias para armazenar coisas (dados) É uma variável que pode armazenar vários valores
Vetores Os vetores são definidos pelo tipo de dados que eles devem armazenar e a quantidade de posições Exemplo: Vetor de 8 posições para armazenar números reais Vetor de 40 posições para armazenar caracteres Os vetores são estruturas homogêneas. Ex: um vetor de inteiros só armazena dados do tipo inteiro
Vetores Também denominados Estruturas compostas homogêneas unidimensionais Permitem a manipulação de um conjunto de informações de um mesmo tipo primitivo
Vetores Declaração Exemplo: <nome_variavel>: vetor [posInicial..posFinal] de <tipo> Exemplo: CLASSE : vetor [1..40] de real; Onde: CLASSE: Nome da variável criada 1: Limite inicial do vetor 40: Limite final do vetor real: Tipo primitivo base do vetor
Vetores Exemplo: Note que são apenas DOIS PONTOS! SEM ESPAÇO! algoritmo “exemplo_vetores” var nome_alunos: vetor [1..50] de caractere media_alunos: vetor [1..50] de real Note que são apenas DOIS PONTOS! SEM ESPAÇO!
Vetores Preenchendo e acessando um vetor As posições dos vetores são identificadas por índices O índice é a posição do valor no vetor Um vetor de 10 posições, por exemplo pode ser representado da seguinte forma: ÍNDICES
Vetores Atribuição de valor <nome_variavel> [<posicao>] <- <valor> Exemplo algoritmo “exemplo_vetores” var nome_alunos: vetor [1..50] de caractere inicio nome_alunos[1]<-“Pedro” nome_alunos[5]<-“Ana” nome_alunos[3]<-“Joana” nome_alunos[50]<-“João” Fimalgoritmo
Vetores Atribuição de valor lido do teclado leia(<nome_variavel> [<posicao>]) Exemplo algoritmo “exemplo_vetores” var media_alunos: vetor [1..50] de real inicio leia(media_alunos[1]) leia(media_alunos[4]) leia(media_alunos[3]) ... leia(media_alunos[50]) Fimalgoritmo
Vetores algoritmo “exemplo_vetores” var nome_alunos: vetor [1..50] de caractere media_alunos: vetor [1..50] de real inicio nome_alunos[1]<-“Pedro” leia(nome_alunos[2]) //Digitou Maria nome_alunos[3]<-“Joana” media_alunos[1] <- 8.5 Fimalgoritmo nome_alunos Pedro 1 2 3 ... 50 Maria Joana media_alunos 1 2 3 ... 50 8.5
Vetores Manipulação: A : inteiro; CLASSE [ 7 ] ¬ 6,5; leia (A); // supondo que foi informado 6 CLASSE [ A ] ¬ 9,8; CLASSE [ A-1 ] ¬ 9,1; leia ( CLASSE [ A+3 ] ); // supondo que foi informado 4,7 CLASSE 7,8 5,3 9,1 9,8 6,5 4,7 1 2 3 4 5 6 7 8 9 38 39 40
Vetores Preenchendo um vetor algoritmo “exemplo_vetores” var numeros: vetor [1..5] de inteiro inicio escreva(“Digite um valor para a posição 1 do vetor: ”) leia(numeros[1]) escreva(“Digite um valor para a posição 2 do vetor: ”) leia(numeros[2]) escreva(“Digite um valor para a posição 3 do vetor: ”) leia(numeros[3]) escreva(“Digite um valor para a posição 4 do vetor: ”) leia(numeros[4]) escreva(“Digite um valor para a posição 5 do vetor: ”) leia(numeros[5]) Fimalgoritmo
Vetores Preenchendo um vetor Exemplo: Para facilitar, podemos utilizar um laço de repetição! Exemplo: algoritmo “exemplo_vetores” var numeros: vetor [1..5] de inteiro i: inteiro inicio para i de 1 ate 5 faca escreval(“Digite um valor para a posição ”, i , “do vetor:”) leia(numeros[i]) fimpara Fimalgoritmo
Vetores Exibindo o conteúdo de um vetor: algoritmo “exemplo_vetores” var numeros: vetor [1..5] de inteiro i: inteiro inicio para i de 1 ate 5 faca escreval(“Digite um valor para a posição ”, i , “do vetor:”) leia(numeros[i]) fimpara escreval(“O valor que está na posição 1 é: ”, numeros[1]) escreval(“O valor que está na posição 2 é: ”, numeros[2]) escreval(“O valor que está na posição 3 é: ”, numeros[3]) escreval(“O valor que está na posição 4 é: ”, numeros[4]) escreval(“O valor que está na posição 5 é: ”, numeros[5]) Fimalgoritmo
Vetores Exibindo o conteúdo de um vetor Exemplo: Ou podemos utilizar um laço de repetição para facilitar a exibição dos valores de um vetor Exemplo: para i de 1 ate 5 faca escreval(“O valor que está na posição ”, i ,“ é: ”, numeros[i]) fimpara
Exemplo 1 Fazer um algoritmo que leia as notas de 10 alunos de uma classe e ao final informe quantos alunos estão com a nota acima da média.
Exemplo 1: Solução usando variáveis simples Algoritmo 4.1 – Notas acima da média var NotaAcima : inteiro; A, B, C, D, E, F, G, H, I, J, Media : real; inicio NotaAcima ¬ 0; leia (A,B,C,D,E,F,G,H,I,J); Media <- (A + B + C + D + E + F + G + H + I + J)/10; se (A > Media) entao NotaAcima ¬ NotaAcima + 1; fimse; se (B > Media) então NotaAcima ¬ NotaAcima + 1; . . . se (J > Media) escreva (NotaAcima); fimalgoritmo
Exemplo 1: Solução usando vetor Algoritmo 4.2 – Notas acima da média var Classe : vetor [1..10] de real NotaAcima, X : inteiro Soma, Media : real inicio Soma <- 0; NotaAcima <- 0; para X de 1 ate 10 passo 1 faca leia ( Classe[X] ) Soma <- Soma + Classe[X] fimpara Media <- Soma / 10 se ( Classe[X] > Media ) entao NotaAcima <- NotaAcima + 1; fimse escreva (NotaAcima) fimalgoritmo