Академический Документы
Профессиональный Документы
Культура Документы
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.
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
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.
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.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.
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.1
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.
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
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
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
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).
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 _)
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
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.
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
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.
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
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
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.
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.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.
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
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
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
‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á
‘ ’ “ ” • – — ˜ ™ š › œ
ÿ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á 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
Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó
Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó 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
ô õ ö ÷ ø ù ú û ü ý þ ÿ
ô õ ö ÷ ø ù ú û ü ý þ ÿ
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.
26
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:
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:
...
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.
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.
.V.
.F.
Instrues
Instrues
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.
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
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.
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
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
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
32
8.8.3
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
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.
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.
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.
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