Escolar Documentos
Profissional Documentos
Cultura Documentos
NATAL-RN / 2004
-1-
Algoritmo
Captulo 1 ..........................................................................................................................3 Introduo..................................................................................................................... 3 1. Conceito de Algoritmo ......................................................................................... 3 1.1 Algumas Definies de Algoritmo ..................................................................... 3 Captulo 2 ..........................................................................................................................4 Formas de Representao de Algoritmos ..................................................................... 4 2.1 Descrio Narrativa ............................................................................................ 4 2.2 Fluxograma Convencional.................................................................................. 4 2.3 Pseudocdigo...................................................................................................... 5 2.4 Sntese................................................................................................................. 6 Captulo 3 ..........................................................................................................................7 Tipos de Dados ............................................................................................................. 7 3.1 Dados Numricos ............................................................................................... 7 3.2 Dados Literais..................................................................................................... 8 3.3 Dados Lgicos .................................................................................................... 9 3.4 Sntese................................................................................................................. 9 3.5 Exerccio Proposto............................................................................................ 10 Captulo 4 ........................................................................................................................11 Variveis..................................................................................................................... 11 4.2 Armazenamento de Dados na Memria ........................................................... 11 4.3 Conceito e Utilidade de Variveis .................................................................... 13 4.4 Definio de Variveis em Algoritmos ............................................................ 14 4.5 Sntese............................................................................................................... 15 4.6 Exerccios Propostos ........................................................................................ 15 Captulo 5 ........................................................................................................................24 Expresses .................................................................................................................. 24 5.1 Conceito............................................................................................................ 24 5.2 Operadores........................................................................................................ 24 5.3 Tipos de Expresses ......................................................................................... 25 5.4 Sntese............................................................................................................... 27 5.6 Exerccios Propostos ........................................................................................ 28 Captulo 6 ........................................................................................................................27 Instrues Primitivas .................................................................................................. 27 6.1 Instruo Primitiva de Atribuio..................................................................... 28 6.2 Instruo Primitiva de Sada de Dados............................................................. 29 6.3 Instruo Primitiva de Entrada de Dados ........................................................... 1 6.4 Sntese............................................................................................................... 32 6.5 Exerccios Resolvidos ...................................................................................... 32 6.6 Exerccios Propostos ........................................................................................ 36
-2-
Algoritmo
Captulo 1
Introduo
1. Conceito de Algoritmo
A automao o processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por mquinas, sejam estes dispositivos mecnicos, eletrnicos (como os computadores) ou de natureza mista. Para que a automao de uma tarefa seja bem-sucedida necessrio que a mquina que passar a realiz-la seja capaz de desempenhar cada uma das etapas constituintes do processo a ser automatizado com eficincia, de modo a garantir a repetibilidade do mesmo. Assim, necessrio que seja especificado com clareza e exatido o que deve ser realizado em cada uma das fases do processo a ser automatizado, bem como a seqncia em que estas fases devem ser realizadas. especificao da seqncia ordenada de passos que deve ser seguida para a realizao de uma tarefa, garantindo a sua repetibilidade, d-se o nome de algoritmo. Ao contrrio do que se pode pensar, o conceito de algoritmo no foi criado para satisfazer s necessidades da computao. Pelo contrrio, a programao de computadores apenas um dos campos de aplicao dos algoritmos. Na verdade, h inmeros casos que podem exemplificar o uso (involuntrio ou no) de algoritmos para a padronizao do exerccio de tarefas rotineiras (vide exemplos da Seo 2.1). No entanto, daqui adiante a ateno desta apostila estar voltada automao de tarefas utilizando computadores. Para que um computador possa desempenhar uma tarefa necessrio que esta seja detalhada passo-a-passo, numa forma compreensvel pela mquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais que um algoritmo escrito numa forma compreensvel pelo computador (linguagem de programao).
-3-
Algoritmo
Captulo 2
Formas de Representao de Algoritmos
Existem diversas formas de representao de algoritmos, mas no h um consenso com relao melhor delas. O critrio usado para classificar hierarquicamente estas formas est diretamente ligado ao nvel de detalhe ou, inversamente, ao grau de abstrao oferecido. Algumas formas de representao de algoritmos tratam os problemas apenas em nvel lgico, abstraindo-se de detalhes de implementao muitas vezes relacionados com alguma linguagem de programao especfica. Por outro lado existem formas de representao de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer as idias principais do algoritmo, dificultando seu entendimento. Dentre as formas de representao de algoritmos mais conhecidas podemos citar: Descrio Narrativa; Fluxograma Convencional; Pseudocdigo, tambm conhecido como Linguagem Estruturada ou Portugol.
-4-
Algoritmo
Esta representao pouco usada na prtica porque o uso da linguagem natural muitas vezes d oportunidade a ms interpretaes, ambigidades e imprecises. Por exemplo, a instruo "afrouxar ligeiramente as porcas" no algoritmo da troca de pneus est sujeita a interpretaes diferentes por pessoas distintas. Uma instruo mais precisa seria: "afrouxar a porca, girando-a 30 no sentido anti-horrio".
Operao de atribuio
Deciso
-4-
Algoritmo
De modo geral, um fluxograma se resume a um nico smbolo inicial por onde a execuo do algoritmo comea, e um ou mais smbolos finais, que so pontos onde a execuo do algoritmo se encerra. Partindo do smbolo inicial, h sempre um nico caminho orientado a ser seguido, representando a existncia de uma nica seqncia de execuo das instrues. Isto pode ser melhor visualizado pelo fato de que, apesar de vrios caminhos poderem convergir para uma mesma figura do diagrama, h sempre um nico caminho saindo desta. Excees a esta regra so os smbolos finais, dos quais no h nenhum fluxo saindo, e os smbolos de deciso, de onde pode haver mais de um caminho de sada (usualmente dois caminhos), representando uma bifurcao no fluxo. A Figura 2.2 mostra a representao do algoritmo de clculo da mdia de um aluno sob a forma de um fluxograma.
Incio
N1, N2
.V.
MEDIA >= 7
.F.
"Aprovado"
"Reprovado"
Fim
Figura 2.2
2.3 Pseudocdigo
Esta forma de representao de algoritmos rica em detalhes, como a definio dos tipos das variveis usadas no algoritmo. Por assemelhar-se bastante forma em que os programas so escritos, encontra muita aceitao. Na verdade, esta representao suficientemente geral para permitir a traduo de um algoritmo nela representado para uma linguagem de programao especfica seja praticamente direta. A forma geral da representao de um algoritmo na forma de pseudocdigo a seguinte:
-5-
Algoritmo
Algoritmo <nome_do_algoritmo> <declarao_de_variveis> <subalgoritmos> Incio <corpo do algoritmo> Fim Algoritmo uma palavra que indica o incio da definio de um algoritmo em forma de pseudocdigo. <nome_do_algoritmo> um nome simblico dado ao algoritmo com a finalidade de distingui-los dos demais. <declarao_de_variveis> consiste em uma poro opcional onde so declaradas as variveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos. <subalgoritmos> consiste de uma poro opcional do pseudocdigo onde so definidos os subalgoritmos (Captulo 8). Incio e Fim so respectivamente as palavras que delimitam o incio e o trmino do conjunto de instrues do corpo do algoritmo. Como exemplo, a Figura 2.3 mostra a representao do algoritmo do clculo da mdia de um aluno, na forma de um pseudocdigo. Algoritmo Calculo_Media Var N1, N2, MEDIA: real Incio Leia N1, N2 MEDIA (N1 + N2) / 2 Se MEDIA >= 7 ento Escreva Aprovado Seno Escreva Reprovado Fim_se Fim
Figura 2.3 Exemplo de um pseudocdigo.
2.4 Sntese
H diversas formas de representao de algoritmos que diferem entre si pela quantidade de detalhes de implementao que fornecem ou, inversamente, pelo grau de abstrao que possibilitam com relao implementao do algoritmo em termos de uma linguagem de programao especfica. Dentre as principais formas de representao de algoritmos destacam-se: a descrio narrativa, o fluxograma convencional e o pseudocdigo (ou linguagem estruturada).
-6-
Algoritmo
Captulo 3
Tipos de Dados
Todo o trabalho realizado por um computador baseado na manipulao das informaes contidas em sua memria. Grosso modo, estas informaes 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 dados propriamente ditos, que correspondem poro das informaes 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 dados de acordo com o tipo de informao contida neles. A classificao apresentada no se aplica a nenhuma linguagem de programao especfica; pelo contrrio, ela sintetiza os padres utilizados na maioria das linguagens.
-7-
Algoritmo
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... 3.1.1 Dados Numricos Inteiros 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 3.1.2 Dados Numricos Reais Os dados de tipo real so aqueles que podem possuir componentes decimais ou fracionrios, e podem tambm 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 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.
-8-
Algoritmo
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.
3.4 Sntese
Os dados numricos dividem-se em duas classes: inteiros, que no possuem parte fracionria e podem ser positivos ou negativos; reais, que podem possuir parte fracionria e podem ser positivos ou negativos. Os dados do tipo literal podem conter seqncias de letras, dgitos ou smbolos especiais, delimitados por aspas ("). Seu comprimento dado pelo nmero de caracteres em string.
-9-
Algoritmo
Os dados do tipo lgico s possuem dois valores possveis (.V. e .F.). A rvore abaixo resume a classificao dos dados com relao aos tipos de dados apresentados.
Figura 3.2
- 10 -
Algoritmo
Captulo 4
Variveis
A todo momento durante a execuo de qualquer tipo de programa os computadores esto manipulando informaes representadas pelos diferentes tipos de dados descritos no captulo anterior. Para que no se "esquea" das informaes, o computador precisa guardlas em sua memria. Este captulo destinado ao estudo da forma como os computadores armazenam e acessam informaes contidas em sua memria.
- 11 -
Algoritmo
traduz um outro escrito em alguma linguagem de programao para outra geral, a linguagem de mquina do computador com que se trabalha). A Figura 4.3 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.
Endereo 0 1 2 3 4 5
4.2.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 informao do tipo lgico armazenada 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. 4.2.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. Assim, em geral utilizam-se dois bytes para representar os nmeros inteiros em computadores. Contudo, restam algumas aplicaes muito especficas em que se precisa de um conjunto ainda maior. Para
- 12 -
Algoritmo
estes casos, algumas linguagens de programao fornecem mecanismos para trabalhar nmeros inteiros com quatro bytes. Nestes casos os dados so ditos inteiros longos ou estendidos. 4.2.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 oito bytes).
Tipo de dado
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 (_). Exemplos:
- 13 -
Algoritmo
= = = = = = =
correto errado (no comeou com uma letra) correto errado (contm o caractere espao em branco) errado (contm o caractere "/) correto errado (no comeou com uma letra)
No exemplo acima foram declaradas quatro variveis: a varivel NOME, capaz de armazenar dados literais de comprimento 10 (dez caracteres); 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.
- 14 -
2. 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.
- 15 -
Algoritmo
Captulo 5
Expresses
5.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.
Figura 5.1
Por exemplo, a frmula de clculo da rea do tringulo da Figura 5.1 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.
5.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);
- 24 -
Algoritmo
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.
Operador + * / ** + -
Operao Adio Subtrao Multiplicao Diviso Exponenciao Manuteno de sinal Inverso de sinal
Prioridade 4 4 3 3 2 1 1
A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados dentro de uma mesma expresso. Este assunto ser tratado com maior profundidade numa seo posterior. O caractere (*) adotado na maioria das linguagens de programao para representar a operao de multiplicao, ao invs do caractere (x), devido possibilidade da ocorrncia do mesmo no nome de variveis. Pela mesma razo, o smbolo (**) adotado para representar a operao de exponenciao. Algumas linguagens de programao adotam o smbolo (^ circunflexo) para esta finalidade, mas isto pouco freqente. As variveis usadas em expresses aritmticas podem somente ser do tipo inteiro ou real. Se todas as variveis que aparecem numa expresso so do tipo inteiro, ento o valor resultante da expresso tambm do tipo inteiro. Se ao menos uma das variveis da expresso aritmtica for do tipo real, ento o valor resultante da avaliao da expresso necessariamente do tipo real. Nos exemplos seguintes, assumiremos que:
- 25 -
Algoritmo
A, B e C so variveis do tipo inteiro; X, Y e Z so variveis do tipo real. Exemplos: A+B*C A+B+Y A/B X/Y = = = = expresso de resultado inteiro expresso de resultado real expresso de resultado real expresso de resultado real
5.3.2 Expresses Lgicas Expresses lgicas so aquelas cujo resultado da avaliao um valor lgico (.V. ou .F.). Os operadores lgicos e suas relaes de precedncia so mostrados na Tabela 5.2. Existem outros operadores lgicos, como por exemplo o OU_EXCLUSIVO., mas suas funes podem ser exercidas por combinaes dos trs tipos de operadores da Tabela 5.2.
Tabela 5.2 Operadores lgicos e suas relaes de prioridade.
Prioridade 3 2 1
Para exemplificar o uso de operadores lgicos, a Tabela 5.3 apresenta duas variveis lgicas A e B. Uma vez que cada varivel lgica possui somente dois valores possveis, ento h exatamente quatro combinaes para estes valores, razo pela qual a tabela tem quatro linhas. As diversas colunas contm os resultados das operaes lgicas sobre as combinaes possveis dos valores das variveis A e B.
Tabela 5.3 Tabela-Verdade dos operadores apresentados na Tabela 5.2.
Tabelas como a da Figura 5.3 so chamadas de Tabelas-Verdade. Convm salientar as seguintes concluses que podem ser extradas por observao da Tabela 5.3: O operador lgico .NO. sempre inverte o valor de seu operando. Ex.: .NO. .V. = .F. e .NO. .F. = .V.; Para que a operao lgica .OU. tenha resultado verdadeiro basta que um de seus operandos seja verdadeiro; Para melhor visualizar este efeito, podemos imaginar que as variveis lgicas A e B so como dois interruptores ligados em paralelo num circuito de acionamento de uma lmpada (Figura 5.2).
- 26 -
Algoritmo
Nas expresses lgicas onde aparecem apenas os operadores lgicos da Tabela 5.2 somente variveis do tipo lgico podem ser usadas. Isto parece bvio, uma vez que os operadores lgicos somente atuam sobre valores (constantes ou variveis) lgicos. H, ainda, outro tipo de operador que pode aparecer em operaes lgicas: os operadores relacionais, mostrados na Tabela 5.4.
Tabela 5.4
Operadores relacionais.
Estes operadores so somente usados quando se deseja efetuar comparaes. Comparaes s podem ser feitas entre objetos de mesma natureza, isto , variveis do mesmo tipo de dado. O resultado de uma comparao sempre um valor lgico. O uso de operadores relacionais possibilita o aparecimento em expresses lgicas de variveis de outros tipos de dados que no o lgico. 5.3.3 Expresses Literais Expresses literais so aquelas cujo resultado da avaliao um valor literal. Este tipo de expresso bem menos freqente que os anteriores. Os tipos de operadores existentes variam de uma linguagem de programao para outra, no havendo uma padronizao. Para que o assunto no passe em branco, considere-se como exemplo a operao de concatenao de strings: toma-se duas strings e acrescenta-se (concatena-se) a segunda delas ao final da primeira. Em algumas linguagens esta operao representada pelo smbolo (+). Por exemplo, a concatenao das strings "REFRIGERA" e "DOR" representada por "REFRIGERA" + "DOR" e o resultado de sua avaliao "REFRIGERADOR".
5.4 Sntese
Uma expresso uma combinao de variveis, constantes e operadores, que resulta num valor quando avaliada. Operadores so elementos funcionais que atuam sobre operandos. Segundo o nmero de operandos sobre os quais atua, um operador pode ser classificado em unrio ou binrio. Segundo os tipos de dados de seus operandos e do valor resultante de sua avaliao, os operadores podem ser classificados em aritmticos, lgicos ou literais. Um tipo especial de operador o relacional, que usado na comparao de operandos de um mesmo tipo de dado e cujo resultado da avaliao sempre um valor lgico. As expresses so classificadas de acordo com o valor resultante de sua avaliao em: Aritmticas, que resultam num valor numrico (real ou inteiro);
- 27 -
Algoritmo
Lgicas, que resultam num valor lgico; Literais, que resultam num valor literal. H trs regras bsicas que definem a seqncia correta de avaliao passo a passo de expresses: 1. Operadores de maior prioridade devem ser avaliados primeiro. Em caso de empate, a avaliao se faz da esquerda para a direita. 2. O uso de parnteses em subexpresses fora a avaliao das mesmas com maior prioridade. 3. Os diversos tipos d operadores devem ser avaliados na seguinte seqncia dentro de uma expresso complexa: primeiro os aritmticos e literais; a seguir, os relacionais e, por ltimo, os lgicos.
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 )AB )AY ) 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
2. Para as mesmas variveis declaradas no exerccio 1, s quais so dados os valores seguintes: A=1 B=2 C=3 X = 2.0 Y = 10.0 Z = -1.0 L1 = .V. NOME = PEDRO RUA = PEDRINHO L2 = .F.
- 28 -
Algoritmo
-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) _________________________________________________ _____________________________________________________________________
- 26 -
Algoritmo
Captulo 6
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 no-reconhecimento 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.
- 27 -
Algoritmo
<varivel> aa <expresso>
Figura 6.1
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. Fluxograma
Incio
Pseudocdigo Algoritmo EXEMPLO_6.1 Var PRECO_UNIT, PRECO_TOT : real QUANT : inteiro Incio PRECO_UNIT 5.0 QUANT 10 PRECO_TOT PRECO_UNIT * QUANT Fim.
QUANT aaa 10
Fim
Figura 6.2
- 28 -
Tcnicas de Programao
Figura 6.3
Repare que a representao no fluxograma dispensa o uso da palavra reservada Escreva, uma vez que a mesma j est embutida na forma geomtrica da figura. 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 string, 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. O exemplo da Figura 6.2 torna-se muito mais interessante com a aplicao de instrues de sada de dados, como na Figura 6.4.
- 29 -
Tcnicas de Programao
Fluxograma
Incio
Pseudocdigo Algoritmo EXEMPLO_6.4 Var PRECO_UNIT, PRECO_TOT : real QUANT : inteiro Incio PRECO_UNIT 5.0 QUANT 10 PRECO_TOT PRECO_UNIT * QUANT Escreva PRECO_TOT Fim.
QUANT aaa 10
PRECO_TOT
Fim
Figura 6.4
<lista_de_ variveis>
-1-
Algoritmo
Figura 6.5
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 e armazenados nas posies de memria das variveis cujos nomes aparecem na lista_de_variveis. O algoritmo da Figura 6.4, modificado para que os valores das variveis PRECO_UNIT e QUANT sejam lidos no dispositivo de entrada, est na Figura 6.6. Pseudocdigo Algoritmo EXEMPLO_6.6 Var PRECO_UNIT, PRECO_TOT : real QUANT : inteiro Incio Leia PRECO_UNIT, QUANT PRECO_TOT PRECO_UNIT * QUANT Escreva PRECO_TOT Fim. Fluxograma
Incio B
PRECO_UNIT, QUANT
PRECO_TOT
Fim
Figura 6.6 Exemplo de aplicao da instruo primitiva de entrada de dados num algoritmo.
O algoritmo da Figura 6.6 ainda precisa sofrer algumas modificaes para ficar perfeito. 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 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 urna 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:
- 30 -
Algoritmo
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. A verso final do algoritmo estudado mostrada na Figura 6.7. Fluxograma
Incio A
QUANT
PRECO_UNIT
"Digite a quantidade:"
Fim
Pseudocdigo Algoritmo EXEMPLO_6.7 Var PRECO_UNIT, PRECO_TOT : real QUANT : inteiro Incio Escreva Digite o preo unitrio: Leia PRECO_UNIT Escreva Digite a quantidade: Leia QUANT PRECO_TOT PRECO_UNIT * QUANT Escreva Preo total: , PRECO_TOT Fim.
Figura 6.7 Exemplo de aplicao das instrues primitivas de atribuio,
- 31 -
Algoritmo
entrada e sada de dados num algoritmo.
6.4 Sntese
A instruo primitiva de atribuio avalia uma expresso e armazena o valor resultante numa varivel. O valor resultante da expresso e a varivel devem ter tipos compatveis. A instruo primitiva de sada de dados admite como argumentos uma lista de variveis, um literal, ou uma mistura de ambos. No primeiro caso, o valor de cada uma das variveis buscado na memria e colocado no dispositivo de sada. No caso de literais, estes so copiados diretamente no dispositivo de sada. A instruo primitiva de entrada de dados busca, no dispositivo de entrada, dados que so guardados nas posies de memria correspondentes s variveis da lista que lhe so passadas como argumento.
- 32 -
Algoritmo
A
Incio
N2
- 33 -
Algoritmo
A transformao do fluxograma em pseudocdigo exige a disponibilidade de algumas informaes adicionais concernentes ao tipo das variveis utilizadas. 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. De posse dessa informao, pode-se escrever o pseudocdigo do algoritmo em questo, a partir de seu fluxograma. Algoritmo MEDIA Var N1, N2, M : real Incio Escreva Algoritmo para calcular a mdia entre dois nmeros Escreva Digite o primeiro nmero: Leia N1 Escreva Digite o segundo nmero: Leia N2 M (N1 + N2) / 2 Escreva O valor da mdia :, M Fim. 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: Veja fluxograma correspondente a seguir:
Incio A
Fim
- 34 -
Algoritmo
Para que se possa escrever o pseudocdigo do 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. Ento, o pseudocdigo fica assim: Algoritmo FUNCAO_DE_X Var X, Y : real Incio Escreva Algoritmo para calcular y = 3x +2 Escreva X: Leia X Y3*X+2 Escreva Y = , Y Fim. 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. O fluxograma correspondente ao algoritmo o seguinte:
Incio A B
DIST
Fim
- 35 -
Algoritmo
Assumindo que todas as variveis utilizadas (CM, DIST e VOL) so do tipo real, podese escrever o pseudocdigo seguinte para o fluxograma anterior: Pseudocdigo Algoritmo CONSUMO_MEDIO Var CM, DIST, VOL : real Incio Escreva Algoritmo para calcular o consumo Escreva Distncia total percorrida (Km): Leia DIST Escreva Volume de combustvel gasto (L): Leia VOL CM DIST / VOL Escreva Consumo mdio =, CM, Km/l Fim.
- 36 -