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

Introduo a Algoritmos em Portugol (Padro Visualg) Parte I

agosto 2010

ndice de ilustraes
Ilustrao 1: Algoritmo de uso do orelho...........................................................................................1 Ilustrao 2: Algoritmo para fritar ovo.................................................................................................1 Ilustrao 3: Algoritmo de fritar ovos completo...................................................................................1 Ilustrao 4: Tipos de dados.................................................................................................................4 Ilustrao 5: Atributos de uma varivel................................................................................................7 Ilustrao 6: Tringulo de base (B) e altura (H)...................................................................................9 Ilustrao 7: Exemplos de Expresses Comparativas........................................................................10 Ilustrao 8: Exemplo de Expresso Lgica.......................................................................................11 Ilustrao 9: Exemplo de atribuio...................................................................................................12 Ilustrao 10: Exemplo de comando de sada....................................................................................13 Ilustrao 11: Exemplo de comando de entrada.................................................................................13 Ilustrao 12: Exemplo com interao...............................................................................................14 Ilustrao 13: Resoluo do exemplo 1..............................................................................................15 Ilustrao 14: Resoluo do exemplo 2..............................................................................................15 Ilustrao 15: Resoluo do exemplo 2..............................................................................................16 Ilustrao 16: Trecho de um algoritmo seqencial.............................................................................27 Ilustrao 17: Exemplo de Estrutura sequencial ou bloco..................................................................27 Ilustrao 18: Fluxograma da estrutura condicional composta..........................................................28 Ilustrao 19: Cdigo em Portugol de um comando de deciso com execuo de bloco obrigatria. ............................................................................................................................................................28 Ilustrao 20: Fluxograma de uma estrutura condicional simples.....................................................29 Ilustrao 21: Comando de deciso simples, com execuo de bloco opcional.................................29 Ilustrao 22: Exemplo de fluxograma de uma estrutura condicional...............................................29 Ilustrao 23: Fluxograma de uma estrutura condicional escolha um valor de n...............................30 Ilustrao 24: Sintaxe do comando escolha. Na linha 5 temos a representao de vrias repeties do comando seno se..........................................................................................................................30 Ilustrao 25: Exemplo de fluxograma que utiliza Escolha um valor de n........................................31

ndice de tabelas
Tabela 1: Armazenamento da literal banana na memria de um computador..................................5 Tabela 2: Linearizao de expresses.................................................................................................10 Tabela 3: Operadores Aritmticos......................................................................................................10 Tabela 4: Operadores Relacionais......................................................................................................10 Tabela 5: Operadores lgicos.............................................................................................................10 Tabela 6: Operaes com operadores lgicos.....................................................................................11 Tabela 7: Operadores aritmticos e sua ordem de prioridade.............................................................11 Tabela 8: Exemplo de teste de mesa...................................................................................................37

ii

Sumrio
1 Algoritmos........................................................................................................................................1 1.1 Algoritmos No Computacionais..............................................................................................1 1.2 Algoritmos Computacionais.....................................................................................................2 2 Tipos de Dados.................................................................................................................................3 2.1 Tipos Numricos.......................................................................................................................3 2.1.1 Tipo Inteiro........................................................................................................................3 2.1.2 Tipo Real...........................................................................................................................3 2.2 Tipo Literal...............................................................................................................................4 2.3 Tipo Lgico...............................................................................................................................4 3 Variveis...........................................................................................................................................5 3.1 Armazenamento de dados em memria....................................................................................5 3.1.1 Armazenamento de dado Literal.......................................................................................5 3.1.2 Armazenamento de Dados do Tipo Lgico.......................................................................6 3.1.3 Armazenamento de Dados do Tipo Inteiro.......................................................................6 3.1.4 Armazenamento de Dados do Tipo Real...........................................................................6 3.2 Conceito de Varivel do computador........................................................................................6 3.3 Quadro de palavras reservadas do Portugol (Visualg)..............................................................7 3.4 Declarao de Variveis em Algoritmos...................................................................................7 4 Expresses........................................................................................................................................9 4.1 Conceito....................................................................................................................................9 4.2 Operadores................................................................................................................................9 4.3 Linearizao de Expresses....................................................................................................10 5 Instrues Primitivas......................................................................................................................12 5.1 Instruo primitiva de atribuio............................................................................................12 5.2 Instruo primitiva de sada de dados.....................................................................................12 5.3 Instruo primitiva de entrada de dados.................................................................................13 5.4 Interao..................................................................................................................................13 5.5 Exemplos de algoritmos resolvidos........................................................................................14 6 Tabela de cdigos ASCII................................................................................................................17 6.1 Caracteres imprimveis...........................................................................................................17 6.2 Caracteres de controle.............................................................................................................17 6.3 Lista de caracteres extendida..................................................................................................18 7 Exerccios.......................................................................................................................................22 8 Controle de Fluxo...........................................................................................................................26 8.1 Bloco de Comandos................................................................................................................26 8.2 Controle de Fluxo...................................................................................................................26 8.3 Bloco de Comandos................................................................................................................26 8.4 Introduo ao Comando Condicional.....................................................................................27 8.5 Estrutura Seqencial...............................................................................................................27 8.6 Comando ou Estruturas de Deciso........................................................................................28 8.7 Conceituando o Comando de Deciso (Estrutura de Deciso)...............................................28 8.8 Estruturas de Deciso do Escolha um valor de n....................................................................30 8.8.1 Estruturas de Deciso do Escolha x valores de n............................................................32 8.8.2 Usando a estrutura Escolha ... Caso FimEscolha.......................................................32 8.8.3 Teste como valores literais..............................................................................................33 8.9 Exerccios Resolvidos.............................................................................................................34 8.10 Testando o algoritmo.............................................................................................................37 8.11 Exerccios propostos:............................................................................................................37 iii

ndice de Exemplos
Exemplo 8.1: ......................................................................................................................................27 Exemplo 8.2: ......................................................................................................................................27 Exemplo 8.3: ......................................................................................................................................27 Exemplo 8.4: ......................................................................................................................................27 Exemplo 8.5: ......................................................................................................................................28 Exemplo 8.6: ......................................................................................................................................28 Exemplo 8.7: ......................................................................................................................................29 Exemplo 8.8........................................................................................................................................29 Exemplo 8.9........................................................................................................................................30 Exemplo 8.10: ....................................................................................................................................31 Exemplo 8.11......................................................................................................................................32 Exemplo 8.12: Resoluo de 8.11 usando comando de seleo mtipla Escolha..............................32 Exemplo 8.13:Modelo geral do comando de seleo mltipla Escolha.............................................32 Exemplo 8.14: Implementao alternativa de 8.10 e 8.12..................................................................33 Exemplo 8.15: Resoluo do exerccio 01 em portugol.....................................................................34 Exemplo 8.16: Resoluo do exerccio 2...........................................................................................35 Exemplo 8.17: Resoluo do exerccio 3...........................................................................................36 Exemplo 8.18: Resoluo do exerccio 4...........................................................................................36

iv

1 Algoritmos
1.1 Algoritmos No Computacionais
Um algoritmo uma sequncia de instrues finita e ordenada de forma lgica para a resoluo de uma determinada tarefa ou problema. So exemplos de algoritmos instrues de montagem, receitas, manuais de uso, etc. Um algoritmo no a soluo do problema, pois, se assim fosse, cada problema teria um nico algoritmo; um algoritmo uma das solues de um problema. Em geral, existem muitas (seno infinitos) solues satisfatrias de um problema. Um algoritmo no computacional um algoritmo cuja sequncia de passos, a princpio, no pode ser executada por um computador. Abaixo, na Ilustrao 1, apresentado um algoritmo no computacional cujo objetivo usar um telefone pblico. Provavelmente voc executou o algoritmo deste exemplo diversas vezes. O termo algoritmo est muito ligado Cincia da Computao, mas, na realidade, ele pode ser aplicado a qualquer problema cuja soluo possa ser decomposta em um grupo de instrues.

Ilustrao 1: Algoritmo de uso do orelho

Um outro exemplo tpico de algoritmo uma receita culinria, como no exemplo, da Ilustrao 2.
1. Colocar um ovo na frigideira 2. Esperar o ovo ficar frito 3. Remover o ovo da frigideira
Ilustrao 2: Algoritmo para fritar ovo.

O algoritmo , da Ilustrao 3, no entanto, poderia ser mais detalhado e completo. Uma verso mais aceitvel seria:
1. 2. 3. 4. 5. 6. 7. 8. 9. Retirar um ovo da geladeira Colocar a frigideira no fogo Colocar leo Esperar at o leo ficar quente Quebrar o ovo separando a casca Colocar o contedo do ovo na frigideira Esperar um minuto Retirar o ovo da frigideira Apagar o fogo

Ilustrao 3: Algoritmo de fritar ovos completo

Essa segunda verso mais completa e detalhada que a anterior. Nela, vrias aes que estavam subentendidas foram explicitadas. No entanto, para que o algoritmo possa ser til, necessrio ainda que quem faz uso dele conhea os termos utilizados nas instrues. O algoritmo do exemplo s ser til para algum que seja fluente na lngua portuguesa e conhea o significado dos verbos Retirar, Colocar, Esperar assim como dos substantivos utilizados no contexto de uma receita culinria. Em outras palavras, preciso que a linguagem utilizada no algoritmo seja conhecida tanto por quem o escreveu quanto por quem vai execut-lo. Para que o algoritmo possa ser executado por uma mquina importante que as instrues sejam corretas e sem ambiguidades. Portanto, a forma especial de linguagem que utilizaremos bem mais restrita que o Portugus e com significados bem definidos para todos os termos utilizados nas instrues. Essa linguagem conhecida como Portugus Estruturado (s vezes tambm chamada de Portugol). O portugus estruturado , na verdade, uma simplificao extrema do Portugus, limitada a umas poucas palavras e estruturas que tm um significado muito bem definido. Ao conjunto de palavras e regras que definem o formato das sentenas vlidas chamamos sintaxe da linguagem. Durante este texto, a sintaxe do Portugus Estruturado ser apresentada progressivamente e a utilizaremos em muitos exerccios de resoluo de problemas. Aprender as palavras e regras que fazem parte dessa sintaxe fundamental; no entanto, no o maior objetivo deste curso. O que realmente exigir um grande esforo por parte do estudante aprender a resolver problemas utilizando a linguagem. Para isso, h somente um caminho: resolver muitos problemas. O processo semelhante ao de tornar-se competente em um jogo qualquer: aprender as regras do jogo (a sintaxe) s o primeiro passo, tornar-se um bom jogador (programador) exige tempo, muito exerccio e dedicao. Embora o Portugus Estruturado seja uma linguagem bastante simplificada, ela possui todos os elementos bsicos e uma estrutura semelhante de uma linguagem tpica para programao de computadores. Alm disso, resolver problemas com portugus estruturado, pode ser uma tarefa to complexa quanto a de escrever um programa em uma linguagem de programao qualquer. Portanto, neste curso, estaremos na verdade procurando desenvolver as habilidades bsicas que sero necessrias para adquirir-se competncia na programao de computadores. Para praticar nossa sintaxe e testar nossos problemas, utilizaremos o software Visualg desenvolvida por Cludio Morgado de Souza. E-mail: cmorgado@apoioinformatica.com.br.

1.2 Algoritmos Computacionais


O computador, a princpio, no executa nada. Para que ele faa uma determinada tarefa -calcular uma folha de pagamento, por exemplo -, necessrio que ele execute um programa. Um programa um conjunto de milhares de instrues que indicam ao computador, passo a passo, o que ele tem que fazer. Logo, um programa nada mais do que um algoritmo computacional descrito em uma linguagem de programao. Uma linguagem de programao contm os comandos que fazem o computador escrever algo na tela, realizar clculos aritmticos, receber uma entrada de dados via teclado, e milhares de outras coisas, mas estes comandos precisam estar em uma ordem lgica. O termo processamento de dados muitas vezes utilizado em conjunto com computadores, pois, em geral, isto o que eles fazem: processar dados. Da podem extrair os dois componentes bsicos de um algoritmo computacional (de agora em diante, esta palavra sempre utilizada no contexto de algoritmos computacionais): dados e cdigo. Dados so os valores (nmeros, nomes, etc.) de que precisamos para resolver o problema, e cdigo so os comandos ou instrues que usaremos para manipular e "processar" os dados.

2 Tipos de Dados
Todo o trabalho realizado por um computador baseado na manipulao de valores contidos em sua memria. A grosso modo, estes valores podem ser classificadas em dois tipos: As instrues, que comandam o funcionamento da mquina e determinam a maneira como devem ser tratados os dados. As instrues so especficas para cada modelo de computador, pois so funes do tipo particular de processador utilizado em sua implementao. Os valores propriamente ditos, que correspondem poro de dados a serem processadas pelo computador. A maior parte das pessoas no ligadas rea de informtica ignora o potencial dos computadores e imagina que eles so capazes de tratar apenas com dados numricos. Na realidade, a capacidade dos mesmos se estende a outros tipos de dados. O objetivo deste captulo justamente o de classificar os valores de acordo com o tipo de dado contido neles. A classificao apresentada no se aplica a nenhuma linguagem de programao especfica; pelo contrrio, ela sintetiza os padres utilizados na maioria das linguagens. Este padro ser utilizado no Portugol adotado para este curso.

2.1 Tipos Numricos


Antes de apresentar formalmente os tipos de dados numricos, conveniente recordar alguns conceitos bsicos relacionados teoria dos nmeros e conjuntos. O conjunto dos nmeros naturais representado por N e dado por: N = {1, 2, 3, 4, ...} Algumas correntes de matemticos tericos convencionam que o nmero 0 est contido neste conjunto; contudo, no convm perder tempo em tais discusses filosficas, uma vez que isto no influenciar de forma alguma este estudo. Na seqncia, encontramos o conjunto dos nmeros inteiros: Z = {..., -3, -2, -1, 0, 1, 2, 3, ...} O conjunto Z contm todos os elementos de N, bem como alguns nmeros que no pertencem a N (os nmeros negativos e o zero). Portanto, dizemos que N est contido em Z, ou ento, que Z contm N. Englobando o conjunto dos nmeros inteiros, existe o conjunto dos nmeros fracionrios (Q), dado pelo universo dos nmeros que podem ser expressos na forma de uma frao, isto , um quociente onde o numerador e o denominador so nmeros inteiros. Mais formalmente: Q = ( p/q | p, q pertencem a Z} Por ltimo, surge o conjunto dos nmeros reais (R), formado pela unio do conjunto dos nmeros fracionrios Q com o conjunto dos nmeros que no podem ser expressos na forma de uma frao (os nmeros irracionais). Ex.: 2 = 1.1412... , PI = 3.14159...

2.1.1

Tipo Inteiro

Os nmeros inteiros so aqueles que no possuem componentes decimais ou fracionrios, podendo ser positivos ou negativos. Os elementos pertencentes aos conjuntos N e Z, apesar de serem representveis na classe dos nmeros reais, so classificados como dados do tipo inteiro, por no possurem parte fracionria. Esta possibilidade interessante por permitir uma economia do espao de memria, como veremos adiante. Por sua vez, os elementos dos conjuntos Q e R, por possurem parte fracionria, no podem ser representados na classe inteira, pertencendo necessariamente aos tipos de dados ditos reais. Como exemplos de nmeros inteiros temos: 24 - nmero inteiro positivo 0 - nmero inteiro -12 - nmero inteiro negativo

2.1.2

Tipo Real

Os dados de tipo real so aqueles que podem possuir componentes decimais ou fracionrios, e podem tambm 3

ser positivos ou negativos. Como dito anteriormente, os elementos dos conjuntos de nmeros fracionrios e reais so necessariamente representados no computador por dados do tipo real. Exemplos de dados do tipo real: 24.01 - nmero real positivo com duas casas decimais 144. - nmero real positivo com zero casas decimais -13.3 - nmero real negativo com uma casa decimal 0.0 - nmero real com uma casa decimal 0. - nmero real com zero casas decimais 0,0 - no deve ser utilizada a virgula para representar um real Observe que h uma diferena entre 0, que um dado do tipo inteiro 0. (ou 0.0) que um dado do tipo real. Portanto, a simples existncia do ponto decimal serve para diferenciar um dado numrico do tipo inteiro de um do tipo real.

2.2 Tipo Literal


O tipo de dados Literal constitudo por uma seqncia de caracteres contendo letras, dgitos e/ou smbolos especiais. Este tipo de dados tambm muitas vezes chamado de alfanumrico, cadeia (ou cordo) de caracteres, ainda, do ingls, string. Usualmente, os dados literais so representados nos algoritmos pela coleo de caracteres, delimitada em seu incio e trmino com o caractere aspas ("). Diz-se que o dado do tipo literal possui um comprimento dado pelo nmero de caracteres nele contido. Exemplos de dados do tipo literal: "QUAL ?" - literal de comprimento 6 " " - literal de comprimento 1 "qUaL ?!$" - literal de comprimento 8 " AbCdefGHi" - literal de comprimento 9 "1-2+3=" - literal de comprimento 6 0 - literal de comprimento 1 Note que, por exemplo, "1.2" representa um dado do tipo Literal de comprimento 3, constitudo pelos caracteres "1", "." e "2", diferindo de 1.2 que um dado do tipo Real.

2.3 Tipo Lgico


A existncia deste tipo de dado , de certo modo, um reflexo da maneira como os computadores funcionam. Muitas vezes, estes tipos de dados so chamados de booleanos, devido significativa contribuio de BOOLE rea da lgica matemtica. O tipo de dados lgico usado para representar dois nicos valores lgicos possveis: verdadeiro e falso. comum encontrar-se em outras referncias outros tipos de pares de valores lgicos como sim/no, 1/0, true/false. Nos algoritmos apresentados nesta apostila os valores lgicos sero definidos como: .V. ou verdadeiro (Visualg) - valor lgico verdadeiro .F. ou falso (Visualg) - valor lgico falso A Ilustrao 4 mostra os tipos bsicos de uma linguagem de programao.

Ilustrao 4: Tipos de dados

3 Variveis
A todo momento durante a execuo de qualquer tipo de programa os computadores esto manipulando dados representadas pelos diferentes tipos descritos no captulo anterior. Para que no se "esquea" das informaes, o computador precisa guard-las em sua memria. Este captulo destinado ao estudo da forma como os computadores armazenam e acessam dados contidos em sua memria.

3.1 Armazenamento de dados em memria


Cada um dos diversos tipos de dados apresentados no captulo anterior necessita de uma certa quantidade de memria para armazenar a informao representada por eles. Esta quantidade funo do tipo de dado considerado, do tipo da mquina (computador) e do tipo de linguagem de programao. Por isso, o que ser exposto nos subitens seguintes no deve ser tomado como padro, apenas como uma das forma de representar os dados.

3.1.1

Armazenamento de dado Literal

Devemos sempre ter em mente que um byte consegue representar 256 (2 8) possibilidades diferentes. Uma informao do tipo literal nada mais do que um conjunto de caracteres que podem ser letras, dgitos ou smbolos especiais. A unio de todos os caracteres existentes nos computadores resulta num conjunto com um nmero de elementos menor que 256. Deste resultado surgiu a idia de associar a cada caractere um nmero (cdigo) variando de 0 a 255 (256 possibilidades). No princpio, cada fabricante de computador adotava uma conveno diferente para este cdigo. Mais foi padronizada a fim de facilitar a portabilidade (migrao) de programas entre mquinas diferentes. Esta conveno representada na forma de uma tabela de mapeamento de caracteres em nmeros. O padro mais universalmente aceito o ASCII, cuja tabela mostrada no captulo 6 . Assim, cada clula de memria (byte) pode conter um caractere, representado pelo seu cdigo ASCII. Retornando questo do armazenamento de dados do tipo Literal na memria, deve-se lembrar que um dado deste tipo possui um certo comprimento dado pelo nmero de caracteres nele contido. Portanto, para guardar um dado do tipo literal devemos alocar (reservar) um espao contguo de memria igual ao comprimento do mesmo, destinando um byte para cada caractere da informao. Exemplificando, a informao do tipo literal "banana" possui seis caracteres e, portanto, seis bytes so necessrios para reter a referida informao na memria. A princpio, estes bytes podem estar em qualquer lugar da memria, mas conveniente que estejam juntos (posies contguas). A primeira posio deste conjunto de bytes absolutamente arbitrria e sua escolha geralmente feita automaticamente pelo compilador (isto , pelo programa que traduz um outro escrito em alguma linguagem de programao para outra geral, a linguagem de mquina do computador com que se trabalha). Endereo 0 1 2 3 4 5
Tabela 1: Armazenamento da literal banana na memria de um computador.

Dado b(98) a(97) n(110) a(97) n(110) a(97)

A Tabela 1 mostra o caso em que se armazena a literal "banana" no conjunto de seis bytes contguos de memria iniciando pela posio de memria 0. Na verdade, ao invs dos caracteres da Literal, os cdigos correspondentes aos mesmos que so guardados na memria.

3.1.2

Armazenamento de Dados do Tipo Lgico

Uma informao do tipo lgico s possui dois valores possveis: .V. ou .F.. Assim, a princpio, um nico bit seria suficiente para armazenar uma informao deste tipo. Contudo, deve-se lembrar que a menor poro de memria que se pode acessar o byte. Portanto, uma dado do tipo lgico armazenado em um byte de memria. De certa forma, se por um lado isto pode ser como um "desperdcio" de memria, por outro simplifica bastante a arquitetura de memria dos computadores (por motivos que fogem ao contexto desta apostila). Alm do mais, isto no to relevante, uma vez que na prtica o nmero de ocorrncias de dados do tipo lgico bastante inferior ao de ocorrncias de dados do tipo literal ou numrico.

3.1.3

Armazenamento de Dados do Tipo Inteiro

O conjunto dos nmeros inteiros (Z) contm um nmero infinito de elementos: Z = { -, ..., -3, -2, -1, 0, 1, 2, 3, ..., +} Obviamente invivel o armazenamento de todos os nmeros deste conjunto num computador. Faz-se necessrio realizar um estudo para que se limite o nmero de elementos representveis deste conjunto. Se apenas um byte fosse utilizado para armazenar os dados do tipo inteiro, existiriam apenas 256 nmeros diferentes neste conjunto: {-127, -126, ..., -2, -1, 0, 1, 2, ..., 127, 128) Esta restrio bastante forte, uma vez que boa parte das aplicaes prticas necessitam de nmeros inteiros maiores que estes. Se forem utilizados dois bytes para armazenar um nmero inteiro, o universo de nmeros representveis cresce para 28 x 28 = 216 = 65.536 possibilidades: {-32767, -32766, ..., -2, -1, 0, 1, 2, ..., 32767, 32768} Este conjunto satisfaz grande maioria das necessidades prticas. Hoje, em geral utilizam-se quatro bytes para representar os nmeros inteiros em computadores. Contudo, restam algumas aplicaes muito especficas em que se precisa de um conjunto ainda maior. Para estes casos, algumas linguagens de programao fornecem mecanismos para trabalhar nmeros inteiros com dezesseis bytes. Nestes casos os dados so ditos inteiros longos ou estendidos.

3.1.4

Armazenamento de Dados do Tipo Real

O conjunto dos nmeros reais (R) contm um nmero infinito de elementos e, pelas mesmas razes que o conjunto dos nmeros inteiros, precisa ser limitado. Para dados deste tipo julgou-se apropriado adotar quatro bytes para sua representao interna nos computadores. So muito comuns situaes como as aplicaes cientficas em que necessria uma maior preciso de clculo, intimamente ligada ao nmero de casas decimais dos dados. Para este caso, em analogia com o que acontece com os dados do tipo inteiro, algumas linguagens de programao decidiram criar dados do tipo real estendido (com dezesseis bytes).

3.2 Conceito de Varivel do computador


Como visto anteriormente, valores correspondentes a diversos tipos de dados so armazenadas na memria dos computadores. Para acessar individualmente cada um destes valores, a princpio, seria necessrio saber o tipo de dado destes (ou seja, o nmero de bytes de memria ocupados) e a posio inicial deste conjunto de bytes na memria. Percebe-se que esta sistemtica de acesso a informaes na memria bastante ilegvel e difcil de se trabalhar. Para contornar esta situao criou-se o conceito de varivel, que uma entidade destinada a guardar uma informao. Basicamente, uma varivel possui trs atributos: um nome, um tipo de dado e um valor armazenado.

Nome

Tipo

Valor

Varivel
Ilustrao 5: Atributos de uma varivel

Toda varivel possui um nome que tem a funo de diferenci-la das demais. Cada linguagem de programao estabelece suas prprias regras de formao de nomes de variveis. Adotaremos nesta apostila as seguintes regras: um nome de varivel deve necessariamente comear com uma letra; um nome de varivel no deve conter nenhum smbolo especial exceto a sublinha nenhuma palavra reservada1 pode ser utilizada como nome de varivel Em um programa no pode declarar duas variveis com o mesmo nome Exemplos: salario 1ano ano1 a casa sal/hora sal_hora _desconto = = = = = = = correto errado(comeou com nmero) correto errado(contm espao em branco) errado(contm o caractere /) correto errado(contm o caractere _)

3.3 Quadro de palavras reservadas do Portugol (Visualg)


A seguir temos alguns exemplos de palavras reservadas, estes nome no podem ser utilizados como nomes de variveis em Portugol: aleatorio algoritmo arquivoate caractere caso cronometro debuge ecoenquanto entao escolha escreva escreval faca falso fimalgoritmo fimenquanto fimescolha fimfuncao fimpara fimprocedimento fimrepita fimse funcao inicio int inteiro interrompa leia limpatela logico mod nao ou outrocaso para passo pausa real procedimento repita retorne se senao timervar vetorverdadeiro xou

3.4 Declarao de Variveis em Algoritmos


Todas as variveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se faz necessrio para permitir que o compilador reserve um espao na memria para as mesmas. Nos algoritmos apresentados nesta apostila ser adotada a seguinte conveno: todas as variveis utilizadas em algoritmos sero definidas no incio do mesmo, por meio de um comando de uma das formas seguintes: VAR <nome_da_varivel> : <tipo_da_varivel>
1 Conjunto de nomes utilizados pelo projetista da linguagem na gramtica da mesma. Exemplo: algoritmo, inicio, var, etc.

VAR <lista_de_variveis> : <tipo_das_variveis> a palavra-chave VAR dever estar presente sempre e ser utilizada uma nica vez na definio de um conjunto de uma ou mais variveis; numa mesma linha podero ser definidas uma ou mais variveis do mesmo tipo. Para tal, deve-se separar os nomes das mesmas por vrgulas; variveis de tipos diferentes devem ser declaradas em linhas diferentes. A forma de utilizao deste comando ficar mais clara quando da utilizao da representao de algoritmos em linguagem estruturada (Portugol). Esta conveno vlida para a representao de algoritmos na forma de Portugol. Em termos de fluxograma, no usual adotar-se qualquer forma de definio de variveis. Exemplo de definio de variveis:
VAR

nome : Literal idade : Inteiro salario : Real


tem_filhos : Logico

No exemplo acima foram declaradas quatro variveis: a varivel nome, capaz de armazenar dados literais de comprimento indeterminado; a varivel idade, capaz de armazenar um nmero inteiro; a varivel salario, capaz de armazenar um nmero real; a varivel tem_filhos capaz de armazenar uma informao lgica.

4 Expresses
Neste captulo veremos conceito e uso de expresses.

4.1 Conceito
O conceito de expresso em termos computacionais est intimamente ligado ao conceito de expresso (ou frmula) matemtica, onde um conjunto de variveis e constantes numricas relacionam-se por meio de operadores aritmticos compondo uma frmula que, uma vez avaliada, resulta num valor. Uma expresso um valor. O valor 5 pode ser obtido avaliando (resolvendo) a expresso +5 ou 2+3.

Ilustrao 6: Tringulo de base (B) e altura (H).

Por exemplo, a frmula de clculo da rea do tringulo da Ilustrao 6 dada por: AREA = 0.5 x B x H Esta frmula utiliza trs variveis: B e H, que contm as dimenses do tringulo, e AREA, onde guardado o valor calculado (resultado da avaliao da expresso). H, tambm, uma constante (0.5) e o operador de multiplicao (x), que aparece duas vezes na expresso. O conceito de expresso aplicado computao assume uma conotao mais ampla: uma expresso uma combinao de variveis, constantes e operadores, e que, uma vez avaliada, resulta num valor. 4.2 Operadores Operadores so elementos funcionais que atuam sobre operandos e produzem um determinado resultado. Por exemplo, a expresso 3 + 2 relaciona dois operandos (os nmeros 3 e 2) por meio do operador (+) que representa a operao de adio. De acordo com o nmero de operandos sobre os quais os operadores atuam, os ltimos podem ser classificados em: binrios, quando atuam sobre dois operandos. Ex.: os operadores das operaes aritmticas bsicas (soma, subtrao, multiplicao e diviso); unrios, quando atuam sobre um nico operando. Ex.: o sinal de (-) na frente de um nmero, cuja funo inverter seu sinal. Outra classificao dos operadores feita considerando-se o tipo de dado de seus operandos e do valor resultante de sua avaliao. Segundo esta classificao, os operadores dividem-se em aritmticos, lgicos e literais. Esta diviso est diretamente relacionada com o tipo de expresso onde aparecem os operadores. Um caso especial o dos operadores relacionais, que permitem comparar pares de operandos de tipos de dados iguais, resultando sempre num valor lgico. Mais adiante sero apresentados os operadores dos diversos tipos acima relacionados. 9

4.3 Linearizao de Expresses


Para a construo de algoritmos que realizam clculo matemticos, todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em linhas, devendo tambm ser feito o mapeamento dos operadores da aritmtica tradicional para os do Portugus Estruturado. 2/35315 2 [ 53]1 . 5 3

Tradicional
Tabela 2: Linearizao de expresses

Computacional

As tabelas seguintes mostram os operadores aritmticos disponveis no Portugus Estruturado. Operadores Aritmticos Portugus Estruturado Adio Subtrao Multiplicao Diviso Diviso Inteira Exponenciao Mdulo (resto da diviso)
Tabela 3: Operadores Aritmticos

+ * / \ ^ ou Exp(<base>, <expoente>) %

Os operadores relacionais realizam a comparao entre dois operandos ou duas expresses e resultam em valores lgicos (VERDADEIRO ou FALSO). Operadores Relacionais Portugus Estruturado Maior Menor Maior oi igual Menor ou igual Igual Diferente
Tabela 4: Operadores Relacionais

> < >= <= = <>

Os operadores lgicos atuam sobre expresses e tambm resultam em valores lgicos VERDADEIRO ou 2+5>4 resulta VERDADEIRO 3<>3 resulta FALSO
Ilustrao 7: Exemplos de Expresses Comparativas

FALSO. Operadores Lgicos Portugus Estruturado Significado Multiplicao Lgica Adio Lgica Negao E OU NAO Resulta VERDADEIRO verdadeiras. se ambas as partes forem

Resulta VERDADEIRO se uma das partes verdadeira. Nega uma afirmao, invertendo o seu valor lgico: se for VERDADEIRO torna-se FALSO, se for FALSO torna-se VERDADEIRO.

Tabela 5: Operadores lgicos

10

A tabela abaixo chamada tabela-verdade mostra os resultados das aplicaes dos operadores lgicos conforme os valores dos operadores envolvidos. A VERDADEIRO FALSO FALSO FALSO FALSO B AEB FALSO FALSO A OU B NAO A NAO B FALSO VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO FALSO VERDADEIRO FALSO FALSO VERDADEIRO FALSO

VERDADEIRO VERDADEIRO FALSO VERDADEIRO VERDADEIRO

Tabela 6: Operaes com operadores lgicos

De acordo com a necessidade, as expresses podem ser unidas pelos operadores lgicos. (2+5>4) e (3<>3) resulta FALSO, pois VERDADEIRO e FALSO resulta FALSO.
Ilustrao 8: Exemplo de Expresso Lgica.

A modularizao a diviso de uma expresso em partes, proporcionando maior compreenso e definindo prioridades para a resoluo da mesma. Como pde ser observado no exemplo anterior, em expresses computacionais utilizamos somente parnteses "()" para modularizao. Na sintaxe do Portugus Estruturado podemos ter parnteses dentro de parnteses, como seriam os colchetes e as chaves na matemtica. Os parnteses indicam quais sub-expresses, dentro de uma expresso, sero executados primeiro. A princpio, a execuo da esquerda para direita, mas alm dos parnteses, existem prioridades entre os operadores envolvidos na expresso. Tais prioridades so mostradas nas tabelas seguintes. Operador + * / ^ + Binrio Binrio Binrio Binrio Binrio Unrio Unrio Tipo Adio Subtrao Multiplicao Diviso Exponenciao Manuteno do sinal Inverso do sinal Operao Prioridade 4 4 3 3 2 1 1

Tabela 7: Operadores aritmticos e sua ordem de prioridade.

Lembrete: O Portugol no possui relacionamento de categorias logo: 2*5>3 ou 5+1<2 e 2<7-2 // resulta em erro. (2*5>3) ou (5+1<2) e (2<7-2) // certo seria assim.

11

5 Instrues Primitivas
Como o prprio nome diz, instrues primitivas so os comandos bsicos que efetuam tarefas essenciais para a operao dos computadores, como entrada e sada de dados (comunicao com o usurio e com os dispositivos perifricos), e movimentao dos mesmos na memria. Estes tipos de instruo esto presentes na absoluta maioria das linguagens de programao. De fato, um programa que no utiliza nenhuma instruo primitiva - como as que sero definidas neste captulo - incapaz de se comunicar com o mundo exterior e, portanto, no tem utilidade alguma. Antes de passar descrio das instrues primitivas, necessria a definio de alguns termos que sero utilizados mais frente: Dispositivo de entrada o meio pelo qual as informaes (mais especificamente os dados) so transferidas pelo usurio ou pelos nveis secundrios de memria ao computador. Os exemplos mais comuns so: o teclado, o carto perfurado (j obsoleto), as fitas e os discos magnticos, entre outros; Dispositivo de sada o meio pelo qual as informaes (geralmente, os resultados da execuo de um programa) so transferidas pelo computador ao usurio ou aos nveis secundrios de memria. Exemplos: monitor de vdeo, impressora, fitas e discos magnticos, entre outros; Sintaxe a forma como os comandos devem ser escritos, a fim de que possam ser entendidos pelo tradutor de programas. A violao das regras sintticas considerada um erro sujeito pena do noreconhecimento do comando por parte do tradutor; Semntica o significado, ou seja, o conjunto de aes que sero exercidas pelo computador durante a execuo do referido comando. Daqui por diante, todos os comandos novos sero apresentados por meio de sua sintaxe e sua semntica, isto , a forma como devem ser escritos e a(s) ao(es) que executam.

5.1 Instruo primitiva de atribuio


A instruo primitiva de atribuio, ou simplesmente atribuio, a principal maneira de se armazenar uma informao numa varivel. Sua sintaxe : <nome_de_varivel> <expresso> O modo de funcionamento (semntica) de uma atribuio consiste 1) na avaliao da expresso e 2) no armazenamento do valor resultante na posio de memria correspondente varivel que aparece esquerda do comando.
Algoritmo Atribuicao Var preco_unit, preco_total : real quant: inteiro Incio preco_unit 5.0 quant 10 preco_total preco_unit * quant FimAlgoritmo
Ilustrao 9: Exemplo de atribuio

5.2 Instruo primitiva de sada de dados


As instrues primitivas de sada de dados so o meio pelo qual informaes contidas na memria dos computadores so colocadas nos dispositivos de sada, para que o usurio possa visualiz-las. H duas sintaxes possveis para esta instruo: Escreva (lista de variveis) ou Escreva <lista de valores> Daqui por diante, Escreva ser considerada uma palavra reservada e no mais poder ser utilizada como nome de varivel, de modo que toda vez que for encontrada em algoritmos ser identificada como um comando de 12

sada de dados. Uma lista de variveis um conjunto de nomes de variveis separados por vrgulas. Um lista de valores um conjunto de nomes de variveis separados por vrgulas. A semntica da instruo primitiva de sada de dados muito simples: os argumentos do comando so enviados para o dispositivo de sada. No caso de uma lista de variveis, o contedo de cada uma delas pesquisado na posio de memria correspondente varivel e depois enviado para o dispositivo de sada. No caso de argumentos do tipo Literal, estes so enviados diretamente ao referido dispositivo. H, ainda, a possibilidade de se misturar nomes de variveis com literais na lista de um mesmo comando. O efeito obtido bastante til e interessante: a lista lida da esquerda para a direita e cada elemento da mesma tratado separadamente; se um nome de varivel for encontrado, ento a informao da mesma pega da memria e colocada no dispositivo de sada; no caso de um literal, o mesmo escrito diretamente no dispositivo de sada.
Algoritmo Escreva Var preco_unit, preco_total : real quant: inteiro Incio preco_unit 5.0 quant 10 preco_total preco_unit * quant escreva(preco_total) FimAlgoritmo
Ilustrao 10: Exemplo de comando de sada

5.3 Instruo primitiva de entrada de dados


O algoritmo da Ilustrao 10 ainda necessita de uma melhoria essencial. Toda vez que ele executado, o mesmo valor calculado, j que os valores das variveis preco_unit e quant permanecem inalterados. Seria interessante que estes valores pudessem ser fornecidos ao computador pelo usurio do programa toda vez que o programa fosse executado, para que o usurio tivesse um maior controle sobre o valor calculado. A instruo primitiva de entrada de dados foi criada para suprir esta necessidade. Sua sintaxe : leia (lista de variveis) Da mesma forma que escreva, daqui em diante leia ser tratada como uma palavra reservada e no mais poder ser usada como nome de varivel em algoritmos. A lista_de_variveis um conjunto de um ou mais nomes de variveis, separados por vrgulas. A semntica da instruo de entrada (ou leitura) de dados , de certa forma, inversa da instruo de escrita: os dados so fornecidos ao computador por meio de um dispositivo de entrada (teclado) e armazenados nas posies de memria das variveis cujos nomes aparecem na lista de variveis respectivamente.
Algoritmo Leia Var preco_unit, preco_total : real quant: inteiro Incio leia(preco_unit, quant) preco_total preco_unit * quant escreva(preco_total) FimAlgoritmo
Ilustrao 11: Exemplo de comando de entrada

5.4 Interao
Em sua forma atual, ao incio de sua execuo, ele procura ler os valores para as variveis preco_unit e quant. Um usurio diferente daquele que criou o programa, a no ser que esteja bem treinado no uso do mesmo, poder encontrar dificuldades na interao com o programa. Ele pode confundir a ordem em que os dados 13

devem ser fornecidos ou simplesmente esquecer o que o programa deseja que ele digite. Ao trmino da execuo o programa escreve como resultado um nmero que pode no possuir nenhum significado ao usurio se este no souber a finalidade para a qual o algoritmo foi concebido. Uma preocupao constante de um bom programador deve ser a de conceber um programa "amigo do usurio". Esta preocupao traduzida no planejamento de uma interface com o usurio (meio pelo qual um programa e o usurio "conversam") bastante amigvel. Em termos prticos, isto se resume aplicao de duas regras bsicas: toda vez que um programa estiver esperando que o usurio fornea a ele um determinado dado (operao de leitura), ele deve antes enviar uma mensagem dizendo ao usurio o que ele deve digitar, por meio de uma instruo de sada de dados; antes de enviar qualquer resultado ao usurio, um programa deve escrever uma mensagem explicando o significado do mesmo. Estas medidas tornam o dilogo entre o usurio e o programador muito mais fcil.
Algoritmo Interao Var preco_unit, preco_total : real quant: inteiro Incio escreva(Informe o preo do produto -> ) leia(preco_unit) escreva(Informe a quantidade do produto -> ) leia(quant) preco_total preco_unit * quant escreva( O Preo total do produto -> , preco_total) FimAlgoritmo
Ilustrao 12: Exemplo com interao.

5.5 Exemplos de algoritmos resolvidos


Exemplo 1 Escreva um algoritmo em portugol para calcular a mdia entre dois nmeros quaisquer. Soluo: A idia principal do algoritmo est centrada na expresso matemtica utilizada no clculo da mdia (M) entre dois nmeros, n1 e n2, dada por: m = (n1 + n2) / 2 Para que o valor de m possa ser calculado pelo algoritmo, necessrio que os valores de n1 e n2 tenham sido fornecidos ao mesmo com antecedncia. Portanto, a primeira etapa do algoritmo consiste da obteno (leitura) dos valores de n1 e n2 e armazenamento dos mesmos em posies distintas de memria (variveis). Na seqncia, o valor da mdia deve ser calculado por meio de uma expresso apropriada e atribudo a uma terceira varivel (m). Por fim, deve-se relatar ao usurio o valor calculado por meio de uma instruo primitiva de sada de dados. Como o algoritmo opera apenas com dados numricos, certamente as variveis utilizadas sero do tipo inteiro ou real. Como se deseja calcular a mdia entre dois nmeros quaisquer, ento as variveis n1 e n2 devem ser capazes de armazenar nmeros com ou sem parte fracionria e, portanto, necessrio que estas sejam do tipo real. Como o valor mdio entre dois nmeros reais um nmero que pode ou no ter parte fracionria, ento a varivel m tambm deve ser do tipo real.

14

Algoritmo Media Var n1, n2, media: real Incio escreva(Informe um valor -> ) leia(n1) escreva(Informe outro valor -> ) leia(n2) media (n1 + n2) / 2 escreva( A media dos valores informados -> , media) FimAlgoritmo
Ilustrao 13: Resoluo do exemplo 1.

Exemplo 2 Escreva um algoritmo para calcular o valor de y como funo de x, segundo a funo y(x) = 3x + 2, num domnio real. Soluo: Essencialmente o algoritmo usado na soluo deste problema consiste na obteno do valor de x para o qual se deseja calcular a funo, o clculo desta propriamente dito e a mostra do resultado obtido ao usurio: Para que se possa escrever o algoritmo deve-se decidir qual ser o tipo das variveis x e y. Como especificado no enunciado do problema, o algoritmo deve operar num domnio real e, portanto, as variveis x e y devem ser do tipo real.
Algoritmo funcao_y Var x,y: real Incio escreva(Algoritmo para calcular y = 3 * x + 2.) escreva(Informe o valor de x -> ) leia(x) y (3 * x + 2) escreva( Para o valor de x informado y vale -> , y, .) FimAlgoritmo
Ilustrao 14: Resoluo do exemplo 2.

Exemplo 3 Escreva um algoritmo para calcular o consumo mdio de um automvel (medido em Km/l), dado que so conhecidos a distncia total percorrida e o volume de combustvel consumido para percorr-la (medido em litros). Soluo: A principal questo a ser levantada na obteno do algoritmo pedido consiste na formulao da expresso usada para calcular o consumo mdio (cm) a partir da distncia total percorrida (dist) e do volume de combustvel consumido (vol), que dada por: cm=dist/vol Uma vez obtida esta expresso, a formulao do algoritmo desejado consiste em uma simples repetio daqueles apresentados nas questes anteriores: deve-se obter o valor das variveis dist e vol, calcular o consumo pela expresso acima e, finalmente, mostrar ao usurio o valor calculado. Assumindo que as variveis cm, dist e vol so reais podemos escrever o algoritmo.

15

Algoritmo ComsumoMedio Var cm, dist, vol: real Incio escreva(Algoritmo para calcular o consumo mdio!!) escreva(Informe a distancia total percorrida -> ) leia(dist) escreva(Informe o volume de combustvel gasto -> ) leia(vol) cm dist/vol escreva( O consumo mdio com os valores informados _> , y, .) FimAlgoritmo
Ilustrao 15: Resoluo do exemplo 2.

16

6 Tabela de cdigos ASCII


American Standard Code for Information Interchange (ASCII), que em portugus significa "Cdigo Padro Americano para Intercmbio de Informao") uma codificao de caracteres de sete bits baseada no alfabeto ingls. Os cdigos ASCII representam texto em computadores, equipamento de comunicaes, entre outros dispositivos que trabalham com texto. Estes dispositivos s percebem nmeros, sendo assim um cdigo ASCII uma representao numrica de um carcter, tal como um 'a' ou um 't'. A maioria dos actuais esquemas de codificao modernos, com suporte para muitos caracteres, tiveram origem no cdigo ASCII. ASCII inclu definies para 128 caracteres: 33 caracteres de controlo no imprimveis (a maioria obsoletos) que afectam a forma como o texto processado; 94 so caracteres imprimveis, e o espao considerado invisvel. Actualmente o mtodo de codificao mais comum o UTF-8.

6.1 Caracteres imprimveis


Binrio 0010 0000 0010 0001 0010 0010 0010 0011 0010 0100 0010 0101 0010 0110 0010 0111 0010 1000 0010 1001 0010 1010 0010 1011 0010 1100 0010 1101 0010 1110 0010 1111 0011 0000 0011 0001 0011 0010 0011 0011 0011 0100 0011 0101 0011 0110 0011 0111 0011 1000 0011 1001 0011 1010 0011 1011 0011 1100 0011 1101 0011 1110 0011 1111 Decim Hexa al 32 20 33 21 34 22 35 23 36 24 37 25 38 26 39 27 40 28 41 29 42 2A 43 2B 44 2C 45 2D 46 2E 47 2F 48 30 49 31 50 32 51 33 52 34 53 35 54 36 55 37 56 38 57 39 58 3A 59 3B 60 3C 61 3D 62 3E 63 3F Glifo ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? Binrio Decimal Hexa 0100 0000 64 0100 0001 65 0100 0010 66 0100 0011 67 0100 0100 68 0100 0101 69 0100 0110 70 0100 0111 71 0100 1000 72 0100 1001 73 0100 1010 74 0100 1011 75 0100 1100 76 0100 1101 77 0100 1110 78 0100 1111 79 0101 0000 80 0101 0001 81 0101 0010 82 0101 0011 83 0101 0100 84 0101 0101 85 0101 0110 86 0101 0111 87 0101 1000 88 0101 1001 89 0101 1010 90 0101 1011 91 0101 1100 92 0101 1101 93 0101 1110 94 0101 1111 95 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F Glifo @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ Binrio Decimal Hexa 0110 0000 96 0110 0001 97 0110 0010 98 0110 0011 99 0110 0100 100 0110 0101 101 0110 0110 102 0110 0111 103 0110 1000 104 0110 1001 105 0110 1010 106 0110 1011 107 0110 1100 108 0110 1101 109 0110 1110 110 0110 1111 111 0111 0000 112 0111 0001 113 0111 0010 114 0111 0011 115 0111 0100 116 0111 0101 117 0111 0110 118 0111 0111 119 0111 1000 120 0111 1001 121 0111 1010 122 0111 1011 123 0111 1100 124 0111 1101 125 0111 1110 126 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E Glifo ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~

6.2 Caracteres de controle


Binrio Decimal Hexa Abreviatura Descrio 0000 0000 00 00 NUL 0000 0001 01 01 SOH 0000 0010 02 02 STX 0000 0011 03 03 ETX Null - Nulo Start of Header - Incio do cabealho Start of Text - Incio do texto End of Text - Fim do texto 17

0000 0100 0000 0101 0000 0110 0000 0111 0000 1000 0000 1001 0000 1010 0000 1011 0000 1100 0000 1101 0000 1110 0000 1111 0001 0000 0001 0001 0001 0010 0001 0011 0001 0100 0001 0101 0001 0110 0001 0111 0001 1000 0001 1001 0001 1010 0001 1011 0001 1100 0001 1101 0001 1110 0001 1111 0111 1111

04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127

04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 7F

EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US DEL

End of Tape - Fim de fita Enquire - Interroga identidade do terminal Acknowledge - Reconhecimento Bell - Campainha Back-space - Espao atrs Horizontal Tabulation - Tabulao horizontal Line-Feed - Alimenta linha Vertical Tabulation - Tabulao vertical Form-Feed - Alimenta formulrio Carriage-Return - (enter) Shift-Out - Sada do shift (passa a usar caracteres de baixo da tecla - minsculas, etc.) Shift-In - Entrada no shift (passa a usar caracteres de cima da tecla: maisculas, caracteres especiais, etc.) Data-Link Escape Device-Control 1 Device-Control 2 Device-Control 3 Device-Control 4 Neg-Acknowledge - No-reconhecimento Synchronous Idle End-of-Transmission Block Cancel End-Of-Medium Substitute Escape File Separator Group Separator Record Separator Unit Separator Delete

6.3 Lista de caracteres extendida


Binrio Decimal Hexa Glifo Nmero HTML Nome HTML 1000 0000 128 80 &#128; &euro; 1000 0001 129 81 1000 0010 130 82 &#130; &sbquo; 1000 0011 131 83 &#131; &fnof; 1000 0100 132 84 &#132; &bdquo; 1000 0101 133 85 &#133; &hellip; 1000 0110 134 86 &#134; &dagger; 1000 0111 135 87 &#135; &Dagger; 1000 1000 136 88 &#136; &circ; 1000 1001 137 89 &#137; &permil; 1000 1010 138 8A &#138; &Scaron; 1000 1011 139 8B &#139; &lsaquo; 1000 1100 140 8C &#140; &OElig; 1000 1101 141 8D 1000 1110 142 8E &#142; 1000 1111 143 8F 18

1001 0000 1001 0001 1001 0010 1001 0011 1001 0100 1001 0101 1001 0110 1001 0111 1001 1000 1001 1001 1001 1010 1001 1011 1001 1100 1001 1101 1001 1110 1001 1111 1010 0000 1010 0001 1010 0010 1010 0011 1010 0100 1010 0101 1010 0110 1010 0111 1010 1000 1010 1001 1010 1010 1010 1011 1010 1100 1010 1101 1010 1110 1010 1111 1011 0000 1011 0001 1011 0010 1011 0011 1011 0100 1011 0101 1011 0110 1011 0111 1011 1000 1011 1001 1011 1010 1011 1011 1011 1100 1011 1101 1011 1110 1011 1111 1100 0000 1100 0001

144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193

90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1

&#145; &#146; &#147; &#148; &#149; &#150; &#151; &#152; &#153; &#154; &#155; &#156; &#158; &#159; &#160; &#161; &#162; &#163; &#164; &#165; &#166; &#167; &#168; &#169; &#170; &#171; &#172; &#173; &#174; &#175; &#176; &#177; &#178; &#179; &#180; &#181; &#182; &#183; &#184; &#185; &#186; &#187; &#188; &#189; &#190; &#191; &#192; &#193;

&lsquo; &rsquo; &ldquo; &rdquo; &bull; &ndash; &mdash; &tilde; &trade; &scaron; &rsaquo; &oelig;

&yuml; &nbsp; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &shy; &reg; &macr; &deg; &plusmn; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; 19

1100 0010 1100 0011 1100 0100 1100 0101 1100 0110 1100 0111 1100 1000 1100 1001 1100 1010 1100 1011 1100 1100 1100 1101 1100 1110 1100 1111 1101 0000 1101 0001 1101 0010 1101 0011 1101 0100 1101 0101 1101 0110 1101 0111 1101 1000 1101 1001 1101 1010 1101 1011 1101 1100 1101 1101 1101 1110 1101 1111 1110 0000 1110 0001 1110 0010 1110 0011 1110 0100 1110 0101 1110 0110 1110 0111 1110 1000 1110 1001 1110 1010 1110 1011 1110 1100 1110 1101 1110 1110 1110 1111 1111 0000 1111 0001 1111 0010 1111 0011

194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243

C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3

&#194; &#195; &#196; &#197; &#198; &#199; &#200; &#201; &#202; &#203; &#204; &#205; &#206; &#207; &#208; &#209; &#210; &#211; &#212; &#213; &#214; &#215; &#216; &#217; &#218; &#219; &#220; &#221; &#222; &#223; &#224; &#225; &#226; &#227; &#228; &#229; &#230; &#231; &#232; &#233; &#234; &#235; &#236; &#237; &#238; &#239; &#240; &#241; &#242; &#243;

&Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; 20

1111 0100 1111 0101 1111 0110 1111 0111 1111 1000 1111 1001 1111 1010 1111 1011 1111 1100 1111 1101 1111 1110 1111 1111

244 245 246 247 248 249 250 251 252 253 254 255

F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF

&#244; &#245; &#246; &#247; &#248; &#249; &#250; &#251; &#252; &#253; &#254; &#255;

&ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml;

21

7 Exerccios
1) Escreva as expresses abaixo na forma na sintaxe do Portugus Estruturado. A.

b c

B.

2x 23x x1 x1 2 x

C.

2h

22h 45 4h 3h1 3x

D.

6h2y
39

2) Escreva as Expresses da forma convencional. A. a + b + ((34+e*9)/u-89 ^ (1/2)) = B. 12+1/((4*a)/45) ^ (1/2) = C. ((a+x) ^ (2+w)-3*a)/2 = D. (12*x)/(36-9 ^ y) = 3) Resolva as expresses lgicas, determinando se a expresso verdadeira ou falsa: A. 2>3= B. (6<8)ou(3>7)= C. no (2<3)= D. (5>=6 ou 6<7 ou no(a+5-6=8) {onde a = 5} E. (34>9 e 5+u = 34) ou (5=15/3 e 8>12) = ((u = 29) e 8>12) {onde u = 29} 4) Classifique os contedo das variveis abaixo de acordo com seu tipo, assinalando com N os dados numricos, com L os lgicos, com C os literais. ()0 ( ) FALSO ( ) "VERDADEIRO" ( ) "abc" ( ) -49 ( ) 0.00001 ( ) "Joo" ( ) +342 ( ) VERDADEIRO ( ) 5.7 ( ) 569 ( ) -545 ( ) 1012 ( ) "Lucas" ( ) " 444 " 5) Classifique os dados especificados abaixo de acordo com seu tipo, assinalando com I os dados do tipo inteiro, com R os reais, com L os literais, com B os lgicos (booleanos), e com N aqueles para os quais no possvel definir a priori um tipo de dado. ( ) 0.21 ( ) -0.001 ( ) 3 ( ) 1 ( ) .T. ( ) .V. ( ) V ( ) +3257 ( ) .V ( ) 0. ( ) a ( ) abc ( ) 1% ( ) +3257 ( ) F ( ) Jos ( ) +3257. ( ) C ( ) 0,35 ( ) -0.0 ( ) Maria ( ) .F. ( ) .F. ( ) +36 6) Assinale com um X os nomes de variveis vlidos. ( ( ( ( ( ( ) ) ) ) ) ) abc 3abc a 123a a acd1 ( ( ( ( ( ( ) ) ) ) ) ) -_ad A&a guarda-chuva A123 Aa guarda_chuva ( ( ( ( ( ( ) ) ) ) ) ) ABC DE etc. b316 leia enquanto escreva

7) Assinale com C os identificadores corretos e com I os incorretos. Explique o que est errado nos identificadores incorretos. ( ) valor ( ) Maria ( ) nota ( ) _b248 ( ) km/h ( ) ah! ( ) nota*do*aluno ( ) xyz ( ) a1b2c3 ( ) nome empresa ( ) 3 x 4 ( ) sala_215

22

8) Supondo que as variveis NB, NA, NMAT e SX sejam utilizadas para armazenar a nota do aluno, o nome do aluno, o nmero da matrcula e o sexo, declare-as corretamente, associando o tipo adequado ao dado que ser armazenado.

9.1)Dada a declarao de variveis: VAR A, B, C : inteiro X, Y, Z : real NOME, RUA : literal[20] L1, L2 : lgico Classifique as expresses seguintes de acordo com o tipo de dado do resultado de sua avaliao, em I (inteiro), R (real), L (literal), B (lgico) ou N (quando no for possvel defini-lo): ( ( ( ( ( ( ( ) ) ) ) ) ) ) A + B + C A + B + Z NOME + RUA A B A Y NOME RUA L1 .OU. L2 ( ( ( ( ( ( ( ) ) ) ) ) ) ) RUA <> NOME A + B / C A + X / Z A + Z / A A B = L1 (A = B) X + Y / Z ( ( ( ( ) ) ) ) X = Z / A L1 ** L2 A + B / L2 X < L1 / RUA

9.2)Para as mesmas variveis declaradas no exerccio 9.1, s quais so dados os valores seguintes: A B C X = = = = 1 2 3 2.0 Y = 10.0 Z = -1.0 L1 = .V. NOME = PEDRO RUA = PEDRINHO L2 = .F.

Determine o resultado da avaliao das expresses abaixo: A + C / B _____________________________________________________________________________ A + B + C _____________________________________________________________________________ C / B / A _____________________________________________________________________________ -X ^ B ________________________________________________________________________________ - (X ^ B) _____________________________________________________________________________ (-X) ^ B ______________________________________________________________________________ NOME + RUA ____________________________________________________________________________ NOME = RUA ____________________________________________________________________________ L1 .OU. L2 ____________________________________________________________________________ (L1 .E.(.NO. L2)) ____________________________________________________________________ (L2 .E. (.NO. L1)) ___________________________________________________________________ (L1 .E. (.NO. L2)) .OU. (L2 .E. (.NO. L1)) __________________________________________ _________________________________________________________________________________________ X Y .E. C = B _________________________________________________________________________ _________________________________________________________________________________________ (C - 3 * A) (X + 2 * Z) _______________________________________________________________ _________________________________________________________________________________________

23

10) Assinalar os comandos de atribuio considerados invlidos: var NOME, COR, TESTE, DIA: caracter SOMA, NUM: inteiro Salario: real X: lgico a. b. c. d. e. ( ( ( ( ( ) ) ) ) ) NOME <- 5 SOMA <- NUM + 2 * X TESTE <- SOMA NUM <- SOMA COR <- "PRETO" f. g. h. i. j. ( ( ( ( ( ) ) ) ) ) X <- X + 1 NUM <- "*ABC*" DIA <- "seGUNDA" SOMA + 2 <- NUM X <- (NOME = COR) k. ( ) salrio <- 5.000 l. ( ) salrio <- 150 m. ( ) salrio <insuficiente

11) Quais os valores armazenados em SOMA, NOME e TUDO, supondo-se que NUM, X, COR, DIA, TESTE e TESTE2 valem, respectivamente, 5, 2, "AZUL", "TERA", FALSO e VERDADEIRO? a)NOME <- DIA b) SOMA <- (NUM^2/X) + (X + 1) c) TUDO <- NO ((TESTE OU TESTE2) E (X <> NUM)) 12) Para cada um dos problemas propostos a seguir, expresse um algoritmo que pode ser usado em sua soluo na forma de Portugol. (a) Calcule a mdia de quatro nmeros inteiros dados. (b) Leia uma temperatura dada na escala Celsius (C) e imprima o equivalente em Fahrenheit (F). (Frmula de converso: F = 9/5 * C + 32) (c) Leia uma quantidade de chuva dada em polegadas e imprima o equivalente em milmetros (25,4 mm = 1 polegada). (d) Calcule o quadrado de um nmero, ou seja, o produto de um nmero por si mesmo. (e) O custo ao consumidor de um carro novo a soma do custo de fbrica com a porcentagem do distribuidor e dos impostos, ambos aplicados ao custo de fbrica.Supondo que a porcentagem do distribuidor seja de 12% e a dos impostos de 45%, prepare um algoritmo para ler o custo de fbrica do carro e imprimir o custo ao consumidor. (f) O cardpio de uma lanchonete dado abaixo. Prepare um algoritmo que leia a quantidade de cada item que voc consumiu e calcule a conta final. Hambrguer................. R$ 3,00 Cheeseburger.............. R$ 2,50 Fritas............................ R$ 2,50 Refrigerante................. R$ 1,00 Milkshake..................... R$ 3,00 (g) Uma companhia de carros paga a seus empregados um salrio de R$ 500,00 por ms mais uma comisso de R$ 50,00 para cada carro vendido e mais 5% do valor da venda. Elabore um algoritmo para calcular e imprimir o salrio do vendedor num dado ms recebendo como dados de entrada o nome do vendedor, o nmero de carros vendidos e o valor total das vendas. (h) Calcule a mdia de um aluno na disciplina de MDS. Para isso solicite o nome do aluno, a nota da prova e a nota qualitativa. Sabe-se que a nota da prova tem peso 2 e a nota qualitativa peso 1. Mostre a mdia como resultado. (i) Leia um nmero e imprima seu sucessor (j) sabido que em uma quantidade x de lato temos 30% de zinco e 70% de cobre. Faa um algoritmo que leia uma quantidade de lato em kg e informe a quantidade de zinco e cobre, em kg, necessria para a fabricao do mesmo. (k) Leia as notas de um aluno qualquer e calcule sua mdia final considerando o processo de avaliao adotado para a disciplina de programao, sem a reavaliao. (l) Calcular a quantidade de dinheiro gasto em cigarros por um fumante. Considere que o fumante vai informar (ler) a quantos anos fuma, quantos cigarros fuma por dia, quantos cigarros tem em um mao de cigarro e quanto custa o mao de cigarro. Durante os calculos assuma que um ano tem 360 dias.

24

(m) Ler dois numeros inteiros para variveis a e b. Calcular e imprimir o valor do quociente e resto de a por b e b por a. (n) Cada item deste exerccio deve ser feito como um novo algoritmo. Solicite o mnimo de dados ao usurio. O computador deve efetuar os calculos e apresentar os resultados. i. Calcular area e permetro de um quadrado de lado l ii. Calcular area e permetro do circulo de raio r iii. Calcular area e permetro do retngulo de comprimento c e largura l iv. Calular area e volume do cubo de lado l v. Calcular area e volume de um cone de raio r e altura h vi. Calcular area e volume de uma esfera de raio r (o) Ler dois valores reais e imprimir em um mesmo algoritmo: i. a soma deles ii. o produto deles iii. a diferena entre eles iv. o quociente entre eles (p) Calcular a soma dos termos de uma P.A. lendo os valores do primeiro termo, do segundo termo e do nmero de termos. (formula: Sn=r*(a1+an)/2, onde Sn a soma dos termos, r a razo, a1 o primeiro termo e an o ultimo termo.

25

8 Controle de Fluxo
At o momento os algoritmos estudados utilizam apenas instrues primitivas de atribuio, entrada e sada de dados. Qualquer conjunto de dados fornecido a um algoritmo ser submetido ao mesmo conjunto de instrues, executadas sempre na mesma seqncia. No possvel escolher uma sequncia de instrues apenas alterando os dados de entrada (parametrizar). No entanto, na prtica muitas vezes necessrio executar aes diversas em funo dos dados fornecidos ao algoritmo. Em outras palavras, dependendo do conjunto de dados de entrada do algoritmo, deve-se executar um conjunto diferente de instrues. Alm disso, pode ser necessrio executar um mesmo conjunto de instrues um nmero repetido de vezes. Em resumo, necessrio controlar o fluxo de execuo das instrues (a seqncia em que as instrues so executadas num algoritmo) em funo dos dados fornecidos como entrada ao mesmo. Neste captulo sero estudadas as estruturas bsicas de controle do fluxo de instrues de um algoritmo. De acordo com o modo como este controle feito, estas estruturas so classificadas em: Estruturas seqenciais; Estruturas de deciso; Estruturas de repetio.

8.1 Bloco de Comandos


Um bloco de comando um conjunto de um ou mais comandos (ou instrues) simples, como atribuies e instrues primitivas de entrada ou sada de dados, ou alguma das construes apresentadas neste captulo. Este conceito bastante simples e ser til e conveniente nos itens seguintes, na definio das estruturas bsicas de controle de execuo.

8.2 Controle de Fluxo


At o momento os algoritmos estudados utilizam apenas instrues primitivas de atribuio, entrada e sada de dados. Qualquer conjunto de dados fornecido a um algoritmo ser submetido ao mesmo conjunto de instrues, executadas sempre na mesma seqncia. No possvel escolher uma sequncia de instrues apenas alterando os dados de entrada (parametrizar). No entanto, na prtica muitas vezes necessrio executar aes diversas em funo dos dados fornecidos ao algoritmo. Em outras palavras, dependendo do conjunto de dados de entrada do algoritmo, deve-se executar um conjunto diferente de instrues. Alm disso, pode ser necessrio executar um mesmo conjunto de instrues um nmero repetido de vezes. Em resumo, necessrio controlar o fluxo de execuo das instrues (a seqncia em que as instrues so executadas num algoritmo) em funo dos dados fornecidos como entrada ao mesmo. Neste captulo sero estudadas as estruturas bsicas de controle do fluxo de instrues de um algoritmo. De acordo com o modo como este controle feito, estas estruturas so classificadas em: Estruturas seqenciais; Estruturas de deciso; Estruturas de repetio.

8.3 Bloco de Comandos


Um bloco de comando um conjunto de um ou mais comandos (ou instrues) simples, como atribuies e instrues primitivas de entrada ou sada de dados, ou alguma das construes apresentadas neste captulo. Este conceito bastante simples e ser til e conveniente nos itens seguintes, na definio das estruturas bsicas de controle de execuo.

26

8.4 Introduo ao Comando Condicional


Na vida real tomamos decises a todo o momento baseadas em uma situao existente. Em um algoritmo, chamamos esta situao de condio. Associada a uma condio, existir uma ou mais alternativas possveis de aes.
"se tiver R$ 10,00 sobrando ento irei ao cinema hoje noite.
Exemplo 8.1:

A condio nesta frase "tiver R$ 10,00 sobrando". Ela uma expresso lgica, pois a pergunta "Tenho R$ 10,00 sobrando?" Pode (tem que) ser respondida com "Sim" ou "No". Lembre-se, ento: em um algoritmo, toda condio tem que ser uma expresso lgica, algo que possa-se pensar como isto VERDADEIRO ou isto FALSO. Se a condio for verdadeira, a ao a ser executada "irei ao cinema", se a resposta pergunta "Tenho dinheiro suficiente?" for "Sim". Ento, em um algoritmo, as aes so um ou mais comandos que sero realizados apenas se a avaliao da condio resulta VERDADEIRO. Vamos colocar agora a frase do exemplo anterior em outra forma, mais parecida com nosso Portugus Estruturado:
se "tiver R$ 10,00 sobrando" entao "irei ao cinema" fimse
Exemplo 8.2:

Veja que grifamos trs palavras: se, entao e fimse. Elas so muito importantes na estrutura dos comandos de deciso. Como prximo passo, vamos generalizar a estrutura que criamos no exemplo 8.2 para o exemplo 8.3. se <condio> entao fimse
Exemplo 8.3:

<aes (uma ou mais) a serem realizadas se a condio for verdadeira>

Para terminar a nossa comparao, devemos lembrar que os comandos de um algoritmo so sempre indispensvel, e que o computador s lida com quantidades definidas (ou seja, ele no sabe o que "ter R$ 10,00 sobrando"). Para aproximar mais nossa frase de um algoritmo, poderemos ter o exemplo 8.4.
se Dinheiro >= 10 entao Ir_ao_Cinema <- VERDADEIRO fimse
Exemplo 8.4:

8.5 Estrutura Seqencial


Na estrutura seqencial os comandos de um algoritmo so executados numa seqncia pr-estabelecida. Cada comando executado somente aps o trmino do comando anterior. Em termos de fluxogramas, a estrutura seqencial caracterizada por um nico fluxo de execuo (um nico caminho orientado) no diagrama. Em pseudocdigos, a estrutura seqencial caracterizase por um conjunto de comandos dispostos ordenadamente. Como exemplos de aplicao desta estrutura de controle tem-se os algoritmos dos captulo anteriores, onde no h estruturas de
... <instruo_1> <instruo_2> <instruo_3> ...
Ilustrao 17: Exemplo de Estrutura sequencial ou bloco.

...
Instruo_01

Instruo_02

Instruo_03

...
Ilustrao 16: Trecho de um algoritmo seqencial.

27

deciso ou de repetio. Uma estrutura sequencial como a mostrada na ilustrao 16 pode ser chamada de bloco como visto na seo 8.1 . As linhas de cdigo da ilustrao 17, apresentam um trecho de um algoritmo seqencial em portugus estruturado, para o exemplo da ilustrao 16. Na ilustrao 17 temos um cdigo em portugol relativo a ilustrao 16. O conceito de bloco importante para o entendimento dos comandos a serem estudados neste captulo. At o momento todos os comandos vistos: entrada, sada e atribuio. Deste momento em diante trabalharemos com comandos que controlam o fluxo de instrues nos algoritmos.

8.6 Comando ou Estruturas de Deciso


Neste tipo de estrutura o fluxo de instrues a ser seguido escolhido em funo do resultado da avaliao de uma ou mais condies. Uma condio uma expresso lgica. importante frisar que sempre direita do comando temos uma expresso lgica, ou seja uma
se A <- B entao // uma atribuio e ... // no uma expresso. fimse se A + B entao // uma expresso ... // aritmtica e no fimse // uma expresso
Exemplo 8.5:

se (A > B) e (A > C) e (B <> C) entao ... fimse se(nao(Achou))entao // Correto se Achou ... //foi declarada como fimse //Logico
Exemplo 8.6:

expresso cujo resultado VERDADEIRO ou FALSO. Assim, os comandos do exemplo 8.5 apresentam erro comuns. Por outro lado, esto corretos os itens do exemplo 8.6. A classificao das estruturas de deciso feita de acordo com o nmero de condies a serem testadas. Segundo esta classificao, tm-se dois tipos de estruturas de deciso: Escolha de uma opo entre n opes, onde n inteiro e maior ou igual a 1; Escolha de x opes entre n opes, onde n inteiros e maior ou igual a 1 e x inteiro maior ou igual a zero.

8.7 Conceituando o Comando de Deciso (Estrutura de Deciso)


Na seo 8.4 foi mostrada uma introduo ao comando de deciso nesta seo voltaremos ao assunto de uma forma mais detalhada. Nesta estrutura uma nica condio (expresso lgica) avaliada. Se o resultado desta avaliao for verdadeiro (.V.), ento um determinado conjunto de instrues (bloco) executado. Caso contrrio, ou seja, quando o resultado da avaliao for falso (.F.), um outro conjunto de comandos (bloco) executado. Em termos de fluxogramas, uma construo do comando de deciso pode ser encarada como uma bifurcao onde h dois caminhos que podem ser seguidos. Este tipo de estrutura denominada de estrutura condicional composta, a ilustrao 19 mostra sua sintaxe. A execuo do algoritmo prosseguir necessariamente por um deles. Esta escolha feita em funo do resultado da expresso: um dos caminhos rotulado com (.V.) e ser seguido quando a condio for verdadeira. A ilustrao 18 mostra um exemplo de estrutura condicional composta. Condies Dentro da estrutura de deciso temos as clausulas se, senao se e senao. As clausulas se e senao se so

.V.

.F.

Instrues

Instrues

se (<condio>) entao {Instrues} senao {Instrues} fimse


Ilustrao 19: Cdigo em Portugol de um comando de deciso com execuo de bloco obrigatria.

Ilustrao 18: Fluxograma da estrutura condicional composta.

28

utilizadas para testar o uma expresso lgica como no primeiro pargrafo da seo 8.7 . Os comandos de deciso podem ser categorizados em:execuo de bloco obrigatria e execuo de bloco opcional. Quando um comando de deciso possui uma clausula senao podemos afirmar que um dos blocos que compe o comando ser obrigatoriamente executado, caso o comando possua apenas clausulas se e senao se todos os blocos do comando sero de execuo opcional. A ilustrao 19 um exemplo de cdigo em portugol de uma estrutura de deciso com execuo obrigatria de bloco composta por dois blocos. Observao: As palavras se, entao, senao e fimse, so reservadas, no podem ser utilizadas como nomes de variveis e tipos na escrita do algoritmo. A semntica desta construo a seguinte: a condio avaliada. Se o resultado for verdadeiro, um grupo de instrues ser executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro instruo aps o fimse. Nos casos em que a condio avaliada como falsa, o outro grupo de instrues ser executado.
Algoritmo Exemplo_D_Maior_Obrigatoria Var Inteiro:idade Inicio Escreva Informe sua idade -> Leia idade se(idade >= 18) entao Escreva "Maior de idade" senao Escreva "Menor de idade" fimse FimAlgoritmo.
Exemplo 8.7:

.V.
Instrues

Condies

.F.

se (<condio>) entao {Instrues} fimse


Ilustrao 20: Fluxograma de uma estrutura condicional simples. Ilustrao 21: Comando de deciso simples, com execuo de bloco opcional.

H casos particulares deste tipo de construo, onde apenas um ramo do teste condicional ser responsvel pela realizao de alguma ao, assim a poro relativa ao senao pode ser omitida, resumindo a sintaxe da construo forma mostrada na ilustrao 21 e o Incio desenho do fluxo de execuo do programa pode ser visto na ilustrao 20. A sintaxe de uma estrutura Informe sua Idade -> condicional simples em portugus estruturado :
Algoritmo Exemplo_D_Maior_Opcional Var Inteiro:idade Inicio Escreva(Informe sua idade -> ) Leia(idade) se (idade >= 18) entao Escreva "Maior de idade" fimse se (idade <= 18) entao Escreva "Menor de idade" fimse FimAlgoritmo. Exemplo 8.8.

idade

Idade >= 18

.V.
Maior de idade!

.F.
Menor de idade!

Fim

Ilustrao 22: Exemplo de fluxograma de uma estrutura condicional

A semntica desta construo para o caso da condio ser verdadeira, as instrues sero executadas. Aps seu 29

trmino, o fluxo de execuo prossegue pela prxima instruo aps o fimse. Quando a condio falsa, o fluxo de execuo prossegue normalmente pela primeira instruo aps o fimse. Exemplo: Algoritmo para determinar se uma pessoa maior ou menor de idade, utilizando a estrutura de deciso composta se. O algoritmo, em portugus estruturado, tem a seguinte mostrada se Dinheiro >= 10 entao no exemplo 8.7. Nesta soluo utilizamos um comando de deciso Ir_ao_Cinema <- VERDADEIRO com execuo de bloco obrigatria, ou seja o comando tem a Ver_TV <- FALSO clausula senao. O fluxograma para este problema utilizando a fimse estrutura se mostrado na Ilustrao 22. se Dinheiro < 10 entao O podemos escrever uma soluo sobre a forma de algoritmo Ir_ao_Cinema <- FALSO Ver_TV <- VERDADEIRO utilizando um comando de deciso com execuo de bloco fimse opcional. Vamos a nova soluo mostrada no exemplo 8.8. Exemplo 8.9. Podemos ter o mesmo tipo de exemplo estendendo a idia do dinheiro sobrando para ir ao cinema: "se tiver R$ 10,00 sobrando irei ao cinema hoje noite, mas se no tiver ficarei vendo TV em casa". Neste caso, uma codificao possvel para esse algoritmo seria a do exemplo 8.9.

8.8 Estruturas de Deciso do Escolha um valor de n


Em uma estrutura do tipo se a condio avaliada conduz a no mximo duas possibilidades de aes. Na estrutura de deciso do tipo Escolha um valor de x varivel permite a escolha de n possibilidades de aes a serem tomadas. A ilustrao valor_1 valor_2 valor_n seno ... 23 mostra o fluxograma para a estrutura escolha e na ilustrao 24 mostra a sintaxe ... Instrues Instrues Instrues Instrues da mesma. Para a estrutura condicional Escolha um valor de n, ser testado o valor da <varivel>, se o valor estiver presente em alguma das condies do comando de deciso, as Ilustrao 23: Fluxograma de uma estrutura condicional escolha um valor de n. instrues a ele associadas sero executadas. O usurio pode entrar com um valor no contido na lista de condies, ento ser executada instruo associada ao senao. O uso do senao facultativo podendo ser excludo da estrutura quando o programador julgar conveniente. Quando o senao for utilizado em uma estrutura de escolha este se torna de execuo de bloco obrigatria. Caso no tenha o comando senao podemos ter uma opo que no ser tratada pela estrutura de deciso.
01 02 03 04 05 06 07 08 08 09 10 11 12 13 se (<varivel> = 1) entao {Instrues} senao se (<varivel> = 2) entao {Instrues} ... senao se(<varivel>=<valor_n>)entao {Instrues} senao {Instrues} fimse fimse fimse

Ilustrao 24: Sintaxe do comando escolha. Na linha 5 temos a representao de vrias repeties do comando seno se.

30

Exemplo: Algoritmo para calcular o reajuste salarial em funo da profisso, sal_reaj <- 0.0 utilizando a estrutura de deciso escolha um valor de n valores e uso do seno. Para Informe salrio e profisso -> esta soluo vamos considerar a situao de vrios cargos, porm teremos salrio, prof aumentos diferenciados apenas para dois os outros prof tero a mesma Tcnico seno alquota de aumento. Gerente No fluxograma de uma das solues sal_reaj <- 1.5* salario sal_reaj <- 1.3* salario sal_reaj <- 1.1* salario possveis apresentado na ilustrao 25 os funcionrios com O salrio reajustado , sal_reaj cargo de Tcnico tero aumento de 50%, os gerentes tero aumento de 30% e os Fim outros cargos tero aumento de 10%. Ilustrao 25: Exemplo de fluxograma que utiliza Escolha um valor de n. No fluxograma da soluo proposta os funcionrios com cargo diferente de Tcnico e Gerente esto sendo tradados com a clausula seno, o que simplifica a abordagem para esta soluo.
Incio

Algoritmo "Reajuste" Var sal_reaj, salario : Real prof : Literal Inicio sal_reaj <- 0.0 Escreva("Informe sua profisso -> ") Leia(prof) Escreva("Informe seu salrio -> ") Leia(salario) se(prof="Tcnico") entao sal_reaj <- 1.5*salario senao se (prof="Gerente") entao sal_reaj <- 1.3*salario senao sal_reaj <- 1.1*salario fimse fimse Escreva("O salrio reajustado : ", sal_reaj) FimAlgoritmo
Exemplo 8.10:

As linhas de cdigo do exemplo 8.10, apresentam uma possvel soluo em portugol da soluo em fluxograma mostrada na ilustrao 25 deste texto.

31

8.8.1 Estruturas de Deciso do Escolha x valores de n


possvel utilizar a estrutura mostrada na ilustrao 25 para fazer escolha de mltiplas opes. Para ilustrar vamos adaptar os exemplo 8.10 a esta nova abordagem para o mesmo problema, como pode ser visto no exemplo 8.11.
Algoritmo "Exemplo_6_1" Var sal_reaj, salario : Real prof : Literal Inicio sal_reaj <- 0.0 Escreva("Informe sua profisso -> ") Leia(prof) Escreva("Informe seu salrio -> ") Leia(salario) se(prof="Tcnico") entao sal_reaj <- 1.5*salario fimse se(prof="Gerente")entao sal_reaj <- 1.3*salario fimse se(prof <> "Tcnico") OU (prof <> "Gerente") entao sal_reaj <- 1.1*salario fimse Escreva("O salrio reajustado : ", sal_reaj) FimAlgoritmo
Exemplo 8.11.

Neste exemplo podemos ver que o uso desta estrutura para problemas deste tipo implica em fazer uma quantidade maior de teste. Esta soluo no utiliza o senao.

8.8.2

Usando a estrutura Escolha ... Caso FimEscolha

Em algumas situaes necessrio termos Algoritmo "Exemplo_6_1" vrias solues ligadas a respostas diferentes, neste Var sal_reaj, salario : Real caso o comando de alternativa simples ou composta prof no uma soluo prtica, isto porque obrigar o Inicio : Literal programador a escrever muitas linhas de programa, sal_reaj <- 0.0 alm de ter que criar vrios comandos de alternativas Escreva("Informe sua profisso -> ") compostas e verificar a validade de suas condies para Leia(prof) que o comando execute o caminho correto para uma Escreva("Informe seu salrio -> ") determinada condio. Temos ento o comando de Leia(salario) alternativa de mltipla escolha. O funcionamento deste escolha(prof) comando obedece a seguinte modelo apresentado no caso "Tcnico" exemplo 8.13. Refazendo o exemplo 8.11 com o
escolha < expresso-de-seleo > caso < exp 1 > , < exp 2 >, ... , < exp n > < lista-de-comandos-1 > caso < exp 1 > , < exp 2 >, ... , < exp n > < lista-de-comandos-2 > outrocaso < lista-de-comandos-3 > fimescolha
Exemplo 8.13:Modelo geral do comando de seleo mltipla Escolha.

sal_reaj <- 1.5*salario caso "Gerente" sal_reaj <- 1.3*salario outrocaso sal_reaj <- 1.1*salario fimescolha

Escreva("O salrio reajustado : " Escreva(sal_reaj) FimAlgoritmo


Exemplo 8.12: Resoluo de 8.11 usando comando de seleo mtipla Escolha.

32

comando escolha teremos o exemplo 8.12.

8.8.3

Teste como valores literais

Quando vamos escrever uma expresso que vai testar valores literais temos de tomar cuidado com valores escritos em maiscula e minscula. Lembrando que a <> A ou aA. Desta forma interessante alterar a implementao para uma opes numricas como podemos ver nas novas implementaes dos exemplos 8.10 e 8.12 em 8.14.
Algoritmo "Reajuste" Var sal_reaj, salario : Real prof : Inteiro Inicio sal_reaj <- 0.0 Algoritmo "Reajuste" Var sal_reaj, salario : Real prof : Inteiro Inicio sal_reaj <- 0.0

Escreval(" 1 - Tcnico") Escreval(" 1 - Tcnico") Escreval(" 2 - Gerente") Escreval(" 2 - Gerente") Escreval(" 3 - Outros") Escreval(" 3 - Outros") Escreva("Indique sua profisso -> ") Escreva("Indique sua profisso -> ") Leia(prof) Leia(prof) se(prof=1)entao escolha(prof) Escreva("Informe seu salrio -> ") caso 1 Leia(salario) Escreva("Informe seu salrio -> ") sal_reaj <- 1.5*salario Leia(salario) Escreva("O salrio reajustado : ") sal_reaj <- 1.5*salario Escreva(sal_reaj) Escreva("O salrio reajustado : ", sal_reaj) senao caso 2 se(prof=2)entao Escreva("Informe seu salrio -> ") Escreva("Informe seu salrio -> ") Leia(salario) Leia(salario) sal_reaj <- 1.3*salario sal_reaj <- 1.3*salario Escreva("O salrio reajustado : ", sal_reaj) Escreva("O salrio reajustado : ") caso 3 Escreva( sal_reaj) Escreva("Informe seu salrio -> ") senao Leia(salario) se(prof=3)entao sal_reaj <- 1.1*salario Escreva("Informe seu salrio -> ") Escreva("O salrio reajustado : ", sal_reaj) Leia(salario) outrocaso sal_reaj <- 1.1*salario Escreva("Opo de cargo invlda!!!") Escreva("O salrio reajustado : ") fimescolha Escreva(sal_reaj) FimAlgoritmo senao Escreva("Opo de cargo invlda!!!") fimse fimse fimse FimAlgoritmo Exemplo 8.14: Implementao alternativa de 8.10 e 8.12.

33

8.9 Exerccios Resolvidos


1. Calcule a mdia de quatro e indique se o aluno foi aprovado considerando mdia 6 e considerando 10 a nota
mxima em cada prova .

Portugol
Algoritmo Calcmedia Var Real: nota1, nota2, nota3, nota4 Real: media Incio Escreva( =============================); Escreva( - Informe as notas dos alunos); Escreva( =============================); Escreva Entre Leia nota1 Escreva Entre Leia nota2 Escreva Entre Leia nota3 Escreva Entre Leia nota4 com a primeira nota: com a segunda nota: com a terceira nota: com a quarta nota:

MatLab
clc; %Algoritmo Calcmedia %Var nota1 nota2 nota3 nota4 media %Incio disp( disp( disp( nota1 nota2 nota3 nota4 = = = = = 0.0; 0.0; 0.0; 0.0; 0.0;

'================================='); '- Informe as notas dos alunos'); '================================='); = = = = input( input( input( input( ' ' ' ' A A A A nota nota nota nota 1 2 3 4 do do do do aluno aluno aluno aluno -> -> -> -> '); '); '); ');

media <- (nota1+nota2+nota3+nota4)/2 media = (nota1+nota2+nota3+nota4)/4; se (media>= 6) entao Escreva Aprovado senao Escreva Reprovado fimse Fim. %Fim.
Exemplo 8.15: Resoluo do exerccio 01 em portugol.

if (media >= 6) disp( ' Aprovado !!!'); else disp( ' Reprovado !!!'); end

34

2. Uma empresa decide dar um aumento de 30% aos funcionrios cujo salrio inferior a 500 reais. Escreva um algoritmo que receba (leia) o salrio de um funcionrio e imprima o valor do salrio reajustado ou uma mensagem caso o funcionrio no tenha direito ao aumento.

Portugol
Algoritmo CalcSal2 Var Real: salario, salreaj Incio Escreva Entre com o salario funcionrio -> Leia salario se salario < 500 salreaj <- ( salario * 1.3 ) senao Escreva Voc no tem direito reajuste fimse Fim.

Matlab
clc; %Algoritmo CalcSal2 %Var salario = 0.0; do salreaj = 0.0 ; %Incio fprintf('==================\n'); fprintf('Calculo de salario\n'); fprintf('==================\n'); ao salario = input('Entre com o salario do funcionario -> '); if (salario < 500) salreaj = (salario * 1.3); fprintf(['Seu novo salario eh ' num2str(salreaj)]); else fprintf('Voce nao tem direito ao reajuste'); end %Fim.

Exemplo 8.16: Resoluo do exerccio 2.

35

3 - Faa um Algoritmo para calcular a rea de um circulo, fornecido o valor do raio, que deve ser positivo. Algoritmo "Calcula Area do Circulo" %Algoritmo Calcula Area do Circulo Var % Var area, raio: Real area=0.0;raio=0.0; inicio %inicio Escreva("Entre com raio do crculo -> raio=input('Entre com raio do crculo ") -> '); Leia (raio) area = pi*(raio*raio); se(raio > 0)entao if(raio>0) area <- PI*(raio^2) fprintf('A rea do crculo de Escreva("A rea do crculo de raio raio '); " fprintf(raio); Escreva(raio) fprintf(' '); Escreva(" ") fprintf(area); Escreva(area:8:3) fprintf('\n\n'); fimse end se(raio <= 0)entao if(raio <= 0) Escreva ("Raio no pode ser nulo ou fprintf('\n\nRaio no pode ser negativo!") nulo ou negativo!\n\n'); fimse end fimalgoritmo %Fim.
Exemplo 8.17: Resoluo do exerccio 3.

4 - Um determinado clube de futebol pretende classificar seus atletas em categorias e para isto ele contratou um programador para criar um programa que executasse esta tarefa. Para isso o clube criou uma tabela que continha a faixa etria do atleta e sua categoria. A tabela est demonstrada abaixo:

IDADE CATEGORIA De 05 a 10 Infantil De 11 a 15 Juvenil De 16 a 20 Junior De 21 a 25 Profissional Construa um programa que solicite o nome e a idade de um atleta e imprima a sua categoria.
Algoritmo "CLASSIFICAO DE ATLETAS" var nome, categoria : Literal idade : Inteiro inicio Escreva("Nome do Atleta = ") Leia(nome) Escreva("Idade do Atleta = ") Leia(idade) Escolha idade caso 5,6,7,8,9,10 categoria <- "Infantil" caso 11,12,13,14,15 categoria <- "Juvenil" caso 16,17,18,19,20 categoria <- "Junior" caso 21,22,23,24,25 categoria <- "Profissional" outrocaso categoria <- "INVALIDO" Fimescolha Escreva("Categoria = ",categoria) fimalgoritmo
Exemplo 8.18: Resoluo do exerccio 4.

%Algoritmo "CLASSIFICAO DE ATLETAS"


%var nome=' ';categoria=' '; idade=0; %inicio nome=input('Nome do Atleta = '); idade=input('Idade do Atleta = '); switch idade case {5,6,7,8,9,10} categoria = 'Infantil'; case {11,12,13,14,15} categoria = 'Juvenil'; case {16,17,18,19,20} categoria = 'Junior'; case {21,22,23,24,25} categoria = 'Profissional'; otherwise categoria = 'INVALIDO' end fprintf('\n\nCategoria = '); fprintf(categoria); fprintf('\n\n'); %fim

36

8.10

Testando o algoritmo

Um algoritmo, depois de ser elaborado, pode (e deve) ser testado. Para tal, utilizamos um mtodo conhecido como teste de mesa. O teste de mesa como uma simulao de todos os passos, ou seja, entradas, comandos e instrues do algoritmo, a fim de saber se ele chega ao resultado a que se prope e se a lgica est correta. Para tal, preenche-se uma tabela com valores para as variveis e segue-se o fluxo de execuo do algoritmo, simulando a execuo de cada instruo, ou seja, refazendo o que o computador faria ao executar cada instruo. A cada comando simulado (executado), o valor das variveis na tabela deve ser atualizado. Se, para uma instruo executada, uma ou mais variveis no ficaram com os valores esperados, h um erro na lgica do algoritmo. Algoritmo
algoritmo var a,b,c:Real inicio a <- 05 b <- 15 c <- (a+b) escreva(c) a <- 10 b <- 25 c <- 25 escreva(c) a <- 0 b <- 0 c <- 0 leia(a) fimalgoritmo
Tabela 8: Exemplo de teste de mesa.

Teste de Mesa (trace)

a ? 5 5 5 5 10 10 10 10 0 0 0 7 7

b ? ? 15 15 15 15 25 25 25 25 0 0 0 0

c ? ? ? 20 20 20 20 25 25 25 25 0 0 0

Sada

Entrada

20

25

8.11

Exerccios propostos:

1. Ler 2 nmeros inteiros e verificar e imprimir qual deles o maior, ou a mensagem valores iguais caso sejam iguais. 2. Leia 3 nmeros reais e verificar se o primeiro maior que a soma dos outros dois. 3. Leia 3 nmeros do teclado e imprima os em ordem crescente. 4. Leia a velocidade mxima permitida em uma avenida e a velocidade com que o motorista estava dirigindo nela e calcule a multa que uma pessoa vai receber, sabendo que so pagos: a) 50 reais se o motorista estiver ultrapassar em at 10km/h a velocidade permitida (ex.: velocidade mxima: 50km/h; motorista a 60km/h ou a 56km/h); b) 100 reais, se o motorista ultrapassar de 11 a 30 km/h a velocidade permitida. c) 200 reais, se estiver acima de 31km/h da velocidade permitida. 5. Calcular a nota final de um aluno considerando o processo de avaliao adotado pela disciplina. Em caso de dvida verificar no plano de ensino da disciplina. 6. Calcular a soma de dois valores apenas se ambos forem positivos caso contrrio aviso o usurio do valor negativo e abandone a execuo do programa. 7. Ler 5 nmeros um de cada vez e cada nmero deve ser maior que o anterior. Caso no seja informe que o usurio digitou um valor errado e abandone a execuo do programa. Caso os valores sejam digitados em ordem imprima-os. 8. Fazer o teste de mesa nos algoritmos dos exerccios 1 a 7. 37

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