Siga-nos

Inscreva-se

Siga-nos

Inscreva-se

Arrays: arranjos de dados

Aprenda a manipular grandes conjuntos de dados. Com os arrays você pode manipular várias variáveis como se fossem uma única.

Antes de começar a aprender sobre arrays, é fundamental que você já saiba o que é uma variável e uma estrutura de repetição for.

Para aprender sobre variáveis, leia este artigo onde te explicamos com detalhes sobre o assunto.

Para aprender sobre estruturas de repetição forleia este artigo onde te explicamos com detalhes sobre o assunto.

Mas vamos ao que interessa!

O que é um array?

Da maneira mais direta possível, um array (também conhecido como arranjo de dados) pode ser definido como um recurso de programação que te permite manipular muitas variáveis de maneira simples e intuitiva. Mas antes de entender como isso é possível, vamos observar alguns exemplos práticos dos problemas que podem ser resolvidos pelo uso de um array.

O problema de usar variáveis

Imagine que queremos criar um programa para solicitar do usuário um único valor numérico e exibi-lo na tela. É uma tarefa muito simples! O Algoritmo abaixo faz exatamente isso:

1.int valor;

2.println("Digite um valor");

3.valor = input();

4.println("Valor digitado = "+valor);

Veja na linha 1 (código acima) que foi criada uma única variável para armazenar esse valor, que foi solicitado do usuário (linha 3 do código acima) e impresso na tela (linha 4 do código acima).

Agora imagine que, ao invés de um único valor numérico, precisamos solicitar do usuário 5 valores numéricos. Nesse caso, precisamos criar mais 4 variáveis, solicitar o valor do usuário mais 4 vezes e escrever mais 4 comandos de impressão. Veja abaixo como ficaria esse novo código:

1.int valor1;

2.int valor2;

3.int valor3;

4.int valor4;

5.int valor5;

6.println("Digite o valor 1");

7.valor1 = input();

8.println("Digite o valor 2");

9.valor2 = input();

10.println("Digite o valor 3");

11.valor3 = input();

12.println("Digite o valor 4");

13.valor4 = input();

14.println("Digite o valor 5");

15.valor5 = input();

16.println("Valor 1 digitado = "+valor1);

17.println("Valor 2 digitado = "+valor2);

18.println("Valor 3 digitado = "+valor3);

19.println("Valor 4 digitado = "+valor4);

20.println("Valor 5 digitado = "+valor5);

Como você pode perceber o código cresceu bastante! Para cada nova informação que o programa precisar manipular, precisamos criar uma nova variável. Imagine agora se precisássemos solicitar 1000 valores ao invés de 5. Seria um desastre! O código ficaria enorme!

Para começar a resolver o problema de ter que escrever muitas linhas de código para lidar com muitas variáveis, recorremos ao uso dos arrays.

Como criar um array?

A maneira padrão de criar um array varia a depender da linguagem de programação. Veja abaixo uma forma muito utilizada para criar um array. O código mostra a criação de um único array denominado “valores” para armazenar 5 variáveis do tipo int:

1.int[ ] valores = new int[5];

Veja (no código acima) o detalhe marcante de um array: a presença dos colchetes [” “]” (conhecidos como “operador subscrito”). São eles que diferenciam a criação de um array e de uma variável. Observe que “int valor” é uma variável e “int[ ] valores” é um array.

Vamos observar mais detalhes.

A criação de um array se divide em duas etapas: declaração e inicialização. Observe a ilustração abaixo.

O trecho “int[ ] valores” representa a declaração do array do tipo int. O trecho “new int[5]” representa a inicialização do array. Na declaração usamos os colchetes [” “]” vazios. Na inicialização colocamos o valor da capacidade dentro dos colchetes.

Poderíamos ter criado arrays para armazenar outros Tipos Primitivos de variáveis no lugar do tipo int. Por exemplo:

1.char[ ] letras = new char[10];

2.double[ ] salarios = new double[35];

3.boolean[ ] validacoes = new boolean[12];

Também poderíamos ter criado arrays para armazenar Tipos Abstratos de Dados, ao invés de Tipos Primitivos:

1.String[ ] nomes = new String[8];

2.Funcionario[ ] listaFuncionarios = new Funcionario[30];

3.Pessoa[ ] moradores = new Pessoa[100];

É importante observar que existem diferenças impactantes na forma de criar um array a depender da linguagem de programação que seja utilizada. Nas linguagens C e C++, por exemplo, a criação é bem mais simples. Na linguagem Python, não existe o conceito de arrays; usa-se bibliotecas, tal como a NumPy, para emular o comportamento de um array.

Veja abaixo o código para a criação de um array em várias linguagens de programação diferentes:

1.int[ ] valores = new int[5];

2.// ou

3.int valores[ ] = new int[5];

1.// não há necessidade de usar a palavra new

2.int valores[5];

1.// não há necessidade de usar a palavra new

2.int valores[5];

1.int[ ] valores = new int[5];

1.# Python não possui suporte para arrays

2.# Recomenda-se usar a biblioteca NumPy

Índices de um array

As posições de um array (conhecidas como índices) são utilizadas como mecanismo de acesso aos seus elementos. Vamos retomar o exemplo do nosso array de capacidade 5, ou seja, com 5 índices.

1.int[ ] valores = new int[5];

Os índices de um array são numerados a partir do valor 0 (zero) até o valor de sua capacidade menos uma unidade (capacidade-1). Por exemplo: o array de capacidade 5 (criado no código acima) possui os índices de 0 a 4, conforme a ilustração abaixo:

Da mesma forma, um array de capacidade 10 possui os índices de 0 a 9:

Os índices representam as posições de cada uma das variáveis de um array.

Exercício 1

Mostre que você entendeu o conceito de índices de um array e responda o exercício abaixo:

Atribuição de valores a um array

Para compreender melhor o significado e o uso dos índices, vamos comparar a atribuição de valores a uma variável com a atribuição de valores a um array:

Atribuição de um valor a uma variável

1.int valor;

2.valor = 50;

Observe na linha 2 do código acima como o valor 50 é atribuído à variável “valor” sem nenhum problema! É como se o valor 50 fosse jogado dentro da variável.

Será que o mesmo poderia ser feito a um array?

Atribuição de um valor a um array

1.int[ ] valores = new int[5];

2.valores = 50; // isso é um erro!

Observe na linha 2 do código acima como o valor 50 é atribuído ao array valores“! Isso é um grande erro! O fato de o array valores” ser uma coleção de 5 variáveis impede que o valor 50 seja diretamente atribuído a ele sem antes especificar o índice da posição de inserção.

Para especificar o índice da posição de inserção em um array também utilizamos os colchetes [” “]” (o “operador subscrito”). Veja no código abaixo um exemplo da criação de um array de capacidade 5, a atribuição de alguns valores e a impressão desses valores na tela:

1.int[ ] valores = new int[5];

2.valores[0] = 13;

3.valores[1] = 53;

4.valores[2] = 9;

5.valores[3] = 16;

6.valores[4] = 25;

7.println(valores[0]);

8.println(valores[1]);

9.println(valores[2]);

10.println(valores[3]);

11.println(valores[4]);

Observe nas linhas de 2 a 6 (código acima) como os colchetes são utilizados para especificar a posição de atribuição dos valores no array. O mesmo é feito nas linhas de 7 a 11 (código acima), onde os colchetes são utilizados para ler os valores do array.

Veja na animação abaixo a simulação da atribuição de valores a um array pelos seus índices:

Veja abaixo os exemplos completos do código acima em várias linguagens de programação diferentes:

1.import java.util.Scanner;

2.class Main {

3.     public static void main(String[] args) {

4.          int[ ] valores = new int[5];

5.          valores[0] = 13;

6.          valores[1] = 53;

7.          valores[2] = 9;

8.          valores[3] = 16;

9.          valores[4] = 25;

10.          System.out.println(valores[0]);

11.          System.out.println(valores[1]);

12.          System.out.println(valores[2]);

13.          System.out.println(valores[3]);

14.          System.out.println(valores[4]);

15.     }

16.}

1.#include <stdio.h>

2.int main(void) {

3.     int valores[5];

4.     valores[0] = 13;

5.     valores[1] = 53;

6.     valores[2] = 9;

7.     valores[3] = 16;

8.     valores[4] = 25;

9.     printf("%d\n",valores[0]);

10.     printf("%d\n",valores[1]);

11.     printf("%d\n",valores[2]);

12.     printf("%d\n",valores[3]);

13.     printf("%d\n",valores[4]);

14.}

1.#include <iostream>

2.int main() {

3.     int valores[5];

4.     valores[0] = 13;

5.     valores[1] = 53;

6.     valores[2] = 9;

7.     valores[3] = 16;

8.     valores[4] = 25;

9.     std::cout << valores[0] << std::endl;

10.     std::cout << valores[1] << std::endl;

11.     std::cout << valores[2] << std::endl;

12.     std::cout << valores[3] << std::endl;

13.     std::cout << valores[4] << std::endl;

14.}

1.using System;

2.class MainClass {

3.     public static void Main (string[] args) {

4.          int[ ] valores = new int[5];

5.          valores[0] = 13;

6.          valores[1] = 53;

7.          valores[2] = 9;

8.          valores[3] = 16;

9.          valores[4] = 25;

10.          Console.WriteLine(valores[0]);

11.          Console.WriteLine(valores[1]);

12.          Console.WriteLine(valores[2]);

13.          Console.WriteLine(valores[3]);

14.          Console.WriteLine(valores[4]);

15.     }

16.}

1.# Python não possui suporte para arrays 

2.# Este exemplo usa a biblioteca NumPy 

3.import numpy

4.valores = numpy.array([13, 53, 9, 16, 25])

5.print(valores[0])

6.print(valores[1])

7.print(valores[2])

8.print(valores[3])

9.print(valores[4])

Limites de um array

É de responsabilidade única do programador gerenciar os limites dos índices de um array. Imagine o que aconteceria se tentássemos acessar o índice 6 de um array que possui capacidade 5? O código abaixo ilustra essa situação:

1.int[ ] valores = new int[5];

2.valores[6] = 37;

O problema é que, na maioria das linguagens de programação, esse algoritmo seria compilado e executado normalmente. O erro aconteceria durante a execução, quando o algoritmo tentasse atribuir o valor 37 ao índice 6 do array (linha 2 do código acima). Esse tipo de erro é conhecido como “indexação fora dos limites“.

É muito comum programadores iniciantes cometerem esses erros de “indexação fora dos limites” durante o uso dos arrays. Por isso, fique atento!

Exercício 2

Com base no código abaixo, arraste os valores para os índices corretos do array.

Automatização dos arrays

Vamos retomar o problema inicial do artigo, que cria um programa para solicitar do usuário 5 valores numéricos e os exibe na tela. Mas agora vamos usar um array no lugar de 5 variáveis. O código abaixo mostra esse programa:

1.int[ ] valores = new int[5];

2.println("Digite o valor 1");

3.valores[0] = input();

4.println("Digite o valor 2");

5.valores[1] = input();

6.println("Digite o valor 3");

7.valores[2] = input();

8.println("Digite o valor 4");

9.valores[3] = input();

10.println("Digite o valor 5");

11.valores[4] = input();

12.println("Valor 1 digitado = "+valores[0]);

13.println("Valor 2 digitado = "+valores[1]);

14.println("Valor 3 digitado = "+valores[2]);

15.println("Valor 4 digitado = "+valores[3]);

16.println("Valor 5 digitado = "+valores[4]);

Observe que a única otimização conseguida nesse código foi a criação do array (linha 1 do código acima). Ao invés de criar 5 variáveis, criamos apenas um único arranjo de dados.

Perceba que as solicitações dos valores por parte do usuário (linhas 2 a 11 do código acima) e as impressões na tela (linhas 12 a 16 do código acima) ainda continuam com código repetido.

Isso não é bom! Se precisarmos aumentar o número de valores solicitados para 1000, recairemos no mesmo problema de código fonte gigantesco!

Para resolver esse problema utilizamos as estruturas de repetição. O uso dos arrays está intimamente ligado ao uso das estruturas de repetição. Sem elas não é possível obter as vantagens de automatização e economia de código que os arrays podem proporcionar.

Mas vamos entender isso com mais exemplos. Observe a estrutura de repetição for abaixo:

1.for(int i=0; i < 5; i++){

2.     println(i);

3.}

Se você conhece o comando for, sabe que a variável de controle “i” vai assumir, durante as repetições, todos os valores no intervalo de 0 a 4.

Agora observe na ilustração abaixo como os índices de um array de capacidade 5 coincidem exatamente com os valores no intervalo de 0 a 4.

Mera coincidência? Não! Automatização!

É justamente a variável de controle “i” do comando for quem vai proporcionar a automatização do array. Veja o código abaixo:

1.for(int i=0; i < 5; i++){

2.     println(valores[i]);

3.}

Perceba que a variável de controle “i” (linha 2 do código acima) assume dentro dos colchetes [” “]” do array cada um dos índices de 0 a 4 durante as repetições, imprimindo, com uma única linha de código, todas as posições do array.

Clique na animação abaixo e observe a simulação de como isso acontece:

Desta forma, podemos modificar o código do problema inicial do artigo e otimizá-lo com a estrutura de repetição for. Veja abaixo como fica esse código para solicitar do usuário 5 valores numéricos e exibi-los na tela:

1.int[ ] valores = new int[5];

2.for(int i=0; i < 5; i++){ // solicita os 5 valores

3.     println("Digite o valor "+(i+1));

4.     valores[i] = input();

5.}

6.for(int i=0; i < 5; i++){ // exibe os 5 valores 

7.     println(valores[i]);

8.}

Agora, independente da quantidade de valores solicitados, não existe a necessidade de adicionar mais nenhuma linha de código. Precisamos apenas trocar os valores 5 (no código) pela nova quantidade desejada.

Veja abaixo esse mesmo código completo em várias linguagens de programação diferentes:

1.import java.util.Scanner;

2.class Main {

3.     public static void main(String[] args) {

4.          Scanner sc = new Scanner(System.in);

5.          int[] valores = new int[5];

6.          for(int i=0; i < 5; i++){

7.               System.out.println("Digite o valor "+(i+1));

8.               valores[i] = sc.nextInt();

9.          }

10.          for(int i=0; i < 5; i++){

11.               System.out.println(valores[i]);

12.          }

13.     }

14.}

1.#include <stdio.h>

2.int main(void) {

3.     int valores[5];

4.     for(int i=0; i < 5; i++){

5.          printf("Digite o valor %d<\n",(i+1));

6.          scanf("%d",&valores[i]);

7.     }

8.     for(int i=0; i < 5; i++){

9.          printf("%d\n",valores[i]);

10.     }

11.}

1.#include <iostream>

2.int main() {

3.     int valores[5];

4.     for(int i=0; i < 5; i++){

5.          std::cout << "Digite o valor " << (i+1) <<"\n";

6.          std::cin >> valores[i];

7.     }

8.     for(int i=0; i < 5; i++){

9.          std::cout << valores[i] << "\n";

10.     }

11.}

1.using System;

2.class MainClass {

3.     public static void Main (string[] args) {

4.          int[] valores = new int[5];

5.          for(int i=0; i < 5; i++){

6.               Console.WriteLine("Digite o valor "+(i+1));

7.               valores[i] = Convert.ToInt32(Console.ReadLine());

8.          }

9.          for(int i=0; i < 5; i++){

10.               Console.WriteLine(valores[i]);

11.          }

12.     }

13.}

1.# Python não possui suporte para arrays 

2.# Este exemplo usa a biblioteca NumPy 

3.import numpy

4.valores = numpy.array([])

5.for i in range(5):

6.     valor=int(input("Digite o valor "+str(i+1)+"\n"))

7.     valores = numpy.append(valores, valor)

8.for i in range(5):

9.     print(valores[i])

Exercício 3

Mostre que você entendeu o conceito de automatização de um array e responda o exercício abaixo:

Com base no código abaixo, identifique os valores gerados e arraste-os para os índices corretos do array.

Práticas

Confira abaixo as práticas que preparamos para te ajudar a aprofundar os seus conhecimentos nesse assunto!

Escolha a sua linguagem de programação e aprofunde-se.

Termine a sua saga de aprendizado na programação básica. Leia o nosso artigo sobre funções. O último assunto para você aprender nessa série de programação básica.

Este artigo foi útil para você?

Então nos ajude a crescer e compartilhe-o com outras pessoas que se interessam por esse assunto!

WhatsApp
Facebook
Twitter
LinkedIn
Email

Outros artigos

Siga-nos

Inscreva-se

Este site usa cookies para garantir que você obtenha a melhor experiência.