rosaneminghimeguilhermep.telles 9deagostode2012wiki.icmc.usp.br › images › c › c2 ›...

23
Introdu¸c˜ ao ` aComputa¸c˜ ao Rosane Minghim e Guilherme P. Telles 9 de Agosto de 2012

Upload: others

Post on 28-Jun-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Introducao a Computacao

Rosane Minghim e Guilherme P. Telles

9 de Agosto de 2012

Capıtulo 2

Algoritmos e Elementos

Basicos de Linguagem

Neste capıtulo introduzimos o conceito de algoritmo. Os algoritmos sao usa-dos para ajudar a aprender os conceitos basicos relacionados as linguagensde programacao e para ajudar a transformar ideias em programas que seraoexecutados em computadores.

2.1 Algoritmo

Um algoritmo e uma receita1. A palavra normalmente e usada em ma-tematica e em computacao para nomear um procedimento de calculo, umcomputo. Ele da instrucoes para a execucao de uma tarefa, como no exem-plo abaixo.

Exemplo 2.1 Bolinhos de ChuvaEm uma tigela, bata o acucar, a manteiga e o ovo.Em outro recipiente misture a farinha, o fermento, a canela, uma pitada

de sal, o leite e a outra mistura. Misture bem.Aqueca oleo e pingue colheradas da massa, fritando os bolinhos ate dourar.

Escorra bem, polvilhe acucar e sirva.Um algoritmo tem uma entrada, que sao informacoes ou materiais que

ele necessita para executar sua tarefa, e produz uma saıda, que e o resultado

1Formalmente a palavra algoritmo significa a descricao de uma Maquina de Turing, que

e um modelo que define o que e “realizar um computo”. Mais informalmente, a palavra

algoritmo e usada significando um programa de computador ou a descricao de um programa

de computador. Nesta secao nos a utilizamos com um significado quase coloquial, apenas

com finalidade didatica. Isso torna a expressao “algoritmos computacionais” estranha,

mas acreditamos que colabora com a intuicao dos iniciantes.

13

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM14

do algoritmo. No caso do algoritmo para fazer bolinhos de chuva, a entradae a quantidade dos ingredientes e a saıda sao os bolinhos prontos.

Um algoritmo pode ser expresso em diferentes nıveis de detalhe. Nossoalgoritmo para bolinhos de chuva poderia ser descrito em menos detalhes,como no exemplo abaixo.

Exemplo 2.2 Bolinhos de ChuvaFaca uma massa da maneira tradicional com o acucar, a manteiga, o ovo

a farinha, o fermento, a canela e uma pitada de sal. Frite os bolinhos epolvilhe com acucar.

Por outro lado, nosso algoritmo para bolinhos de chuva poderia ser des-crito em mais detalhes, como abaixo.

Exemplo 2.3 Bolinhos de ChuvaEm uma tigela, bata o acucar e a manteiga. Depois, adicione um ovo.Em outro recipiente, peneire a farinha e adicione o fermento, a canela

e uma pitada de sal. Va juntando essa mistura da farinha a outra mistura,alternando com leite. Misture bem.

Em uma panela, aqueca uns 5 centımetros de oleo. Quando o oleo estiverquente, pingue colheradas da massa e frite os bolinhos ate dourar. Escorrabem, polvilhe acucar e sirva.

O nıvel de detalhamento de um algoritmo depende do objetivo da receita.Se queremos dar apenas as ideias gerais do que um algoritmo faz, podemosdar poucos detalhes, como no Exemplo 2.2. Se queremos detalhar os pas-sos, podemos optar por uma descricao completa, como no Exemplo 2.3. Oexecutor do algoritmo tambem e importante. No caso dos bolinhos de chuvacozinheiros experientes provavelmente precisarao de menos instrucoes.

Varias das acoes e tarefas que realizamos corriqueiramente podem serdescritas por um algoritmo. E podemos usar mais ou menos detalhes emtais algoritmos. A seguir mostramos exemplos de algoritmos para uma via-gem intermunicipal de onibus, primeiro em menos detalhes, depois em maisdetalhes.

Exemplo 2.4 Algoritmo para uma viagem de onibus.Va ate a rodoviaria.Informe-se sobre os horarios e precos de passagens.Va ate o guiche de sua escolha e compre a passagem.Preencha o formulario de identificacao.Aloje-se no onibus.Aproveite a viagem.

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM15

Fim da viagem.

Exemplo 2.5 Algoritmo para uma viagem de onibus.Va ate a rodoviaria.Verifique as empresas de onibus que vendem a passagem.Para cada empresa que vende a passagem desejada,

informe-se sobre os horarios e precos da passagem.Va ate o guiche de sua escolha.Solicite a passagem.Verifique os dados da passagem e faca o pagamento.Dirija-se a uma area de espera.Preencha o formulario de identificacao.Espere a chegada do onibus.Quando o onibus chegar,

apresente sua passagem e formulario de identificacao.Se tiver bagagem,

coloque sua bagagem no bagageiro e receba os comprovantes.Aloje-se no onibus e espere a partida.Aproveite a viagem.Quando chegar ao destino

Desca do onibus.Se tiver bagagem,

retire sua bagagem do bagageiro.Fim da viagem.

O Exemplo 2.4 mostra os passos gerais para uma viagem intermunicipal deonibus, enquanto o Exemplo 2.5 detalha os passos individualmente. Podemosnotar que cada um dos passos no Exemplo 2.4 pode ser desenvolvido em maisdetalhes com pouca interferencia nos demais passos.

Algoritmos computacionais

Quando nos voltamos para os computadores, os algoritmos passam a serreceitas que queremos que o computador execute. Mas para que um compu-tador execute uma tarefa e necessario usar uma linguagem de programacaopara construir um programa executavel. Isso faz com que tenhamos quetransformar a nossa ideia da tarefa que deve ser realizada em um programa.

Este livro e uma ajuda para quem quer aprender a programar computado-res usando linguagens de estrutura semelhante aquela da linguagem Pascal.Para isso, vai ser necessario aprender a transformar ideias em programasrespeitando algumas limitacoes. Dentre elas podemos citar:

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM16

• As operacoes que um computador e capaz de realizar sao limitadas aum pequeno conjunto.

• A forma de escrever um algoritmo, isto e, sua sintaxe, deve seguir umcerto padrao bem definido.

• A entrada para o algoritmo e os dados que ele manipula devem ser bemespecificados.

Pascal e uma linguagem estruturada, assim como C, Modula 2, Perl eoutras. Entao ao inves de estudar Pascal ou outra linguagem diretamente,vamos definir uma linguagem padrao para construir algoritmos computacio-nais chamada de pseudo-codigo e usar esse pseudo-codigo para apresentaros conceitos comuns as linguagens estruturadas. Teremos as seguintes van-tagens com esse metodo:

• Poderemos usar uma sintaxe mais flexıvel que a de uma linguagemde programacao real, o que permitira que pensemos nos passos que oalgoritmo computacional deve completar sem nos preocuparmos demaiscom a forma de escreve-los. A enfase, entao, sera maior nas ideias, enao nos detalhes, que serao relevantes apenas para a linguagem deprogramacao.

• Poderemos construir um programa em uma linguagem estruturada comfacilidade se tivermos um algoritmo em pseudo-codigo estruturado ade-quadamente, porque os elementos do pseudo-codigo sao os mesmosdas linguagens estruturadas. Isto e, depois de desenvolver as ideias,a traducao para linguagem de programacao sera um processo simplese mecanico.

Nas proximas secoes vamos apresentar os elementos que formam nossopseudo-codigo e introduzir conceitos relacionados a linguagens de programacaoestruturadas: como os dados sao armazenados, manipulados e transformadospor um algoritmo computacional, quais tipos de comandos podem ser usadosem algoritmos e quais as formas de estruturar algoritmos. Sao esses conceitosque permitirao a construcao de algoritmos que serao “compreendidos” porum computador e que permitirao adquirir proficiencia em linguagens comoPascal, C, Modula2 e outras.

Assim como uma receita culinaria, um algoritmo computacional pode serexpresso em nıveis de detalhes diferentes. O que influencia a escolha do nıvelde detalhes e:

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM17

1. A decisao (tomada por quem faz o algoritmo) de delinear apenas asideias principais e grandes tarefas que o programa deve realizar ou defornecer detalhes sobre o programa que deve ser construıdo.

2. A classe da linguagem de programacao em que o programa sera cons-truıdo.

Para exemplificar o processo de construcao de um algoritmo computa-cional, finalizamos esta secao com um exemplo de algoritmo para resolveruma equacao do segundo grau da forma ax2 + bx+ c = 0. Vamos apresentaro algoritmo em dois nıveis de detalhes diferentes: primeiramente em menosdetalhes, delineando os passos do programa, e depois usando pseudo-codigo,ja bem proximo de um programa Pascal.

Exemplo 2.6

Algoritmo Raızes

Sejam a, b e c os coeficientes da equac~ao do segundo grau

Calcule delta

Se delta for negativo, imprima a mensagem "n~ao ha raızes reais"

Se delta for positivo, calcule as raızes e imprima

fim

Exemplo 2.7

Algoritmo Raızes

{Algoritmo para calcular as raızes reais de uma equac~ao do

segundo grau}

variavel

a,b,c: real

delta: real

x1,x2: real

leia(a,b,c)

delta ← b*b - 4*a*c

se delta < 0 ent~ao

escreva(’Esta equac~ao n~ao possui raızes reais.’)

sen~ao

x1 ← (-1*b - raiz(delta,2)) / 2*a

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM18

x2 ← (-1*b + raiz(delta,2)) / 2*a

escreva(x1,x2)

fim se

fim

A partir deste ponto, toda vez que a palavra algoritmo for utilizada,estaremos nos referindo a algoritmos computacionais.

2.2 Elementos Basicos de um Algoritmo

Um algoritmo deve expressar os principais elementos de um programa. Oselementos tıpicos de um programa sao dados (representados como constantese variaveis), tipos de dados, operadores, comandos, funcoes e comentarios.Tais elementos sao usados para definir dados, estruturar o codigo do pro-grama e realizar operacoes sobre os dados. A partir deste ponto, vamosintroduzir tais elementos, os conceitos relacionados a eles e a forma de ex-pressa-los em pseudo-codigo.

2.2.1 Algoritmo

Um algoritmo em pseudo-codigo comeca com a palavra Algoritmo e terminacom a palavra fim. Entre essas duas palavras ha duas secoes que contemtodas as operacoes feitas pelo algoritmo para definir e manipular dados, comomostramos abaixo.

Algoritmo identificador

definic~oes e declarac~oes

comandos

fim

Na secao definicoes e declaracoes sao definidos tipos, constantes evariaveis que definem e armazenam os dados usados pelo algoritmo. A secaocomandos contem as expressoes que manipulam os dados expressos porconstates e armazenados em variaveis.

No que diz respeito aos algoritmos, nao ha distincao entre definicao edeclaracao (embora esta distincao seja importante para algumas linguagens,como C). Apesar de significarem a mesma coisa, por habito costumamos dizerdefinicao de tipo, definicao de constante e declaracao de variavel.

Um algoritmo e processado, isto e, interpretado por quem o le, comecandona palavra Algoritmo e prosseguindo sequencialmente linha-a-linha, fazendo

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM19

a acao especificada pela linha ate alcancar a palavra fim. Quando o fim e al-cancado, todas as declaracoes feitas pelo algoritmo perdem o efeito, restandoapenas o resultado das acoes executadas.

2.2.2 Constantes Literais

Uma constante e um dado que aparece literalmente em um algoritmo.Numeros, valores logicos, letras, palavras e frases podem ser expressos comoconstantes em um algoritmo. No exemplo abaixo, onde mostramos algumasconstantes da forma como poderao aparecer em pseudo-codigo, usamos aspassimples para delimitar caracteres, palavras e frases.

Exemplo 2.8

6,45

’h’

21

’segunda-feira’

0

’domingo e bom.’

2.2.3 Identificadores

Varios elementos de um algoritmo podem ser identificados atraves de umnome. Este nome e chamado de identificador.

Em pseudo-codigo um identificador e uma unica palavra com qualquernumero de letras, letras acentuadas, dıgitos e sımbolos que nao sejam opera-dores. As palavras abaixo sao exemplos de identificadores:

nome

idade1

preco

preco_de_fabrica

kW

Os operadores tem sentido por si mesmo, por isso nao devem ser usadosem identificadores:

hora∗dia/mes>preco

ingresso+barato

data-importante

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM20

Em pseudo-codigo nao ha diferenciacao entre maiusculas e minusculas.Por exemplo, nome, Nome e NOME sao o mesmo identificador.

2.2.4 Dados e Tipos de Dados

Um dado e uma informacao que um algoritmo recebe ou manipula. Exem-plos de dados sao nomes, datas, valores (precos, notas, etc.) e condicoes(verdadeiro e falso).

Todo dado e de um certo tipo que define sua natureza (p. ex., um nomee diferente de um valor), identificando seu uso, e define as operacoes quepodem ser realizadas com o dado (por exemplo, podemos somar dois valoresnumericos mas nao podemos somar um numero e uma frase).

Essencialmente um algoritmo manipula dados e para isso precisa repre-senta-los de alguma forma. Isso e feito definindo um conjunto de tipos basicosde dados que poderao ser usados nos algoritmos.

Os tipos de dados mais basicos em algoritmos sao o caracter, o numerico,o logico e a enumeracao. Tipos de dados basicos podem ser estruturadosem tipos mais complexos, como veremos em capıtulos posteriores. Este e,dentre outros, o caso das palavras e frases, que sao construıdas a partir decaracteres.

Tipo de Dados Numericos

Dados que manipulam valores numericos podem ser de dois tipos:

• Inteiro: representa um numero inteiro. Por exemplo -1, 0, 1, e 26 saodados inteiros. Dados deste tipo podem ser usados para idade em anos,numero de filhos etc.

• Ponto flutuante: tambem chamado real, representa um numero real.Por exemplo 1,2; 0,0; 26,4 e -2,49 sao dados reais. Dados deste tipopodem ser usados para saldo bancario, altura, peso, temperatura etc.

No projeto de um algoritmo devemos utilizar o tipo numerico mais ade-quado, ou seja, nao devemos usar um numero real quando um numero inteiroresolve o problema.

Tipo de Dados Caracter

Dados que representam valores alfanumericos unitarios sao do tipo caracter.Por exemplo, ’A’, ’a’, ’*’. Caracteres podem ser usados para a codificacaode algum ıtem, como sexo (’m’, ’f’), estado civil (’s’,’c’,’d’,’v’) etc. Valores

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM21

alfanumericos incluem letras, algarismos e sımbolos. Por exemplo, ’1’ e umcaracter se consideramos apenas o sımbolo ’1’ e nao o valor 1.

Tipo de Dados Logico

Dados logicos podem assumir apenas dois valores: verdadeiro ou falso. Elessao usados em situacoes onde e necessario expressar uma condicao, por exem-plo, o fato de que 4 > 5 e falso ou se o cheque numero 00425 ja foi compensadoou nao.

Tipo de Dados Enumeracao

Um dado que pode assumir um valor dentre os valores de um conjunto euma enumeracao ou tipo enumerado. Por exemplo, um dado que podeassumir qualquer valor dentro do conjunto de frutas

{banana, maca, pera, uva, jaca}

e deste tipo.

2.2.5 Variaveis e Atribuicao

Um dado pode ser armazenado e recuperado da memoria de um computador.A posicao de memoria onde ele e colocado pode ser identificada atraves deum nome. Uma variavel e um elemento de algoritmos que tem essa funcao:ela associa um nome a uma porcao da memoria onde um dado pode serarmazenado. A variavel possui, alem do nome, um tipo, responsavel pordefinir como o dado vai ser armazenado e recuperado da memoria.

Em pseudo-codigo as variaveis sao declaradas na secao de declaracoes,antes da secao de comandos. Para declarar uma ou mais variaveis usamosexpressoes da forma:

variavel

identificador: tipo

identificador: tipo

. . .identificador: tipo

Por exemplo, podemos definir uma variavel para armazenar a idade deuma pessoa. Para isso, temos que escolher um nome para a variavel (p.ex.idade) e temos que escolher o seu tipo (p.ex. inteiro). Os exemplos a seguirsao definicoes de variaveis em pseudo-codigo:

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM22

idade Area de Dados

Area de memoriaequivalente aoarmazenamento deum dado inteiro

Figura 2.1: Definicao da variavel idade

variavel

idade: inteiro

sexo: caracter

valido: logico

A Figura 2.1 ilustra a definicao da variavel idade. Quando uma variavele declarada, ela passa a referenciar uma posicao de memoria capaz de arma-zenar um valor do tipo dela.

Para utilizar uma variavel para armazenar um dado na memoria, utiliza-mos o operador de atribuicao ← em comando da forma:

variavel ← valor

No exemplo abaixo aparecem atribuicoes de valores de varios tipos dedados diferentes:

Exemplo 2.9

idade ← 51

valido ← FALSO

sexo ← ’f’

Esses comandos armazenam os valores 51, FALSO e ’f’ nas posicoes dememoria associadas as variaveis idade, valido e sexo respectivamente. AFigura 2.2 ilustra o efeito do primeiro comando do Exemplo 2.9, isto e, aatribuicao do valor 51 a variavel idade.

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM23

? 51idade idade

Antes de Depois deidade ← 51 idade ← 51

Figura 2.2: Atribuicao do valor 51 a variavel idade

?

51

51

51

Depois de

idade

idade minima

idade

idade minima

Antes deidade ← idade minima idade ← idade minima

Figura 2.3: Atribuicao do valor da variavel idade a variavel idade mınima.

O conteudo armazenado por uma variavel pode ser copiado para outravariavel do mesmo tipo usando o operador de atribuicao.

Exemplo 2.10

variavel

idade: inteiro

idade_mınima: inteiro

idade ← 51

idade_mınima ← idade

No exemplo acima, apos o comando idade mınima ←idade, ambas asvariaveis armazenarao o valor 51, conforme ilustrado na Figura 2.3.

O valor que esta armazenado em uma variavel logo que ela e declarada edesconhecido. Isso implica que se queremos garantia de que um certo valor e

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM24

armazenado em uma variavel devemos usar uma atribuicao para armazena-lo. O termo do jargao da programacao de computadores para a primeiraatribuicao de valor a uma variavel e inicializacao.

O tipo de uma variavel nao muda durante todo o algoritmo que a uti-liza. As atribuicoes entre variaveis podem ser feitas apenas com variaveis demesmo tipo ou de tipo que seja compatıvel. Dentre os tipos definidos ate omomento so existe compatibilidade entre inteiro e real, ou seja, uma variavelinteira pode ser atribuıda a uma variavel real, mas nao o contrario. Issoporque os inteiros sao numeros reais cuja parte fracionaria e zero, mas temosmais de uma opcao para a parte fracionaria de um real se quisermos torna-lointeiro (arredondar para baixo ou arredondar para cima).

2.2.6 Constantes Identificadas

E possıvel dar nome a constantes utilizadas em um algoritmo. Isso e feitodefinindo um identificador para elas, na secao de declaracoes do algoritmo.A expressao utilizada para identificar constantes possui a forma:

constante

identificador = valor

identificador = valor

. . .identificador = valor

O tipo de uma constante e definido em funcao do valor atribuıdo a ela.No exemplo abaixo vemos definicoes de duas constantes, uma inteira e outrareal.

Exemplo 2.11

constante

idade_base = 51

preco_maximo = 231,00

salario_mınimo = 240,00

As constantes identificadas, assim como as constantes literais, podem seratribuıdas a variaveis, como no exemplo abaixo:

Exemplo 2.12

constante

idade_base = 51

preco_maximo = 231,00

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM25

variavel

inteiro: idade

real: preco

idade ← idade_base

preco ← preco_maximo

O valor de uma constante nao se altera apos a sua definicao. Em umalgoritmo, constantes nunca aparecerao do lado esquerdo do comando deatribuicao. As constantes literais e as identificadas se comportam essencial-mente da mesma maneira, razao pela qual nao faremos distincao entre elasdeste ponto em diante.

2.2.7 Tipo de Dados Definidos no Algoritmo

Em um algoritmo podemos definir um novo tipo de dados a partir de tiposja existentes e dar nome a ele. Fazemos isso atraves de declaracoes da forma:

tipo

identificador = express~ao

identificador = express~ao

...

identificador = express~ao

onde express~ao e ou um tipo pre-existente, uma restricao sobre o intervalode um tipo inteiro ou caracter, ou uma composicao de tipos pre-existentes.Por exemplo, podemos definir um tipo chamado Booleano a partir do tipologico:

tipo

Booleano = logico

Desta forma, poderemos usar o tipo Booleano como um sinonimo paralogico.

Podemos definir os tipos dezena e eixo da seguinte forma:

tipo

dezena = 1 ate 12

eixo = ’x’ ate ’z’

Um dado do tipo dezena pode assumir valores entre 1 e 12 inclusive. Jaum dado do tipo eixo, pode assumir valores dentre {’x’,’y’,’z’}

Exemplos de composicoes de tipos basicos para criar um novo tipo apa-recerao os proximos capıtulos.

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM26

2.2.8 Expressoes Aritmeticas e Logicas

Em um algoritmo podemos combinar valores atraves da aplicacao de operado-res aritmeticos, logicos e relacionais formando expressoes, como no exemploabaixo.

Exemplo 2.13

3 + 7 * 2 - 15

verdadeiro e falso ou verdadeiro

3 + 2 < 5

O valor de uma expressao e calculado de imediato no algoritmo e pode serarmazenado em uma variavel. As expressoes tambem podem envolver o valorde variaveis e constantes como operandos, desde que tenham sido declaradaspreviamente, como na linha 11 do exemplo abaixo.

Exemplo 2.14

1 constante

2 fator = 0,05

3 valor = 1000,00

4 mensalista = falso

5 temporario = verdadeiro

6

7 variavel

8 imposto: real

9 segurado: logico

10

11 imposto ← valor*fator/2 + 15,00

12 imposto ← imposto * 1,05

13 segurado ← mensalista e temporario

Uma mesma variavel pode, inclusive, aparecer antes e depois do comandode atribuicao, como na linha 12 do exemplo anteiror. Nesse caso, primeira-mente o valor da expressao e calculado e depois e armazenado na variavel.Assim, o valor de imposto fica acrescido de 5% depois da execucao da linha 12.

Alguns operadores usados em algoritmos sao binarios, isto e, realizamuma operacao sobre dois operandos, como a soma a+ b. Outros operadoressao unarios, isto e, realizam uma operacao sobre apenas um operando, comoo complemento −a.

Os operadores aritmeticos na tabela abaixo podem ser usados em pseudo-codigo.

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM27

operador primeiro operando segundo operando resultado notacao+ a b a+ b a+ b+ a — +a +a– a b a− b a− b– a — −a −a∗ a b a× b a ∗ b/ a b a

ba/b

Em uma expressao alguns operadores tem precedencia maior que ou-tros, isto e, os operadores de maior precedencia sao considerados antes emexpressoes. Operadores de maior precedencia sao considerados antes em ex-pressoes. No caso dos operadores aritmeticos a precedencia e maior para omultiplicacao e para a divisao e menor para a subtracao e para a soma, comona tabela abaixo:

+ − unarios∗ /+ − binarios

maior↑

precedencia↓

menor

Para operadores de mesma precedencia, como + e − binarios, a ordemde execucao e da esquerda para a direita. Por exemplo, consideremos aexpressao

3 + 7 ∗ 2− 15

Ela e calculada assim:

3 + 7 ∗ 2− 153 + 14− 1517− 15

2

Pares de parenteses podem ser usados para alterar a precedencia dosoperadores, como por exemplo:

(3 + 7) ∗ (2− 15)10 ∗ (2− 15)10 ∗ −13−130

Os operadores e, ou e nao logicos podem ser usados em algoritmos. Ooperador e e um operador binario que opera sobre valores logicos (constantes,

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM28

variaveis ou expressoes), resultando nos valores indicados abaixo:

verdadeiro e verdadeiro = verdadeiroverdadeiro e falso = falso

falso e verdadeiro = falsofalso e falso = falso

O operador ou e um operador binario que opera sobre valores logicos(constantes, variaveis ou expressoes), resultando nos valores indicados abaixo:

verdadeiro ou verdadeiro = verdadeiroverdadeiro ou falso = verdadeiro

falso ou verdadeiro = verdadeirofalso ou falso = falso

O operador nao, por sua vez, e um operador unario que opera sobrevalores logicos (constantes, variaveis ou expressoes), resultando nos valoresindicados abaixo:

nao verdadeiro = falsonao falso = verdadeiro

A precedencia dentre os operadores logicos segue a ordem nao, e e ou,sendo o nao o operador de maior precedencia e o ou o operador de menorprecedencia. Pares de parenteses podem ser usados tambem para alterar aprecedencia dos operadores logicos.

Alem dos operadores aritmeticos e logicos, os operadores relacionais

=, <,>,≤,≥ e 6=

tambem podem ser usados em expressoes nos algoritmos. O resultado deuma expressao que contem um operador relacional e do tipo logico, isto e,verdadeiro ou falso. Os operadores aritmeticos, logicos e relacionais podemser combinados em uma unica expressao, como no exemplo abaixo.

Exemplo 2.15

idade ← 28

valor ← 1000,00

fator ← 0,05

segurado: logico

segurado ← idade < 30 e valor*fator leq 500,00

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM29

A expressao do Exemplo 2.15 e resolvida da seguinte forma:

idade < 30 e valor*fator ≤ 500,00idade < 30 e 50 ≤ 500,00verdadeiro e 50 ≤ 500,00verdadeiro e verdadeiro

verdadeiro

Portanto, o resultado final da variavel segurado e verdadeiro.A precedencia dos operadores que vimos ate agora pode ser resumida

na tabela abaixo. Acrescentamos a atribuicao a tabela para enfatizar queapenas depois do calculo de toda a expressao seu valor final e guardado navariavel:

+ − unarios∗ /+ − binariosnao e ou= < > ≤ ≥ 6=←

maior↑

precedencia↓

menor

Funcoes Pre-definidas Alem dos operadores aritmeticos, em pseudo-codigoha funcoes pre-definidas para outras operacoes matematicas. O conceito deuma funcao em uma linguagem de programacao sera estudado em profun-didade no Capıtulo 4. Por hora, e suficiente saber que uma funcao e umalgoritmo que recebe zero ou mais dados (chamados parametros), faz algu-mas operacoes e devolve um unico dado. As funcoes aritmeticas pre-definidasque usaremos em nossos algoritmos estao na tabela abaixo.

Funcao Tipo dos Parametros Resultadoraiz(x,n) x: real, n: real A n-esima raiz de xseno(x) x: real O seno de x dado em grauscosseno(x) x: real O cosseno de x dado em graustangente(x) x: real A tangente de x dado em grausexp(x) x: real ex

abs(x) x:real o valor absoluto de xarredonda(x) x:real aproxima para o inteiro mais proximo

O Exemplo 2.16 fornece alguns resultados das funcoes apresentadas acima.

Exemplo 2.16 Resultados de Funcoes

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM30

raiz(144,2) = 12seno(30) = 0,5cosseno(90) = 0,0tangente(45) = 1,0

Funcoes podem ser utilizadas em expressoes, ou como parametros de ou-tras funcoes, conforme exemplificado a seguir.

Exemplo 2.17

valor ← raiz(a,2)*2 + n

No exemplo acima, o valor da raiz quadrada de a sera multiplicado por 2,em seguida somado com o valor da variavel n e o resultado dessa expressaosera atribuıdo a variavel valor.

Funcoes tem precedencia sobre todas as demais operacoes vistas ate agora.Os parametros passados para funcoes podem ser variaveis, constantes, ex-pressoes ou resultados de outras funcoes.

2.2.9 Entrada e Saıda

Um algoritmo pode receber dados atraves de dispositivos como teclado,mouse, discos e placas de rede, e pode enviar dados para o monitor de vıdeo,discos e outros. Este tipo de operacoes em que dados sao recebidos por um al-goritmo ou sao enviados por um algoritmo para um dispositivo sao chamadosde operacoes de entrada e saıda.

Nosso pseudo-codigo para algoritmos contem funcoes pre-definidas paraler dados do teclado e para escrever caracteres no monitor de vıdeo. Taisfuncoes aparecem na tabela abaixo.

Funcao Parametros Resultadoleia(x1,x2,...) variaveis de qualquer

tipo basicoOs valores digitados noteclado sao armazena-dos em x1, x2, ...

escreva(y1,y2,...) variaveis, constan-tes ou expressoes dequalquer tipo basico

Os valores de y1, y2,... sao escritos no mo-nitor.

Em geral as linguagens de programacao tambem provem funcoes para re-ceber e para enviar dados para outros tipos de dispositivos. Algumas provemfuncoes para entrada e saıda de outros tipos de dados, como imagens e som,dentre outros.

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM31

Nos algoritmos deste livro vamos usar essencialmente entrada de dadosproveniente do teclado, saıda para o monitor de vıdeo e entrada ou saıda emarquivos em disco, conforme sera visto em capıtulo posterior.

2.2.10 Comentarios, Linhas em Branco e Indentacao

Comentarios, linhas em branco e indentacao2 sao elementos de algoritmosque nao sao comandos, mas servem para documentar o algoritmo e melhorara sua legibilidade.

Comentarios sao usados para descrever o algoritmo, indicar o significadode variaveis e constantes e esclarecer trechos do codigo. Sua funcao primor-dial e apoiar a compreensao de quem le o programa posteriormente, que podeser a mesma pessoa que o escreveu ou outra pessoa diferente.

Linhas em branco e indentacao tem funcao parecida: melhorar a legibili-dade do programa. A adicao das linhas em branco e da identacao delimitablocos de comandos do algoritmo, deixando claro quais comandos serao se-lecionados por uma alternativa se, por exemplo. Se olharmos para o algo-ritmo 2.7 (Pagina 18) veremos que e muito mais facil compreende-lo daquelaforma do que se estivesse escrito como aparece abaixo.

Exemplo 2.18

Algoritmo Raızes

variavel a,b,c: real

delta: real

x1,x2: real

leia(a,b,c)

delta ← b*b - 4*a*c

se delta < 0 ent~ao escreva(’Esta equac~ao n~ao possui raızes reais.’)

sen~ao x1 ← (-1*b - raiz(delta,2)) / 2*a

x2 ← (-1*b + raiz(delta,2)) / 2*a

escreva(x1,x2)

fim se

fim

Em pseudo-codigo os comentarios sao delimitados por pares de chaves,como nos exemplos 2.19 e 2.20.

2Esta palavra vem do ingles indent.

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM32

Figura 2.4: Triangulo retangulo e parametros

2.2.11 Exemplos de Algoritmos

A seguir apresentamos um algoritmo para calcular os dois lados de umtriangulo retangulo, dado um dos seus angulos, α, e a hipotenusa c (ver Fi-gura 2.4). Pelas regras basicas de geometria cosseno(α) = b

ce seno(α) = a

c,

sendo a o lado oposto ao angulo, e b o lado adjacente ao angulo α. O exemploabaixo apresenta para calcular os lados adjacente e oposto ao angulo α.

Exemplo 2.19

Algoritmo lados_triangulo

{Este algoritmo calcula o valor dos lados de um triangulo

retangulo, dados um de seus angulos menores e a hipotenusa}

variavel

lado_oposto, lado_adjacente: real

hipotenusa, alfa: real

leia(alfa)

leia(hipotenusa)

lado_oposto ← seno(alfa)*hipotenusa

lado_adjacente ← cosseno(alfa)*hipotenusa

escreva(lado_oposto)

escreva(lado_adjacente)

fim

O exemplo a seguir calcula o salario de um vendedor que possui um salariobase e um acrescimo baseado em comissao.

Exemplo 2.20

Algoritmo salario

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM33

{Este algoritmo calcula o valor do salario de um funcionario

dados o valor total de suas vendas e sua porcentagem de comiss~ao}

constante

salario_base = 240,00;

variavel

salario: real

comiss~ao: real

valor_vendido: real

leia(comiss~ao,valor_vendido)

salario ← salario_base + comiss~ao/100*valor_vendido

escreva(salario)

fim

2.2.12 Consideracoes Finais

Como vimos ao longo deste capıtulo, um algoritmo e uma forma de organizaras ideias com o objetivo de construir um programa.

Quando o problema a resolver e um pouco mais complexo, a pessoa queesta construindo o algoritmo provavelmente tera problemas se tentar escreve-lo ao longo de varias paginas. Provavelmente sera mais facil chegar a um boasolucao se a estrutura do problema e a estrutura do proprio algoritmo foremanalisadas e se o algoritmo for quebrado. Quando quebramos um algoritmoestamos fazendo o que chamamos de modularizacao. Quando modulariza-mos diminuımos a complexidade com que temos que lidar ao tentar resolvero problema original. Podemos pensar em cada subproblema separadamentee depois de resolve-los, construir a solucao para todo o problema sem pensarnos detalhes de cada subproblema. Uma boa modularizacao e aquela quedivide um algoritmo em partes (modulos) de tal forma que: (1) cada parteresolve um subproblema bem definido e (2) uma parte nao interfere na outra.

Um efeito colateral de uma boa modularizacao e que fica facil reutilizaros modulos na solucao de outros problemas. Algumas vezes e obvio que umcerto subproblema deve ser

Outro efeito colateral da modularizacao adequada e a facilidade de modi-ficar o algoritmo quando for necessario. Se os modulos resolvem um problemabem definido e sao independentes, os efeitos da modificacao de um modulo

CAPITULO 2. ALGORITMOS E ELEMENTOS BASICOS DE LINGUAGEM34

provavelmente ficarao restritos a uma parte pequena do programa. O assuntode modularizacao sera tratado novamento num capıtulo posterior.

Mas quando pensamos em problemas realmente complexos, que sao re-solvidos por algoritmos e sistemas de software grandes, teremos equipes depessoas trabalhando em conjunto. Para a construcao de sistemas de grandeporte ser eficiente ela deve ser bem planejada. Tanto o planejamento quantoa execucao da construcao de tais sistemas sao complexos. Para auxiliar essatarefa ha metodologias desenvolvidas pelo ramo da computacao chamado deEngenharia de Software, que se preocupa com questoes humanas, de pla-nejamento e de qualidade relacionadas a construcao de sistemas de software.

Outro aspecto da importante na construcao de algoritmos e o tratamentode situacoes excepcionais. Uma situacao excepcional e algum evento quenao faz parte da operacao padrao de um algoritmo. Por exemplo, vamosconsiderar o exemplo do algoritmo para calcular os lados de um triangulo.A operacao padrao e ler os dados do teclado, calcular os lados e imprimiro resultado. Mas o que aconteceria se na digitacao das entradas dados, ousuario cometesse um erro de digitacao e o angulo fosse igual a 90 graus?O algoritmo produziria um resultado errado. E no exemplo do calculo dosalario, se o valor vendido for igual a zero, entao teremos uma divisao porzero que causa uma falha do programa.

Extrapolando, podemos imaginar os transtornos e riscos se as situacoesexcepcionais nao forem previstas e tratadas adequadamente nos programas degerenciamento de contas bancarias, sinais de transito, metro, trafego aereo...O que fazer em relacao as situacoes excepcionais depende dos mecanismosque a linguagem de programacao oferece e da forma escolhida para detectare contornar essas situacoes.

Sugestao 1 Procure sempre desenvolver um algoritmo em etapas. Entendao problema, elabore uma solucao escrevendo instrucoes gerais, e em seguidadetalhe cada uma das instrucoes gerais individualmente.

Sugestao 2 Procure usar nomes de variaveis significativos, que expressemo significado real da variavel, mesmo que eles fiquem longos.

Sugestao 3 Revise seu algoritmo, tentando identificar se os passos indivi-duais sao suficientemente independentes um dos outros.

Sugestao 4 Revise seu algoritmo em busca de possıveis erros e excecoes quepossam ser tratados.