Vamos Programar? – Introdução à Programação #14
Arrays Unidimensionais e Multidimensionais
O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Dentro das palavras que mais ouvimos atualmente, incluímos "evolução", "mudança", "futuro".
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Infelizmente, o artigo desta semana não é acompanhado por vídeo porém esperemos que apreciem o restante conteúdo.
Arrays
Até agora apenas falámos de variáveis escalares, ou seja, variáveis com valores individuais. Vamos então falar de uma nova estrutura de dados: as arrays.
Arrays, também conhecidas por "tabelas" ou "vetores", são estruturas de dados que, ao contrário de variáveis escalares, nos permitem armazenar mais do que um valor.
Estas são como matrizes (ou tabelas) de dados em que cada dado está localizado numa determinada posição que pode ser acedida através de "coordenadas". Existem dois tipos: as unidimensionais e as multidimensionais.
Arrays Unidimensionais
Arrays unidimensionais podem ser comparadas a tabelas com uma única coluna e várias linhas. São o tipo mais simples de arrays.
Sintaxe
1 | tipo nome[tamanho]; |
Onde:
- tipo → O tipo de dados que a array vai conter;
- nome → O nome da array, tal como se faz com uma variável;
- tamanho → O número máximo de elementos que a array irá conter.
Exemplo
1 2 3 4 5 6 | int idades[10]; //Array de 10 elementos idades[0] = 14; //Atribuição Correta idades[4] = 12; //Atribuição Correta idades[7] = 15; //Atribuição Correta idades[10] = 20; //Atribuição Incorreta (tamanho máximo da array ultrapassado) |
No exemplo anterior, a última declaração está errada porque o índice máximo da array foi ultrapassado, ou seja, a array apenas pode conter 10 elementos mas, como a contagem inicia sempre no zero, "idades[10]" refere-se ao décimo primeiro elemento.
Podemos também, à semelhança do que acontece com as variáveis, atribuir valores às arrays no momento em que as declaramos da seguinte forma:
1 | int idades[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; |
Arrays Multidimensionais
Arrays multidimensionais são todas aquelas que contenham mais do que uma dimensão, ou seja, se comparamos a uma tabela, têm mais do que uma coluna.
Sintaxe
1 | tipo nome[linhas][colunas]; |
Exemplo
1 2 3 4 5 6 7 8 9 10 11 | /* * Declaração de uma array 6x5 */ float notas[6][5]; notas[0][0] = 18.7; //1ª Linha, 1ª Coluna notas[0][1] = 15.4; //1ª Linha, 2ª Coluna notas[3][2] = 19.6; //4ª Linha, 3ª Coluna notas[5][4] = 17.5; //6ª Linha, 5ª Coluna notas[6][0] = 20.0; //Excedeu o máximo de linhas (6) notas[5][5] = 17.4; //Excedeu o máximo de colunas (5) |
No exemplo anterior é possível visualizar a criação de uma tabela array 6 linhas por 5 colunas. Traduzindo esta array para uma tabela, ficaríamos com o seguinte:
Que, inserindo os dados anteriormente utilizados no exemplo, ficaria preenchida da seguinte forma:
18.7 | 15.4 | |||
19.6 | ||||
17.5 |
A sintaxe que aplicámos anteriormente para atribuir valores a arrays quando as inicializamos também pode ser utilizada neste contexto. Veja o seguinte exemplo:
1 2 3 | int idades[2][4] = { {1, 2, 3, 4}, {0, 1, 2, 3}}; |
Exercícios
1 - Crie um programa que peça cinco números inteiros ao utilizador, os armazene numa matriz e, posteriormente, imprima os números armazenados na matriz tal como o índice (posição) em que se encontram.
2 - Crie um pequeno programa onde o utilizador tenha que inserir os valores (float) que obteve no final do ano letivo em sete disciplinas e, posteriormente, mostre a sua média. Utilize apenas uma array para armazenar todos os valores.
3 - Crie mais um programa para obter as notas de cinco testes em 3 disciplinas (matriz 3x5) e percorra cada linha de forma a dizer a nota mais alta de cada uma das três disciplinas.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que utilize a keyword [DUVIDA] no início do seu comentários.
Esta saga |
Henrique Dias |
|
Mais episódios: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13][12] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23][24] |
Este artigo tem mais de um ano
O valor de 17.4 na grelha está errado. Não devia lá estar -.-
Na verdade o que deveria estar lá é 17.5
Que foi posto com o comando abaixo:
notas[5][4] = 17.5; //6ª Linha, 5ª Coluna
Corrigido 🙂 Obrigado pelo reparo.
existem alguns que estão em posições erradas, mas a ideia percebeu-se…
Quais? O.o Estive a rever e não compreendi quais. 🙂
secalhar só havia mesmo uma :S, estive agora a ver e também não encontrei nada 😉
Eheh. Não faz mal 🙂
Parabéns pelo artigo 😉
faltou-te falar no conteúdo que os arrays teem logo após sua declaração/definição…
Se o array for global ou estático(mesmo que seja dentro da uma função…tem é que ser estatico), o array é inicializado a zero!
Se o array for criado numa função, mas não for estático, então , ai o lixo que estiver nas posições ocupadas pelo array é o conteúdo do mesmo, pois ele é criado no stack…
Numa função, se tens a certeza que não vais ler dados do array antes de o preencher todo…não precisas de inicializalo(ver Initializer’s…).
mas se por algum motivo necessitares de ter um array inicializado a zero, e a variável não for global, ou static…ai tens que inicializa-lo…
Por exemplo:
unsigned int array[1024]={0};
Obrigado pela adição 🙂
Não reparei bem, ou não indicaram a linguagem que se trata? poderiam dizer que isto é c#.
Olá Afonso,
Por acaso é C. Esta saga de tutoriais, “Introdução à Programação”, tem como objetivo introduzir os nossos leitores no mundo da programação através da linguagem C.
Isto foi mencionado em vários dos primeiros tutoriais. 🙂
Não encontro as soluções dos exercícios no github da pplware. alguem pode-me dizer onde encontrar?
Olá Ricardo,
Obrigado por avisar. Quando puder, no fim de semana, colocarei as soluções e dar-lhe-ei um “toque” aqui nos comentários.
ok. obrigado
Bom dia Ricardo,
Desculpe pela demora, mas acabei de adicionar as soluções deste artigo ao GitHub. Espero que sejam úteis! 🙂
Bom fim de semana!