» Arrays (tabelas): Contexto (1) Contexto Definição Representação Gráfica Imagine-se que é necessário efectuar o cálculo da temperatura média do primeiro trimestre do ano. Com os conhecimentos apresentados até aqui o programa a desenvolver seria aproximadamente: Utilização Program TempMed(input,output); TempMed(input,output); Program Var Var t1,t2,t3 :: real; real; t1,t2,t3 tmedia :: real; real; tmedia Begin Begin writeln(‘Dê aa temperatura temperatura de de Janeiro’); Janeiro’); writeln(‘Dê readln(t1); readln(t1); writeln(‘Dê aa temperatura temperatura de de Fevereiro’); Fevereiro’); writeln(‘Dê readln(t2); readln(t2); writeln(‘Dê aa temperatura temperatura de de Março’); Março’); writeln(‘Dê readln(t3); readln(t3); tmedia:=(t1+t2+t3)/3; tmedia:=(t1+t2+t3)/3; writeln(‘a temperatura temperatura média média é:’, é:’, tmedia) tmedia) writeln(‘a End. End. Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): Contexto (2) Contexto Definição Representação Gráfica Utilização Imagine-se agora que se pretende efectuar o mesmo cálculo para um ano inteiro, ou por exemplo, ao longo de uma década... Seria necessário declarar 12x10, ou seja, 120 variáveis!!! E a expressão para cálculo da média teria cerca de 250 caracteres! Para facilitar este tipo de tarefas e reduzir o esforço de programação existe o tipo estruturado array (ou tabela). Definação: Um array é um conjunto finito de variáveis de um mesmo tipo referenciadas por um mesmo nome e diferenciáveis por um índice (que indica a posição que o elemento ocupa dentro da tabela). Vantagens: - Utilização indexada de variáveis; - Rapidez e facilidade de construção de código; - Apropriado para a maioria dos problemas. Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): Definição A declaração de uma variável array possui a seguinte sintaxe: Contexto Var <ArrayName> : array[index] of <DataType> Definição Representação Gráfica Utilização Nome que pretende dar ao Array. Tal como faz com qualquer outra variável não use palavras reservadas do Pascal Definição do tipo de variáveis que vai ser armazenado na tabela (e que só pode ser um tipo de cada vez) Dentro de parêntesis rectos escrevem-se os índices (valores que servem para identificar inequivocamente os elementos dentro de uma tabela) Mas atenção que as tabelas podem ser: - unidimensionais; - bidimensionais; - tridimensionais. • Uma tabela pode conter qualquer tipo de elementos, até outras tabelas; • Uma tabela pode ter tantas dimensões quantas as que se quiserem. Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): • Contexto 34 Definição Representação Gráfica Tabelas unidimensionais: • Utilização 8 2 21 76 12 30 43 7 2 41 3 Tabelas tridimensionais: 10 4 1 Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno 29 Tabelas bidimensionais: 10 4 1 • 2 21 76 12 30 43 7 2 41 3 (c) Alcina Prata & Luís Coelho, 2007 SISSI: »SISSI: Arrays (tabelas): • Tabelas unidimensionais: Var Contexto Classif : array [1..5] of Real; Definição Representação Gráfica 34 Utilização 8 2 29 Ex. 2 Classif [2] = 8 • Tabelas bidimensionais: Var Classif : array [1..3, 1..4] of Real; 10 4 1 21 76 12 30 43 7 2 41 3 Ex. Classif [2,3] = 43 Linha Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno coluna (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): Definição Muito Importante: Contexto Definição Representação Gráfica A) No exemplo fornecido, em que se pretendem armazenar valores de temperaturas ao longo de um ano, teremos então: Var Temperatura : array [1..12] of Real; Utilização • No entanto, embora a notação seguinte seja autorizada, o mais correcto e menos limitativo será utilizar: type Temperaturas = array [1..12] of Real; var contemperaturas : Temperaturas; B) Para armazenar temperaturas ao longo de uma década é possível declarar um array bidimensional: type Temperatura = array [1..10, 1..12] of real; Var contemperaturas : Temperaturas; Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): Representação Gráfica Alguns exemplos acompanhados da respectiva representação: Contexto Definição Representação Gráfica Utilização ... ... Type Type AA AA == array array [1..10] [1..10] of of Integer; Integer; Var Var AA :: AA; AA; Begin Begin A[1]:=12; A[1]:=12; A[8]:=91; A[8]:=91; End. End. A 1 2 3 4 5 7 12 4 8 9 10 9 10 91 ... ... Type Type BB BB == array array [1..4, [1..4, 1..10] 1..10] of of Integer; Integer; Var Var BB :: BB; BB; B 1 2 3 4 5 Begin Begin B[1,8]:=54; 1 7 B[1,8]:=54; B[3,3]:=32; B[3,3]:=32; B[4,7]:=-5; 2 41 B[4,7]:=-5; {{ …… }} 3 32 End. End. Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno 6 6 7 8 54 89 -5 (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): • Exemplos: Contexto Definição Representação Gráfica Type TClassif = array [0..20] of integer TNum = array [‘A’..’F’] of integer; TLetras = packed array [1..20, 1..50] of char; Utilização Var Contclassif : TClassif; Contnum : TNum; Contletras : TLetras; Aqui temos definidos 3 tipos de tabelas: a) TClassif - com uma dimensão e 21 elementos do tipo inteiro; b) TNum - com uma dimensão e 6 elementos do tipo inteiro; c) TLetras - com duas dimensões (20 linhas e 50 colunas) e portanto com 1000 elementos (20x50) do tipo carácter. Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): Utilização Contexto Definição Representação Gráfica Utilização O exemplo que tem servido de base para o raciocínio, levaria então ao desenvolvimento do seguinte programa final: Program Program TempMedia(input,output); TempMedia(input,output); Type Type Temperatura Temperatura == array[1..120] array[1..120] of of real; real; Var Var Temp Temp :: Temperatura; Temperatura; II :: integer; integer; Media, Total Media, Total :: real; real; Begin Begin {{ Ler Ler valores valores das das temperaturas temperaturas ee fazer fazer soma soma total total }} Total:=0; Total:=0; For For I:=1 I:=1 to to 120 120 do do begin begin write(‘Indique a temperatura write(‘Indique a temperatura ‘,I,’: ‘,I,’: ‘); ‘); readln(temp[I]); readln(temp[I]); Total:=Total+Temp[I]; Total:=Total+Temp[I]; End; End; {{ Calcular Calcular média média }} Media:=Total/120; Media:=Total/120; {{ Apresentar Apresentar resultado resultado }} Writeln(‘A Writeln(‘A média média das das temperaturas temperaturas é: é: ‘,media); ‘,media); End. End. Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): Utilização Exercícios: Contexto Definição Representação Gráfica Utilização 1 - Faça um programa que recolha 10 letras do teclado e no final as apresente pela ordem contrária (Dica: use apenas uma tabela unidimensional). 2 - Faça um programa, para turmas de 10 alunos, que escreva o número dos alunos que tiveram nota superior à média geral da turma (Dica: use duas tabelas unidimensionais). No exercício 2 note que: a) o programa tem de pedir o número do aluno e a respectiva nota e tem de guardar esses dados de modo a que possam ser associados; b) quando acaba a inserção de notas o programa calcula então a média da turma; c) vai aos dados armazenados (nrº e nota do aluno) e compara cada uma das notas que lá tem com a média da turma; d) finalmente, escreve o número dos alunos que tiveram uma nota acima da média. Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007 » Arrays (tabelas): Utilização Exercícios (cont.): Contexto Definição Representação Gráfica Utilização 3 – Reformule o exemplo apresentado no acetato 9 de modo a utilizar uma tabela bidimensional com 10 linhas e 12 colunas. 4 – Faça um programa que aceite do teclado 6 nomes. De seguida o programa deverá perguntar ao utilizador que nome deseja pesquisar e responder ‘esse nome foi encontrado’ ou ‘esse nome não foi encontrado’ caso respectivamente o encontre, ou não, na lista de 6 nomes previamente inseridos. O programa deverá estar preparado para repetir essa pesquisa tantas vezes quantas o utilizador pretender (Dica: use uma tabela unidimensional que armazene dados do tipo string). Estrutura e Organização de Dados Gestão de Sistemas de Informação – 1ºAno (c) Alcina Prata & Luís Coelho, 2007