• Nenhum resultado encontrado

Faça um algoritmo que determine o maior entre N números A condição de termo é a entrada de um valor 0, ou seja, o algoritmo deve continuar a calcular o maior número

No documento Sebenta Algoritmia (páginas 43-47)

Exercícios

5. Faça um algoritmo que determine o maior entre N números A condição de termo é a entrada de um valor 0, ou seja, o algoritmo deve continuar a calcular o maior número

3

3

3

3

E

ESSTTRRUUTTUURRAA

DDEE

D

DAADDOOSS

Objectivos

 O objectivo fundamental é conseguir que os alunos percebam em profundidade o conceito de vector e matriz, como estrutura de dados em memória. O conceito de ficheiro deverá ser mais explorado na unidade relativa à Programação em Pascal.

 Distinguir estruturas de dados em memória volátil e memória magnética

 Realizar algoritmos com a utilização de vectores e matrizes

 Aplicar no mesmo algoritmo várias estruturas de decisão.

E

Essttrruuttuurraa

ddee

DDaaddooss

Na programação de alto nível, sempre que se declaram variáveis, estas têm de ser associadas a um determinado tipo de dados, para que o compilador saiba com que tipo de valores vai operar e que espaço deve ser reservado em memória para cada variável. Para além das estruturas de dados que mantenha em memória primária, existem estruturas de dados que conserve em memória secundária, que é o caso dos ficheiros.

Para além de uma categoria de dados a que podemos chamar de simples (Inteiro, Lógico, Real, caracteres,...), temos ainda os dados que são estruturadas, isto é, que são compostos por outros dados.

as

Estruturad

ou

Complexas

Simples

Dados

de

Estrutura

Imaginemos por exemplo, um algoritmo para ler o nome de N pessoas e que imprimisse esses mesmos nomes ordenados alfabeticamente. Não seria uma tarefa simples, visto não ser possível determinar quantos nomes seriam lidos. Mesmo que soubesse-mos o número de pessoas, digamos 1000 pessoas, teríamos que definir 1000 variáveis do tipo Caracteres como é indicado abaixo: Algoritmo Loucura Variáveis NOME1, NOME2, NOME3, (...) NOME999, NOME1000: Caracteres Início <Instruções> Fim

Vamos considerar o tamanho do algoritmo, e o trabalho de escrita necessário para o construir. Imaginemos agora o algoritmo com 1000000 pessoas. Na prática, a construção deste algoritmo começaria a ficar inviável. Para resolver problemas como este, e outros, foi criado um novo conceito de estrutura de dados e uma nova forma de definir as variáveis, as quais foi denominada de variáveis do tipo Array.

Um array revela-se uma estrutura de dados muito mais económica em termos de escrita, mas, sobretudo, encerra muito mais potencialidades de manipulação em termos de programação.

Uma variável do tipo Array corresponde a uma sequência de posições de memória, identificada com um único nome. Cada uma destas posições pode ser acedida através de um índice. O índice corresponde a um valor numérico Inteiro. Cada uma das posições de memória de uma variável Array pode receber valores no decorrer do algoritmo como se fosse uma variável comum. A única diferença reside na sintaxe de utilização desta variável.

Uma variável do tipo Array corresponde a uma sequência de posições de memória, identificada com um único nome.

Um índice corresponde a um valor numérico Inteiro e representa cada uma das posições de um array.

V

Veeccttoorreess

Um vector (Array unidimensional) é um tipo estruturado que pode agrupar numa mesma variável um conjunto finito de valores todos do mesmo tipo. Um vector é um conjunto de elementos representados por um identificador e um único índice. Cada elemento tem uma única dimensão. O índice varia entre um limite inferior e um limite superior, em correspondência com o número de elementos do conjunto. Os vectores são colocados na memória em posições ordenadas e adjacentes.

Um vector agrupa numa mesma variável um conjunto finito de valores todos do mesmo tipo.

Suponhamos que pretendemos representar, num programa, os gastos de um determinado departamento em cada um dos 12 meses do ano. Evidentemente, poderíamos definir 12 variáveis, designadas por 12 identificadores diferentes; por exemplo: JAN; FEV; MAR; etc. Todavia, o uso de uma variável estruturada, neste caso, um vector, com um único identificador agrupando os 12 elementos em causa, revela-se uma técnica muito mais económica em termos de escrita, mas, sobretudo, encerra muito mais potencialidades de manipulação em termos de programação.

Neste caso, poderíamos definir um vector mediante um único identificador, por exemplo: GASTOS_MÊS. Mas, para que esse identificador possa representar os 12 elementos correspondentes aos 12 meses do ano, temos de utilizar índices.

Em pseudocódigo, poderíamos escrever assim: Variaveis

GASTOS_MES: Vector[1..12] de Real

em que:

GASTOS_MES é o identificador ou nome atribuído à variável;

VECTOR indica que a variável é do tipo Vector;

[1..12] define o número de elementos da variável (12 elementos) e ao mesmo tempo

o intervalo dos seus índices, neste caso entre 1 e 12.

DE REAL indica qual o tipo de dados dos elementos do vector.

e, em Pascal: Var

GASTOS_MES: Array[1..12] of Real

De um modo geral, cada elemento desta variável de tipo Vector designa-se por:

GASTOS_MES[K] em que [K] representa a posição do elemento no conjunto que compõem o

vector, ou seja, neste caso, o número do mês que se pretende designar. Por exemplo o gasto do mês de Fevereiro seria designados por: GASTOS_MES[2]

Segue-se alguns exemplos de operações com vectores:

[Definir um vector A de 40 elementos do tipo inteiro] A: Vector[1..40] de Inteiro

[Instrução de leitura com acesso sequencial]

Para K de 1 até 40 Fazer Ler(A[K])

[Instrução de atribuição:

armazenar na 4ª posição do vector A o valor 13] A[4]  13

[Instrução de escrita do 4ª elemento do vector A] Escrever(A[4])

Exercícios Sobre Vectores

1. Construa um algoritmo que permita verificar qual o maior valor inteiro introduzido

No documento Sebenta Algoritmia (páginas 43-47)