Operações com Arrays

Operações relacionais e lógicas Operações Aritméticas variáveis Tipos de dados Estruturas Aninhadas algoritmos

Oi gente!! No último artigo eu introduzi o conceito básico de ARRAYS, mostrando como popular um Array de uma dimensão, e também como imprimir o seu conteúdo. No artigo de hoje vamos ver algumas outras coisas que podemos fazer com esse recurso.

 

 

Inicializando todas as posições do array

 

Uma boa prática, sempre que trabalhar com Array, é inicializa-lo, o que significa inserir um valor nulo em todas as posições do Array. O código correspondente, para um vetor de números, é o seguinte:

 

algoritmo "vetores"

var
   indice:inteiro
   vet: vetor [1..10] de real

inicio

  para indice de 1 ate 10 faca
    vet[indice] <- 0
  fimpara

  escreval("")

  para indice de 1 ate 10 faca
    escreval(" | indice: | ", indice, " | elemento: | ", vet[indice])
  fimpara
 
fimalgoritmo

 

 

Acessando, modificando e imprimindo uma posição específica do array

 

Se você deseja acessar uma posição específica do Array, deve indicar dentro do colchetes a posição desejada, exemplo: vet[5] é a posição 5 do vetor. Você pode imprimir somente o conteúdo dessa posição, assim como pode substituir o valor que está armazenado nela. Vamos ver o código:

 

algoritmo "vetores"

var
   indice:inteiro
   vet: vetor [1..10] de real

inicio

  para indice de 1 ate 10 faca
    escreval(" Digite um número real para a posição ", indice , " : ")
    leia(vet[indice])
  fimpara

  escreval("")

  escreval(" Elemento Original da Posição 5: ", vet[5])
 
  vet[5] <- 567
 
  escreval(" Elemento Modificado da Posição 5: ", vet[5])
 
fimalgoritmo

 

A linha 16 imprime na tela o valor da posição 5 do vetor. A linha 18 altera o valor da posição 5 do vetor para 567. Por fim, a linha 20 imprime, novamente, na tela, o novo valor da posição 5.

 

 

Encontrando o maior e o menor elemento do array

 

Podemos encontrar o maior e o menor elemento de um vetor no momento de inserção dos valores no vetor. Se no momento da inserção, o índice for igual a 1, significa que estamos na primeira posição do vetor, assim, fazemos as variáveis menor, e maior, receberem o valor do primeiro elemento do vetor. A partir da segunda iteração, os valores serão comparados. Se o índice atual do vetor for maior que o valor armazenado na variável MAIOR, então, a variável MAIOR receberá o valor de vet[indice]. Mas, se o índice atual do vetor for menor que o valor armazenado na variável MENOR, então a variável MENOR receberá o valor de vet[indice]. Essa comparação será feita em todas as iterações de população do vetor, assim, populamos o vetor ao mesmo tempo em que já verificamos qual é o elemento de maior e menor valor inserido.

 

algoritmo "vetores"

var
   indice:inteiro
   vet: vetor [1..10] de real
   menor, maior : real

inicio


  para indice de 1 ate 10 faca
  
    escreval(" Digite um número real para a posição ", indice , " : ")
    leia(vet[indice])
    
    se(indice = 1)entao
      maior <- vet[indice]
      menor <- vet[indice]
    fimse
    
    se(vet[indice] > maior)entao
      maior <- vet[indice]
    fimse
    
    se(vet[indice] < menor)entao
      menor <- vet[indice]
    fimse
    
  fimpara

  escreval("")

  escreval(" O menor elemento do vetor é: ", menor)
  escreval(" O maior elemento do vetor é: ", maior)
  
fimalgoritmo

 

As linhas de 16 a 19 são responsáveis para inicializar as variáveis MAIOR e MENOR com o valor da primeira posição do Vetor. As linhas de 21 a 23 seta a variável MAIOR com o valor da posição atual do vetor que é maior que o valor armazenado naquele instante em MAIOR. As linhas de 25 a 26 seta a variável MENOR com o valor da posição atual do vetor que é menor que o valor armazenado naquele instante em MENOR. Observe que os valores das variáveis MAIOR e MENOR são substituídos a cada iteração do FOR.

 

 

Realizando Operações Aritméticas com os elementos do Array (de números)

 

Pode ser que em algum momento você precise somar todos os valores do array, ou então, encontrar a média de todos os elementos. Bom, primeiro vamos popular o array usando o FOR. Segundo, vamos fazer a soma em outro FOR. Terceiro, vamos imprimir o array utilizado outro FOR, e então imprimir os resultados de soma e média. Como vocês perceberam, vamos precisar de três FOR para realizar três "operações de arrays" diferentes: popular, somar, imprimir.

 

algoritmo "vetores"

var
   indice:inteiro
   vet: vetor [1..10] de real
   soma, media : real

inicio


  para indice de 1 ate 10 faca
    escreval(" Digite um número real para a posição ", indice , " : ")
    leia(vet[indice])
  fimpara
 
   para indice de 1 ate 10 faca
    escreval(" | Índice: ", indice , " | Vetor [ índice ] : ", vet[indice])
  fimpara

  para indice de 1 ate 10 faca
    soma <- vet[indice] + soma
  fimpara
 
  media <- soma / 10

  escreval("")

  escreval(" A soma de todos os elementos do vetor é: ", soma)
  escreval(" A média aritmética de todos os elementos do vetor é: ", media)
 
fimalgoritmo

 

As linhas de 20 a 22 realizam a soma de todos os elementos do vetor. A linha 24 encontra a média aritmética.

 

 

Busca Sequencial

 

Podemos buscar um valor desejado no Array. O código apresentado abaixo mostra como encontrar um elemento a partir de um valor digitado pelo usuário. Precisaremos de uma variável auxiliar, que chamei de a, que será setada com 0 para quando não encontrar o valor que se está procurando, ou 1, para quando o valor for encontrado. Usaremos um SE dentro do FOR para setar a variável a e encontrar o valor que se está procurando, e fora do FOR precisaremos de outro SE, para comparar o valor da variável a e verificar se o valor não foi encontrado.

 

var
   indice, a:inteiro
   vet: vetor [1..10] de real
   x, soma, media : real

inicio

  a <- 0
 
  para indice de 1 ate 10 faca
    escreval(" Digite um número real para a posição ", indice , " : ")
    leia(vet[indice])
  fimpara
 
   para indice de 1 ate 10 faca
    escreval(" | Índice: ", indice , " | Vetor [ índice ] : ", vet[indice])
  fimpara

  escreval(" Qual valor deseja procurar? Digite: ")
  leia(x)
 
  para indice de 1 ate 10 faca
      se(vet[indice] = x)entao
         escreval(" Valor encontrado na posição: ", indice)
         a <- 1
      fimse
  fimpara
 
  se ( a = 0 ) entao
    escreval(" Valor NÃO encontrado ")
  fimse

fimalgoritmo

 

As linhas de 22 a 27 encontram o valor do vetor, imprimindo-o na tela e setando a variável a com o valor 1. Lembre-se que 1 indica que o valor foi encontrado. As linhas de 29 a 31 verifica se a é igual a 0, se for, significa que o valor não foi encontrado, imprimindo na tela que não existe aquele valor no vetor.

 

 

Busca Binária

 

A Busca Binária é um pouco diferente da Busca Sequencial. Na Busca Sequencial, percorre-se todo o vetor até chegar na posição que contém o elemento que está sendo pesquisado. Na Busca Binária, o vetor é dividido em duas partes, e é necessário que o mesmo esteja ordenado de forma crescente.

 

Vamos considerar aqui, que o vetor já esteja ordenado. Algoritmos de ordenação entram em um outro tópico que provavelmente não abordarei nesta série. Estando o vetor ordenado, podemos dividi-lo em duas partes, dai a busca pode ser limitada a apenas uma parte do vetor, o que levará menos tempo para encontrar o elemento procurado.

 

O elemento buscado é comparado com o elemento do meio do vetor. Se o elemento do meio do vetor for o elemento buscado, então a busca termina aqui. Se o elemento do meio vier antes do elemento buscado, então a busca continua na metade posterior do vetor. Por fim, se o elemento do meio vier depois do elemento buscado, a busca continua na metade anterior do vetor. Mostrarei um exemplo de Busca Binária usando a Linguagem de Programação Java:

 

package BuscaBinaria;
import java.util.Scanner;

public class BuscaBinaria {

  public static void main(String[] args) {
    int x[] = new int[10];
    int np, i, inicio, fim, meio, achou;
    Scanner s = new Scanner(System.in);
  
    for (i = 0; i < 10; i++) {
      System.out.println("Digite o " + (i + 1) + " número:");
      x[i] = s.nextInt();
    }

    System.out.println("Digite o número a ser buscado no vetor: ");
    np = s.nextInt();
    achou = 0;
    fim = x.length - 1;;
    inicio = 0;

    while ((inicio <= fim) && (achou == 0)) {
      meio = (inicio + fim) / 2;
      if (x[meio] == np) {
        achou = 1;
      } else {
        if (np < x[meio]) {
          fim = meio - 1;
        } else {
          inicio = meio + 1;
        }
        meio = (inicio + fim) / 2;
      }
    }

    if (achou == 0) {
      System.out.println(" Número não encontrado ");
    } else {
      System.out.println(" Número encontrado ");
    }
  }
}

 

As linhas de 22 a 34 é que realizam a busca binária de fato. A cada iteração dentro do While, o MEIO é encontrado através de uma conta matemática simples: o início do vetor mais o fim do vetor dividido por 2. Início é igual a 0 pois em Java vetores começam com a posição zero. Fim é igual a x.length-1 que na verdade é o valor do último elemento do vetor, neste caso, é o número 9, já que o vetor é declarado com 10 posições, mas Java conta de 0 a 9. Outras linguagens podem tratar isso de forma diferente.

 

Depois de encontrar o MEIO do vetor, é feita a comparação: o elemento buscado está no meio? Se sim, uma variável ACHOU é setada com 1, indicando que o elemento foi encontrado. Se não, então, existem ainda duas possibilidades: ou o elemento está à direita do vetor, ou à esquerda, por isso fim = meio - 1 decrementa o vetor, e inicio = meio + 1 incrementa a outra parte do vetor, para encontrar o elemento que se está buscando. Quando o elemento for encontrado, o While pára e então segue para o IF que verificará se ACHOU = 1 ou 0, sendo 1 encontrado e 0 não encontrado.

 

 

Copiando os valores de um array para outro

 

Copiar um Array para outro é bem fácil e simples, o código abaixo mostra como fazer isso. As linhas de 15 a 17 fazem a cópia do vetor 1 para o vetor 2.

 

algoritmo "vetores"

var
   indice:inteiro
   vet1: vetor [1..10] de real
   vet2: vetor [1..10] de real

inicio

  para indice de 1 ate 10 faca
    escreval(" Digite um número real para a posição ", indice , " : ")
    leia(vet1[indice])
  fimpara
 
   para indice de 1 ate 10 faca
    vet2[indice] <- vet1[indice]
  fimpara

  para indice de 1 ate 10 faca
    escreval(" | Índice: ", indice, " | Vetor 1: ", vet1[indice])
    escreval(" | Índice: ", indice, " | Vetor 2: ", vet2[indice])
  fimpara

fimalgoritmo

 

 

Exercícios

 

1. Fazer o teste de mesa para cada um dos exemplos deste artigo.

 

2. Faça um programa que preencha um vetor com seis elementos (tipo inteiro). Calcule e mostre: a) todos os números pares, b) a quantidade de números pares; c) todos os números ímpares; d) a quantidade de números ímpares.

 

3. Faça um programa que preencha três vetores com dez posições cada um. O primeiro vetor, com os nomes de dez produtos. O segundo vetor, com os códigos dos dez produtos. O terceiro vetor, com os preços dos produtos. Mostre um relatório apenas com o nome, o código, o preço e o novo preço dos produtos que sofrerão aumento. Sabe-se que os produtos que sofrerão aumento são aqueles que possuem código par ou preço superior a R$1.000,00. Sabe-se ainda que, para os produtos que satisfazem as duas condições anteriores, código e preço, o aumento será de 20%. Para aqueles que satisfazem apenas a condições de código, o aumento será de 15%. E para aqueles que satisfazem apenas a condição de preço, o aumento será de 10%.

 

4. Faça um programa que receba o total das vendas de cada vendedor de uma loja e armazene-as em um vetor. Receba também o percentual de comissão a que cada vendedor tem direito e armazene-os em outro vetor. Receba os nomes desses vendedores e armazene-os em um terceiro vetor. Existem apenas dez vendedores na loja. Calcule e mostre: a) um relatório com os nomes dos vendedores e os valores a receber referentes à comissão; b) O total das vendas de todos os vendedores; c) O maior valor a receber e o nome de quem o receberá; d) O menor valor a receber e o nome de quem o receberá. 

Outros artigos da série

<< Introdução a ArrayIntrodução a Matriz >>
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Elaine Cecília Gatto
Bacharel em Engenharia de Computação. Mestre em Ciência da Computação. Doutoranda em Ciência da Computação. Co-fundarora e Líder das #GarotasCPBr. Pesquisadora Convidada no Grupo de Pesquisa: "Artes em Tecnologias Emergentes" do Programa de Pós Graduação em Design na UNESP Campus Bauru. Cantora, Docente no Magistério Superior, Geek, Nerd, Otaku e Gamer. Apaixonada por Michael Jackson, Macross, Rocky Balboa, Séries, Filmes, Cervejas e Vinhos. Mais informações sobre mim você encontra em: http://lattes.cnpq.br/8559022477811603.

Deixe um comentário

avatar
 
  Notificações  
Notificar