Вы находитесь на странице: 1из 18

NOVOS TIPOS DE DADOS

Criar um algoritmo portugol que leia a nota de 10 alunos, calcule a mdia destas notas e imprima o nmero de alunos com nota abaixo da mdia, na mdia e acima da mdia. Para solucionar o exerccio acima necessita-se criar 10 variveis de nota, sendo uma para cada aluno, uma varivel soma e uma varivel mdia. No nada exagerado, porm caso necessite-se realizar a mesma tarefa acima para uma turma de 120 alunos, o processo fica complicado nvel de definio de variveis. No caso acima fica claro que os tipos de dados primitivos (inteiro, real, caracter e lgico) no suficiente para representar toda e qualquer informao que possa surgir. Portanto, em muitas situaes necessita-se construir novos tipos de dados a partir da composio de tipos primitivos. Estes novos tipos tem um formato denominado Estrutura de Dados, que define como os tipos primitivos de dados esto organizados. Voltando comparao da memria com um armrio de gavetas, em um primeiro momento uma gaveta poderia comportar apenas uma informao e, segundo esse novo conceito, uma gaveta pode comportar um conjunto de informaes primitivas, desde que devidamente organizadas. Estes novos tipos so estranhos ao algoritmo logo devem ser declarados em cada detalhe de sua estrutura. Desta forma, assim como na Teoria dos Conjuntos, uma varivel pode ser interpretada como um elemento e uma Estrutura de Dados como um conjunto. Quando uma determinada Estrutura de Dados for composta de variveis com o mesmo tipo primitivo, temos um conjunto homogneo de dados, porm, caso os elementos do conjunto no sejam do mesmo tipo primitivo de dados, ento diz-se um conjunto heterogneo de dados. Os novos tipos de dados podem ser classificados da seguinte forma: tipos de dados homogneos unidimensionais vetores multi-dimensionais matrizes tipos de dados heterogneos registros. A utilizao deste tipo de estrutura de dados recebe diversos nomes como: variveis indexadas, variveis compostas, variveis subscritas, arranjos, vetores, matrizes, tabelas em memria ou array. Neste contexto utilizaremos os nomes: vetores, matrizes e registros.

VETORES
Vetores so estruturas de dados homogneas unidimensionais e sua utilizao mais comum est vinculada criao de tabelas. Este novo tipo de dado permite a criao de muitas variveis de mesmo tipo de dado, que atendero pelo mesmo nome, e que sero acessadas pelo deslocamento dentro do vetor (ndices).

54

Para entender variveis compostas unidimensionais, imagina-se um edifcio com um nmero finito de andares, representando uma estrutura de dados, e seus andares, parties desta estrutura. Visto que os andares so uma segmentao direta do prdio, estes compem ento o que chamado de estrutura unidimensional, isto , uma s dimenso. Criao de Vetores A declarao de vetores em algoritmos d-se em duas etapas: 1. devemos definir um novo tipo de dado que vir a se juntar aos j existentes (inteiro, real ,caracter e lgico), e que vigorar dentro deste bloco de programa. TIPO <nome do tipo> = VETOR [ lim inf : lim sup] <tipo de dado j existente>; Onde: lim inf limite inferior do vetor; lim sup limite superior do vetor. 2. devemos informar ao algoritmo quais variveis podero conter este novo tipo de dado. <identificador 1>, <identificador 2> , ... , <identificador n> : <nome do novo tipo>; O nmero de elementos de um vetor ser dado por Lim Sup Lim Inf + 1. Isto significa que as posies do vetor so identificadas a partir de Lim Inf, com incrementos unitrios at Lim Sup. Exemplo: 1. Definir um vetor para conter as taxas inflacionrias dos 12 ltimos meses: TIPO VETINF = VETOR [ 1: 12] real; INFLACAO : VETINF; 2. Definir um vetor para conter os nomes de 60 alunos: TIPO VET1 = VETOR [ 1: 60] caracter[50]; NOME : VET1; Acesso aos Dados Ao imaginar um elevador de um prdio sabe-se que este capaz de acessar qualquer um de seus andares. Entretanto, no basta saber que andar desejamos atingir se no soubermos o nome do edifcio. Logo, necessita-se ter conhecimento do nome do edifcio para ento procurar o andar desejado. O mesmo acontece com os vetores, visto que so compostos por diversas variveis. Tornase, ento, necessrio definir o nome do vetor que contm os dados desejados e depois especificar em qual posio a informao se encontra. Aps isolar um nico elemento do vetor, pode-se manipula-lo atravs de qualquer operao de entrada, sada ou atribuio. O acesso aos dados pode ser feito das seguintes maneiras:

55

Genericamente - considera-se um nico valor para todas as ocorrncias do vetor: VETVEN 0; Conjuntamente - utiliza-se um conjunto de mesmo nmero de elementos na referencia ao vetor: Tipo V = VETOR [ 1 : 5] inteiro; VETVEN : V; VETVEN ( 1 2 3 4 5); Individualmente - pressupem a existncia de um comando para cada elemento do vetor Tipo VET = VETOR [ 1: 5] inteiro; V1: VET; V1[1] 2; V1[2] 5; V1[3] 6; V1[4] 9; V1[5] 23; Pode-se observar neste exemplo que o nome (V1) um s, o que muda a informao indicada dentro dos colchetes (1 at 5). Este valor o ndice que indica o endereo onde o elemento est armazenado. necessrio salientar a diferena entre o contedo do vetor ( 2, 5, 6, 9, e 23) e seu endereo, que representado pelo ndice. Estas 3 maneiras de acesso ao vetor aplicam-se inicializao do vetor, isto , podem ser utilizados pelos comandos de atribuio ( ) e entrada de dados ( leia ). Tambm podemos utilizar esta sintaxe no caso de sada de dados, isto , o comando imprima. Exemplo: Definir um algoritmo que leia um vetor de 120 elementos inteiros e imprima o somatrio de seus elementos e os elementos. inicio Tipo VET = VETOR [1:120] inteiro; V : VET; I, SOMA: inteiro; leia (VET); SOMA 0; Para I de 1 ate 120 faca SOMA SOMA + V[I]; fimpara; imprima (SOMA); imprima (V): fim.

56

EXERCCIOS 1. Criar um vetor para conter a nota dos 120 alunos da turma. 2. Criar um vetor para conter o PNB do Brasil dos ltimos 8 anos (87 a 94). 3. Criar um algoritmo que defina um vetor de 500 posies e calcule a soma dos contedos impares. 4. Criar um algoritmo que defina um vetor para conter 1050 nomes de candidatos e imprima os nomes das posies impares. 5. Criar um algoritmo que defina um vetor de 600 posies e imprima o produto dos valores das posies pares. 6. Escrever um algoritmo que defina um vetor com 12 elementos lgicos e inicialize os primeiros 6 com Verdadeiro e os outros 6 com Falso. 7. Escrever um algoritmo que leia de uma s vez um vetor de 100 elementos numricos inteiros e imprima aqueles que forem maiores do que o valor 150. 8. Escreva um algoritmo que leia 200 valores (um a um), crie um vetor com tais valores e informe, a seguir, qual a mdia dos valores positivos e qual a mdia dos valores negativos. 9. Fazer um algoritmo, usando vetores, que leia 100 valores numricos, e verifique se existem elementos compondo o vetor maiores que 4,0 e menores que 7,0 e quantos so. 10. Escrever um algoritmo que seja capaz de ler um conjunto de 10 valores ( de uma s vez), calcular a mdia, e imprimir: todos os valores do conjunto, a mdia e a diferena entre cada valor individual e a mdia calculada. 11. Construir um algoritmo Portugol para fazer a soma, posio a posio, de dois vetores de 10 elementos cada e armazenar o somatrio de cada posio em um terceiro vetor, tambm de 10 elementos. 12. Ler 15 elementos de um vetor A e construir um vetor B de mesmo tipo, onde: todo elemento de B dever ser o quadrado do elemento de A correspondente. 13. Ler dois vetores A com 20 elementos e B com 15 elementos. Construir um vetor C, sendo este a juno dos dois vetores anteriores. Desta forma C dever ter capacidade para armazenar 35 elementos. 14. Ler dois vetores A e B com 20 elementos cada, construir um vetor C, onde cada elemento de C a subtrao do elemento correspondente de A com B. 15. Ler um vetor A com 15 elementos, construir um vetor B de mesmo tipo, sendo que cada elemento de B seja o fatorial do elemento correspondente em A.
57

16. Imagine um algoritmo capaz de ler uma entrada formada por at 60 caracteres, que correspondem a uma frase. Esta frase termina quando for encontrado um ponto. O algoritmo deve ser capaz de responder: a. qual o tamanho da frase; b. quantas palavras existem na frase; c. quantas vezes a dupla ma apareceu na frase. 17. Desejamos analisar o mapa de uso de um disquete. Como sabemos um disquete dupladupla de 5 1/4 tem 2 faces, 40 trilhas e 9 setores por trilha, o que d um total de 720 setores. Definir um algoritmo que leia 20 vetores ( de uma s vez), que correspondem cada vetor a um disco diferente, e determine qual o percentual de setores livres em cada um dos discos, imprimindo tal resultado. O vetor de inteiros, e se existe um valor zero, isto significa que o setor est livre. Qualquer valor diferente de zero, implica em que o setor no est livre.

18. Existe um livro de 370 pginas que foi recentemente impresso. A editora deseja fazer um estudo sobre possveis erros de impresso. Desta forma, um especialista foi convidado a levantar quantos erros existem em cada pgina. Cada valor foi digitado na forma de um vetor, formando um conjunto de 370 valores. Definir um algoritmo portugol que leia este conjunto de dados, e responda: a. qual a pgina que tem mais erros? (suponha que s existe uma e ela nica) b. quantas pginas tem zero erros? c. quantas pginas tem mais de 10 erros? 19. Uma grande empresa tem seus preos armazenados na forma de trs vetores de 650 ocorrncias cada. No primeiro, a quem chamaremos COD esto os cdigos dos produtos inteiros. No outro vetor, chamado PRE, esto os preos de cada produto, na mesma ordem de aparecimento de COD. No ltimo, chamado QTD, esto a quantidade em estoque do produto, tambm na mesma ordem de COD. Escrever um algoritmo que leia os vetores contendo cdigo, preo e quantidade e imprima o cdigo e o valor em estoque de cada produto armazenado e o valor total do estoque da empresa. VALOR = PRE[I] * QTD [I] 20. Escreva um algoritmo Portugol que leia uma linha de at 80 caracteres e informe nesta linha, quantos caracteres diferentes foram usados. Exemplo, se a linha digitada for aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, a resposta ser 1; se a linha for abcdefghijklmnopqrstuvwxyz, a resposta ser 26. 21. Em uma cidade do interior, sabe-se que, de janeiro a abril de 1993 (121 dias), no ocorreu temperatura inferior a 15C nem superior a 40C. As temperaturas verificadas em cada dia esto dispostas em uma unidade de entrada de dados. Fazer um algoritmo Portugol que calcule e imprima: . a menor temperatura ocorrida; . a maior temperatura ocorrida; . a temperatura mdia;
58

. o nmero de dias nos quais a temperatura foi inferior a temperatura mdia. 22. Criar um algoritmo Portugol que imprima todas as combinaes de apostas possveis para o jogo da Sena, onde: podemos escolher para cada aposta 6 nmeros entre 01 e 50.

CLASSIFICAO DE VETORES
a tcnica utilizada para ordenar o contedo de um vetor em ordem crescente ou decrescente, numrica ou alfabtica. Existem diversos algoritmos prontos e comprovados para realizar tal tarefa, sero apresentados trs: mtodo bolha, seleo simples e insero. Os mtodos de ordenao apresentados podem ser utilizados para ordenar vetores numricos ou alfabticos. Uma vez que cada letra possu um valor diferente da outra. A letra A tem valor menor do que a letra B, e assim por diante. Se a letra A for comparada com a letra a tambm tero valores diferentes. Cada caracter (numrico, alfabtico ou caracter especial) guardado dentro da memria de um computador segundo o valor de um cdigo. Este cdigo recebe o nome de ASCII ( American Standard Code for Information Interchange Cdigo Americano Padro para Troca de Informaes). E com base nesta tabela que o processo de ordenao trabalha, pois cada caracter tem um peso, um valor previamente determinado, segundo este padro. MTODO BOLHA Semntica: uma vez comparados 2 valores adjacentes no vetor, se eles estiverem em ordem so matidos em seus lugares, e se no estiverem so invertidos. A execuo sucessiva deste processo faz com que os menores valores comecem a subir aos poucos ( ordem ascendente) e consequentemente os maiores comeam a descer, da a analogia com uma bolha de sabo. Sintaxe: inicio {mtodo bolha} tipo VET = VETOR [ 1:5 ] inteiro; V: VET; I, AUX, LIM : inteiro; LIM 5; {tamanho do vetor} leia (V); enquanto LIM 2 faa I 2; {posiciona no segundo elemento do vetor} enquanto I LIM faa se V[I] < V[I-1] {compara o elemento anterior com o elemento posterior do vetor} ento AUX V[I-1]; {troca os elementos} V[I-1] V [I]; V[I] AUX;

59

fimse; I I +1; fimenquanto; LIM LIM -1; fimenquanto; imprima (V); fim. Demonstrar ordem crescente e decrescente atravs de teste de mesa. Exerccio: escrever o algoritmo acima utilizando o comando Para. MTODO DE ORDENAO OSCILANTE Este mtodo uma verso do mtodo bolha modificado. Semntica: Em vez de sempre ler o vetor na mesma direo, podemos inverter a direo entre passos subsequentes. Desta forma, elementos muito fora de suas posies iro mais rapidamente para suas posies corretas. Sintaxe: inicio {mtodo ordenao oscilante} tipo VET = VETOR [ 1:5 ] inteiro; V: VET; I, AUX, LIM, TROCA : inteiro; LIM 5; {tamanho do vetor} leia (V); TROCA 1; {flag determinando que houve troca} Enquanto TROCA = 1 e LIM >= 2 faa TROCA 0; {flag determinando que NO houve troca} para I de LIM at 2 passo 1 faa se (V[I 1] > V[I]) ento AUX V[I 1]; V[I 1] V[I]; V[I] AUX; TROCA 1; {flag determinando que houve troca} Fimse; fimpara; se TROCA = 1 {se houve troca} ento TROCA 0; {flag determinando que NO houve troca} para I de 2 at LIM faa se (V[I 1] > V[I]) ento AUX V[I 1]; V[I 1] V[I];

60

V[I] AUX; TROCA 1; {flag determinando que houve troca} fimse; fimpara; fimse; LIM LIM 1;
fimenquanto;

imprima (V); fim. Demonstrar ordem crescente e decrescente atravs de teste de mesa. Exerccio: escrever o algoritmo acima utilizando o comando Para. MTODO SELEO SIMPLES Semntica: pesquisa-se no vetor qual o maior (menor) valor, selecionando-o. Deve-se coloc-lo no fim (inicio) e refazer o processo desconsiderando o elemento que foi alterado por ltimo. Sintaxe: inicio {seleo simples} tipo VET = Vetor [1:5] inteiro; V:VET; LIM, INDCUR, I, J: inteiro; CORR: inteiro; LIM 5; {tamanho do vetor} I 1; {posiciona no primeiro elemento do vetor} enquanto I < LIM faa CORR V[I]; INDCUR I; J I + 1; enquanto J LIM faa {pesquisa o menor valor} se V[J] < CORR ento CORR V[J]; INDCUR J; fimse; J J + 1; fimenquanto; AUX V[I]; {troca o menor valor pela primeira posio do vetor} V[I] V[INDCUR]; V[INDCUR] AUX; I I + 1; {posiciona para comparar a prxima posio do vetor} fimenquanto;

61

fim. Demonstrar ordem crescente e decrescente atravs do teste de mesa. Exerccio: escrever o algoritmo acima utilizando o comando Para. MTODO DE INSERO Semntica: o ciclo inicia no segundo elemento, o elemento retirado do conjunto de dados, fazendo uso de uma posio auxiliar do vetor, e inserido em seu lugar definitivo, atravs da pesquisa de sua localizao correta e do deslocamento dos outros elementos do conjunto. Sintaxe: inicio {mtodo de insero} tipo VET = Vetor [0:5] inteiro; {posio 0 do vetor a posio auxiliar} V:VET; LIM, I, J: inteiro; LIM 5; {tamanho do vetor} para I de 2 at LIM faa V[0] V[I]; {retira o elemento do conjunto de dados} J I - 1; enquanto V[J] < V[0] faa {pesquisa a localizao correta deslocando os outros elementos} V[J+1] < V[J]; J J - 1; fimenquanto; V[J + 1] V[0]; {insere o elemento retirado na posio correta} fimpara; fim. Demonstrar ordem crescente e decrescente atravs do teste de mesa.

62

PESQUISA EM VETORES
Quando se trabalha com vetores, estes podero gerar grandes tabelas, onde ficaria difcil a localizao de um determinado elemento de forma rpida, mesmo que o vetor esteja classificado. Para solucionar este tipo de problema pode-se fazer uso de pesquisas em matrizes atravs de programas especficos. Sero apresentados dois mtodos para efetuar pesquisa em vetores: mtodo sequncial e mtodo binrio. MTODO DE PESQUISA SEQUNCIAL Semntica: este mtodo consiste em efetuar a busca da informao desejada a partir do primeiro elemento sequencialmente at o ltimo. Localizando a informao no caminho, a mesma apresentada. Este mtodo de pesquisa lento, porm eficiente nos casos em que um vetor encontra-se com seus elementos desordenados. Sintaxe: inicio tipo VET = vetor [1:100] inteiro; V : VET; CHAVE, I, OK : inteiro; leia (V); leia (CHAVE); {valor a ser pesquisado} OK 0; {flag determinando que o valor no foi encontrado} I 1; enquanto I 100 e OK = 0 faa se V[I] = CHAVE ento OK 1; {flag determinando que o valor foi encontrado} fimse; I I + 1; fimenquanto; se OK = 1 ento imprima (chave encontrada); seno imprima (chave no encontrada); fimse; fim. MTODO DE PESQUISA BINRIA Semntica: o mtodo , em mdia, mais rpido do que o anterior porm, exige que o vetor esteja previamente classificado. Este mtodo divide a tabela em duas partes e procura saber se a informao desejada est acima ou abaixo da linha de diviso. Se estiver acima, por exemplo, toda a metade abaixo desprezada. Em seguida, se a informao no foi encontrada, novamente dividida em duas partes, e pergunta se aquela informao est acima ou abaixo e assim ir sendo executada at encontrar ou no a informao pesquisada.

63

Pelo fato de ir dividindo sempre em duas partes o volume de dados que o mtodo recebe a denominao de pesquisa binria. Sintaxe: inicio tipo VET = vetor [1:100] inteiro; V : VET; CHAVE, INIC, METADE, FINAL : inteiro; leia (V); leia (CHAVE); {valor a ser pesquisado} INIC 1; { indica inicio do vetor} FINAL 100; {indica final do vetor} repita METADE int (INIC + FINAL) / 2; {indica posio da diviso do vetor} se CHAVE < V[METADE] ento FINAL METADE - 1; {pega a primeira parte do vetor} seno INIC METADE + 1; {pega a segunda parte do vetor} fimse; at V[METADE] = CHAVE ou INIC > FINAL; se V[METADE] = CHAVE ento imprima (chave encontrada); seno imprima (chave no encontrada); fimse; fim. EXERCCIOS 1. Ler 8 elementos em um vetor A . Construir um vetor B de mesma dimenso com os elementos do vetor A multiplicados por 5. Apresentar o vetor B na ordem crescente. 2. Ler um vetor A com 15 elementos. Construir um vetor B de mesmo tipo, sendo que cada elemento de B seja o fatorial do elemento correspondente do vetor A . Apresentar o vetor B ordenado de forma decrescente. Montar uma rotina de pesquisa binria em B para encontrar os valores de A. 3. Ler dois vetores sendo A com 20 elementos e B com 30 elementos. Construir um vetor C, sendo este a juno dos outros dois vetores. Desta forma, C dever ter capacidade de armazenar 50 elementos. Apresentar os elementos de C em ordem decrescente. Mostrar uma rotina de pesquisa sequencial em C para encontrar os elementos de A. 4. Criar um algoritmo portugol que calcule o salrio mensal dos vendedores de uma concessionria de carros importados. O salrio fixo de cada vendedor de R$ 500,00, a comisso de 7,5% sobre o valor vendido no ms. Para tanto existe um vetor contendo os nomes dos vendedores e um vetor contendo o valor vendido pelo vendedor no ms, a relao feita pelo ndice dos vetores. O algoritmo deve criar um terceiro vetor contendo o valor do salrio mensal de cada vendedor, classificar os trs vetores com base no vetor de
64

salrio mensal e imprimir qual o nome do vendedor de maior venda e o de menor venda (o valor vendido e o salrio mensal podem compor uma matriz).

MATRIZ
Pelas mesmas razes que foi criado o conceito de vetor, necessita-se tratar de outro tipo de organizao de dados: as matrizes. As estruturas de dados vetores so variveis indexadas com apenas uma dimenso, isto , uma coluna e vrias linhas, a partir de agora sero apresentadas tabelas com mais colunas, sendo assim, havero variveis no sentido horizontal e vertical. As mais comuns so as matrizes de duas dimenses por se relacionar diretamente com a utilizao de tabelas. Matrizes com mais de duas dimenses so utilizadas com menos frequncia, mas podero ocorrer momentos em que se necessite trabalhar com um nmero maior de dimenses. As linguagens computacionais so privilegiadas neste aspecto, o APL permite at 256 dimenses em algumas aplicaes e at 64 em outras. No caso de matriz bidimensional necessita-se de 2 ndices para referenciar um determinado elemento: linha e coluna. Para uma matriz tridimensional usa-se 3 ndices: plano, linha e coluna. Da mesma forma que a manipulao de um vetor necessita de uma instruo de looping (enquanto, repita ou para), no caso de matrizes dever ser utilizado o nmero de loopings relativos ao nmero de dimenses da matriz. Sendo assim, uma matriz de duas dimenses dever ser controlada por dois loopings, uma de trs dimenses far uso de 3 loopings e assim por diante. Para definir uma matriz passa-se por duas etapas, como nos vetores: 1. definio do tipo de dado: Tipo <nome do tipo> = Matriz [li1:ls1,li2:ls2,...,lsN:liN] <tipo de dados j existente>; Onde: li1, li2, liN limite inferior da primeira, da segunda e da eNsima dimenso respectivamente; ls1, ls2, lsN limite superior da primeira, da segunda e da eNsima dimenso respectivamente. 2. definio das variveis que podero conter este novo tipo de dado: <identificador 1>, <identificador 2>,... <identificador n> : <nome do novo tipo>; Exemplo: 1. Criar uma matriz 8 x 12 devidamente zerada. inicio tipo M = matriz [1:8, 1:12] inteiro; MAT:M; I,J: inteiro; para I de 1 ate 8 faca
65

para J de 1 ate 12 faca MAT[I,J] 0; fimpara; fimpara; imprima (MAT); fim. 2. Criar uma matriz de 3 dimenses 8 x 12 x 5 e ler valores para ela. inicio tipo M1 = matriz [1:8,1:12, 1:5] real; MAT1:M1; I, J, K: inteiro para I de 1 ate 8 faa para J de 1 ate 12 faa para K de 1 at 5 faa leia (MAT1[I, J,K]); fimpara; fimpara; fimpara; fim. EXERCCIOS 1. Definir um algoritmo portugol que leia os elementos de uma matriz 14 x 30 um a um, preenchendo a matriz a seguir. 2. Dada uma matriz 7 x 13 devidamente preenchida, o algoritmo deve encontrar sua matriz transposta. 3. Definir um algoritmo que some duas matrizes A e B, de 7 linhas e 8 colunas cada uma, gerando uma matriz C, tambm 7 x 8, onde cada elemento de C a soma dos 2 elementos correspondentes em A e B. 4. Definir algoritmo portugol onde dada uma matriz M1 de 6 x 9, devemos totaliz-la na vertical gerando um vetor de 9 elementos. Imprimir este vetor e a seguir, encontrar e imprimir a mdia destes 9 valores. 5. Ler dois vetores A e B, cada um com 7 elementos e construir uma matriz C de mesma dimenso onde a primeira coluna dever ser formada pelos elementos de A e a segunda coluna pelos elementos de B. 6. Ler um vetor A de 10 elementos e construir uma matriz C de duas dimenses com 3 colunas, onde a primeira coluna formada pelos elementos de A somados com o valor 5, a segunda coluna formada pelo valor de clculo de fatorial de cada elemento

66

correspondente no vetor A, e a terceira coluna dever ser formada pelos quadrados dos elementos correspondentes de A . 7. Definir algoritmo portugol capaz de ler uma matriz quadrada de ordem 23 e totalizar os elementos colocados abaixo da diagonal principal (exclusive esta), imprimindo o total ao final. 8. Defina um algoritmo portugol capaz de ler 2 matrizes de dimenses 4 x 9 e 9 x 7. Aps lidas, as matrizes devem ser multiplicadas matricialmente gerando uma sada de dimenses 4 x 7. A matriz resultado deve ser impressa ao final. Lembre-se de que existe uma lei matemtica que rege a multiplicao de matrizes. Esta lei estabelece que uma multiplicao entre matrizes poder ocorrer quando o nmero de colunas da primeira matriz igual ao nmero de linhas da segunda matriz, e que o valor resultante da terceira matriz o somatrio da multiplicao de cada elemento da coluna da primeira matriz com cada elemento da linha da segunda matriz. 9. Definir algoritmo portugol que leia duas matrizes (A e B) de dimenses 7 x 13 e gere uma terceira matriz, onde cada elemento o maior entre os elementos correspondentes em A e B. 10. Escrever um algoritmo que leia uma matriz de 23 linhas por 10 colunas. Esta matriz representa a populao dos 10 maiores municpios de cada estado brasileiro. Em cada linha, as colunas esto em ordem decrescente , com exceo da primeira coluna, que sempre representa a capital. O algoritmo deve imprimir: qual o nmero do estado de capital mais populosa; qual a mdia das populaes das capitais do Brasil; quais os nmeros dos estados e dos municpios que tem populao maior que a capital. 11. Definir um algoritmo que trabalhe com uma matriz de 129 linhas por 5 colunas, onde cada linha contm os dados de um aluno da escola e cada coluna: coluna 1 - nmero do aluno, coluna 2 - nota do aluno no 1o. bimestre, coluna 3 - nota do aluno no 2o. bimestre, coluna 4 - nota do aluno no 3o. bimestre, coluna 5 - nota do aluno no 4o. bimestre. Aps ler o conjunto de dados o algoritmo deve imprimir: qual a mdia anual de cada aluno; qual a mdia da turma em cada bimestre; nmero do aluno e em qual bimestre ocorreu sua maior nota; qual o bimestre em que ocorreu mais 0. 12. Fazer um algoritmo para corrigir provas de mltipla escolha. Cada prova tem 10 questes, cada questo valendo um ponto. O primeiro conjunto de dados a ser lido ser o gabarito para a correo da prova. Os outros dados sero os nmeros dos alunos e suas respectivas respostas e o ltimo nmero, do aluno fictcio, ser 9999. O algoritmo deve calcular e imprimir: a) para cada aluno, o seu nmero e sua nota; b) a porcentagem de aprovao, sabendo-se que a nota mnima de aprovao 6; c) a nota que teve maior frequncia absoluta, ou seja, a nota que apareceu maior nmero de vezes (supondo a inexistncia de empates).
67

13. Dado um tabuleiro de xadrez TAB onde, para facilitar a indicao das pedras, vamos convencionar: 1 - peo 2 - cavalos 3 - torres 4 - bispos 5 - reis 6 - rainhas 0 - ausncia de pedra Ler os dados e contar a quantidade de cada tipo de pea no tabuleiro em um certo momento do jogo. Tamanho do tabuleiro 8 x 8. 14. Um biblioteca possu 8 departamentos. Cada departamento contm 40 estantes capazes de conter, cada uma, 150 livros. Supondo que cada livro-padro tenha 200 pginas de 35 linhas por 60 caracteres, declarar uma varivel composta capaz de conter todos os caracteres presentes nos livros da biblioteca. 15. O Museu de Carros Antigos de Curitiba est conduzindo um levantamento dos carros antigos do Estado. Para cada carro, deve ser lida os seguintes dados: cdigo do fabricante ( 0 a 30); ano do carro ( de 1900 a 1950); condies do carro ( 1 a 4). Para permitir a execuo de vrias anlises nos dados, estes so armazenados em um conjunto tridimensional. O valor armazenado o nmero de carros encontrados com aquelas caractersticas. O algoritmo deve: criar esta estrutura e fazer a leitura dos dados para formar o conjunto de informaes; calcular e imprimir: o nmero de carros feitos em 1910 cujas condies so classificadas como boas ou excelentes - cdigo 4; o fabricante mais popular; identificar o fabricante cujos carros parecem estar em melhores condies - cdigo 4. 16. Um grupo de 100 pessoas respondeu a um questionrio composto de 10 perguntas. Cada pergunta contm somente uma entre trs respostas: Sim, No e vazio. Criar um algoritmo Portugol que leia um conjunto de dados contendo as respostas de cada pessoa para as 10 perguntas e armazene em uma matriz 100 x 10. O algoritmo deve imprimir ao final: quantas respostas foram vazio; qual a pergunta com mais respostas No - utilizar um vetor ; quantos Sim ocorreram na pergunta 7.

REGISTROS
Para a definio de estruturas complexas de dados, o Portugol oferece a ferramenta chamada registro, que so considerados tipos de dados heterogneos por permitirem armazenar vrios dados de tipos diferentes em uma mesma estrutura. Trata-se de um aglomerado de dados que pode ser acessado no todo, ou a cada um de seus elementos individualmente. Como cada elemento individual pode ser tratado separadamente e possu

68

tipo de dado especifico, leva o nome de campo. Logo, um registro pode ser considerado um conjunto de dados logicamente relacionados, mas de tipos de dados diferentes. . Os tipos registros devem ser declarados antes das variveis, pois poder ocorrer a necessidade de se declarar uma varivel com o tipo registro anteriormente atribudo. Para se declarar um tipo registro em Portugol o procedimento semelhante ao de vetores e matrizes:
1.

definio do tipo de dado: Tipo <nome do tipo> = REGISTRO <campo 1>, <campo 11>, ... ,<campo 1n> : <tipo de dado j existente>; <campo 2> : <tipo de dado j existente>; ..... <campo n> : <tipo de dado j existente>; fimregistro;

Onde: campo so identificadores de variveis. 2. definio das variveis que podero conter este novo tipo de dado: <identificador 1>, <identificador 2>,... <identificador n> : <nome do novo tipo>; Quando necessrio, possvel definir um campo de um registro como tendo um contedo vetor ou matriz. Outro conceito interessante a definio de um vetor com contedo um registro, esta estrutura bastante til para a definio de organizao de dados. ACESSO AOS DADOS Para fazer acesso a um campo contido em um registro precisa-se indicar todo o caminho necessrio para encontrar a informao, separando-os por um ponto ( . ): <nome do registro> . < nome do campo> Desta forma pode-se atribuir um valor a um campo do registro, imprimir tal valor e utilizar o valor em expresses. Exemplo: declarar um registro para armazenar um cadastro de pessoal Tipo REG1 = registro NOME : caracter [40]; END : ENDEREO; DTNASC : DATA; CPF, RG : inteiro; SAL : V;

fimREG1;
69

Tipo ENDEREO = registro

RUA: caracter[20]; NUM : inteiro; CIDADE : caracter [15]; ESTADO : caracter [2]; CEP : inteiro;

fimENDEREO; Tipo DATA = registro D, M, A : inteiro; fimDATA; Tipo V = vetor [0:11] real; CAD : REG1; leia (CAD); {acesso ao registro com todos os seus campos} se CAD.DTNASC.D = 29 e CAD.DTNASC.M = 10 ento imprima (CAD.END); {todos os campos do registro ENDEREO} fimse; para I de 0 at 11 faa imprima ( CAD.SAL[I]); fimpara;

{salrio dos 12 ltimos meses}

EXERCCIO 1. Declarar um registro com os dados: nome, data de nascimento (dia, ms e ano), tem dependentes (S/N), sexo ,cpf, endereo (rua, nmero, cep, cidade, estado). 2. Declarar um registro com os dados: nome, cpf, identidade, horas trabalhadas no ano (ms a ms), salrio, fgts. 3. Declarar um registro com os dados: cdigo do material, nome do material, nmero de peas em estoque, preo unitrio. 4. Uma escola cadastrou as notas bimestrais de seus alunos em registros no formato: matrcula : inteiro; nome : caracter[40]; nota do trabalho 1, nota do trabalho 2 , nota da prova : real; Fazer um algoritmo que leia os registros acima at que seja lida matrcula = 0 e calcule a mdia de cada aluno, pela frmula: media = (( trabalho 1 * 2) + trabalho 2 + (prova * 7)) / 10 Ao final deve ser impresso: o nome do aluno, sua mdia e a mensagem: Parabns se media for maior ou igual a 70 e Precisamos estuda mais se mdia for abaixo de 70.

70

5. Um universidade realizar seu concurso vestibular em duas 3 unidades, a instituio deseja saber qual unidade est mais prxima da residncia do candidato. Para tanto cada candidato preencheu um registro no formato: matrcula: inteiro; distncia para unidade 1, distncia para unidade 2, distncia para unidade 3 : real; O algoritmo deve gerar, para cada candidato, outro registro no formato: matrcula: inteiro; nmero da unidade mais prxima : inteiro; distncia desta unidade : real; Os dados terminam quando for lida matrcula = 0. 6. Uma organizao tem um conjunto de registros de vendas de um ano. Tais registros tem o formato: REG dia, ms : inteiro; valor : real; Criar um algoritmo portugol capaz de ler os dados e imprimir os totais mensais de venda. O processamento termina quando for lido um dia igual a 0. Utilizar um vetor de 12 posies indexado pelo campo ms do registro. 19. Uma companhia area possui 6 tipos de avies: 747, 737-200, 737-300, 727, A300 e Bandeirantes. Cada viagem realizada por cada avio gera um registro no formato: tipo do avio : caracter [11]; nmero de passageiros : inteiro; distncia percorrida : real; Fazer um algoritmo que leia tais registros at que seja lido tipo do avio igual a branco. O algoritmo deve totalizar por tipo de avio o nmero de passageiros e total da distncia percorrida no perodo. Ao final deve ser impresso um relatrio informando a produtividade de cada tipo de avio, isto , nmero total de passageiros divido pela distncia total. 20. Uma seguradora possui um cadastro de seus segurados contendo registros com os campos: matrcula : inteiro; nome : caracter[40]; data de nascimento : dia, ms e ano; sexo : caracter[1]; Fazer um algoritmo que leia tais registros at que seja lido uma matrcula = 0, este algoritmo deve conter uma funo para calcular a idade de segurado, com base na data atual, em dias. Ao final devem ser gerados os seguintes registros: HOMENS nome : caracter[40] idade : inteiro MULHERES nome: caracter [40]; idade : inteiro;

71

Вам также может понравиться