You are on page 1of 19

Linguagens de

Programação
BRAGA_EAC_PL
Matrizes

• Array com duas dimensões


(bidimensional) de números aleatórios.
• Para localizar um valor há a
necessidade de comunicar dois índices
x e y (podem ser vistos como
coordenadas). A titulo de exemplo, o
valor existente em numeros[1][2] é 65.
• Da mesma forma que num array
simples (unidimensional) os seus
elementos têm que ser todos do
mesmo tipo, os arrays
multidimensionais têm todos também
que respeitar o tipo de dados que foi
escolhido no momento da sua
declaração.
Declarar arrays bidimensionais em pseudo-código.
Válido e Inválido

• Atente que, o tamanho da segunda dimensão tem


que ser sempre especificada.
• Vimos que, nos arrays ditos simples, o tamanho
pode ser inferido automaticamente pelo número
de elementos especificado na inicialização. Nas
matrizes, o tamanho da primeira dimensão
também pode ser determinado automaticamente
pelo C através da divisão do número de elementos
a inicializar pelo tamanho da segunda dimensão.
Por este motivo, a segunda dimensão é sempre de
especificação obrigatória, já que não é possível
dividir um número por “nada”.
Problema

• Crie uma aplicação que receba do utilizador as notas de 2 alunos, a português, matemática e história.
Pretende-se mostrar no ecrã as médias por disciplina e por aluno. Use uma matriz para guardar os
valores das notas e um array unidimensional para guardar o nome dos alunos. Todos os cálculos deverão
ser efetuados com base nos valores guardados na matriz.
Solução
Registos

• Os arrays são efetivamente muito úteis, já que permitem guardar e tratar vários valores do mesmo tipo
de dados, usando apenas uma única variável em que, a única coisa que altera para se aceder a cada
valor, é o índice onde esse valor vive. Os arrays multidimensionais ou matrizes estendem essa
característica, permitindo que possam ser guardados (também por cada índice) vários valores que
representam várias dimensões do mesmo elemento do conjunto.
• No entanto, o uso de arrays de tipos primitivos acarreta limitações muito grandes no que respeita ao tipo
de dados a serem tratados, ou seja, não resolve, por exemplo, o problema de se guardar numa única
matriz o nome e a nota do aluno, pois ou o array é do tipo string ou do tipo int e nunca dos dois em
simultâneo

• Vamos ver como se faz à frente


Exemplo

• 1000 alunos em que, num primeiro momento se considerou ser melhor a implementação num array de
inteiros e não em 1000 variáveis distintas, e que num segundo momento se verificou que se podiam
guardar várias notas por aluno usando para isso duas dimensões de um array (array bidimensional),
imagine-se agora que se pretende adicionar informação a cada aluno como a data de nascimento, nome,
idade, etc. O facto das dimensões de um array serem obrigatoriamente do mesmo tipo de dados, faz
com que não seja possível resolver este problema apenas com um array usando várias dimensões para
esse efeito.
• O conceito de registo (ou struct) resolve este problema. Um registo é um tipo de dados estruturado que
é do tipo que queiramos que seja. Dito de outra forma, o programador é que define o tipo de dados do
registo da forma que mais lhe convier, ou seja, é personalizável.
• Entenda-se um registo como um impresso (como aqueles que são usados em instituições publicas,
escolas ou empresas) composto por vários campos onde devem ser preenchidos dados de diferentes
tipos. Por exemplo, podemos imaginar um registo (impresso) com os seguintes campos: nome
(string), morada (string), idade(int), dataNascimento (DateTime), notaMatematica (float),
notaHistoria(float), cumpriuServicoMilitar (bool), etc.
PROBLEMA

• Crie uma aplicação que solicite o nome, morada, localidade, idade, nota de matemática, nota de
português e nota de inglês de um aluno e guarde a informação numa variável registo (struct). A aplicação
deve terminar mostrando no ecrã um formulário (similar ao apresentado na imagem seguinte) com os
dados de cada campo do registo.

You might also like