Você está na página 1de 15

Variveis Indexadas 1

Variveis Indexadas
As variveis envolvidas nos programas dos captulos anteriores eram variveis do tipo escalar, ou seja, variveis que apenas podiam assumir um nico valor de cada vez. No entanto, til em muitas aplicaes estabelecer determinadas relaes entre um conjunto de dados. Usando apenas variveis do tipo escalar no possvel estabelecer directamente qualquer relao entre variveis. Em muitas situaes concretas necessrio definir formas mais complexas de representao de dados relacionados entre si e que contenham informao acerca da sua forma de associao. Estas formas de representao so normalmente designadas por tipos de dados estruturados. uma s entidade. importante tambm que estas estruturas permitam a manipulao de cada conjunto de dados como

Tipos de Dados Estruturados


Os tipos de dados discutidos nos captulos anteriores so tipos de dados simples: valores dos tipos inteiro, real, lgico e carcter. Estes tipos apresentam uma natureza escalar, isto , cada varivel de cada um destes tipos apenas pode assumir um valor de cada vez. Em problemas reais existe muitas vezes a necessidade de operar sobre conjuntos de dados que de alguma forma esto relacionados entre si e que interessa processar como um todo. Alternativamente, poder ser necessrio processar cada elemento do conjunto de forma individual, mas respeitando a sua dependncia e associao aos restantes elementos. Estes podero, por exemplo, estar dependentes da forma como esto ordenados dentro do conjunto ou de possveis associaes lgicas existentes entre os diversos elementos. A resoluo de muitos problemas concretos pode ficar facilitada recorrendo a tipos de dados que contenham informao estrutural, ou seja, os tipos de dados estruturados. Estes, no so mais do que conjuntos de variveis escalares de um dado tipo, mas aos quais se adicionou informao sobre a forma como essas variveis se associam dentro do conjunto. Na linguagem PE esto definidos dois tipos de dados estruturados: os vectores e as matrizes (por vezes tambm designados por vectores bidimensionais). Estas entidades so tambm designadas por variveis indexadas.

Vectores
Um vector consiste numa varivel dividida num nmero finito de clulas de um dado tipo de dados, numeradas sequencialmente e que podero conter valores distintos entre si e do tipo definido para as clulas. Na nomenclatura inglesa, os vectores so designados por arrays. Todos os elementos que

2
compem um vector so igualmente acessveis, bastando indicar a posio da clula ocupada por cada um dos elementos. A declarao de variveis indexadas do tipo vector conseguida indicando o tipo dos valores a guardar nas diversas clulas, seguido do nome escolhido para o vector. A seguir ao nome necessrio indicar a dimenso do vector, isto , o nmero mximo de clulas que este ir comportar. A definio da dimenso o processo que permite distinguir uma varivel indexada de uma varivel escalar. Por exemplo, considere-se a instruo seguinte: carcter nomes[ 5 ]; Esta instruo corresponde declarao de uma varivel do tipo vector de caracteres, com um nmero mximo de cinco clulas. O nmero mximo de clulas uma parte fundamental na instruo de declarao, sendo o valor respectivo indicado entre parentesis rectos. Cada clula identificada por um ndice numrico que determina a sua posio no vector. Este ndice deve ser sempre indicado quando se pretende aceder ao contedo de uma clula especfica ou quando a clula inicializada. Assim, seria possvel inicializar o vector de caracteres nomes[], atribuindo valores a cada clula: nomes[ 0 ] = "Manuel"; nomes[ 1 ] = "Maria"; nomes[ 2 ] = "Pedro"; nomes[ 3 ] = "Joana"; nomes[ 4 ] = "Antonio"; Note-se que a primeira clula acedida definindo o valor 0 para o ndice respectivo. Esta conveno seguida na linguagem PE: o ndice numrico de um vector tem sempre incio no valor 0. Por exemplo, o terceiro elemento do vector, ou seja, o elemento nomes[2], contm a sequncia de caracteres "Pedro". A operao de atribuio obedece sintaxe seguinte: <nome do vector>[<ndice da clula>] = <expresso>;

Figura 7.1. Organizao Lgica das Clulas de um Vector. Tal como nas variveis escalares, cada clula de um vector ter de ser previamente inicializada antes de ser utilizada. Pode-se, no entanto, efectuar operaes com um vector tendo inicializado apenas uma parte das clulas desde que as clulas restantes no sejam necessrias nessas operaes. Analise-se mais uma vez o problema do clculo das mdias das notas dos alunos de uma escola. No programa 6.5 eram consideradas as notas de quatro disciplinas. Se para alm disso fosse necessrio

Variveis Indexadas 3

apresentar os nomes dos alunos na sada do programa era claramente vantajoso recorrer a um vector contendo o nome dos alunos em questo.
/* Funo calcula_mdia */ real calcula_mdia( n1, n2, n3, n4 ) inteiro n1, n2, n3, n4; { real m; m = (n1 + n2 + n3 + n4) / 4; retorna m; }

/* Procedimento escreve_mdia */ escreve_mdia( n, x ) carcter n; real x; { escreva( "A mdia do aluno", n, " e ", x ); }

/* programa principal */ programa() { constante inteiro nmero_alunos = 25;

carcter nomes[ nmero_alunos ]; inteiro nota1, nota2, nota3, nota4, aluno = 1; real mdia; enquanto aluno <= nmero_alunos faa { leia( nomes[ aluno ] ); leia( nota1, nota2, nota3, nota4 ); mdia = calcula_mdia( nota1, nota2, nota3, nota4 ); escreve_mdia( nomes[ aluno ], mdia ); aluno = aluno + 1; } escreva("Calculada a mdia de ", nmero_alunos, " alunos."); }

Programa 7.1. Exemplo de Aplicao de Vectores: Clculo das Mdias das Notas de um Grupo de Alunos.

4
No programa 7.1 foi includo o vector nomes[] para guardar os nomes dos alunos. Este vector foi definido com uma dimenso indicada pela constante nmero_alunos. Por sua vez, o procedimento escreve_mdia() foi alterado de forma a poder apresentar no s a mdia de cada aluno mas tambm o nome respectivo. A dimenso de um vector sempre um valor inteiro, constante e positivo. No possvel usar variveis na definio da dimenso de um vector pois estas podem ser alteradas durante a execuo do programa. A sintaxe para declarao de um vector ento: <tipo das clulas> <nome do vector>[ <dimenso> ];

Matrizes
Os vectores, tal como ficou claro atravs do exemplo apresentado, so variveis indexadas com uma nica dimenso (a posio de cada clula dentro do vector). Por vezes, no entanto, necessrio recorrer a variveis indexadas com mais do que uma dimenso. Por este motivo, existe na linguagem PE (e com correspondncia na maior parte das linguagens de programao reais) um outro tipo de dados estruturado, mas com duas dimenses. Este novo tipo designa-se por matriz. Enquanto que no vector era possvel entender uma organizao interna das clulas em linhas sucessivas de um nico elemento, a matriz sugere uma organizao em linhas sucessivas com mais do que um elemento ou, por outras palavras, uma organizao em linhas e colunas. Por exemplo, a instruo seguinte permite a declarao de uma matriz, com clulas do tipo inteiro, designada por linhas_colunas e cuja dimenso de 5 linhas por 10 colunas: inteiro linhas_colunas[ 5 ][ 10 ]; Esta matriz ir comportar, no mximo, 50 elementos capazes de armazenar valores do tipo inteiro. O primeiro elemento da matriz ser linhas_colunas[ linhas_colunas[ 4 ][ 9 ]. Assim, a sintaxe de declarao de uma matriz , <tipo_das_clulas> <nome_matriz>[<linhas>][<colunas>]; A operao de atribuio conseguida indicando, tal como nos vectores, a posio da clula pretendida. A sintaxe desta operao : <nome matriz>[<ndice da linha>][<ndice da coluna>] = <expresso>; De notar que na declarao de uma matriz, primeiro indica-se a dimenso correspondente ao nmero de linhas e depois a dimenso correspondente ao nmero de colunas. Cada elemento da matriz pode ser identificado individualmente pelos ndices respectivos, correspondentes linha e coluna que ocupam. De 0 ][ 0 ] e o ltimo ser

Variveis Indexadas 5

uma certa forma, uma matriz pode ser vista como um vector cujas clulas so constitudas por vectores de um tipo definido. As consideraes apresentadas relativas inicializao de vectores so igualmente vlidas para a inicializao de matrizes. Em problemas concretos possvel encontrar muitas aplicaes para as matrizes. Uma aplicao bvia ser a aplicao lgebra para automatizar as operaes envolvendo entidades matemticas tambm designadas por matrizes e que tm uma correspondncia directa com a definio apresentada para as matrizes da linguagem PE.
/* Calculo das mdias recorrendo a vectores e matrizes */ inteiro notas[ 25 ][ 10 ]; real mdia[ 25 ]; carcter nomes[ 25 ];

leitura_de_dados() { inteiro i, j; para i = 0 at i == 24 faa { leia( nomes[ i ] ); para j = 0 at j == 9 faa leia( notas[ i ][ j ] ); }

calcula_mdias() { inteiro i, j, soma; para i = 0 at i == 24 faa { soma = 0; para j = 0 at j == 9 faa soma = soma + notas[ i ][ j ]; mdia[ i ] = soma / 10; } }

escreve_mdias() { inteiro i;

6
para i = 0 at i == 24 faa escreva( "A mdia do aluno ", nomes[i], " e ",mdia[i] ); }

programa() { leitura_de_dados(); calcula_mdias(); escreve_mdias(); }

Programa 7.2. Exemplo de Aplicao de Vectores e Matrizes: Nova Verso do Programa para Clculo das Mdias das Notas de um Grupo de Alunos. O programa 7.2 destina-se novamente ao clculo de mdias de notas, mas desta vez recorrendo a vectores e matrizes. Neste caso, pretendia-se o clculo da mdia de dez notas e portanto no seria prtico recorrer a dez variveis diferentes. Em vez disso, foi definida a matriz notas[][] cujas linhas correspondem ao conjunto dos alunos e cujas colunas correspondem ao conjunto das notas dos diversos alunos. Para guardar as mdias calculadas existe definido o vector mdia[], de dimenso igual ao nmero de alunos. de notar que no programa 7.2 esto definidas variveis globais (a matriz e os vectores).

Figura 7.2. Organizao Lgica das Clulas dos Vectores e da Matriz correspondentes ao Programa 7.2.

Algoritmos com Variveis Indexadas


As variveis indexadas tm um um grande nmero de aplicaes no campo da programao. Essas aplicaes podem ser muito variadas e dependem obviamente de cada aplicao particular. No entanto, existem duas operaes muito importantes e frequentes cuja generalidade justifica o seu estudo neste captulo. As operaes em causa so a ordenao e a pesquisa num vector. Embora estas operaes no sejam utilizadas apenas sobre variveis indexadas, o uso de vectores ocorre com bastante frequncia. Os algoritmos existentes recorrendo a vectores podem ser alterados de forma a permitirem a sua aplicao a outras estruturas de dados. A ordenao de um vector consiste em colocar os seus elementos numa determinada ordem, recorrendo a um critrio de ordenao. Concretamente, um vector pode ser reorganizado de forma a que os seus elementos apresentem uma ordenao crescente ou ento de forma a apresentarem uma organizao decrescente. Por exemplo, considere-se a sequncia seguinte de elementos de um vector de numeros inteiros:

Variveis Indexadas 7

4, 5, 1, 9, 12, 15, 10, 11, 3, 18. O vector poderia ser rearranjado de forma a que os seus elementos estivessem organizados de forma crescente, ou seja, na sequncia 1, 3, 4, 5, 9, 10, 11, 12, 15, 18. Alternativamente, o vector poderia ser ordenado de forma decrescente, obtendo-se a sequncia 18, 15, 12, 11, 10, 9, 5, 4, 3, 1. No primeiro caso, a posio 0 do vector seria ocupada pelo valor 1 (menor elemento da sequncia) e no segundo caso, a posio 0 iria conter o valor 18 (maior elemento). A operao de pesquisa consiste na explorao de um conjunto dado com o objectivo de localizar um determinado elemento. Por exemplo, um vector pode ser pesquisado a fim de encontrar o maior ou o menor dos seus elementos. No caso de um vector de caracteres, contendo nomes de pessoas, poderia ser feita uma pesquisa de forma a encontrar um determinado nome. As operaes descritas, para alm de frequentes, so operaes que gastam muito do tempo de processamento de um computador. Esse tempo depende logo partida da forma como os elementos do vector esto organizados inicialmente e, para alm disso, dependem do nmero de elementos do vector e do algoritmo utilizado. Alguns algoritmos revelam-se eficazes se o vector for constitudo por um nmero reduzido de elementos (algumas dezenas) mas tornam-se totalmente inadequados no caso de esse nmero ser elevado (da ordem das centenas ou milhares). Neste captulo sero dados alguns exemplos de algoritmos de pesquisa e ordenao, sem entrar em linha de conta com alguns aspectos relacionados com a eficincia de cada um deles. O objectivo apenas apresentar alguns mtodos que permitem a resoluo dos problemas de pesquisa e ordenao e tambm apresentar aplicaes prticas de variveis indexadas.

Pesquisa
O processo mais simples para encontrar um elemento particular num vector no ordenado consiste em percorrer esse vector sequencialmente at encontrar o elemento pretendido. Este mtodo designa-se por pesquisa linear.
pesquisa_linear( valor ) inteiro valor; { lgico encontrado = falso; inteiro ndice = 0; enquanto ndice < nmero_elementos e encontrado == falso faa {

8
se vector[ ndice ] == valor ento encontrado = verdadeiro; seno ndice = ndice + 1; }

se encontrado == verdadeiro ento escreva( "O valor foi encontrado." ); seno escreva( "O valor no existe no vector." ); }

Programa 7.3. Pesquisa Linear num Vector. O programa 7.3 consiste num procedimento que admite a existncia de um vector de nmeros inteiros definido como varivel global e cuja dimenso estabelecida pela constante nmero_elementos. Neste procedimento, est definida uma varivel lgica que determina o fim da instruo cclica. Esta situao ocorre quando encontrado o elemento a procurar. Caso contrrio, o procedimento termina quando for alcanado o ltimo elemento do vector. Note-se que a condio ndice < nmero_elementos e no ndice <= nmero_elementos uma vez que o primeiro elemento do vector ocupa a posio 0, o que leva a que ao ltimo elemento corresponda o ndice nmero_elementos - 1. de salientar que o tempo de pesquisa depende da posio do elemento a procurar e do nmero de elementos do vector. No programa 7.3, nada foi dito sobre a organizao inicial do vector. Considere-se agora a situao de o vector estar ordenado de forma crescente antes de se iniciar a pesquisa. Neste caso, o processo de pesquisa pode ser melhorado, conduzindo a uma tcnica designada por pesquisa binria. Este mtodo consiste no seguinte: o vector dividido em duas partes (aproximadamente), com um elemento central . Se o elemento a procurar for menor do que o elemento central, considera-se apenas a metade inferior do vector e repete-se o processo. Se o elemento a procurar for maior, procede-se de igual forma para a metade superior do vector. Por exemplo, aplicando este mtodo para procurar o elemento 23 na sequncia 4, 7, 9, 12, 23, 34, 39, o vector seria dividido em duas partes: a metade inferior, 4, 7, 9 e a metade superior, 23, 34, 39. O elemento central seria o elemento 12. Como este elemento era inferior ao elemento a procurar, considerava-se a metade superior e repetia-se o processo. A sequncia a considerar seria 23, 34, 39 e o elemento central passaria a ser o elemento 34. Neste caso era considerada a metade inferior, ou seja, a sequncia constituda pelo elemento 23, estando encontrado o valor pretendido (quinta posio da sequncia).
pesquisa_binria( valor )

Variveis Indexadas 9

inteiro valor; {

/* valor a procurar */

inteiro maximo = nmero_elementos - 1; /* limite superior */ inteiro minimo = 0; inteiro elemento_central; lgico encontrado = falso; enquanto minimo <= maximo faa { elemento_central = trunca( ( minimo + maximo ) / 2 ); se valor < vector[ elemento_central ] ento /* selecciona metade inferior */ maximo = elemento_central - 1; seno se valor > vector[ elemento_central ] ento /* selecciona metade superior */ minimo = elemento_central + 1; seno { escreva( "O valor foi encontrado" ); encontrado = verdadeiro; } } /* limite inferior */

se encontrado == falso ento escreva( "O valor no existe no vector." ); }

Programa 7.4. Pesquisa Binria num Vector Ordenado de Forma Crescente. O programa 7.4 uma representao em linguagem PE do algoritmo descrito para a pesquisa binria num vector ordenado de forma crescente. O valor a pesquisar o argumento do procedimento representado no programa, que assume a existncia da varivel indexada vector[], de dimenso nmero_elementos. Estudos realizados sobre a eficincia destes dois mtodos permitiram concluir que, duma maneira geral, a pesquisa binria apresenta um desempenho superior pesquisa linear.

Ordenao
A ordenao de um vector, de forma crescente ou decrescente, pode ser conseguida por vrios processos. Existe um conjunto de algoritmos genricos que executam esta operao e cujo desempenho conhecido. Nesta seco sero apresentados dois desses mtodos. O mais simples consiste em localizar os elementos

10
do vector, sucessivamente na ordem pretendida e coloc-los noutro vector que, terminado o mtodo, ir conter os elementos do vector inicial j ordenados. Concretizando, para ordenar um vector de forma crescente, seria necessrio pesquisar o vector at encontrar o menor elemento. Quando este elemento fosse encontrado, seria copiado para outro vector e colocado na primeira posio. Na clula ocupada por esse elemento no vector inicial, seria colocado um valor tal que a clula no fosse considerada nas iteraes seguintes (por exemplo, um valor muito grande). O mtodo prosseguiria at todos os elementos do vector terem sido analisados. Considere-se a sequncia seguinte 6, 9, 1, 7, 5, 11, 4. Na primeira iterao, o mtodo encontraria o valor 1 (menor valor da sequncia). Este elemento seria o primeiro de uma nova sequncia. No seu lugar, seria colocado um valor elevado, por exemplo, 999. A sequncia ficaria 6, 9, 999, 7, 5, 11, 4. Na segunda iterao, o mtodo localizava o valor 4, ficando a sequncia com os valores 6, 9, 999, 7, 5, 11, 999. Por outro lado, a sequncia ordenada apresentaria j os valores 1, 4. O mtodo prosseguiria at ser obtida a sequncia 1, 4, 5, 6, 7, 9, 11.

ordenao_por_pesquisa() { inteiro iterao = 1, ndice_minimo, ndice;

enquanto iterao <= nmero_elementos faa { ndice_minimo = 0; ndice = 1;

enquanto ndice < nmero_elementos faa { se vector [ ndice ] < vector[ ndice_minimo ] ento ndice_minimo = ndice; ndice = ndice + 1 }

Variveis Indexadas 11

vector_auxiliar[ iterao ] = vector[ ndice_minimo ]; vector[ ndice_minimo ] = 100; iterao = iterao + 1; } }

Programa 7.5. Ordenao de um Vector por Pesquisa de Elementos . O programa 7.5 apresenta o algoritmo de ordenao de um vector pelo mtodo de pesquisa de elementos. O procedimento ordenao_por_pesquisa() assume, por uma questo de simplicidade, que as variveis indexadas vector_auxiliar[] e vector[], de dimenso definida pela constante nmero_elementos, esto declaradas como variveis globais. Neste programa considera-se que o vector a ordenar apenas poderia conter nmeros inteiros inferiores a 100, da que se tenha escolhido este valor para colocar nas clulas de onde eram retirados os elementos seleccionados. A varivel inteira ndice_minimo guarda o ndice do vector correspondente ao menor elemento encontrado. A varivel iterao corresponde ao nmero de vezes que o vector tem de ser percorrido. Em cada iterao, o algoritmo assume que o menor elemento o primeiro, ou seja, o elemento vector[ 0 ]. Por esta razo, a varivel ndice inicializada no valor 1, correspondente ao segundo elemento do vector (primeiro elemento a ser comparado), antes de o algoritmo iniciar uma nova iterao. A ordenao por pesquisa de elementos implica a utilizao de um vector auxiliar. Esta situao no vantajosa pois leva a que exista uma duplicao de espao na memria do computador, para a definio desse vector. Um algoritmo que proceda ordenao sem recorrer a este vector auxiliar ser claramente preferencial. Existe outro mtodo de ordenao, que no exige memria adicional e que conhecido pela designao bubble sort (esta expresso poder ser traduzida por borbulhante).
ordenao_borbulhante() { inteiro j, i = 0, elemento_auxiliar; lgico trocas = verdadeiro; enquanto i <= nmero_elementos trocas == verdadeiro faa { j = nmero_elementos - 1; trocas = falso; enquanto j > i faa { se vector[ i ] < vector[ j ] ento { trocas = verdadeiro; elemento_auxiliar = vector[ i ];

12
vector[ i ] = vector[ j ]; vector[ j ] = elemento_auxiliar; } j = j - 1; } i = i + 1; } }

Programa 7.6. Ordenao de um Vector pelo Mtodo Borbulhante (Bubble Sort). De acordo com o algoritmo representado pelo programa 7.6 os elementos de menor valor vo assumindo posies inferiores no vector at este estar efectivamente ordenado. Este mecanismo sugere que estes elementos borbulham para o incio do vector, vindo da o nome do mtodo. No final, a varivel indexada vector[] ficar ordenada de forma crescente. A varivel lgica trocas verifica se em cada iterao efectuada alguma troca. Se no forem efectuadas trocas, isso significa que o vector est ordenado e o algoritmo termina.

Erros mais Comuns


Quando se utilizam variveis indexadas frequente surgirem erros, de natureza no sinttica que constituem causas de mau funcionamento de programas. Nesta seco discutem-se alguns dos erros mais frequentes na manipulao de variveis indexadas.

Ultrapassar os Limites da Varivel


Ao percorrer as clulas de uma varivel indexada deve-se ter especiais cuidados de forma a garantir que no so ultrapassados os limites inferior ou superior para cada uma das dimenses da varivel. Tentar ler o contedo de uma clula no existente no vector implica, na generalidade das linguagens de programao, a ocorrncia de um erro e a interrupo do programa. Por exemplo, a declarao real coordenadas[ 8 ][ 12 ]; define uma matriz de oito linhas por doze colunas. Para percorrer essa matriz, deve-se usar ndices a variar entre 0 e 7 (8 - 1) para as linhas e entre 0 e 11 (12 - 1) para as colunas. A declarao de uma varivel indexada define valores para as dimenses da varivel que de forma alguma devero ser ultrapassadas.

Localizar a Primeira Clula


Na linguagem PE, bem como em muitas linguagens de programao, a primeira clula de uma varivel indexada assume o valor 0 para cada uma das dimenses. frequente surgir o erro de considerar o valor

Variveis Indexadas 13

1 no lugar do valor 0, levando a que seja considerada uma clula diferente da pretendida. Por exemplo, dado o vector nomes[], o primeiro elemento do vector referenciado nomes[0] por e no por nomes[1].

Contedo e ndice de uma Clula


Em programadores principiantes surge por vezes alguma confuso entre o contedo de uma clula de uma varivel indexada e as variveis usadas como ndices para aceder a essa clula. Esta distino dever ficar bem clara antes de elaborar programas que recorram a estas variveis.

14

Exerccios
7.1. Construa uma funo que permita calcular a mdia dos elementos de um vector de nmeros inteiros. Considere que o vector uma varivel global j inicializada.

7.2.

Escreva um procedimento que leia uma sequncia de 100 nmeros inteiros positivos e escreva o maior valor da sequncia. O programa tambm dever escrever o nmero de ocorrncias desse valor e as posies de cada uma delas dentro da sequncia. Os valores devero ser armazenados num vector.

7.3.

Desenvolver um programa que proceda inverso da sequncia dos elementos de um vector, ou seja, dado um vector na sequncia 1, 5, 7, 3, 9, deve-se obter a sequncia 9, 3, 7, 5, 1.

7.4.

Considere um vector, de dimenso 1000, que armazena nmeros inteiros positivos. Se o nmero de valores a armazenar for inferior ao mximo, as restantes clulas estaro preenchidas com o valor 0. Elabore uma funo que retorne o comprimento (nmero de clulas preenchidas) do vector. Este deve ser definido como argumento da funo.

7.5.

Escreva um programa que aceite dois vectores de caracteres alfabticos e verifique se as sequncias so palndromas (um palndroma uma palavra que igual quer seja lida da esquerda para a direita quer seja lida da direita para a esquerda, como por exemplo, S A C A S).

7.6.

Construa uma funo que, dada uma matriz de nmeros inteiros, permita obter a matriz transposta (a matriz transposta obtm-se por troca de linhas com colunas. Por exemplo, a linha 2 de uma matriz corresponder coluna 2 da matriz transposta).

7.7.

Construa uma funo que permita o clculo da matriz inversa de uma matriz definida de forma a conter valores reais (ver a definio da lgebra de matriz inversa).

7.8.

Desenvolva um programa que dado um vector de inteiros, proceda ordenao desse vector de forma decrescente e em seguida localize um valor dado, aplicando o mtodo de pesquisa binria.

7.9.

Altere o programa anterior de forma a que o utilizador possa decidir qual o mtodo desejado para a pesquisa de um valor. No caso de pesquisa binria, o vector ter de ser ordenado previamente.

Variveis Indexadas 15

7.10. Escreva uma funo que permita calcular o valor mdio e o desvio padro de um vector de nmeros reais.

7.11. Analise a evoluo do algoritmo do programa 7.6 para a sequncia 1, 9, 3, 12, 5, 16, 21, 7, 9, 2, escrevendo os sucessivos estados do vector. 7.12. Escrever um programa que leia valores para um vector de nmeros inteiros e calcule os valores mximo, mnimo e a mdia aritmtica dos valores lidos. Divida o programa em subprogramas para: a) Ler valores para o vector. b) Calcular o mximo. c) Calcular o mnimo. d) Calcular a mdia. e) Imprimir os valores calculados.

Resumo
1 As variveis indexadas permitem o processamento de conjuntos de dados relacionados entre si. Estes conjuntos de dados so considerados como uma s entidade. Cada elemento do conjunto pode ser acedido individualmente. 2 As variveis indexadas representam conjuntos de clulas que podero conter valores de um determinado tipo (real, inteiro, lgico ou carcter). A definio do tipo das clulas de uma varivel indexada conseguida atravs da declarao respectiva. 3 As variveis indexadas podem apresentar vrias dimenses em oposio s variveis do tipo escalar. Na linguagem PE foram definidas variveis indexadas de uma dimenso (vectores) e variveis indexadas de duas dimenses (matrizes). As clulas dos vectores e das matrizes necessitam de ser previamente inicializadas antes de se proceder sua utilizao. 4 As variveis indexadas podem ser aplicadas a mltiplas situaes. Destas, destacam-se as aplicaes relativas a mtodos de pesquisa e ordenao de elementos de um vector. Existem muitos algoritmos que permitem efectuar estas operaes mas deve-se proceder a uma anlise cuidada da eficincia de cada um deles antes de os aplicar a situaes concretas.