Sei sulla pagina 1di 92

ALGORITMOS EM PROGRAMAO ESTRUTURADA

PEDRO KANTEK com adaptao Patricia Rcker de Bassi

2000

NDICE
ALGORITMOS EM PROGRAMAO ESTRUTURADA................................................................................................1 2000.............................................................................................................................................................................................1 NDICE......................................................................................................................................................................................2 ....................................................................................................................................................................................................3 INTRODUO.........................................................................................................................................................................4 ALGORITMOS.........................................................................................................................................................................5 LGICA.....................................................................................................................................................................................6 PROGRAMAO ESTRUTURADA.....................................................................................................................................6 SEQUNCIA SIMPLES IF-THEN-ELSE DO-WHILE........................................................7 PORQUE O PORTUGOL ?.....................................................................................................................................................8 OUTRAS FERRAMENTAS DE REPRESENTAO DE ALGORITMOS..........................................................................8 O PORTUGOL .......................................................................................................................................................................11 IDENTIFICADOR................................................................................................................................................................11 LETRA - 26 LETRAS DO ALFABETO MAISCULAS..............................................................................................................................11 DGITOS - 0 A 9........................................................................................................................................................................11 VARIVEIS ........................................................................................................................................................................12 TIPOS DE VARIVEIS.....................................................................................................................................................12 ATRIBUIO .....................................................................................................................................................................13 A 1.....................................................................................................................................................................................13 OPERADORES ....................................................................................................................................................................14 OPERADORES SO SMBOLOS UTILIZADOS EM EXPRESSES QUE CONTM VARIVEIS , CONSTANTES E FUNES. DE ACORDO COM OS TIPOS DE DADOS DAS VARIVEIS E O RESULTADO DA OPERAO, OS OPERADORES DIVIDEM -SE EM TRS TIPOS:........................................................14 ARITMTICOS ...................................................................................................................................................................14 RELACIONAIS ...................................................................................................................................................................14 LGICOS ............................................................................................................................................................................15 E........................................................................................................................................................................................15 NO...................................................................................................................................................................................15 DIV E MOD .........................................................................................................................................................................15 PRIORIDADES .............................................................................................................................................................15 QUALIDADES DE UM BOM ALGORITMO....................................................................................................................21 BLOCOS...............................................................................................................................................................................22 SEQUNCIA SIMPLES.......................................................................................................................................................22 COMANDOS DE ENTRADA E SADA.............................................................................................................................23 FLUXOGRAMA...................................................................................................................................................................25 PORTUGOL..........................................................................................................................................................................25 ALTERNATIVA SIMPLES.................................................................................................................................................27 ALTERNATIVA COMPOSTA............................................................................................................................................28 ANINHAMENTO ................................................................................................................................................................29 NEGAO DOS OPERADORES ...................................................................................................................................30 MULTIPLA ESCOLHA.......................................................................................................................................................32 COMANDOS DE REPETIO...........................................................................................................................................40 ENQUANTO.....................................................................................................................................................................40 REPITA.............................................................................................................................................................................42 UMA COMPARAO ENTRE OS COMANDOS ENQUANTO E REPITA....................................................................43 PARA.................................................................................................................................................................................48 NOVOS TIPOS DE DADOS .................................................................................................................................................57 VETORES ........................................................................................................................................................................57 Criao de Vetores ..........................................................................................................................................................58 CLASSIFICAO DE VETORES......................................................................................................................................62 2

MTODO BOLHA............................................................................................................................................................62 MTODO SELEO SIMPLES.......................................................................................................................................63 MTODO DE INSERO................................................................................................................................................64 PESQUISA EM VETORES..................................................................................................................................................64 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 . .....................................................................................................................................64 MTODO DE PESQUISA SEQUNCIAL.......................................................................................................................64 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..............64 MTODO DE PESQUISA BINRIA................................................................................................................................65 fimse;.............................................................................................................................................................................66 MATRIZ................................................................................................................................................................................66 ACESSO AOS DADOS......................................................................................................................................................71 MODULARIZAO..............................................................................................................................................................73 BLOCO.................................................................................................................................................................................75 PROCEDIMENTO................................................................................................................................................................76 FUNO..............................................................................................................................................................................77 RECURSIVIDADE.................................................................................................................................................................81 ARQUIVOS.............................................................................................................................................................................84 MANIPULAO....................................................................................................................................................................85 CONCEPO DE ARQUIVOS............................................................................................................................................85 COMANDOS DE MANIPULAO DE ARQUIVOS........................................................................................................86 EXERCCIOS DIVERSOS...................................................................................................................................................91

INTRODUO
A arte e cincia de programar computadores algo fascinante. Uma das melhores definies desta atividade pode ser considerada - programar emprestar um pouco de nossa inteligncia ao computador. Quando o mesmo trabalha, como se a inteligncia emprestada do programador estivesse trabalhando. A tecnologia de fabricao de computadores tem evoludo de maneira muito rpida nos ltimos tempos. A programao de computadores nem tanto, embora tambm tenha tido alguns progressos importantes. Existem razes para esta diferena. A construo de hardware (equipamento) engenharia. Tudo pode ser matematicamente provado, produzido em srie, rejeitado por amostragem, e, a partir de um original, sua cpia pode ser vendida aos milhes. Com o software quase tudo ao contrrio. mais arte do que engenharia, at hoje no se pode comprovar matematicamente a correo de cdigo, cada necessidade demanda a construo de modelos especficos, que s se aplicam naquele momento (no espao e no tempo). Para ns, seres humanos, uma vantagem. Pois, enquanto a produo de hardware (ou pode ser) em grande parte robotizada, a produo de software ainda exige um bom crebro por trs. As restries que ainda existem sobre o hardware impedem a programao dos computadores em linguagem natural, embora existam estudos nesta rea. Hoje ainda no possvel dialogar com um computador como se fala com uma pessoa medianamente inteligente. Os computadores ainda no conseguem tal proeza. Para programar computadores, portanto, precisamos aprender uma linguagem de programao. Estas linguagens so chamadas artificiais justamente por terem sido inventadas para esta finalidade, ao contrrio das naturais que surgiram para comunicao de seres humanos. Como se destinam a serem entendidas por mquinas, tais linguagens so bastante pobres em termos de expresses, quantidade de termos e facilidades de construo de frases. Entretanto, quando os primeiros computadores foram construdos a nica linguagem entendida por eles era a binria. Sequncias interminveis de uns e zeros, algo assim como 00000000001010101111110011111000101010100001111010100011. Chamou-se a isto, mais tarde, linguagem de primeira gerao. A seguir, o primeiro melhoramento: o assembler ou montador, que era um programa capaz de entender instrues escritas em uma linguagem um pouco mais humana, e traduzir cada uma destas instrues em sua expresso binria correspondente. Junto com este programa criou-se a primeira linguagem: o assembler, at hoje utilizado, ainda que muito raramente e que simboliza a segunda gerao de linguagens. Programar em assembler exige muito conhecimento e pacincia, a mquina precisa ser conhecida em inmeros detalhes de construo, os programas so longos e difceis, principalmente sua manuteno. Mas esta a linguagem mais eficiente do ponto de vista dos consumos dos recursos de mquina, isto , ela gera programas velozes e pequenos. Depois, vieram as linguagens de terceira gerao: a primeira foi o FORTRAN, depois COBOL, PL/I, ALGOL, PASCAL, C e outras menos votadas: BASIC, ADA, APL. H um distanciamento do programador em relao mquina, e uma aproximao do mesmo em relao ao problema a resolver.

ex . i e

Estas linguagens so mais fceis de aprender e embora gerem programas maiores e mais lentos, aumentam em muito a produtividade humana de escrever cdigo de programao. As linguagens de quarta gerao tem as seguintes caractersticas: facilidade para criar e gerir banco de dados; so implementadas de forma interpretada, so consideradas amigveis (user friendly), geram relatrios e entrada de dados de forma automtica e tem facilidade de pesquisas. Um exemplo a ferramenta ACCESS. Existem, tambm, as linguagens voltadas para objetos como VISUAL BASIC, VISUAL C entre outras. E a evoluo continua... Antes de iniciar o estudo de programao, necessrio considerar que um computador nada mais do que uma ferramenta utilizada para solucionar problemas que envolvam a manipulao de informaes, sendo que estas informaes classificam-se a grosso modo em dois tipos bsicos: dados e instrues (ou comandos). Os dados so representados pelas informaes a serem tratadas ou processadas por um computador As instrues ou comandos so representadas pelo conjunto de palavras-chave (ou vocabulrio) de uma determinada linguagem de programao, que tem por finalidade comandar em um computador o seu funcionamento e a forma como os dados armazenados devero ser tratados. Para se criar um programa que seja executvel dentro de um computador, deve-se ter em mente trs pontos de trabalho: a entrada de dados, o seu processamento e a sada dos mesmos. Sendo assim, todo programa estar trabalhando com estes trs conceitos. Se os dados forem entrados de forma errada, sero processados de forma errada e consequentemente, resultaro em respostas erradas. Desta forma, dizer a algum que foi erro do computador ser um tanto medocre, se houve algum erro, porque foi causado por falha humana. Realmente impossvel um computador errar por vontade prpria, pois vontade uma coisa que os computadores no tem.

ALGORITMOS
Segundo mestre Aurlio, algoritmo processo de clculo, ou de resoluo de um grupo de problemas semelhantes, em que se estipula, com generalidade e sem restries, regras formais para a obteno do resultado ou da soluo do problema. Do ponto de vista da informtica, algoritmos a regra de soluo de um problema, isto , surgida uma necessidade buscar-se- uma soluo, ou construir-se- um algoritmo capaz de solucionar o problema. J um programa de computador, segundo Wirth, um formulao concreta de algoritmos abstratos, baseados em representaes e estruturas especficas de dados. Isto : PROGRAMA = ALGORITMOS + ESTRUTURAS DE DADOS Outra definio de algoritmos, esta dos autores Angelo Guimares e Newton Lages: algoritmo a descrio de um padro de comportamento, expressado em termos de um repertrio bem definido e finito de aes primitivas, das quais damos por certo que elas podem ser executadas. O conceito de algoritmo deve ser entendido, para sua correta compreenso, em seus dois aspectos, a quem chamaremos esttico e temporal. Na viso esttica, um algoritmo um conjunto de ordens, condies, testes e verificaes. No seu aspecto temporal, o algoritmo passa a ser vivo, pois atual sobre um conjunto de dados de entrada, para gerar os correspondentes dados de sada.

Tais caractersticas no podem ser separadas, elas esto intrinsecamente ligadas. A dificuldade em fazer bons algoritmos ter em mente, enquanto se escreve o algoritmo (aspecto esttico) o que ele vai fazer com seus dados (aspecto temporal).

LGICA
Lgica definida basicamente como sendo o estudo das leis do raciocnio e do modo de aplic-las corretamente na demonstrao da verdade. Chamamos de algoritmo lgico aquele algoritmo cujas instrues esto dispostas ordenadamente e de maneira compreensvel por qualquer pessoa que possua conhecimento bsico sobre o assunto. Isto , um algoritmo deve ser facilmente entendido, sem que seja necessria uma grande perda de tempo para a traduo da idia contida no mesmo. Um algoritmo lgico deve ser, tambm, formado apenas pelo nmero mnimo de instrues necessrias para a resoluo do problema referido. Cada pessoa analisa um problema de uma forma diferente, h uma certa tendncia em complicar a sua soluo. Sendo assim, deve-se pensar muito na soluo desejada, analisando todas as possibilidades, ao invs de utilizar a primeira soluo que vier cabea, sob pena de complicar o algoritmo de tal modo, que quando for necessria uma modificao, gastar-se- mais tempo tentando entend-lo do que criando-o novamente com as alteraes desejadas. Porm, o problema da complexidade no est presente apenas na elaborao do algoritmo, mas tambm na sua codificao em uma determinada linguagem de programao.

PROGRAMAO ESTRUTURADA
O termo programao estruturada nasceu nos fins da dcada de 60, quando Edsger Dijkstra escreveu um artigo publicado pela Communications of the ACM, cujo ttulo O comando GOTO prejudicial. Dijkstra observou que a qualidade dos programadores decai em funo do nmero de GOTOs usados em seus programas. Segundo ele, comandos GOTOs tendem a criar caminhos de lgica confusos e programas pouco claros. A sua recomendao foi de que o comando em questo fosse excludo das linguagens de programao de alto nvel. Nessa poca tambm, (1966) dois professores italianos G. Jacopini e C. Bohm, provaram matematicamente que qualquer lgica de programao poderia ser derivada de trs tipos bsicos de procedimentos, como se v na figura a seguir.

AS 3 FERRAMENTAS DA PROGRAMAO ESTRUTURADA

SEQUNCIA SIMPLES

IF-THEN-ELSE

DO-WHILE

A importncia desta descoberta para o software teve tanto impacto quanto a de que qualquer forma lgica de hardware pode ser construda pelas combinaes das portas AND, OR e NOT. A programao estruturada pode ser definida basicamente como sendo uma tcnica de programao, na qual a construo de um programa feita com base nas estruturas simples de controle definidas acima. A rigidez imposta por estas estruturas um fator importante para a compreenso do programa, pois uma vez que no existem comandos de desvios (GOTO), o programador obrigado a utilizar uma lgica coerente que se adapte s estruturas. Desse modo o programa torna-se inteligente, j que no possvel criar cdigos que abram margem para uma falta de ordenao na lgica, cdigos absurdos, programas poludos e de difcil compreenso. Com a utilizao da programao estruturada um programa tem, obrigatoriamente, incio, meio e fim, pois no existem desvios, as estruturas devem ser dispostas numa ordem tal que, chegando ao final do cdigo, um processamento completo tenha sido executado. Como se fosse uma caixa preta, com somente uma entrada e uma sada.

PORQUE O PORTUGOL ?
Portugol uma tcnica narrativa denominada pseudo-cdigo, tambm conhecida como portugus estruturado. Esta tcnica de algoritmizao baseada em uma PDL Program Design Language (Linguagem de Projeto de Programao). A forma original de escrita conhecida como ingls estruturado, muito parecida com a notao da linguagem Pascal. A PDL usada como referncia genrica para uma linguagem de projeto de programao, tendo como finalidade mostrar uma notao para elaboraes de algoritmos, os quais sero utilizados na definio, criao e desenvolvimento de uma linguagem computacional (Pascal, C, Delphi, Visual-Objects, Clipper) e sua documentao. A diferena entre uma linguagem de programao de alto nvel utilizada em computao e uma PDL, que esta no pode ser compilada em um computador. Existem inmeras verses de Portugol, cada professor tem a sua, assim como cada empresa pode definir um pseudo-cdigo. importante salientar que a sintaxe e a semntica da construo de Portugol so arbitrados por algum, segundo seus critrios, mas UMA VEZ ESTABELECIDO UM PADRO, ELE PRECISA SER RELIGIOSAMENTE SEGUIDO. Esta restrio tem duas vertentes: - h que haver um mnimo de concordncia para que outras pessoas possam ler e entender o que escrevermos. - uma das principais caractersticas de um bom programador a disciplina intelectual. O portugus, como qualquer outra linguagem natural, tem inmeras desvantagens. No entendido pela mquina, sua traduo bastante complexa, ambguo podendo gerar interpretaes errneas, e muito extenso. Logo, no um linguajar adequado para expressarmos algoritmos. Devemos lembrar sempre que a margem de interpretao do computador sempre ZERO. J um linguagem de programao, mesmo que de alto nvel, como o Pascal ou o C, exigem um conhecimento da mquina que ainda no temos. Tambm importante salientar que idealmente falando, no uma boa poltica enfrentar dois problemas interligados ao mesmo tempo. Isto , no convm misturar dificuldades lgicas com dificuldades da linguagem de programao. J dizia Dijkstra (devemos) reconhecer que temos uma cabea pequena, e que melhor tratar de conviver com ela e respeitar suas limitaes e que a regra urea da programao estruturada DIVIDIR PARA REINAR. Nossos programas em Portugol vo deixar de lado inmeras tarefas que so imprescindveis para o programa rodar em um computador, tais como: instrues de ambientao na compilao de programas, descries de operaes de entrada/sada complexas, pouca ou nenhuma preparao de contadores e chaves, etc. Para tanto, existe uma disciplina anexa a esta, onde vai se aprender a linguagem de programao. Neste momento, ento, a preocupao passa a ser a mquina e no mais a lgica do algoritmo que j deve estar consolidado. OUTRAS FERRAMENTAS DE REPRESENTAO DE ALGORITMOS Alm do Portugol existem outras formas de representar algoritmos, podendo-se citar duas outras linguagens: fluxogramas e diagramas de Chapin.

Os fluxogramas tem importncia histrica em processamento de dados, pois foi a primeira representao de programas. Ela foi desenvolvida pelos profissionais de anlise de sistemas e por alguns profissionais de Organizao, Sistemas e Mtodos. Tem como finalidade descrever fluxos, manual ou mecnico, especificando os suportes usados para os dados e as informaes. Usa smbolos convencionais, permitindo poucas variaes. Esta ferramenta perdeu sua condio de nica ferramenta em uso, entre outras razes, pelas seguintes: - permite a construo de algoritmos no estruturados, logo no servem para o contexto da programao estruturada; - exigem capricho, demandando muito trabalho para serem feitos e mantidos; - como s se escreve dentro dos quadrinhos, necessrio muito papel para definir um algoritmo completo, alm de dificultar o manuseio; - mesmo com o advento de programas para trabalhar fluxograma, como Flowchart, Autoflow e outros, eles no so muito prticos para este trabalho. Outra possibilidade de representao atravs dos diagramas de Chapin ou estructogramas que foram desenvolvidos por Nassi e Schneiderman e ampliado por Ned Chapin, os quais resolveram substituir o fluxograma tradicional por um diagrama de quadros que permite apresentar uma viso hierrquica e estruturada da lgica do programa. A grande vantagem de usar este tipo de diagrama a representao das estruturas que tem um ponto de entrada e um ponto de sada e portanto, so compostos pelas estruturas bsicas de controle da programao estruturada. Enquanto difcil mostrar o embutimento e a recursividade com o fluxograma tradicional, torna-se mais simples mostr-los com o diagrama de Chapin, bem como, codific-los em qualquer linguagem de programao estruturada. Porm, alguns autores consideram esta ferramenta um pseudo-cdigo como o Portugol, apenas escrito de maneira diferente, assim, no ser tratada esta representao aqui. Para representar as estruturas de comando de forma completa, elas sero apresentadas no formato Portugol e Fluxograma.

Exemplo: Definir um algoritmo que leia dois valores A e B e imprimia o produto entre eles se A for par e imprima o somatrio deles se A for impar. FLUXOGRAMA
inicio

DIAGRAMA DE CHAPIN leia A leia B

PORTUGOL inicio A,B,C : inteiro; leia (A); leia (B); se A mod 2 = 0 ento C A * B; seno C A + B; fimse; imprima ( C ); fim.

leia A

A par ?
V F

leia B

C=A*B imprima C

C=A+B

V A par

C = A* B

C= A + B

imprima C

fim

10

O PORTUGOL
A seguir as principais regras de sintaxe e de construo da linguagem Portugol:

IDENTIFICADOR
O elemento bsico da linguagem o identificador. Sua construo dada pelo diagrama a seguir:

identificador

letra letra

dgito

Considerando-se: Letra - 26 letras do alfabeto maisculas Dgitos - 0 a 9 Deve-se atentar que o branco no faz parte do rol de caracteres vlidos, o que faz com que o identificador no possa ser constitudo de mais de uma palavra. Pode-se utilizar, neste caso, o separador _ , chamado sublinha ou underscore. Exemplos vlidos : NOME SOMA_TERMOS RAIZ1 X234 SALDO01 SALDO DEVEDOR 123SALDO

Exemplos no vlidos :

Regras de bom senso para batizar o identificador: 1. cada identificador deve ter seu nome o mais prximo possvel de sua funo; 2. o identificador no deve ser to pequeno que fique impossvel identific-lo pelo nome, nem to longo que seja cansativo de escrev-lo 3. padronizar os identificadores, em algoritmos, sempre em letras maisculas para facilitar a anlise do mesmo. Ainda que as linguagens de programao faam diferenciao entre letras maisculas e minsculas.

11

VARIVEIS
Varivel algo que pode ser alterado, isto , no constante. Variveis de memria so endereos da memria RAM (Randomic Access Memory) do computador, onde so armazenados temporariamente os dados utilizados por um programa durante seu processamento, e que, como diz o prprio nome, podem ter seus contedos alterados durante o processamento do programa. Para se utilizar o conceito de varivel, imagine que a memria de um computador um grande arquivo com vrias gavetas, onde cada gaveta pode apenas armazenar um nico valor por vez , seja ele inteiro, real, caracter ou lgico. Se um grande arquivo com vrias gavetas h que se concordar que necessrio identificar com um nome a gaveta que se pretende utilizar. O nome de uma varivel utilizado para sua identificao e posterior uso dentro de um programa, desse modo no necessrio saber a posio de cada byte (informao) dentro da memria do computador Quando feita a definio de variveis no algoritmo, necessita-se indicar o nome que ser dado a varivel (identificador) e qual o tipo de informao que ela ir conter. Dependendo do tipo de informao ser designado um espao maior ou menor de memria onde ocorrer o armazenamento. TIPOS DE VARIVEIS Existem quatro tipos bsicos de variveis em Portugol: INTEIRO, REAL, CARACTER E LGICO. Estes tipos tambm so conhecidos como tipos primitivos de dados. O tipo de dado INTEIRO uma varivel numrica que pode conter nmeros inteiros, positivos ou negativos. O tipo de dado REAL outra varivel numrica que pode conter qualquer nmero real, isto , inteiro, fracionrio, positivo ou negativo. Tipo de dado CARACTER uma varivel que pode armazenar em seu contedo todas as letras do alfabeto, todos os algarismos e todos os caracteres especiais (& # @ ? *, etc). Uma varivel do tipo caracter no pode ser utilizada em expresses aritmticas, mesmo que contenha apenas algarismos. So caracterizados como tipos LGICOS os dados com valores VERDADEIRO e FALSO sendo que este tipo de dado poder representar apenas um dos dois valores por vez. Ele chamado por alguns de tipo booleano, devido contribuio do filsofo e matemtico George Boole na rea da lgica matemtica. O tipo caracter traz consigo uma pequena dificuldade, que a necessidade de estabelecer qual o seu tamanho mximo, em nmero de caracteres. Esta atitude necessria para informar a quem l o algoritmo quanto de espao reservar para conter esta varivel. Os outros tipos de variveis tem tamanho pr-determinados e fixos.

12

Uma varivel quando definida ganha um tipo de dado, e posterior referncias de valor a esta varivel devero respeitar seu tipo de dado original. A forma de definir variveis dentro de um algoritmo :

identificador

inteiro

real

caracter lgico ATRIBUIO


O comando de atribuio aquele que permite colocar valores nas variveis ou alterar seu contedo, obedecendo o tipo de dado definido para ela. Para tanto usaremos o smbolo . Sua sintaxe :

identificador

expresso

O novo valor atribudo varivel feito durante o processamento do programa utilizado e pode ser uma constante, o resultado de uma expresso ou o valor de outra varivel. Exemplo: A 1 B 1 + 2 importante notar que: - a expresso que se encontra do lado direito da atribuio deve ser compatvel com o tipo de dado definido para a varivel; - na atribuio de varivel inteira, a expresso dever ser uma expresso inteira, isto , sem parte fracionria;

13

- na atribuio de variveis do tipo real, a expresso dever ser numrica, sem nenhuma outra restrio; - na atribuio de variveis caracter o valor dever estar envolvido por aspas . Ele nunca poder ter um tamanho maior do que aquele estabelecido para a varivel. Se isto acontecer, o valor ser truncado. - na atribuio de variveis lgicas deveremos usar as palavras VERDADEIRO e FALSO, ou quando no houver risco de confuso, podemos usar as abreviaturas V e F. Exemplo: A 1 ; B V ;

inteiro ou caracter caracter ou lgico

OPERADORES
Operadores so smbolos utilizados em expresses que contm variveis, constantes e funes. De acordo com os tipos de dados das variveis e o resultado da operao, os operadores dividem-se em trs tipos: - aritmticos - relacionais - lgicos

ARITMTICOS
So aqueles que atuam apenas sobre constantes, variveis e funes numricas, gerando um resultado numrico em uma expresso. So eles:

+ * / ** -

adio subtrao binria multiplicao diviso exponenciao menos unrio

Pode-se tambm utilizar as funes matemticas usuais e as conhecidas da linguagem de programao, como: sen(x), cos(x), abs(x), int(x), frac(x), log(x), sqrt(x)

RELACIONAIS
So aqueles que realizam uma comparao entre duas expresses e geram resultados lgicos, isto Verdadeiro ou Falso, so eles: = <> ou > < >= ou <= ou igual diferente maior que menor que maior ou igual menor ou igual

14

LGICOS
So aqueles que geram resultados lgicos atravs da comparao entre duas expresses lgicas, so trs: conjuno disjuno negao E OU NO aquele que exige que todos os termos da expresso sejam verdadeiros para que a expresso inteira seja verdadeira. aquele que exige que apenas um dos termos da expresso seja verdadeiro para que a expresso inteira seja veradeira. aquele que inverte ou nega o valor lgico de um elemento.

Os operadores lgicos tem seu resultado baseado na Tabela Verdade, eles operam sobre variveis lgicas (V ou F) e tem como resultado valores lgicos (V ou F). OU V F V V V F V F E V F V V F F F F NO V F F V

DIV E MOD
So duas importantes funes matemticas que atuam sobre nmeros inteiros e do como resultado tambm nmeros inteiros. Div - resultado inteiro de uma diviso inteira Mod - resto inteiro de uma diviso inteira PRIORIDADES Na execuo de um comando complexo, podemos encontrar duas ou mais operaes numricas uma ao lado da outra, e neste caso devemos seguir regras de prioridades de operadores para sabermos qual ser executado primeiro. No Portugol as prioridades so: PRIORIDADE 1 2 3 4 5 6 7 8 9 10 COMANDO parnteses funes menos unrio ** *e/ +erelacionais lgicos NO E OU

15

Se houverem duas operaes de mesma prioridade, as mesmas, sero realizadas da esquerda para a direita, como na matemtica. SUGESTES PARA MAIOR CLAREZA DAS EXPRESSES 1. Definir linhas pequenas gerando maior clareza e auto-documentao; 2. Quebrar um comando complexo em diversos mais simples; 3. Usar e abusar de parnteses, mesmo que redundantes, assim no precisamos decorar as regras de prioridade.

16

RESUMO Identificador (nome de varivel) - Sempre maisculo - Comea com letra - Continua com letra / dgitos - Tamanho ilimitado Ex.: MEDIA, SALD34, SAL_CONT Tipos de variveis Inteiro: nmeros inteiros, positivos / negativos Real: nmeros inteiros / fracionrios, positivos/ negativos de qualquer magnitude Caracter: sequncia de caracteres Lgico: VERDADEIRO ou FALSO Definio: Ident[ , ident]: inteiro; : real; : caracter [tam]; : lgico; Comando de atribuio ident expresso; Expresso pode ser somente valor. Deve ser compatvel com o tipo da varivel. Se tipo for caracter deve ser entre aspas e com tamanho compatvel. Se for tipo lgico somente V ou F. Operadores aritmticos + adio - subtrao * multiplicao / diviso fracionria - unrio: oposto sen (x): seno de x radianos cos (x): cosseno de x radianos abs (x): valor absoluto x int (x): parte inteira de x frac (x): parte fracionria de x log (x): logaritmo de x n div m: quociente da diviso inteira de n por m n mod m: resto inteiro da diviso inteira de n por m Operadores Lgicos E : V somente quando ambos os operandos so V V V F F E E E E VV FF VF FF OU : F somente quando ambos os operandos
forem F

V F V F

OU OU OU OU

V V F F

e V e V e V e F

NO : a negao
NO V F NO F V

Prioridade das Operaes 1. Parnteses 2. Funes 3. Menos unrio (oposto) 4. Potenciao 5. Multiplicao e diviso 6. Adio e subtrao 7. Comparaes > Maior < Menor = Igual Maior ou igual Menor ou igual <> Diferente 8. Operadores lgicos E OU NO 9. Operaes de mesma prioridade so resolvidas da direita para a esquerda.

17

EXERCCIOS
1. Informe o valor esperado para a varivel VAR1 VAR1 (1 + (2 * (3 + 1) / 2 )) - 2 VAR1 3 ** 3 VAR1 2 * int(1,999) VAR1 abs( - (3 - 4)) VAR1 int (1,5) - frac(1,.5) VAR1 2 / (2 * 3) 2. Quanto 400 MOD 51 a. b. c. d. e. f. 30 MOD 7 (5 MOD 4) + (22 DIV 10) + (3 MOD 2) 4376 MOD 10 4376 MOD 100 4376 MOD 1000 4376 MOD 10000

3. Informe qual o valor da varivel VAR2 VAR2 VERDADEIRO VAR2 NAO FALSO VAR2 NAO NAO VERDADEIRO VAR2 FALSO OU FALSO VAR2 VERDADEIRO E (NAO VERDADEIRO) VAR2 (NAO FALSO) OU (NAO VERDADEIRO) VAR2 (FALSO OU VERDADEIRO) E (NAO VERDADEIRO) VAR2 FALSO E FALSO VAR2 VERDADEIRO E VERDADEIRO 4. Informe qual o valor final para VAR3 VAR3 (3 2) OU (1 = 3) VAR3 (1 + 1) = (3 - 1) VAR3 (int (1,5 * 4) > 6) E (1 <> 2) 5. Informe qual o valor para VAR4 VAR4 ( frac(0,999) - 1) > 0 VAR4 1 = 2 VAR4 1 + 2 = 2 VAR4 0.5 2.5 - int(2,900) VAR4 3 > 1 + 1 VAR4 1 + 3 * 4 VAR4 2 ** 3 * 2 + 1 VAR4 1 * 2 * 3 * 4 * 0 + 1 VAR4 33 > (32 + int(2,45) - frac(0,5)) VAR4 (4 ** (2 / 2 ** 2) 3,5) E ( 1 = 3 ** 0) 6. Assinalar com um X os identificadores vlidos:

18

( ( ( ( (

) VALOR ) "NOTA" ) X2 ) SAL_LIQ )3X4

( ( ( ( ( (

) NOMEMP ) SALA215 ) AH! ) M{A} ) A1B2C3 ) "NOME"

( ( ( ( (

) MARIA ) B248 ) KM/H ) XYZ ) NOTA*DO*ALUNO

7. Considerando P = 3; Q = 4; R = 12 e S = 45; NOME = "MIRIAM"; PROFISSAO = "MEDICO", qual o valor de RESP em cada uma das expresses abaixo: a. RESP 100 * (Q div P ) + R b. RESP (P + 1 >= SQRT(Q)) e NOME <> "ANA" e PROFISSAO = "MEDICO" c. RESP P * ( R mod 5) - Q / 2 d. RESP (S mod (P + 1)) - Q * R e. RESP PROFISSAO = "MEDICO" ou (Q mod P) = 0 8. Sendo: SOMA, NUM, X variveis numricas NOME, COR, DIA variveis caracter e TESTE, COD, TUDO variveis lgicas, assinalar os comandos considerados invlidos: ( ( ( ( ( ) NOME 5; ) SOMA NUM + 2 * X; ) TESTE COD ou X ** 2 <> SOMA; ) TUDO SOMA; ) COR "PRETO" - SQRT(X) ( ( ( ( ( ) X NOME >= COD; ) SOMA + 2 X ** 2 - SQRT( NUM); ) DIA "SEGUNDA"; ) NUM "*ABC*"; ) X X + 1

9. Considerando: A = 3; B = 16, NOME = "ANA", PROFISSAO = "ADVOGADO", TESTE= F avaliar as expresses abaixo e dar sua resposta: a. SOL A + 1 >= SQRT(B) ou NOME <> "ANA"; b. SOL no TESTE = V e (A + 5 = B) ou no PROFISSAO = "MEDICO"; c. SOL PROFISSAO = "MEDICO" ou TESTE = F; d. SOL A mod 2 + 25 div B; e. SOL A + B * 2 > 10 10. Informar o valor da varivel R, em cada item, aps a execuo da seguinte sequncia de operaes: a) R 3,0 * 6; b) X 2,0; Y 3,0; R X ** Y X; c) R 4; X 2; R R * X; RESPOSTA a) b) c)

11. Informar o valor da varivel R, em cada item, aps a execuo da seguinte sequncia de operaes: a) R 1 * 1,78 / 3; b) B 2; A 40 B ** 2; R int (3,1416) + A * 5;

19

c)

R 9 18; R abs ( -6 + int(3,4)) R;

20

QUALIDADES DE UM BOM ALGORITMO


1. Clareza o algoritmo uma ferramenta de entendimento e soluo de um problema, deve portanto, ser o mais claro possvel. O autor deve preocupar-se constantemente se o que est pensando est visvel no que est escrevendo; 2. Impessoalidade - no usar macetes, regras pessoais e nomes que s tem sentido para o autor, muitas vezes quem vai examinar, depurar, corrigir, alterar o algoritmo no seu prprio autor. Neste ponto os CPDs bem organizados definem um conjunto de normas de codificao e de elaborao de algoritmos; 3. Simplicidade o algoritmo deve ter por princpio a simplicidade, logo transformar algo complicado em solues simples, parece ser a diferena entre programadores comuns e grandes programadores; 4. No reinveno da roda fazer uso do conceito de biblioteca de algoritmos. O programador no deve esquecer de que um algoritmo novo custa caro para ser feito, e muito mais caro ainda para ser depurado, ento, caso exista um pronto este deve ser utilizado; 5. Capricho a principal funo de um algoritmo transmitir a soluo de um problema para outra pessoa. Desta forma a letra clara, uso de endentao, nomes bem atribudos, papel limpo e sem borres deve ser de uso constante; 6. Documentao nem sempre o Portugol bastante claro, alm do que ele informa o que feito e no porque feito. Assim deve-se lanar mo de comentrios sempre que necessrio. O smbolo de comentrio em algoritmo { }, isto , tudo que estiver entre as chaves um comentrio.

21

BLOCOS
Um bloco um conjunto completo de comandos para resolver um determinado problema. Graficamente falando um bloco sempre comea pela palavra INICIO e termina pela palavra FIM. Entre estes dois limites existem duas partes: definio de variveis que serve para definir as variveis que sero utilizadas no bloco; comandos que define quais os comandos que fazem parte deste bloco. FLUXOGRAMA
inicio

PORTUGOL

variveis

comandos

INICIO <declarao das variveis>; <comandos>; FIM.

fim

Exemplo: calcular a rea de um retngulo inicio A, B, AREA : real; AREA A * B; fim.

SEQUNCIA SIMPLES
Trata-se de um conjunto de comandos simples, que seguem um ao outro e que so executados na ordem em que aparecem. Exemplo: A 10; B A + 5; X 1 + 2;

22

Cada comando simples escrito em uma linha e sempre termina por um ponto e vrgula ( ; ), o que considerado uma instruo sequencial. Dentro de uma sequncia simples de comandos a entrada sempre pelo primeiro comando e a sada sempre pelo ltimo comando. FLUXOGRAMA PORTUGOL .....
comando 1

< comando 1 >; < comando 2 >;

comando2

........ < comando n >;

comando n

....

Exemplo: calcular a rea de um tringulo: inicio B, H, AREA : real; leia (B); {base} leia (H); {altura} AREA ( B * H ) /2; {calcula a rea} imprima (AREA); fim.

COMANDOS DE ENTRADA E SADA


A maioria dos algoritmos que escrevemos necessita receber dados externos, e em algum momento necessitar comunicar respostas, para tanto usamos os comandos de entrada e sada. Para resolver estes dois problemas existem os chamados comandos de entrada/sada (E/S). Desprezando as complexidades inerentes a um processo de transferncia de dados em um computador real, uma vez que cada linguagem trata os dispositivos de E/S de forma
23

diferenciada e o algoritmo deve ser capaz de ser traduzido para qualquer linguagem de programao, os comandos que sero usados so dois: leia e imprima. O comando LEIA significa uma entrada de dados, realizada atravs de um dispositivo externos de entrada de dados, para o algoritmo, isto , o valor no gerado por um comando ou expresso do algoritmo utilizado. O dispositivo de entrada utilizado, isto , se os dados entraro via teclado, mouse, leitura de disco ou linha telefnica, no ir interferir no algoritmo. Da mesma forma, para a sada dos dados usaremos o comando IMPRIMA, e tambm no importa, nvel de algoritmo, para qual dispositivo externo de sada de dados os mesmos sero enviados: terminal de vdeo, impressora, plotter, gravado em disco ou linha telefnica. A sada de dados consiste na exibio do contedo de uma varivel ou constante, do resultado de uma expresso ou de uma mensagem. A sintaxe destes comandos : Entrada de dados: leia (<identificador 1>, <identificador 2>, ..., <identificador n>) ; Sada de dados: imprima (<identificador 1>, <identificador 2>, ..., <identificador n>); {contedo do identificador} imprima (<expresso numrica>); {resultado da expresso numrica} imprima( cadeia de caracteres); {caracteres existentes entre os aspas} Obs: - em geral, dados que sero lidos no precisam ser inicializados; - os valores a serem impressos devem ser inicializados e/ou calculados antes da impresso. Exemplo: inicio VALOR1, VALOR2 : inteiro; leia (VALOR1); VALOR2 VALOR1 * 2; imprima (o valor primeiro , VALOR1); imprima (o valor segundo , VALOR2); imprima (a soma dos dois , VALOR1 + VALOR2); fim.

24

FLUXOGRAMA

PORTUGOL

leia var1, ..., var n

LEIA (var 1, ..., var n);

IMPRIMA (var 1, ... , var n);


imprima var 1, ... var n

ou IMPRIMA (mensagem, var );

EXERCCIOS
1. Fazer um algoritmo que calcule o volume de uma esfera em funo do raio R. V = 4 /3 R**3 2. Criar algoritmos em Portugol para fazer as seguintes converses: a) Ler uma temperatura dada na escala Celsius e imprimir a equivalente em Fahrenheit (F = 9/5 * C + 32) b) Ler uma quantidade de chuva em polegadas e imprimir a equivalente em milmetros (25,4 mm = 1 polegada) c) Ler um valor referente ao resultado de salto em altura, relatado em metros, e converter para ps e polegadas (1 p = 12 polegadas e 1 metro = 39,37 polegadas) d) Ler um tempo para uma corrida de 100 metros e calcular seu tempo para 100 jardas, supor que o atleta corra a uma velocidade constante ( jarda = 0,9144 metros) 3. O custo ao consumidor de um carro novo a soma do custo de fbrica com a percentagem do distribuidor e dos impostos (aplicados ao custo da fbrica). Supondo que a percentagem do distribuidor seja de 12% e os impostos de 45%, preparar um algoritmo portugol para ler o custo de fbrica do carro e imprimir o custo ao consumidor. 4. O cardpio de uma casa de hamburger dado abaixo. Preparar um algoritmo portugol para ler a quantidade de cada item comprado e calcular a conta ao final. Monas Burgers Hamburger Cheeseburger Batata Frita Refrigerante Milkshake (R$ 2,50) (R$ 3,30) (R$ 1,50) (R$ 0,60) (R$ 1,70)

O algoritmo deve ter uma varivel para cada item para ler a quantidade e multiplicar pelo preo do respectivo item, somando tudo ao final, incluindo, tambm, os 10% dos servios. 5. Preparar um algoritmo portugol para ler o comprimento dos 3 lados de um tringulo (S1, S2 e S3) e calcular a rea do tringulo de acordo com a frmula.

25

Area = T ( T - S1) ( T - S2) ( T - S3) onde T = ( S1 + S2 + S3) / 2 6. Preparar um algoritmo que leia os valores referentes aos 2 catetos de um tringulo retngulo e calcular o valor de sua hipotenusa. 7. Preparar um algoritmo que leia o tempo e distncia percorridos por um veculo e calcule sua velocidade mdia. 8. Preparar um algoritmo que leia as 4 notas bimestrais de um aluno e calcule sua mdia anual. 9. Preparar um algoritmo que leia o ms e ano de nascimento de um indivduo e calcule sua idade em meses com base na data atual.

10. Preparar um algoritmo que leia a hora e minuto de incio de uma aula e imprima a hora e minuto de trmino desta aula, sabendo que a aula de 50 minutos. 11. Preparar um algoritmo que leia 5 valores e imprima a mdia aritmtica entre eles. 12. Dado um nmero inteiro de 3 algarismos, inverter a ordem de seus algarismos. Os trs algarismos do nmero dado so diferentes de zero. 13. Dado um nmero de 3 algarismos construir outro nmero de 4 algarismos de acordo com a seguinte regra: a) os 3 primeiros algarismo, contados da esquerda para a direita so iguais aos do nmero dado; b) o quarto algarismo um dgito de controle calculado da seguinte forma: primeiro algarismo + segundo algarismo * 3 + terceiro algarismo * 5; o dgito de controle igual ao resto da diviso dessa soma por 7. 14. Dadas duas fraes ordinrias a/b e c/d, determinar a sua soma e o seu produto. 15. Dado um nmero inteiro que representa um nmero binrio de cinco dgitos, determinar o seu equivalente decimal. 16. Dados o primeiro termo e a razo de uma progresso aritmtica, determinar a soma de seus primeiros cinco termos. 17. Dado um nmero inteiro de segundos determinar o seu valor equivalente em graus, minutos e segundos. Se a quantidade de segundos for insuficiente para dar o valor em graus, o valor em graus deve ser zero. A mesma observao continua vlida em relao a minutos e segundos. Por exemplo: 3600 segundos = 1 grau, 0 minutos, 0 segundos; 3500 segundos = 0 graus, 58 minutos, 20 segundos. 18. Fazer um algoritmo que leia a hora e o minuto de incio de uma aula e imprima a hora e o minuta de trmino desta aula, sabendo que a aula de 50 minutos.

26

ALTERNATIVA SIMPLES
Existem oportunidades em que determinados comandos dentro de um algoritmo devem ser executados caso certas condies o permitirem, em outras condies nada se executa. Por exemplo: na soluo de uma equao do segundo grau, no momento de extrair a raiz quadrada de Delta, s pode-se fazer caso Delta seja positivo. Se Delta for menor do que zero, a raiz no pode ser extrada, e convm executar outros comandos. O comando Portugol que identifica uma ao condicional o Se, que tem a seguinte sintaxe: Se <condio> ento <ao>; fimse; A condio uma expresso cujo resultado final do tipo lgico (V ou F). A ao pode ser um comando simples ou uma sequncia de comandos. Semntica - se o resultado da condio que acompanha o SE for V, os comandos internos ao ENTO devem ser executados; caso contrrio, se o resultado da condio que acompanha o SE for F, todos os comandos internos ao ENTO devem ser desprezados at encontrar o FIMSE correspondente. Exemplo: se DELTA < 0 ento imprima (no possvel extrair a raz); fimse; Para facilitar a compreenso e a visualizao do incio e do final de cada estrutura, utilizase o artifcio de desloc-las direita, de forma que uma estrutura fique dentro da outra, tambm conhecida como endentao. Costuma-se endentar os comandos subordinados a uma condio SE, isto , comandos internos ao ENTO. E a margem deve ser trazida ao que era antes do comando SE, apenas quando for escrita a palavra FIMSE correspondente.

27

FLUXOGRAMA
V condio

PORTUGOL

SE <condio > ENTO < comando 1>; < comando 2>; ..... <comando n>; FIMSE;
comando n

comando 1

Cada SE deve ter um FIMSE correspondente. Ao percorrer o fluxo de controle do algoritmo, encontrando-se um FIMSE este sempre refere-se ao ltimo SE aberto.

ALTERNATIVA COMPOSTA
uma extenso da alternativa simples, neste caso temos determinar o que fazer se a condio for verdadeira, e o que fazer se a condio for falsa. O formato deste comando : Sintaxe: Se <condio> ento <ao 1>; seno <ao 2>; fimse; Semntica: se a condio contida no comando SE for verdadeira so executados os comandos internos ao ENTO, e os comandos internos ao SENO so desprezados at encontrar o FIMSE correspondente; caso contrrio, se a condio contida no comando SE for falsa, os comandos internos ao ENTO so desprezados e os comandos internos ao SENO so executados at encontrar o FIMSE correspondente. Neste caso a endentao tambm importante, os comandos SE e FIMSE comeam na margem corrente, os comandos internos ao ENTO e ao SENO ficam endentados.

28

Exemplo: DELTA 4 * A * C - B ** 2; se DELTA < 0 ento imprima (razes imaginrias); seno X DELTA ** 0.5; fimse; FLUXOGRAMA
F condio V

PORTUGOL

SE <condio > ENTO < comando 1>; < comando 2>; ..... <comando n>; SENO < comando 11>; < comando 22>; ..... < comando nn>; FIMSE;

comando 11

comando 1

comando nn

comando n

ANINHAMENTO
Os algoritmos podem ser formados por diversas estruturas, cada uma com uma funo especfica. Existem casos em que uma estrutura poder estar dentro de outra, e a isto d-se o nome de aninhamento. Nada impede que exista uma condio dentro de outra, e isto tambm poder ocorrer com as prximas estruturas de comando. No existe um limite para o nmero de estruturas que podem ser colocadas dentro de uma outra estrutura qualquer, mas se o nmero for muito grande, a compreenso e a visualizao sero prejudicadas. Para facilitar a compreenso e a visualizao do incio e do final de cada estrutura, utiliza-se o artifcio da endentao. Nos casos em que so necessrias muitas estruturas internas, a soluo a utilizao do processo de modularizao do algoritmo, assunto que ser tratado mais para frente.

29

Exemplo: SEM IDENTAO Se A <> 0 ento B 0; se C <> 0 ento D 0; F 3; fimse; G 77; fimse; COM IDENTAO Se A <> 0 ento B 0; se C <> 0 ento D 0; F 3; fimse; G 77; fimse;

Uma regra importante que deve ser sempre seguida, a de que o incio e o final da estrutura mais interna devem ser sempre dentro da estrutura imediata que a contm. VLIDO INVLIDO

2 4

3 4 3

NEGAO DOS OPERADORES Relembrando as operaes lgicas, elas tem como operadores os valores Verdadeiro e Falso e as operaes E, OU e NO. Usando tais operaes em conjunto com os comandos SE simples ou composto, alm dos operadores relacionais, pode-se criar trechos de algoritmos muito ricos. Exemplos: a) Definir se um valor esta compreendido entre 10 e 35: se VALOR > 9 e VALOR < 3 ento imprima (Valor OK); seno imprima (Valor errado); fimse;

30

b) Definir se um valor numrico representativo de um ms est correto se MS > 0 e MS < 13 ento imprima (ms correto); seno imprima (ms incorreto); fimse; c) Um certo cdigo pode assumir os seguintes valores: 10, 15, 17, 18 e 30. Testar se ele est ou no correto se COD = 10 ou COD = 15 ou COD = 17 ou COD = 18 ou COD = 30 ento imprima (cdigo correto); seno imprima (cdigo incorreto); fimse; Muitas vezes mais fcil organizar a sada correta da condio atravs do SENO e no atravs do ENTO, o que inverte o comando. d) Um indicador estar errado se assumir os valores: 1, 4, 5, 6, 7 ou 9. Organizar o comando: CONDIO PELO ENTO se IND = 1 ou IND = 4 ou IND =5 ou IND =6 ou IND =7 ou IND = 9 ento imprima (indicador ERRADO); seno imprima (indicador CORRETO); fimse; outra maneira de representar a mesma condio: CONDIO PELO ENTO CONDIO PELO SENO - INVERTIDA CONDIO PELO SENO - INVERTIDA se IND <> 1 e IND <> 4 e IND <> 5 e IND <> 6 e IND <> 7 e IND <> 9 ento imprima (identificador CORRETO): seno imprima (identificador ERRADO); fimse;

se IND = 1 ou ( IND > 3 e IND < 8 ) ou IND = 9 se IND <> 1 e ( IND <= 3 ou IND >= 8 ) e IND ento imprima (indicador ERRADO); <> 9 seno imprima (indicador CORRETO); ento imprima (identificador CORRETO): fimse; seno imprima (identificador ERRADO); fimse;

31

Quando no se deseja inverter as sadas necessitamos negar as condies, abaixo segue um resumo da negao dos comandos: RESUMO RELAO = <> ou > < >= ou <= ou E OU NEGAO <> ou = <= ou >= ou < > OU E

MULTIPLA ESCOLHA
Nos casos em que h mltiplas sadas para um determinado teste, pode-se fazer uso das estruturas de alternativa simples e composta devidamente encadeadas. Tal uso, conforme os professores italianos em 1966, sempre suficiente para a soluo de qualquer problema. Entretanto para simplificar a soluo inmeras linguagens tem o comando teste mltiplo. Seu formato em Portugol : Sintaxe: caso <expresso> valor1 : <comando1>; valor 2 :< comando2>; ... valor n : <comando n>; seno: <comando n+1>; fimcaso; onde o comando do lado direito do dois pontos ( : ) pode ser um comando simples ou um conjunto de comandos. Semntica: a expresso do CASO avaliada, e deve gerar um resultado determinado; este resultado comparado com os valores indicados colocados do lado esquerdo do dois pontos ( : ); quando um valor igual for encontrado, o comando colocado ao lado direito do dois pontos ( : ) ser executado, retornando ao FIMCASO correspondente, sem executar mais nenhuma comparao, onde prossegue o fluxo normal do algoritmo; caso nenhum valor seja igual ao resultado obtido na expresso do CASO o comando existente do lado direito do dois pontos ( : ) do SENO ser executado, retornando ao FIMCASO onde prossegue o fluxo normal do algoritmo. Exemplo:
32

Resolver o seguinte problema usando o comando CASO. Numa organizao, o nmero de dependentes limita a quantidade de dias que um funcionrio pode faltar anualmente. Assim, empregados com menos de 3 dependentes podem faltar 5 dias quem tem 4, 5 ou 6 dependentes pode faltar 8 dias, quem tem mais de 6 dependentes pode faltar 11 dias Escrever um alg que leia o nmero de dependentes e imprima a quantidade de dias que podem ser frudos anualmente para cada caso.
RESUMO BLOCO -Conjunto de descrio de variveis e comandos para realizar uma determinada tarefa INCIO definio de variveis comandos FIM SEQNCIA SIMPLES -Comandos simples seguidos -Comea no primeiro e termina no ltimo -Separados por ; comando 1; comando 2; comando n; ALTERNATIVA SIMPLES -Comandos executados somente se a condio for verdadeira. SE < condio > ENTO comando 1; comando n; FIMSE; ALTERNATIVA COMPOSTA - Existem dois caminhos; a condio determina qual deve ser seguido. SE < condio > ENTO comando 1; comando n; SENO comando 11, comando nn, FIMSE;

ENTRADA Transfere dados externos para o algoritmo LEIA (var1, var n);

SADA Transfere dados do algoritmo para o meio externo IMPRIMA (var1, var n);

33

EXERCCIOS
1. Considerando A, B e C variveis numricas, contendo os valores, 1, 4.5 e 8 respectivamente; NOME e COR variveis literais contendo Tania e Branco e TESTE varivel lgica contendo o valor V, determinar os resultados obtidos da avaliao das seguintes expresses lgicas: a. A = 1 e TESTE b. NOME = PEDRO ou COR <> Branco c. no TESTE ou B mod 2 = 0.5 d. C < 10 ou TESTE e COR = preto e. A**2 + sqrt(C) = 3 e (A + trunc(B + C) > 13 ou NOME = Ana f. TESTE e no TESTE 2. Determinar os resultados que estaro em cada uma das variveis definidas nos algoritmos abaixo: a. inicio NUM, D1, D2, D3, D4 : inteiro; NUM 1352; D4 NUM mod 10; D3 (NUM div 10) mod 10; D2 (NUM div 100) mod 10; D1 (NUM div 1000) mod 10; fim. b. inicio QUALE: caracter [15]; NUM: inteiro; NUM 10: se NUM > 0 ento QUALE numero positivo; seno se NUM < 0 ento QUALE numero negativo; seno QUALE zero; fimse; fimse; fim. c. executar o algoritmo B trocando 10 por 0 e depois por -4 d. inicio A, B, C: logico; X, Y: real; V, L: inteiro; A F; B V; C F; X 1.5; Y 3.2; X X + 1; se C ou (( X + Y > 5) ou ( no A e B)) ento L 0; seno L 1; fimse;

34

fim.

35

3. O que est errado no algoritmo abaixo: inicio N, PAR, X : inteiro; leia (N); X N mod 2; se X=0 ento PAR V; seno PAR F; fimse; fim. 4. Um cdigo est correto se for maior que 100, ou igual a 50. Escrever um algoritmo portugol que teste este valor e some 1 no cdigo se ele estiver errado. 5. Uma data vem acompanhada de um campo chamado DIASEM, cujo valor 1-domingo,2segunda,....Escrever um algoritmo portugol que verifique se o DIASEM um dia til - semana inglesa. 6. Escrever um algoritmo que teste 3 valores numricos e devolva a informao OK se: (A deve ser maior do que 10 e menor do que 100) ou (B deve ser diferente de C e C deve ser maior do que 50) 7. Criar algoritmos para solucionar os itens abaixo: a) fazer um algoritmo portugol que leia um nmero e determine se o valor par ou impar. b) fazer um algoritmo portugol que leia um valor referente ao ano e verifique se ele bissexto ou no. 8. Uma agncia de casamento possu um cadastro contendo os seguintes dados de pessoas inscritas: nome, sexo, cor de olhos, altura, cor de cabelo e ano de nascimento. a. um americano contatou a agncia e pediu uma moa de at 25 anos com 1.60 de altura, loura ou ruiva de olhos azuis; b. uma alem pretende jantar esta noite com um senhor de mais de 50 anos, com altura entre 1.75 e 1.80, moreno de olhos pretos Criar um algoritmo portugol que leia os dados das pessoas inscritas e imprima o nome das pessoas que atendem ao item a e b. 9. Dados 3 valores X, Y, Z verificar se eles podem ser os comprimentos dos lados de um tringulo e, se forem, verificar se tringulo equiltero, issceles ou escaleno. Propriedades - o comprimento de cada lado de um tringulo menor do que a soma dos outros 2 lados Equiltero - 3 lados iguais Issceles - 2 lados iguais Escaleno - 3 lados diferentes 10. Criar um algoritmo portugol que calcule a mdia final das notas de um aluno. O algoritmo deve ler: o nome do aluno, nota do 1o bimestre, nota do 2o bimestre, nota do 3o bimestre e nota do 4o bimestre. Calcular a mdia aritmtica das notas e imprimir o nome do aluno e a mensagem: aprovado - mdia de 100 at 70; exame final - mdia abaixo de 70 at 40; reprovado - mdia abaixo de 40. 11. Criar um algoritmo portugol que verifique se uma data est correta ou no - utilizar valores lgicos: 36

Ms - entre 1 e 12 Dia - 1 a 28 - ms 2 e ano no bissexto 1 a 29 - ms 2 e ano bissexto 1 a 30 - meses 4, 6, 9, 11 1 a 31 - meses restantes 12. O Depto de Meio Ambiente mantm 3 listas de indstrias conhecidas por serem altamente poluentes da atmosfera. Os resultados de vrias medidas so combinados para formar o que chamado de ndice de poluio. Isto controlado regularmente. Normalmente os valores caem entre 0.05 e 0.25. Se o valor atingir 0.30 as indstrias da lista A sero chamadas a suspender as operaes at os valores retornarem ao intervalo normal. Se o ndice atingir 0.40 as indstrias da lista B sero notificadas tambm. Se o ndice exceder 0.50 indstrias de todas as 3 listas sero avisadas. Preparar um algoritmo portugol para ler o ndice de poluio e indicar as notaes apropriadas. 13. Criar um algoritmo portugol que leia o nome, sexo e idade de candidatos a seleo brasileira de voleibol. Caso o participante seja do sexo feminino com idade entre 7 e 10 anos imprimir o nome e a frase "seleo feminina juvenil", caso seja do sexo masculino com idade entre 8 e 12 anos imprimir o nome e a frase "seleo masculina juvenil". 14. Criar um algoritmo em portugol que leia o nome, idade e altura de moas pretendentes a manequim profissional e imprimir o nome da pretendente e a frase aprovada, caso ela tenha idade entre 15 e 20 anos inclusive, e tenha altura de 1.70 a 1.80 inclusive. Em qualquer outro caso, imprimir o nome e a frase "reprovada". 15. Criar um algoritmo portugol que leia o CDIGO DO PRODUTO, DESCRIO DO PRODUTO, QUANTIDADE EM ESTOQUE e QUANTIDADE MNIMA, caso a quantidade em estoque seja menor ou igual a quantidade mnima imprimir a descrio do produto e a mensagem estoque baixo; caso a quantidade em estoque seja maior do que a quantidade mnima imprimir o cdigo do produto e a diferena entre o estoque e a quantidade mnima em estoque. 16. Criar um algoritmo em portugol que leia o NOME DO PRODUTO, QUANTIDADE EM ESTOQUE, PREO UNITRIO, caso o preo unitrio seja menor ou igual a R$ 1,99 imprimir o nome do produto e o valor a ser acrescido ao preo unitrio para chegar em R$ 1,99; caso o preo seja maior do que R$ 1,99 imprimir o nome do produto e a mensagem preo maior. 17. Escreva um algoritmo Portugol que leia a idade de um nadador e classifique-o: IDADE CLASSIFICAO pr-mirim 6 7 a 10 mirim 11 a 14 infantil 15 a 18 juvenil adulto 19 imprimindo ao final a idade e sua classificao 18. Criar um algoritmo Portugol que leia a altura e o sexo de uma pessoa, calcule e imprima seu peso ideal. Utilizando as seguintes frmulas: - para homens : 72,7 * h 58 - para mulheres : 62,1 * h 44,7 19. Escreva um algoritmo em Portugol que leia 4 nmeros e imprima o maior deles.

37

20. Exerccios de teste de mesa:


inicio a, b, x, y : real; leia (a, b); se a=b ento x 1,5; y 2,5; seno x -1,5; y - 2,5; fimse; imprima (x, y); fim. inicio a, b, i, m : real; leia (m); se m <> 0 ento i trunc (m/12); a m / 12; b round (m/12); se m mod 12 >= 6 ento i i + 1; fimse; imprima (a, b, i); fimse; fim. Quais valores sero impressos se forem lidos 30; 19; 27; 60 e 0? inicio X, Y, Z : inteiro; X 2; Y 5; Z 3; se X < Y ento X X + 2 + Y * 4; imprima ( X ); seno Y Y + 5; Z Z + Y; imprima ( Y, Z); fimse; imprima (Y, Z); fim.

inicio aux, l, m, n : real; leia (l, m, n); se l > m ou l > n ento se m < n ento aux l; l m; m aux; seno aux l; l n; n aux; fimse; fimse; se m > n ento aux m; m n; n aux; fimse; imprima (l, m, n); fim. inicio A, B, C : inteiro; A 4; B -5; C 3; se C < B ento A A + 6 + B * 5; imprima ( A ); seno B B + 10; C C + B; imprima ( B, C); fimse; imprima (B, C); fim.

38

21. Em uma classe so feitos 5 exames (A, B, C, D e E). Fazer um algoritmo que leia as notas destes exames e imprima a classificao do aluno, sabendo que a mdia 70. Classificao: A passou em todos os exames; B passou em A, B e D, mas no em C ou E; C passou em A e B, C ou D, mas no em E. 22. Uma Cia de pulverizao utiliza avio para pulverizar lavouras. Os custos de pulverizao dependem do tipo de praga e da rea a ser contratada conforme a tabela: Tipo 1 ervas daninhas R$ 50,00 por acre; Tipo 2 gafanhotos R$ 100,00 por acre; Tipo 3 broca R$ 150,00 por acre; Tipo 4 todos acima R$ 250,00 por acre. Se a rea a ser pulverizada for superior a 1000 acres, o fazendeiro tem um desconto de 5%. Em adio, qualquer fazendeiro cujo custo for maior do que R$ 750,00 tem um desconto de 10% sobre o valor que ultrapassar os R$ 750,00. Caso ambos os descontos se aplicam o da rea calculado antes. Fazer um algoritmo que leia: nome do fazendeiro, tipo de pulverizao (1 a 4) e rea a ser pulverizada; e imprima o nome do fazendeiro e o valor a ser pago. 23. Muitos times de esportes profissionais utilizam o computador para auxiliar na anlise de seus jogadores. Suponha que um time de Hockey tenha um sistema deste tipo. Para cada jogador existem os seguintes dados: nome do jogador, idade, altura, peso, gols no ltimo campeonato, presenas no ltimo campeonato, penalidades em minutos no ltimo campeonato, fator da confederao. Fazer um algoritmo que leia os dados do jogador e imprima sua avaliao utilizando a frmula: (gols + presena + (penalidades /4) + (altura + peso)/5 idade) * fator. 24. A Cia Pascoalina Ltda decidiu dar a seus funcionrios uma gratificao de Pscoa. A gratificao baseada em dois critrios: o nmero de horas extras trabalhadas e o nmero de horas que o empregado faltou ao trabalho. Para todos os funcionrios coletou-se os dados: nome do funcionrio, n de horas extra e n de horas de faltas. A empresa decidiu utilizar a seguinte frmula para calcular o prmio: subtrair dois teros das horas que ele faltou de suas horas extras, e distribuir o prmio de acordo com a tabela: RESULTADO DA FRMULA VALOR DO PRMIO > 40 horas R$ 500,00 > 30 mas <= 40 horas R$ 400,00 > 20 mas <= 30 horas R$ 300,00 > 10 mas <= 20 horas R$ 200,00 <= 10 horas R$ 100,00 Fazer um algoritmo que leia os dados do funcionrio e imprima seu nome e seu prmio.

39

COMANDOS DE REPETIO
Parece lgico que um algoritmo deva ser criado para a execuo de um nico conjunto de valores fornecidos como entrada. Por exemplo, ao escrever o algoritmo de aprovao de alunos da disciplina de Lgica, precisa-se somente preocupar-se com um nico aluno, pois a regra de um vale para todos. No teria sentido descrever os mesmos procedimentos para todos os alunos da turma, pois isto seria interminvel, alm de deixar o algoritmo especfico para um determinado nmero de alunos. Da mesma forma, ao escrever um programa de computador que calcule o salrio de um empregado, deve-se imaginar apenas um funcionrio e no os milhares que o computador ira processar. A soluo para este problema est no reapreoveitamento de instrues do algoritmo. Em outras palavras, uma vez escrito o caminho principal do algoritmo, todos os outros dados (alunos ou funcionrios) iro passar pelo mesmo caminho. Os comandos existentes para este fim so os chamados comandos de repetio, entre eles podemos citar: ENQUANTO, REPITA e PARA. ENQUANTO Semntica - a condio contida no ENQUANTO avaliada, se ela for falsa todos os comandos internos ao ENQUANTO sero desprezados at encontrar o FIMENQUANTO correspondente, caso contrrio, se a condio contida no ENQUANTO for verdadeira, os comandos internos ao ENQUANTO sero executados at encontrar o FIMENQUANTO correspondente, neste momento existe um desvio para o prprio comando ENQUANTO. A condio contida no ENQUANTO novamente avaliada e o processo reinicia. Sintaxe: enquanto <condio> faa <comando 1>; <comando 2>; ..... <comando n>; fimenquanto; Exemplo: Calcular a soma dos nmero inteiros at 100. inicio SOMA,NUM: inteiro; SOMA 0; NUM 0;

40

enquanto NUM <= 100 faa SOMA SOMA + NUM; NUM NUM + 1; fimenquanto; imprima (SOMA); fim. Se a condio contida no ENQUANTO for uma verdade eterna, isto , como 1 = 1, temse um lao infinito (looping), pois os comandos nunca deixaro de serem executados. Por outro lado, se a condio for sempre falsa (tautologia) ento os comandos internos ao ENQUANTO nunca sero executados. FLUXOGRAMA PORTUGOL

F condio

ENQUANTO <condio > FAA < comando 1>; < comando 2>; ..... <comando n>; FIMENQUANTO;

V comando 1

comando n

41

REPITA O comando REPITA, assim como o ENQUANTO, uma outra forma de repetir partes de um algoritmo. A rigor, com uma nica estrutura pode-se resolver todos os problemas, como demonstrado pelos professores italianos em 1966. Entretanto, criar um programa nem sempre um exerccio acadmico. Nos meios acadmicos o rigor cientifico o mais importante, e para tanto no existe pressa. Na vida prtica o rigor importante na medida em que garante a qualidade do processo, porm no um fim em si mesmo. Portanto, visando facilitar, acelerar e simplificar surgiram dois novos comandos de repetio: o REPITA e o PARA. Sintaxe: repita <comando 1>; < comando 2>; ... < comando N>; at <condiao>; Semntica : os comandos internos ao REPITA so executados at encontrar a condio contida no AT correspondente; a condio contida no AT correspondente testada e sendo falsa existe um desvio para o comando REPITA correspondente, e os comandos internos a ele so novamente executados reiniciando o processo; caso contrrio, quando a condio contida no AT for verdadeira o processo de repetio pra e prossegue o fluxo normal do algoritmo Exemplo: Somar os 100 primeiros nmeros inteiros positivos. inicio NUM, SOMA: inteiro; NUM 1; SOMA 0; repita SOMA SOMA + NUM; NUM NUM + 1; ate NUM > 100; imprima (SOMA); fim.

42

FLUXOGRAMA

PORTUGOL

comando 1

REPITA < comando 1>; < comando 2>; ..... <comando n>; AT <condio >;

comando n

F condio

UMA COMPARAO ENTRE OS COMANDOS ENQUANTO E REPITA ENQUANTO 1. os comandos internos ao enquanto podem nunca serem executados; 2. o lao do enquanto executado quando a condio for verdadeira; 3. a estrutura enquanto testa e faz. REPITA 1. os comandos internos ao repita so executados pelo menos uma vez; 2. o lao do repita realizado quando a condio for falsa; 3. a estrutura repita faz e testa.

Em geral tudo o que se fizer com um dos comandos, pode-se fazer com outro. A vantagem que para determinadas situaes um ou outro pode ser mais indicado, isto , pode solucionar o problema com menos lgica adicional (overhead), tais como contadores, chaves, testes, inicializaes, etc. EXERCCIOS
1. Fazer um algoritmo que leia uma lista de nmeros terminada pelo nmero 0 e mostre cada nmero lido (no imprimir o 0). 2. Faa um algoritmo que leia um nmero N, e a seguir solicite N nmeros e mostre a soma dos N nmeros.

43

3. Escreva um algoritmo que leia um nmero inteiro positivo N. Calcule e mostre o maior quadrado menor ou igual a N. Por exemplo, se N for igual a 38, o menor quadrado 36 (quadrado de 6). 4. Escreva um algoritmo que leia um nmero N, calcule e mostre os N primeiros termos da sequncia (1, 3, 6, 10, 15, ...) 5. Escreva um algoritmo que leia um nmero N em base 10 e imprima o nmero base 2 correspondente. 6. Faa um algoritmo que leia um nmero e, a seguir, leia uma lista de nmero at encontrar um igual ao primeiro nmero lido. Mostre todos os nmeros lidos. 7. Escreva um algoritmo que leia um nmero N, some todos os nmeros inteiros entre 1 e N e mostre o resultado obtido. 8. Faa um algoritmo que leia uma lista de nmeros terminada pelo nmero 0 e mostre cada nmero lido. Ao final, o algoritmo deve mostrar a mdia aritmtica de todos os nmeros da lista. 9. Escreva um algoritmo que leia um nmero N, calcule seu fatorial e mostre o resultado obtido. 10. Escreva um algoritmo que leia um nmero N, calcule todos os nmeros primos no intervalo entre 0 e N e mostre o resultado obtido. 11. Escreva um algoritmo que leia um nmero, calcule uma relao de seus divisores e mostre o resultado obtido. 12. Escreva um algoritmo que leia uma lista de nmeros terminada pelo nmero 0 e que, para cada nmero lido, mostre o prprio nmero e uma relao de seus divisores. 13. Faa um algoritmo que leia dois valores (limite inferior e limite superior) e mostre todos os nmeros pares entre os dois limites lidos. 14. Faa um algoritmo que leia trs valores (N, limite inferior, limite superior) e mostre todos os nmeros inteiros mltiplos de N entre os dois limites lidos. 15. Trocar os comandos enquanto por repita: A 0; enqto ( A <> 3) faca A A +1; imprima (A); fimeqto; 16. Transforme repita em enquanto: A 10; repita A A + 1; ate A >10; GH 5; repita imprima (ABC); ate GH <> 5; T 0; repita T T + 0.5; imprima ( T * 2); ate T > 10; Z 10; enqto Z > 0 faca Z Z -3; imprima (Z); fimenqto; K 5; enqto K < 10 faca K K + 1.5; imprima (K): fimenqto;

17. Quais valores sero impressos executando o algoritmo abaixo: inicio

44

A, Q, TERMO: real; A 1; Q 3; TERMO A; repita imprima (TERMO); TERMO TERMOS * Q; at TERMO >= 2000; FIM. 18. Dado o algoritmo abaixo, que valores seriam impressos se fossem lidos os valores 30; 19; 27; 60 e 0. Inicio A, B, I , M : inteiro; leia (M); se M <> 0 ento I trunc (M/12); A M /12; B arred (M/12); se M mod 12 >= 6 ento I I +1; fimse; imprima (A, B, I); fimse; FIM. 19. Dado o algoritmo abaixo, informar o valor impresso caso sejam lidos os valores 3; 6; 8; 1. Inicio FAT, N, MULT : real; leia (N); FAT 1; MULT N; repita FAT FAT * MULT; MULT MULT - 1; at MULT < 1; imprima (FAT); FIM. 20. Fazer um algoritmo que leia dois valores (X e Y) e imprima XY, sem utilizar o operador de potncia (**). 21. Calcular a soma dos 100 primeiros nmeros pares. 22. Totalize um conjunto de valores lidos, sendo todos positivos. O fim dos dados ser indicado por um nmero negativo que no deve ser somado. 23. Ler um conjunto de nmeros inteiros, caso ele seja par deve ser somado, caso seja impar deve ser multiplicado. O conjunto termina quando for lido 0. 24. Criar um algoritmo portugol que leia: matrcula, nome, nota 1o bimestre, nota 2o bimestre, nota 3o bimestre e nota 4o bimestre. O algoritmo deve calcular a mdia aritmtica final do aluno e imprimir o nome do aluno e a mensagem: aprovado- mdia entre 100 at 70 exame final - mdia abaixo de 70 at 40 reprovado- mdia abaixo de 40

45

25. Fazer um algoritmo para calcular e imprimir a soma dos cubos dos nmeros pares compreendidos entre B e A . Suponha que os valores de B e A (B > A) sejam lidos no incio do algoritmo. 26. Fazer um algoritmo que leia 100 nmeros inteiros positivos, calcule e imprima os que so nmeros perfeitos. Nmero perfeito aquele cuja soma de seus divisores, exceto ele prprio, igual ao nmero. Exemplo: 6 perfeito porque 1 + 2 + 3 = 6. 27. Tem-se uma estrada ligando vrias cidades. Cada cidade tem seu marco quilomtrico. Fazer um algoritmo que: a) leia vrios pares de dados, contendo cada par os valores dos marcos quilomtricos em ordem crescente, de duas cidades. O ltimo par contm estes dois valores iguais; b) calcule o tempo decorrido para percorrer a distncia entre estas duas cidades, com as seguintes velocidades: 40, 60 e 80 km/h, sabendo-se que: T = D / V, onde T = tempo; D = distncia e V = velocidade. 28. Executando o algoritmo abaixo, que valores sero impressos? Inicio N, QUAD : inteiro; N 5; enquanto N > 1 faa QUAD N ** 2; se QUAD mod 2 = 0 ento imprima (QUAD); seno imprima (N); fimse; N N - 1; fimenquanto; fim. Os valores lidos so: CAPITAL = 50,00; TAXA = 0,10; X = 1 inicio CAPITAL, MONTANTE, N, TAXA, RENDIMENTO, TRIMESTRE, X: real; leia (CAPITAL, TAXA, X); MONTANTE CAPITAL; TRIMESTRE 1; N 4 * X; enquanto TRIMESTRE <> N faa RENDIMENTO TAXA * MONTANTE; MONTANTE CAPITAL * (( 1 + TAXA) ** TRIMESTRE); Imprima ( RENDIMENTO, MONTANTE); TRIMESTRE TRIMESTRE + 1; fimenquanto; fim.

29. O depto pessoal de uma empresa solicitou o desenvolvimento de um programa de computador capaz de calcular o desconto devido para o INSS. Assim, escreva um algoritmo capaz de calcular este desconto: . inicialmente deve ser lido o valor do salrio de referencia; . depois deve-se ler uma srie de dados compostos de: Rg e salrio bruto; . a srie termina quando for lido Rg 0; . tabela de desconto: salrio bruto % desconto at 10 SR 8 de 10,01 a 20 SR 9 acima de 20 SR 10 . imprimir para cada funcionrio o RG, salrio bruto e desconto. 30. Definir um algoritmo portugol que receba uma srie de pares de nmeros, e para cada par calcule a mdia aritmtica, imprimindo o resultado. A srie termina quando for lido o par 0,0. 31. Melancias custam R$ 4,50 cada, se compradas at 5 unidades inclusive. R$ 4,20 se compradas at 20 unidades inclusive e R$ 4,00 se compradas at 100 unidades. Alm deste valor, deve ser dado um desconto de 10% no valor total da compra. Escrever um algoritmo portugol que receba o nmero de melancias compradas e devolva a quantidade de reais a pagar. O programa deve rodar at receber o nmero zero melancias, que indica fim.

46

32. Uma empresa decidiu fazer um levantamento em relao aos candidatos que se apresentaram para preenchimento de vagas no seu quadro de funcionrios. Fazer um algoritmo portugol que: leia um conjunto de dados contendo: . nmero de inscrio do candidato; . idade; . sexo (F/M); . experincia no servio (S/N); . o ltimo carto contm o nmero de inscrio = 0. calcule: . o nmero de candidatos femininos; . o nmero de candidatos masculinos; . idade mdia dos homens que j tem experincia no servio; . porcentagem dos homens com mais de 45 anos entre total de homens; . nmero de mulheres que tem idade inferior a 35 anos e com experincia no servio. imprima . o que foi calculado. 33. Defina um algoritmo capaz de somar os primeiros 50 nmeros mltiplos de 4, comeando no 4 ( 4, 8, 12, ..., 400). O algoritmo deve imprimir o resultado ao final. 34. Dada uma srie indeterminada de nmeros, escrever um algoritmo portugol que calcule e imprima: a. quantos nmeros foram fornecidos; b. quantos eram maiores que 100; c. quantos eram pares; d. quantos eram positivos; e. qual o maior valor. A srie termina quando for digitado o valor 0, utilizar o comando de repetio repita. 35. Numa fbrica trabalham homens e mulheres divididos em 3 classes: A - os que fazem at 30 peas por ms; B - os que fazem de 31 a 35 peas por ms; C - os que fazem mais de 35 peas por ms. A classe A recebe salrio mnimo. A classe B recebe salrio mnimo e mais 3% do salrio mnimo por pea acima das 30 iniciais. A classe C recebe salrio mnimo e mais 5% do salrio mnimo por pea acima das 30 iniciais. Fazer um algoritmo que: a. leia um conjunto de dados contendo cada um: nmero do operrio, nmero de peas fabricadas no ms e sexo; b. calcule e imprima: . salrio de cada operrio; . total da folha mensal de pagamento; . nmero total de peas fabricadas no ms; . mdia das peas fabricadas pelos homens em cada classe; . mdia de pecas fabricadas pelas mulheres em cada classe; . nmero do operrio ou operria de maior salrio ( no existe empate). O ltimo dado a ser lido ter nmero de operrio = 0. 36. Foi feita uma pesquisa de audincia de canal de TV em vrias casas de uma certa cidade, num determinado dia. Para cada casa visitada foi criado um conjunto de dados contendo: nmero do canal (4, 5, 7,12) e o nmero de pessoas que estavam assistindo naquela casa. Se a televiso estivesse desligada nada seria digitado. Fazer um algoritmo que: . leia um nmero indeterminado de dados, sendo que o final seria canal =0; . calcule e imprima a percentagem de audincia para cada emissora e o respectivo canal.

47

37. O governo das Ilhas Oba Oba instituiu um controle de preos e salrios logo aps sua eleio. O Primeiro Ministro recebeu de seus conselheiros econmicos uma previso, baseada nas tendncias atuais, de que os salrios continuaro a aumentar anualmente de 5%, o custo de vida e de servios de 10%, e os impostos de 15%. Seus conselheiros polticos informam que, se os impostos mais o custo de vida e de servios consumirem mais do que 75% do salrio anual para um nmero significativo de cidados, ele ter problemas nas prximas eleies e que, se isto atingir 80%, ele se ver realmente em apuros. O Primeiro Ministro tem coletados os seguintes dados: salrio anual, os impostos e o custo de vida e servios para uma amostra tomada de seus eleitores. Preparar um algoritmo para determinar o nmero e a percentagem dos cidados estudados que caem nas categorias de 75% e 80% j descritas. O nmero de pessoas da amostra desconhecido. O nmero de entrevistados termina quando for lido o salrio anual 0.

PARA O prximo comando disponvel para controlar loops atende pelo nome de PARA, tambm conhecido como estrutura de repetio finita. O comando PARA permite que vrias instrues sejam executadas repetidamente um nmero predeterminado de vezes, mediante o uso de uma varivel de controle que ir controlar o incio e o final da repetio, servindo como acumulador. Sintaxe: para <identificador> de <valor inicio> at <valor fnal> passo <incremento> faa <comando 1>; < comando 2>; ... < comando n>: fimpara;

onde o identificador a varivel de controle do lao. Semntica: 1. antes de comear o trecho includo no PARA, o identificador de controle inicializado pelo valor de inicio; 2. se o valor do identificador de controle for menor ou igual ao valor final o trecho interno ao PARA executado, caso contrrio, se o valor do identificador de controle for maior do que o valor final o processo de repetio termina e o algoritmo prossegue seu curso no comando imediatamente aps o FIMPARA correspondente; 3. ao chegar ao FIMPARA correspondente o identificador de controle incrementado do valor do incremento; 4. h um desvio para a linha do comando PARA, e o processo reinicia a partir do passo 2 acima, com idnticas sadas.

48

Observaes sobre o comando: - dentro dos comandos internos ao PARA o identificador de controle do lao no pode ser alterado; - os valores de inicio, final e incremento podem ser nmeros, variveis ou expresses, as quais tambm no podem ser alteradas pelos comandos internos ao PARA; - quando o valor do incremento for 1, este pode ser omitido; - o valor do incremento pode ser negativo, neste caso o valor inicio do identificador de controle deve ser maior do que seu valor final. FLUXOGRAMA PORTUGOL

para <var > de <inicio> at <fim> passo <valor>

PARA <varivel> DE <inicio> AT <final> PASSO <incremento> FAA <comando 1>; < comando 2>; ... < comando n>; FIMPARA;

comando 1

comando n

Exemplo: USANDO O COMANDO PARA para I de 1 at 10 passo 2 faa imprima (I); fimpara; USANDO O COMANDO ENQUANTO I 1; enquanto I <= 10 faa imprima (I): I I + 2; fimenquanto;

49

para I de 1 at 20 passo 1 faa SOMA SOMA + I; fimpara;

OU

para I de 1 at 20 faa SOMA SOMA + I: fimpara;

EXERCCIOS
1. Substituir Para por Enquanto: para J de 1 at 20 faa X J /3; imprima (X): fimpara; para SEMENTE de 0 at 100 passo 2 faa SEM1 SEMENTE * 2; SEM2 SEMENTE + 1.5 * ABC; MEDIA (SEM1 + SEM2) /2; imprima (MEDIA); fimpara; 2. Escreva um algoritmo portugol que imprima uma tabela de angulos, seus senos e cossenos, para todos os angulos de 0 a 90 graus. Exemplo: Angulo Seno Cosseno 0 0 1 1 ... ... 3.Definir um algoritmo que informe o valor de H, sendo N lido no incio do algoritmo: 1 1 1 1 1 H = ------- + -------- + --------- + --------- + .... + -------1 2 3 4 N 4. Fazer um algoritmo portugol que calcule e imprima a seguinte soma: 1 3 5 7 S = ----- + ----- + ----- + ----- + ... + 1 2 3 4 99 -----50

5. Defina um algoritmo portugol que calcule e imprima o somatrio expresso pela seguinte srie: 500 480 460 20 S = ----- + ----- + ----- + ... + -----2 3 4 26 6. Fazer um algoritmo que escreva a soma dos 50 primeiros termos da seguinte srie: 1000 997 994 991 -------- - ------- + ------- - ------- + ..... 1 2 3 4 50

7. Fazer um algoritmo para calcular e escrever a seguinte soma: 37 * 38 S = ---------1 + 36 * 37 --------- + 2 35 * 36 ---------- + ..... 3 1*2 + -----37

8. Fazer um algoritmo que calcule e imprima a seguinte soma: 21 22 23 S = ----- + ---- + ----- + ..... 50 49 48 250 + -----1

9. Definir um algoritmo para calcular o valor da seguinte soma, sendo N lido no incio do algoritmo: 1 1 1 1 1 S = ------- + -------- + --------- + --------- + .... + -------1! 2! 3! 4! N! 10. Fazer um algoritmo que calcule o valor do co-seno de X atravs de 20 termos da srie abaixo; X2 X4 X6 X8 cosen(x) = 1 - ------ + ------ - ------ + ------ - .... 2! 4! 6! 8! 11. O valor aproximado de pode ser calculado usando-se a srie 1 1 1 1 1 S = ----- - ---- + ---- - ---- + ---- - .... 13 33 53 73 93
3

sendo = ( S * 32) . Fazer um algoritmo para calcular e imprimir o valor de com 51 termos.

51

RESUMO REPETIO A- ENQUANTO Enquanto a condio for VERDADEIRA, o conjunto de comandos executado. Se a condio FALSA o conjunto NO executado (testa e faz) ENQUANTO < condio > FAA comando 1; comando n; FIMENQUANTO; B- REPITA -Os comandos internos a ele so executados ao menos uma vez, independente da condio(faz e testa) - O lao REPITA realizado se a condio for FALSA REPITA comando 1 comando n AT <condio>; C- PARA Pressupe a existncia de uma varivel que controla o incio e o fim Sempre pode ser convertido num ENQUANTO
PARA varivel DE valor1AT valor2 PASSO valor3 FAA comando 1 comando n FIMPARA;

52

EXERCCIOS
1. Escreva um algoritmo Portugol que leia uma srie de nmeros inteiros e positivos e ao final do processamento imprima qual o maior deles. O processamento se encerra quando for lido qualquer nmero negativo que no deve ser considerado para efeito de comparao. 2. Existe um conjunto de muitos nmeros inteiros e positivos, agrupados 3 a 3. Deve-se escrever um algoritmo portugol capaz de: a. ler os 3 nmeros; b. identificar o maior deles, e rejeit-lo; c. calcular a mdia entre os 2 nmeros restantes; d. imprimir os 2 nmeros e a mdia. A pesquisa termina quando o primeiro nmero dos 3 lidos for negativo. 3. Escrever um algoritmo portugol que receba conjuntos de 2 nmeros inteiros e positivos, e para cada par calcule o MDC ( mximo divisor comum) de acordo com o Algoritmo Euclidiano para o MDC, cuja descrio : 1. entram 2 valores N1 e N2; 2. N1 recebe o valor absoluto de N1 e N2 recebe o valor absoluto de N2; 3. calcula-se X que N1 menos ( N2 vezes ( inteiro de N1/N2)); 4. se X for zero, o MDC N2; 5. se no for, N1 recebe N2 e N2 recebe X, voltando-se ao passo 2. O programa termina quando for lido o par 0,0, que no deve ser processado. 4. A comisso organizadora de um rallye automobilstico decidiu apurar os resultados da competio atravs de um processo informatizado. Um dos algoritmos necessrios para a classificao das equipes concorrentes o que emite uma listagem geral do desempenho das equipes, atribuindo pontos segundo determinadas normas. O algoritmo dever: . ler : a. um campo contendo os tempos padro (em minutos decimais) para as 3 fases de competio; b. um conjunto de dados contendo cada um o nmero de inscrio da equipe e os tempos (em minutos decimais) que as mesmas despenderam ao cumprir as 3 diferentes etapas. O ltimo dado do conjunto contm o nmero 9999 como nmero de inscrio. . calcular: a. os pontos de cada equipe em cada uma das etapas, seguindo o seguinte critrio: seja o valor absoluto da diferena entre o tempo padro e o tempo despendido pela equipe numa etapa: < 3 minutos - atribuir 100 pontos a etapa 3 <= <= 5 minutos - atribuir 80 pontos a etapa > 5 minutos - atribuir 80 ( - 5) pontos a etapa b. o total de pontos de cada equipe nas 3 etapas; c. a equipe vencedora. . imprimir: para cada equipe, o nmero de inscrio, os pontos obtidos em cada etapa e o total de pontos obtidos na prova toda. 5. Deseja-se fazer uma pesquisa a respeito do consumo mensal de energia eltrica em uma determinada cidade. Para isso, deve ser lido os seguintes dados: - preo do Kwh consumido; - nmero do consumidor; - quantidade de Kwh consumidos durante o ms; - cdigo do tipo de consumidor ( residencial, comercial, industrial).

53

O processo termina quando o nmero do consumidor for 0. Fazer um algoritmo que: 1. leia os dados acima; 2. calcule: a) para cada consumidor, o total a pagar; b) o maior consumo verificado; c) o menor consumo verificado; d) o total do consumo para cada um dos 3 tipos de consumidores; e) a mdia geral de consumo. 3. imprima: a) para cada consumidor: seu nmero e total a pagar; b) o que foi calculado nos itens b, c, e d acima. 6. Uma companhia de teatro planeja dar uma srie de espetculos. A direo calcula que, a R$ 5,00 o ingresso, sero vendidos 120 ingressos, e as despesas montaro em R$ 200,00 . A diminuio de R$ 0,50 no preo dos ingressos espera-se que haja um aumento de 26 ingressos vendidos. Fazer um algoritmo que imprima uma tabela de valores do lucro esperado em funo do preo do ingresso, fazendo-se variar este preo de R$ 5,00 a R$ 1,00 de R$ 0,50 em R$ 0,50. Imprima, ainda, o lcuro mximo esperado, o preo e o nmero de ingressos correspondentes. 7. Tem-se uma estrada ligando vrias cidades. Cada cidade tem seu marco quilomtrico. Fazer um algoritmo que: - leia vrios pares de dados, contendo cada par os valores dos marcos quilomtricos em ordem crescente, de duas cidades. O ltimo par contm estes dois valores iguais; - calcule os tempos decorridos para percorrer a distncia entre estas duas cidades, com as seguintes velocidades: 20, 30, 40, 50, 60, 70 e 80 Km/hora, sabendo-se que: T = E / V, onde T = tempo; E = espao; V = velocidade; - imprima os marcos quilomtricos, a velocidade e o tempo decorrido entre as duas cidades, apenas quando este tempo for superior a 2 horas. 8. Um comerciante deseja fazer o levantamento do lucro das mercadorias que ele comercializa. Para isto, deve ser lido os seguintes dados, para cada mercadoria: o nome, preo de compra e preo de venda. Fazer um algoritmo que: - determine e imprima quantas mercadorias proporcionam: lucro < 10% 10% <= lucro <= 20% lucro > 20% - determine e imprima o valor total de compra e venda de todas as mercadorias, assim como lucro total. - O processo termina quando for final de arquivo 9. Sejam dois pontos P(x1,y1) e Q(x2,y2) no plano. Fazer um algoritmo, utilizando a frmula abaixo, que calcule e mostre a distncia entre os dois pontos, repetidas vezes at que o usurio digite zeros para as coordenadas x1, x2, y1, y2. D = sqrt( (x2 x1)2 + (y2 y1)2 ) 10. Fazer um algoritmo, usando estrutura de repetio, que calcule e imprima a soma dos 50 primeiros termos da srie: 480 475 470 465 S = ------ + ------ + ------ + ------ + .... 10 11 12 13

54

11. Fazer um algoritmo, usando estrutura de repetio, que calcule e imprima o somatrio dos 20 primeiros termos: 61 59 57 S = - 63 + ------ - ------ + ------ - .... 1! 2! 3! 12. Fazer um algoritmo que calcule e imprima os primeiros 40 termos da srie: S= 1! 2! 3! 4! 5! ---- - ---- + ---- - ---- + ---- - ... 1 3 7 15 31

13. Fazer um algoritmo que calcule e imprima o valor de S no seguinte somatrio: 1 2 4 8 S = ---- - ---- + ---- - ---- + ... 225 196 169 144 16384 + ---1

14. Fazer um algoritmo para tabular a funo y = f(x) + g(x), para x = 1,2,3,4,..., 10, onde: h(x) = x2 - 16 f(x) = h(x), se h(x) >= 0 1, se h(x) <0 15. Fazer um algoritmo que tabule a seguinte funo: x2 + 3x + y2 f(x,y) = --------------------xy - 5y - 3x + 15 16. Exerccios de teste de mesa: inicio a, n, seno, t : real; imprima ( A seno A a 0; repita seno 0; t a; n 0; repita seno seno + t; n n + 1; at abs(t) < 0,0001; imprima (a, seno, n); a a + 0,1; at a > 1,6; fim. inicio a, q, termo : real; a 1; q 3; N); inicio d, k, num, soma : real; leia (num); soma num + 1; k num div 2; d 2; repita se num mod d = 0 ento soma soma + d; fimse; d d + 1; at d > k; imprima (soma); fim. Qual valor ser impresso quando for lido 30? para x = 1, 4, 9, 16, ..., 100; e y = 0, 1, 2,..., 5 para cada valor de x. g(x) = x2 + 16, se f(x) = 0 0, se f(x) > 0

t - t * (a**2 / ( 2*n*(2*n+1)));

55

termo a; repita imprima (termo); termo termo * q; at termo >= 2000; fim.

56

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).

57

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:
58

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.

59

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.
60

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;
61

. 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;
62

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 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; fim. Demonstrar ordem crescente e decrescente atravs do teste de mesa.

63

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.

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;

64

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 determinado 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. 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; seno INIC METADE + 1; {pega a primeira parte do vetor} {pega a segunda parte do vetor}

65

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 sequcial 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 e imprimir ao final o nome do vendedor que teve o maior salrio e a mdia salarial do ms. 5. Utilizando o exerccio acima, classifique os trs vetores com base no vetor de salrio mensal e imprima qual o nome do vendedor de maior venda e o de menor venda.

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 comum 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.

66

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 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
67

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 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.

68

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). 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.

69

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 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>; .....

70

<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; RUA: caracter[20]; NUM : inteiro; CIDADE : caracter [15]; ESTADO : caracter [2]; CEP : inteiro;

fimREG1; Tipo ENDEREO = registro

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}

71

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. 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;
72

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;

MODULARIZAO
A Programao Estruturada hoje o resultado de uma srie de estudos e propostas de disciplinas e metodologias para o desenvolvimento de software. Conceitos associados como tcnica de refinamentos sucessivos e modularizao de programas integram o ferramental para elaborao de programas visando, principalmente, os aspectos de confiabilidade, legibilidade, manutenibilidade e flexibilidade. A metodologia de refinamentos sucessivos parte do princpio de que resolver um problema complexo mais fcil se no precisarmos considerar todos os aspectos do problema simultaneamente, isto , a decomposio de um problema grande numa srie de subproblemas mais simples. Quando no processo de desenvolvimento do algoritmo faz-se a opo por diviso do algoritmo, este procedimento conduz a modularizao da soluo do problema.

73

Um mdulo ento um grupo de comandos, constituindo um trecho de algoritmo, com uma funo bem definida. Esta diviso da atividade de programao permite que, a cada instante, toda a ateno do programador esteja concentrada na soluo de cada problema especfico e bem definido. Da mesma forma, pode-se verificar a correo do algoritmo por etapas analisando-se a correo de cada mdulo. A deciso pela diviso do algoritmo em mdulos traz benefcios como: a. maior flexibilidade e facilidade de manuteno, j que o mdulo pode esconder dos outros mdulos detalhes que s interessam a ele; b. permite a diviso de tarefa em uma equipe, onde cada mdulo pode ser desenvolvido por um programador diferente; c. facilita o teste, porque cada mdulo pode ser testado individualmente, e depois ser incorporado ao conjunto; d. facilita o projeto, na medida em que permite a abstrao. A experincia recomenda que os mdulos constituintes de um programa devem ter no mximo o tamanho de uma pgina de listagem. Mdulos maiores so difceis de ser compreendidos e em geral so multifuncionais. Um outro aspecto importante que envolve a modularizao, em particular a modularizao de dados, a possibilidade de cada mdulo poder definir as suas estruturas de dados prprias, suficientes e necessrias apenas para atingir o objetivo final do mdulo. Estre aspecto disciplina e impem restries a utilizao das estruturas de dados do algoritmo. Toda a comunicao entre mdulos dever ser bem definida atravs de vnculos entre os mesmos. Um bom algoritmo deve procurar reduzir a interao entre mdulos (acoplamento) e aumentar o relacionamento dos elementos de um mesmo mdulo (coeso). As ferramentas de modularizao apresentadas so: funes e procedimentos. Vantagens: 1. partes comuns a vrios programas ou que se repetem dentro de um mesmo programa, quando modularizadas em um procedimento, so programadas (e testadas) uma s vez, mesmo que tenham que ser executadas com variveis diferentes; 2. podem-se constituir bibliotecas de programas, isto , uma coleo de mdulos que podem ser utilizados em diferentes programas sem alterao e mesmo por outros programadores. 3. a modularizao dos programas permite preservar na sua implementao os refinamentos obtidos durante o desenvolvimento dos algoritmos. 4. economia no armazenamento, uma vez que o mdulo armazenado uma nica vez mesmo que utilizado em diferentes partes do programa. Permite, tambm, que, em um

74

determinado instante da execuo do programa, estejam na memria principal apenas o mdulo ou os mdulos necessrios a execuo deste trecho de programa - paginao. Desvantagens: 1. existe um acrscimo de tempo na execuo de programa constitudos de mdulos, devido ao trabalho adicional de ativao do mdulo.

BLOCO
O nosso conhecimento de bloco at agora, est limitado a colocar as palavras INICIO e FIM, respectivamente, para definir o algoritmo. Entretanto, o conceito de BLOCO tem uma amplitude maior, pois podemos ter diversos BLOCOS (uns dentro de outros) dentro de um algoritmo. Um bloco era formado por: inicio <declarao de variveis>; <comandos>; fim. Agora, de acordo com o que vimos, podemos ter blocos dentro de blocos: inicio <declarao de variveis>; inicio {segundo bloco} <declarao de variveis>; {segundo} <comandos>; {segundo} fim; {segundo} <comandos>; fim. Uma das vantagens a possibilidade de definir variveis fora do seu lugar original, principalmente, quando se conhece a varivel no meio do algoritmo. Exemplo: inverter a ordem de um vetor. inicio N: inteiro; leia (N); inicio {procedimento inverte} tipo V=VETOR [1:N] inteiro; VET : V; leia (VET); {inverta VET} imprima (VET);

75

fim; {procedimento inverte} fim. Uma varivel comea quando o bloco, onde ela est contida, inicia e termina quando este bloco termina (FIM.) - variveis locais ao bloco. Quando existe um bloco dentro de outro, as variveis do bloco externo so locais para ele e globais para o bloco internos. J as variveis do bloco interno so locais a ele e so desconhecidas pelo bloco externo. Quando existe conflito de nomes (duas variveis com mesmo nome, sendo uma local e outra global), vale a definio local, e a global deixa de poder ser acessada (embora continua existindo normalmente). Exemplo: inicio I,J:inteiro; NOME: caracter[40]; inicio {procedimento 1} K,L,M:real; NOME: caracter[60]; SOMA:inteiro; leia (NOME); K <= I + J; SOMA <= K + (I*J); fim; {procedimento 1} imprima (NOME); fim.

PROCEDIMENTO
um bloco com nome, com isto, poderemos cham-lo em qualquer ponto do algoritmo. Sintaxe: procedimento <nome> < lista de parmetros>; <especificao dos parmetros>; inicio <declarao de variveis locais>; <comandos>; fim; A chamada de um procedimento apenas a colocao de seu nome em um comando, como se fosse um novo comando.
76

Sintaxe: <nome do procedimento> ( <parmetros necessrios>); Exemplo: seja um procedimento para achar e imprimir o maior nmero entre 3 valores fornecidos. inicio N1,N2,N3:inteiro; procedimento ACHA (A, B, C) {encontra maior valor} A,B, C:inteiro; inicio se A>=B e A>=C entao imprima (A); fimse; se B>A e B>=C entao imprima (B); fimse; se C>A e C>B entao imprima (C); fimse; fim; {ACHA} leia (N1,N2.N3); ACHA (N1,N2,N3); leia (N1,N2,N3); ACHA(n1,N2,N3): leia (N1,N2,N3); ACHA (N1,N2,N3); fim. No cabealho do procedimento, temos uma srie de variveis, que podem ser de entrada e de sada. Chamamos estas variveis de Parmetros FORMAIS. J as variveis usadas quando o procedimento efetivamente chamado so denominadas Parmetros EFETIVOS. Os parmetros Efetivos de entrada podem ser variveis, constantes ou expresses. J os parmetros Efetivos de sada tem que ser variveis. Um procedimento pode chamar outros dentro dele - procedimentos aninhados.

FUNO

77

Uma funo um bloco que tem um nome e que devolve um resultado. Em outras palavras, quando no houver retorno de um resultado temos um procedimento, e quando houver temos uma funo. Sintaxe: Funo <nome> <lista de parmetros>: <tipo de dado do resultado>; <declarao dos parmetros>; inicio <declarao de variveis locais>; <comandos>; <nome da funo> < resultado>; fim; Toda funo usada dentro de um programa deve ter sido definida antes de ser chamada. Sintaxe: <varivel global> <nome da funo ( <parmetros>)>; Exemplo: seja uma funo que calcule o teorema de pitgoras. inicio W1,W2,RESP:real; Funcao PITAG (A,B) : real; A,B:real; inicio X:real; X (A ** 2 ) + (B ** 2); PITAG X ** 0.5; fim; {PITAG} leia (W!,W2): RESP PITAG (W1,W2); imprima (RESP); fim. EXERCCIOS 1. Fazer a funo sen(x) que recebe o valor de x e calcula o seno atravs da seguinte srie: x x3 x5 x7 sen(x) = ---- - ---- + ---- - ---- + .... 1 3! 5! 7! A funo retorna o valor do seno de x. Obs.: Utilize a soma dos 30 primeiros termos da srie acima 2. Fazer um algoritmo que calcule a rea e o permetro de um quadrado a partir do tamanho do lado. Lado dado de entrada e os valores de rea e permetro so retornados por funes.
78

3. Fazer um algoritmo para achar o maior valor dentre 3. A funo maiorde3 recebe como argumento os 3 valores e retorna o maior. 4. Escrever um algoritmo para gerar os N primeiros termos da srie de Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21,.... A funo FIB tem N como parmetro, calcula e imprime os termos da srie. 5. Escrever um algoritmo que calcule e imprima o valor de S. Faa uma funo que receba o valor de N e devolva o valor de S. N dado de entrada e deve ser lido na funo principal. 1 2 3 N-1 N S = ---- + ---- + ---- + ... + ---- + ---N N-1 N-2 2 1 6. Fazer um algoritmo para ler um inteiro N >= 0 e calcular seu fatorial. A funo FAT recebe o valor de N e devolve seu fatorial. 7. Fazer um algoritmo para ler um inteiro N > 0 e calcular o seguinte somatrio: R = 1 + 22 + 32 + .... + N2. A funo deve receber o valor de N e devolver o valor de R. 8. Fazer um algoritmo para ler um inteiro N > 0 e calcular o seguinte somatrio: S = N + N-1 + N-2 + N-3 + ... + 0. A funo deve receber o valor de N e devolver o valor de S. 9. As notas de uma turma de N alunos so lidas e armazenadas em um vetor. N tambm lido. Fazer um algoritmo contendo funes para: a) receber o valor de N, ler as N notas, armazenando-as em um vetor (este deve ser varivel global). b) receber o valor de N, calcular a mdia da turma, devolvendo seu valor funo principal. c) receber o valor de N, achar a maior nota, devolvendo seu valor funo principal. 10. Um numero primo qualquer numero inteiro positivo que divisvel apenas por si prprio e por 1. Escreva uma funo que recebe um numero inteiro positivo e, se este nmero for primo, retorna 1, caso contrario, retorna 0.
11.

Fazer um algoritmo, contendo uma funo que receba uma temperatura dada em graus Fahrenheit e devolva a temperatura convertida para graus Celsius. (C = 5/9*(F32)). Fazer um algoritmo que calcule o volume e a rea de uma esfera. O raio dado de entrada, e os valores de volume e a rea so retornados por funes que recebem o raio como argumento. V = 4/3*pi*R3 e A = 4*pi*R2, onde R = raio da esfera.

12.

79

13.

Um cofrinho contm os seguintes itens: n1 moedas de 1 real , n2 moedas de 50 centavos , n3 moedas de 25 centavos, n4 moedas de 10 centavos , n5 moedas de 5 centavos, n6 moedas de 1 centavo. Fazer uma funo que receba os valores acima e devolva o total em Reais

14. Seja um vetor contendo N inteiros e de tamanho mximo TAM (n <= TAM). N deve ser lido do teclado pela funo principal. Considere o vetor como varivel global. Fazer um algoritmo contendo as seguintes funes: a)leitura: recebe o valor de N e l os N elementos do vetor. b) menor: recebe o valor de N e devolve o menor elemento do vetor. c) imaior: recebe o valor de N e devolve o ndice do maior elemento do vetor. d) par: recebe o valor de N e devolve o nmero de elementos pares do vetor e) media: recebe o valor de N e devolve a mdia aritmtica dos elementos do vetor. f) acimamed: recebe o valor de N e o valor da mdia calculada pela funo anterior e devolve a porcentagem de elementos acima da mdia. Todos os valores devolvidos devem ser impressos atravs da funo principal. 15. Faa uma funo que receba um caracter e retorne 0 se o mesmo for letra e 1 caso contrrio. 16. Seja um vetor de tamanho TAM, declarado como varivel global. Fazer um algoritmo contendo as seguintes funes: a)leitura: l os elementos do vetor. b) maiorsoma: devolve a maior soma entre dois elementos consecutivos do vetor. c ) maiordif: devolve a maior diferena entre dois elementos consecutivos do vetor. 17. Seja uma string (varivel global) contendo um nome de pessoa e um caracter qualquer. Fazer um algoritmo contendo as seguintes funes: a)leitura: le a string e o caracter devolvendo (retornando) o valor deste ltimo. b) tamanho: retorna o tamanho (nmero de caracteres) string c) n_ocor_car: recebe o caracter e o tamanho da string como argumento, devolvendo o nmero de ocorrncias do mesmo na string d) p_oco_car: recebe o caracter e o tamanho da string como argumento, devolvendo o ndice da primeira ocorrncia do mesmo na string . Caso no haja ocorrncia, devolve valor -1. E) npalavras: recebe o tamanho da string como argumento e devolve nmero de palavras da string (considere que cada palavra est separada por um espao). F) imprime_inv: Imprime a string invertida. Todos os valores retornados devem ser impressos. A funo principal responsvel por isso. 18. Faa uma funo que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias. 19. Faa uma funo que recebe um valor inteiro e positivo e retorna o nmero de divisores desse valor.

80

20. Escreva uma funo que recebe dois valores X e Y e retorna X elevado a Y, sem utilizar funes ou operadores de potncia prontos.
21.

Fazer uma funo que recebe um caracter e devolve o nmero de ocorrncias desse caracter em uma frase. Considere que a frase e o caracter so lidos na funo principal. Escrever o algoritmo completo. Fazer um algoritmo contendo funes para: a) ler um vetor onde cada elemento (vagas[i]) representa o nmero de vagas do curso i. b) ler um outro vetor onde cada elemento (candidatos[i]) representa o nmero de candidatos inscritos para o curso i. c) criar um terceiro vetor contendo o nmero de candidatos por vaga d) receber o ndice de um curso e retornar o nmero de candidatos por vaga desse curso e) retornar o ndice do curso de maior concorrncia obs.: Imprima todos os resultados e considere os vetores como variveis globais Seja um vetor de inteiros (global) de tamanho TAM. Faa um algoritmo com as seguintes funes: leitura: l os elementos do vetor. imaior: retorna o ndice do maior elemento do vetor. media: retorna a mdia aritmtica dos elementos do vetor. troca: recebe dois valores x e y e substitui x por y no vetor. Ex.: supor x = 3 e y = 9. Se o vetor inicialmente lido fosse {2, 5, 3, 7, -5, 3, 2, 9}, depois da troca ele ficaria: {2, 5, 9, 7, -5, 9, 2, 9} imprime: imprime o vetor.

22.

23.

RECURSIVIDADE
Recursividade um conceito matemtico onde a soluo de um problema expressa como uma combinao de solues de problemas idnticos, porm menores. A soluo do menor problema possvel consiste na soluo de um caso extremo, o mais simples, que so as premissas sobre as quais a soluo recursiva criada. A existncia de soluo para o caso mais simples necessria para que as equaes de definio recursiva possam ser resolvidas. Por exemplo, a funo fatorial de um nmero N inteiro positivo possui as seguintes equaes recursivas: 1. Fatorial (0) = 1 2. Fatorial (N) = N * Fatorial (N-1) Observe na Segunda equao que o fatorial de um nmero N expresso em funo do fatorial do seu predecessor. A primeira equao trata do caso mais simples.

81

Quando um algoritmo chamado iterativo, isto , ele requer a repetio explcita de um processo at que determinada condio seja satisfeita, ento este algoritmo poder fazer uso de recurso. Em termos de algoritmoo de computadores, recursividade utilizada quando existem rotinas que chamam a si prprias no decorrer do seu cdigo. Exemplos: 1. Calculo do fatorial de um nmero N Funo FATORIAL (n) : inteiro n : inteiro; Inicio Se n>0 Ento fatorial FATORIAL (n 1); Seno fatorial 1; Fimse; Fim. 2. Calculo do MDC entre M (dividendo) e N (divisor) Funo MDC (m,n) : inteiro; m, n : inteiro; Inicio Se n > m Ento mdc MDC (n,m); Seno se n = 0 Ento mdc m; Seno mdc MDC (n, (m mod n)); Fimse; Fimse; Fim. 3. SRIE DE FIBONACCI funo FIB (N): inteiro; N: inteiro; inicio I, ANT, PEN, ULT: inteiro; ANT 0; PEN 1; FIB 0; para I de 1 at N faa ULT ANT + PEN; FIB FIB + ULT; ANT PEN; PEN ULT; fimpara; fim;

82

SRIE DE FIBONACCI - RECURSIVIDADE funo FIB (N) : inteiro; N: inteiro; inicio se N<= 1 ento FIB 1; seno FIB FIB(N-1) + FIB(N-2); fimse; fim; funo FIB (N) : inteiro; N: inteiro; inicio se N= 1 ou N=2 ento FIB 1; seno FIB FIB(N-1) + FIB(N-2); fimse; fim;

A execuo de um procedimento recursivo geralmente efetuada pelo uso de sub-rotinas. Como uma rotina recursiva chama a si prpria, necessria uma rea de memria para salvar o seu contexto antes dessa chamada recursiva (registro de ativao) a fim de que este possa ser restaurado ao final dessa chamada. Esses registros de ativao so organizados em forma de pilha. Na maioria dos casos no preciso utilizar recursividade, pois de um modo geral todo algoritmo recursivo pode ser escrito em forma no-recursivo; no entanto, em algumas situaes ela realmente oportuna. A principal vantagem de sua utilizao a reduo do cdigo-fonte da rotina. Entretanto, o uso de recursividade apresenta algumas desvantagens, tais como: - baixo desempenho na execuo devido ao tempo gasto no gerenciamento da pilha de registros de ativao e o espao por ela ocupado; - dificuldade de depurao dos algoritmos, particularmente se a recurso for muito profunda. Os principais critrios a serem utilizados para decidir se a recursividade deve ou no ser utilizada a clareza do algoritmo e o desempenho esperado pelo algoritmo. Profundidade Chamamos de profundidade ao nmero de vezes que uma rotina recursiva chama a si prpria, at obter o resultado.

83

O clculo do fatorial de 3 possui profundidade 3, ou seja, trs nveis de recurso: 3! = 3 * 2! 2! = 2 * 1! Nvel 1 1! = 1 * 0! Nvel 2 0! = 1 Nvel 3 EXERCCIOS 1. Escreva um algoritmo recursivo para avaliar a * b usando a adio, onde a e b so inteiros no-negativos. 2. Escreva uma definio recursiva de a + b, onde a e b so inteiros no-negativos, em termos da funo sucessora succ definida como: Funo SUCC (x) : inteiro; x:inteiro; Inicio SUCC x + 1; Fim. 3. Determine o que a seguinte funo recursiva calcula e escreva uma funo iterativa para atingir o mesmo objetivo: Funo FUNC (n) N: inteiro; Inicio Se n = 0 Ento FUNC 0; Seno FUNC n + FUNC (n-1); Fimse; Fim.

ARQUIVOS
Um arquivo um conjunto de registros, ou seja, uma estrutura de dados, na qual cada registro no ocupa uma posio fixa dentro da estrutura, no possuindo portanto tamanho preestabelecido. Os registros so formados por unidades de informao chamadas campos. Os campos devem possuir uma relao lgica entre seus contedos, ou serem relacionados a um determinado objeto, para ento formarem um arquivo. Em nosso cotidiano normal a utilizao de arquivos para armazenar grandes quantidades de informao com maleabilidade e por um grande perodo de tempo. Estas informaes guardadas em um arquivo podem ser utilizadas por diferentes algoritmos diferentes usurios e de formas diferenciadas.

84

A estrutura chamada arquivo permite algumas operaes bsicas que podem ser visualizadas atravs de uma analogia com uma gaveta de um arquivo de ao, que contm algumas pastas suspensas que seriam nossos registros. As operaes possveis de serem realizadas em um arquivo tanto real quanto virtual so: - incluso de registros (ou pastas suspensas); - alterao de registros (ou pastas suspensas); - consulta a um registro (ou a uma pasta suspensa); - excluso de um registro (ou de uma pasta suspensa). MANIPULAO Podemos admitir que todo arquivo possui maneiras semelhantes de serem manipulados., independente de como foi concebido. Conclumos que podemos consultar e/ou acrescer informao ao arquivo. Retornando a analogia com um arquivo de ao, s podemos manipular registros (pastas suspensas) se o arquivo (gaveta) estiver aberto. Portanto, a primeira operao sobre um arquivo abrir. Da mesma forma, aps o trmino da manipulao dos registros (pastas suspensas) devemos sempre fechar o arquivo (gaveta). Portanto, a ltima operao sobre um arquivo fechar. Para guardarmos um registro no arquivo, faz-se necessrio que este possua estruturao de campos igual dos registros armazenados, e ao mesmo tempo esteja completamente preenchido. Uma vez que, quem guarda, guarda alguma coisa em algum lugar; neste comando guarda-se alguma informao de dado registro para a posio atual do arquivo. CONCEPO DE ARQUIVOS Quando criamos um arquivo, utilizamos determinado padro de comportamento que estabelece o modo pelo qual os registros so armazenados no arquivo, isto , o algoritmo estabelece a estruturao do arquivo. SEQUENCIAL caso a gravao dos registros no arquivo seja feita de forma contnua, um aps o outro, teremos estabelecido uma circunstncia de sequncia no armazenamento dos registros, obtendo um arquivo cuja concepo dita sequencial. Nestas circunstncias dizemos que a localizao de qualquer um dos registros que foi armazenado indeterminada, ou seja, para acessar um registro especfico precisamos obedecer a sua ordem de gravao, o que implica percorrer todos os registros que o antecedem, um aps o outro. No caso de acrescermos um registro ao arquivo, este ser inserido por ltimo. Na forma de armazenamento sequencial ser necessria a definio de duas formas de abertura de arquivo, uma para leitura ( posicionando no inicio do arquivo, isto , no primeiro registro) e outra para gravao ( posicionando no fim do arquivo, isto , aps o ltimo registro).

85

A consulta de um determinado registro deve ser feita por comparao. Verifica-se se o contedo de um determinado campo igual ao valor procurado, e assim sendo, encontramos o registro. Em caso contrrio, deve-se ler os registros subsequentes sucessivamente at encontrar o registro desejado ou atingir o final do arquivo. Para identificar o final de arquivo, utiliza-se um registro finalizador, que um valor atribudo ao campo chave, para identificarmos o ltimo registro do arquivo. DIRETA a principal caracterstica deste tipo de organizao de arquivo que os registros podem ser acessados diretamente. Isto possvel porque cada registro associado a um nmero que representa sua posio no arquivo. Este nmero no faz parte o registro. Ao criar um arquivo pode-se utilizar um algoritmo que expresse um padro rgido, com o objetivo de estruturar o arquivo para facilitar sua manipulao. Atravs de um dos campos do registro podemos determinar o lugar onde est guardada a informao desejada, podendo acess-lo de modo instantneo. Este campo denominado CHAVE, pois uma informao capaz de acessar o registro, ela deve ser nica, pois no podemos armazenar dois registros diferentes em uma mesma localizao. Desta forma os registros possuem um lugar reservado onde sero gravados, lugar este identificado pela chave. INDEXADA o mtodo de acesso direto ineficiente para algumas aplicaes, pois difcil relacionar o nmero do registro com o seu contedo, uma vez que este nmero no faz parte do registro. Por exemplo, qual o nmero do registro que contm as notas do aluno Jos da Silva? Este problema resolvido usando mtodos de classificao e pesquisa de dados. Na organizao indexada tem-se que construir um arquivo auxiliar, tambm chamado de arquivo de ndices, que ser constitudo de registros, contendo apenas dois campos, o campo que ir armazenar a chave de acesso e o campo que ir armazenar o nmero do registro no arquivo de organizao direta. Desta forma, a localizao do registro pode ser feita atravs de pesquisa binria pelo campo chave desejado, e em seguida l-se o registro indicado pelo nmero do registro no arquivo de organizao direta. Este caso assemelha-se a uma enciclopdia no alfabtica que possui um volume de ndices, no qual esto relacionados em ordem alfabtica os assuntos e logo ao lado o volume e pgina onde encontr-lo, acessando-o de forma direta.

COMANDOS DE MANIPULAO DE ARQUIVOS Como um arquivo composto por registros, para definirmos um arquivos devemos, primeiramente, definir o registro que ir comp-lo. Precisamos ter conhecimento de que um arquivo armazena diversos registro porm todos com um mesmo lay-out, logo o lay-out dos registros de um arquivo nico. A sintaxe para definio de arquivos em um algoritmo segue a regra abaixo: < nome do arquivo> = ARQUIVO < tipo de organizao> DE < nome do registro> ;
86

Onde, tipo de organizao pode ser sequencial, direta ou indexada e ir definir a forma de acesso aos registros do arquivo. ABRIR UM ARQUIVO como dito anteriormente, no se pode obter informao contida em um arquivo sem antes abri-lo, em algoritmos isto ser feito pelo comando: ABRIR ( <nome do arquivo> ); Caso o arquivo tenha formato de organizao sequencial deve-se indicar se ele ser aberto para leitura ou gravao. Indicando assim o posicionamento do mesmo, respectivamente, no incio ou final do arquivo: ABRIR ( <nome do arquivo> , <leitura / gravao> ); FECHAR UM ARQUIVO no devemos manter o arquivo aberto depois de us-lo, pois isso deixaria seu contedo exposto a agentes externos que poderiam danificar sua integridade. Por isso, convm sempre fechar os arquivos aps sua utilizao, utilizando o comando: FECHAR ( < nome do arquivo> ); Neste caso no importa a forma de organizao do arquivo, to pouco a razo de sua abertura. COPIAR UM REGISTRO um arquivo no deve ter seus registros consumidos e sim consultados e, para tal, precisa-se copiar o contedo que interessa em algum lugar para ento fazer sua utilizao. O local mais apropriado para esta cpia o prprio registro que compem o arquivo, pois ter o mesmo formato de campos. Neste caso copiam-se as informaes da posio corrente do arquivo para o registro especificado, onde todos os campos do registro do arquivo so copiados para os respectivos campos do registro estabelecido no comando. COPIAR ( <nome do arquivo > , < nome do registro >); GRAVANDO UM REGISTRO sempre que alguma nova informao deva ser gravada no arquivo esta deve ser feita em forma do registro que compem o referido arquivo. Assim, deve-se preencher todos os campos do registro para ento, grav-lo no arquivo. Esta gravao ocorrer na posio atual do arquivo. O comando ser: GRAVAR ( <nome do registro> , <nome do arquivo> ); Para percorrer todos os registros de um arquivo, a partir do primeiro, at encontrar seu fim. Este comando posiciona o arquivo na posio consecutiva, ou seja, no prximo registro, e definido como: AVANAR (< nome do arquivo>);
87

Outra instruo bastante importante a que identifica o final do arquivo. Esta funo retorna verdadeiro quando a posio corrente o fim do arquivo, e falso em caso contrrio. Sua sintaxe : EOF (<nome do arquivo>) ou FDA (< nome do arquivo>); onde EOF simboliza, End Of File e FDA simboliza, Final De Arquivo. Quando tem-se um arquivo com organizao direta pode-se atingir o registro desejado fazendo uso do campo chave, para tanto utiliza-se o comando Posicionar, onde a posio corrente do arquivo passa a ser a indicada pela chave, da seguinte forma: POSICIONAR ( <nome do arquivo> , <chave> ); A forma de acesso ao arquivo independe de sua organizao, pode-se igualmente acessar um arquivo de organizao direta de forma sequencial. Assim como um arquivo sequencial poder ser acessado de forma direta desde que seja gerado um arquivo indexado associando um campo do registro deste arquivo, denominado como chave, ao seu nmero de registro no arquivo sequencial.

EXERCCIOS SOBRE ARQUIVOS 1. Supondo um arquivo com os registros com os campos: matrcula, nome, endereo, situao, ttulo de eleitor, cpf, rg, conta bancria, estado civil, cargo, salrio. Imprimir os funcionrios com: situao = afastado, cargo = instrutor e salrio acima de R$ 400,00. 2. Dado o arquivo Cadastro com registros com campos: nome, sexo, cor-de-olhos, altura, peso e data de nascimento. Criar um arquivo Homens cujo sexo =1 e um arquivo Mulheres cujo sexo = 2. Estes dois novos arquivos tem registros com campos nome, peso e data de nascimento. 3. Uma distribuidora de bebidas abastece o mercado de Coca-cola. A empresa, no momento, est preparando o iminente lanamento da Coca Light Plus. Assim, resolveu fazer uma pesquisa de opinio na cidade para determinar qual a melhor estratgia a seguir. Os dados da pesquisa esto em um arquivo com o lay-out: identificao do quarteiro da cidade, quantidade de crianas no quarteiro, quantidade de adolescentes no quarteiro, quantidade de obesos no quarteiro, quantidade de diabticos no quarteiro, total de pessoas no quarteiro.

88

Deve-se criar um algoritmo que leia e processe os dados, informando: a) quantos quarteires tem mais de 100 obesos; b) qual a percentagem mdia (= mdia das percentagens) de crianas por quarteiro sobre o total de pessoas no quarteiro; c) quantos quarteires tem mais adolescentes do que crianas; d) quantos quarteires tem mais de 5% de diabticos. 4. Uma revenda de automveis quer fazer uma pesquisa para determinar se h correlao entre renda familiar e cor do automvel adquirido. Para tanto, cada venda realizada no ms passado, gerou um registro magntico contendo: renda familiar, cor do carro adquirido. As cores possveis so: amarelo, azul, branco, cinza, marrom, preto e vermelho. J as classes de renda so 3: de 0 a 50 sal mnimos, de 50,01 a 150 sal mnimos, acima de 150 sal min. Ler o valor do sal mnimo no inicio do algoritmo e imprimir a quantidade de carros vendidos por cor em cada classe de renda. 5.Existe um arquivo de funcionrios com registros com o lay-out: nome, carteira profissional, endereo, bairro, telefone, CEP, CPF, ttulo de eleitor, nmero de dependentes, cargo, salrio base, data de admisso (dia, ms, ano), data de demisso (dia, ms, ano). A partir deste arquivo, deseja-se: a) aumentar o salrio em 10% dos funcionrios casados e admitidos at 30/09/97; b) relao dos funcionrios no solteiros; c) relao dos funcionrios por faixa salarial: 1 a 2 salrios mnimos 2 a 4 salrios mnimos 4 a 7 salrios mnimos acima de 7 salrios mnimos, o valor do salrio mnimo deve ser lido no incio do procedimento; d) relao dos funcionrios com telefone que esto demitidos. Utilizar funo ou procedimento para cada um dos itens acima. 6. Criar um algoritmo portugol que faa o calculo do valor do salrio lquido de um funcionrio. O arquivo de func. contm registros com os campos: matrcula, nome, endereo, CPF, RG, titulo eleitor, estado civil, sexo, data nascimento, conta corrente, salrio mensal (220 horas), num horas extras, num de dias faltados, vale transporte (S/N), vale refeio (S/N), num dependentes - para cada dependente: grau de parentesco (filho, esposa), data nascimento Descontos: Tabela de desconto de INSS sobre todos os proventos: de 0 a 10 SM - 9% de 10 a 25 SM - 15% acima de 25 SM - 25% Desconto do FGTS equivale a 8% do valor bruto de proventos.
89

Para cada dia faltado diminuir 8 horas de trabalho. Vale refeio - 20% do SM. Vale transporte - 6% do salrio bruto. Tabela de desconto de auxilio sade - todos os funcionrios possuem titular - 1,5% do salrio bruto. dependentes - esposa - 3% do salrio bruto filhos at 14 anos - 2% do salrio bruto filhos acima de 14 anos - 3% do salrio bruto. Proventos: Valor do salrio famlia: R$ 120,00 por filho com menos de 14 anos. Para cada hora extra o valor da hora 50% mais que a hora normal. Salrio Lquido : proventos = salrio bruto + salrio famlia + hora extra desconto = (proventos * % do INSS) + vale refeio + vale transporte + auxilio sade + valor faltas liquido = proventos - descontos Ler no inicio o valor do SM. Utilizar procedimentos e funes. Imprimir ao final: matricula, nome, conta corrente, salrio a ser pago, total do INSS, total do FGTS e total lquido da folha de pagamento.

90

EXERCCIOS DIVERSOS
1. Dado um conjunto de datas do ano de 1996, no formato dia e ms, determinar qual o nmero relativo deste dia no ano, considerando o dia 1 de janeiro como dia nmero 1, e o dia 31 de dezembro como dia nmero 365. O algoritmo deve prosseguir lendo e calculando at que um dia igual a zero seja lido. 2. Dada uma matriz de dimenses 8 X 15, obter uma outra tambm 8 X 15, onde cada linha foi dividida pelo menor elemento da linha correspondente na matriz original. 3. Dada uma matriz de dimenses 9 X 12, obter uma outra tambm de 9 X 12, onde cada linha foi dividida pela somatria dos elementos da linha correspondente da matriz original. 4. Definir um algoritmo Portugol capaz de receber uma srie de datas, sempre referentes ao ano de 1996, e no formato dia e ms. Para cada uma delas, o algoritmo deve calcular uma nova data, no mesmo formato, e que corresponda ao perodo de 180 dias posterior a data original. A srie de datas se encerra quando for lido um dia igual a zero. 5. Dada uma matriz 7 X 12, definir um algoritmo que leia a matriz, e a seguir, classifique as linhas da matriz em ordem crescente. A matriz resultado deve ser impressa ao final. 6. Criar um algoritmo que leia um vetor de 500 elementos inteiros. A seguir o algoritmo deve determinar qual o valor que mais aparece neste vetor e quantas vezes ele aparece. Estas duas informaes devem ser impressas ao final. 7. Dados dois horrios no formato hora e minuto: hora variando de 0 at 11; minutos variando de 0 at 59; definir um algoritmo que leia um par de horrios, sempre referentes a um mesmo dia, e informe qual a diferena entre os dois. O algoritmo termina quando a primeira hora for igual a 99. Por definio, o segundo horrio nunca menor que o primeiro, e a diferena entre os dois deve ser informada no mesmo formato: hora e minuto.

8. Uma partida de rolamentos composta de quantidades variveis de rolamentos tipos 1, 2 e especial. Ela aceita no TODO quando: pelo menos 97% de rolamentos tipo 1 no tem defeito E pelo menos 95% de rolamentos tipo 2 no tem defeito E menos de 1000 rolamentos tipo especial tem defeito. Os dados referentes a cada partida esto no formato: Nmero da partida; Tipo do rolamento; Quantidade de rolamentos; Quantidade de rolamentos c/defeito. Deve-se definir uma algoritmo que leia todos os dados do arquivo e, para cada partida, deve-se imprimir seu nmero e a identificao: ACEITA ou REJEITADA.

91

9. Os nmeros romanos so ainda utilizados em muitas indicaes. Conhecendo seus smbolos, que so: I = 1; V=5; X=10; L=50; C=100, D=500 e M=1000, escreva um algoritmo que leia o nmero inteiro e gere, para cada nmero lido, o equivalente em nmeros romanos, imprimindo ao final. 10. Um fabricante de margarina deseja homenagear sua me no lanamento de um novo produto no prximo ano. A nova margarina dever ter um nome formado por alguma combinao das letras M E R T A, que o nome da me do fabricante. O algoritmo deve imprimir as 120 combinaes possveis, assim o fabricante escolher o nome que quiser. 11. Uma fazenda resolveu automatizar o processo de tomada de deciso para escolha de sementes de trigo. Assim, a rea de plantio foi dividida em 8600 lotes distintos, que devidamente semeados, tiveram a cultura de 95/96 observada. A partir dos dados levantados no campo, foi criado um arquivo contendo o seguinte lay-out: Identificao do lote; Tipo de semente; rea do lote plantado; Quantidade de trigo colhido no lote em kg; Qualidade do produto. Existem 22 tipos de sementes , numeradas de 1 at 22. A qualidade do produto um nmero que significa: 1= excelente; 2=razovel; 3=inferior. Supem-se que o custo de todos os tipos de semente o mesmo. Deve-se definir um algoritmo que leia o arquivo, determine e imprima qual o tipo de semente mais produtiva, seguindo o critrio: Se o trigo produzido for excelente, a produtividade do lote deve ser aumentada de 20%. Se o trigo for inferior, a produtividade deve ser diminuda em 15%. Para cada tipo de semente, devem ser totalizadas as informaes de rea e peso do produto produzido. A semente mais produtiva aquela que tiver maior coeficiente peso/rea.

92

Potrebbero piacerti anche