Aula 07 - Arrays
Conceitos-Chave:
- array, como um grupo de variáveis com o mesmo identificador
- strings, conjunto de caracteres, normalmente colocados num array
- arrays bidimensionais, normalmente utilizados em mapas
Arrays
Os arrays são um "grupo de lugares na memória, que têm o mesmo nome e guardam o mesmo tipo de dados".
Para explicar melhor, um exemplo:
Imaginem que estamos a fazer um programa que calcule a média de temperatura semanal, considerando, por exemplo, estes valores:
| Dia | Temperatura (ºC) |
|---|---|
| Segunda | 15 |
| Terça | 19 |
| Quarta | 19 |
| Quinta | 17 |
| Sexta | 16 |
| Sábado | 20 |
| Domingo | 14 |
Até agora a maneira mais fácil seria criar 7 inteiros...
Mas não é. Sete inteiros não é muito trabalho, mas imaginem que seria para 30 dias. Que nomes vão arranjar?
int dia1, int dia2, int dia3....
Os arrays simplificam muito. São declarados assim:
int dias[7];
Temos aqui um array de 7 inteiros, que vão desde o número 0 até ao 6. Fiquem com um exemplo prático:
#include <iostream>
using namespace std;
int dias[7]; //cria um array de 7 caracteres ( de dias[0] a dias[6] )
int main ()
{
for(int n = 0; n < 7; n++)
{
cout << "Introduza o valor do " << n + 1 << "o dia: " << endl;
//n + 1 porque em C++ o array começa no 0 em vez de 1
cin >> dias[n];
}
int media = ( dias[0] + dias[1] + dias[2] + dias[3] + dias[4] + dias[5] + dias[6] ) / 7;
cout << "A media semanal das temperaturas e de " << media << endl;
cin.get();
cin.get();
return 0;
}
Os arrays começam no 0 ( dias[0] ) foi por isso que fiz
int n = 0 em vez de int n = 1.
No cout << "Introduza o valor do " << n + 1 << "o dia: " << endl; o
n + 1 serve para o numero do dia visualizado ser apresentado
correctamente...
Abaixo iremos ver o uso do operador for
Preenchendo arrays utilizando o operador for
Uma forma simples de preencher arrays é utilizando o operador for. No exemplo seguinte, veremos como preencher um array com um número escolhido pelo utilizador:
#include <iostream>
using namespace std;
int main()
{
int MAX_ELEMENTS = 10; //o numero máximo de elementos do array
int arr[MAX_ELEMENTS]; //declara um array com um número predefinido de elementos
int valor; //valor de cada elemento do array (é igual...)
cout << "Insira o valor a ser atribuido a cada elemento do array: ";
cin >> valor;
for (int i = 0; i < MAX_ELEMENTS; i++)
{
arr[i] = valor; //vai percorrer o array de 0 a MAX_ELEMENTS
}
cin.get();
cin.get();
return 0;
}
No exemplo acima, o programa vai percorrer todos os elementos do array, começando no 0 (int i = 0), acabando no MAX_ELEMENTS (i = MAX_ELEMENTS) e incrementando o i por 1 (i++). É uma forma bastante simples e com pouco código.
Agora veremos como dar um valor personalizado a cada elemento do array:
#include <iostream>
using namespace std;
int main()
{
int MAX_ELEMENTS = 5; //o numero máximo de elementos do array
int arr[MAX_ELEMENTS]; //declara um array com um número predefinido de elementos
int valor; //valor de cada elemento do array (é igual...)
//escrever no array
for (int i = 0; i < MAX_ELEMENTS; i++)
{
cout << "Insira o valor a ser atribuido ao elemento " << i << " do array: ";
cin >> valor;
arr[i] = valor; //vai percorrer o array de 0 a MAX_ELEMENTS
}
//ler no array
for (int a = 0; a < MAX_ELEMENTS; a++)
{
cout << "array[" << a << "] = " << arr[a] << endl;;
}
cin.get();
cin.get();
return 0;
}
As alterações nem foram assim tantas: a disposição do cout e do cin é que mudaram para dentro do for. Também criei outro for para o utilizador poder ver os resultados, seguindo o mesmo princípio de escrita.
Trabalhando com caracteres - Introdução
Até agora temos usado só o tipo de variável int. Vou-vos ensinar a trabalhar com caracteres (utilizando o tipo de variável char), que é utilizado se quisermos armazenar o nome da personagem, por exemplo. Eu não falei sobre o tipo char porque se fizermos: char nome; o nome só pode armazenar 1 caracter. Com o estudo de arrays podemos então armazenar um nome. Por exemplo:
char nome[6] = "Agnor";
Isto iria criar um array de 6 variáveis de tipo char. Repararam que declaramos 6 variáveis no array, mas Agnor tem só 5 letras. Isto porque obrigatoriamente todas as strings (arrays de caracteres) terminam com o "caracter terminador" ('\0').
Vejam este exemplo básico:
#include <iostream>
using namespace std;
int main()
{
int MAX_CHARS = 30;
char nome[MAX_CHARS];
cout << "Por favor insira o seu nome: ";
cin >> nome;
cout << "\nOla, " << nome;
cin.get();
cin.get();
return 0;
}
Como vêm o vosso nome não pode ter mais de 29 caracteres neste exemplo, mas podem expandir à vontade (desde que não exagerem, pois cada caracter ocupa 1 byte).
Arrays Bidimensionais
Os arrays bidimensionais são muito utilizados nos mapas...
Vamos dar o exemplo de um mapa da Batalha Naval:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
| 0 | 0 | 5 | 5 | 5 | 5 | 5 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 3 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 | 0 | 3 | 0 | 3 | 3 | 3 |
| 5 | 2 | 2 | 0 | 0 | 4 | 0 | 0 | 0 | 0 |
| 6 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 |
Legenda:
0 - Água
2 - Navio que ocupa 2 lugares
3 - Navio que ocupa 3 lugares
4 - Navio que ocupa 4 lugares
5 - Navio que ocupa 5 lugares
Para passarmos isso num array normal....era complicado, mas num array bidimensional é razoavelmente fácil:
int mapa[7][9];
Depois "só" tínhamos que fazer mapa[0][0] = 0; mapa[0][1] = 2; etc...
Felizmente há um método mais simples de carregar mapas, utilizando o operador for e a leitura de ficheiros. Isto será explorado em lições futuras.Próxima aula -> C++ 08 - Leitura e Escrita em Ficheiros de Texto - Introdução
Fazer o download do código fonte dos exemplos da aula
Fazer o download da aula em PDF (Brevemente)
Ir para o topo da página