Agnor's HQ

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;
}

Exemplo 7.1 - Calcular a média semanal das temperaturas

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;
}

Exemplo 7.2 - Dar um valor a todos os elementos do array

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;
}

Exemplo 7.3 - Dar valores aos elementos dos arrays

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;
}
Exemplo 7.4 - Mensagem de Boas Vindas

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.

Final da aula 07 de C++:

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 WinZip
Fazer o download da aula em PDF (Brevemente)

Ir para o topo da página

Aulas de C++

Anúncios