Você está na página 1de 14

Introduo Programao

Introduo Programao

Ed. v1.0

Introduo Programao
Copyright 2013 UAB

Voc tem a liberdade de:


Compartilhar copiar, distribuir e transmitir a obra.
Remixar criar obras derivadas.
Sob as seguintes condies:
Atribuio Voc deve creditar a obra da forma especificada pelo autor ou licenciante (mas no
de maneira que sugira que estes concedem qualquer aval a voc ou ao seu uso da obra).
Uso no comercial Voc no pode usar esta obra para fins comerciais.
Compartilhamento pela mesma licena Se voc alterar, transformar ou criar em cima desta
obra, voc poder distribuir a obra resultante apenas sob a mesma licena, ou sob uma licena
similar presente.
Para maiores informaes consulte: http://creativecommons.org/licenses/by-nc-sa/3.0/br/ .

ii

Introduo Programao

iii

REVISION HISTORY
NUMBER

DATE

v1.0

Maro 2013

DESCRIPTION
Primeira verso do livro

NAME
Bruno Jefferson
de Sousa

Introduo Programao

iv

Sumrio

Algoritmos

1.1

Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2

O que um algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

Caractersticas de um algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4

Formas de representao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4.1

Descrio Narrativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4.2

Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4.3

Linguagem Algortmica . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.5

Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.6

Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Introduo Programao

1 / 10

Captulo 1
Algoritmos
O BJETIVOS DO CAPTULO
Ao final deste captulo voc dever ser capaz de:
Definir algoritmo
Descrever suas principais caractersticas
Criar algoritmos utilizando diferentes formas de representao
comum pensarmos em uma estratgia para executar uma tarefa do nosso dia a dia, mesmo que ela
seja muito simples. Ao escovar os dentes, por exemplo, ns seguimos diferentes estratgias. Uns
comeam com a escovao dos molares e depois partem para os dentes da frente, outros fazem o
inverso. Enfim, existem vrias formas de escovarmos os dentes, assim como existem vrias maneiras
de realizarmos diversas atividades. Voc sabia que o conjunto de passos para resolver um certo
problema ou realizar determinada tarefa chama-se algoritmo? E que eles so importantssimos para a
programao de computadores?
Neste captulo estudaremos as caractersticas dos algoritmos, suas formas de representao e, sobretudo, a relao entre eles e a programao de computadores.

1.1

Introduo

Fonte inspiradora de livros e filmes, o americano Monty Roberts (Figura 1.1 [2]), conhecido como
o encantador de cavalos, revolucionou a forma de domar cavalos. Ao estudar o comportamento
de cavalos selvagens, percebeu que existe entre eles uma linguagem corporal compartilhada. Entendendo tal linguagem, conseguiu rapidamente ganhar a confiana de cavalos arredios e instru-los a
se comportarem como desejava. Alm de no usar de violncia, essencial no emprego dos mtodos
convencionais, seu mtodo capaz de domar cavalos em poucos dias, ao contrrio da maioria, que
normalmente necessita de vrias semanas.

Introduo Programao

2 / 10

Figura 1.1: Monty Roberts.


Assim como os cavalos, os computadores tambm so instrudos por meio de uma linguagem particular. Para que eles se comportem como desejamos, basta que sejam comandados a partir de uma
linguagem que sejam capazes de entender.
Diferentemente do que ensina o senso o comum, os computadores no possuem inteligncia. Seu
nico trabalho processar dados, conforme uma sequncia de instrues que fazem parte do vocabulrio da linguagem que eles conseguem compreender. A iluso de que eles realizam tarefas de
forma inteligente proporcionada atravs desse conjunto ordenado de instrues, que denominado
de algoritmo. Neste caso, o domador do computador, responsvel por elaborar o algoritmo que vai
orient-lo na execuo de uma determinada tarefa, chamado de programador de computadores.

1.2

O que um algoritmo?

A palavra algoritmo derivada do nome Mohammed ibn Musa Al-Khowarizmique, que foi um
matemtico, astrlogo, astrnomo e autor persa. Ele fez parte de um centro acadmico conhecido
como a Casa da Sabedoria, em Bagd, por volta de 800 d.C. Seus trabalhos introduziram o clculo
hindu aos rabes e, a partir da, ao resto da Europa.
No obstante os algoritmos representam um conceito central na Cincia da Computao, sua atuao
no se limita a essa rea do conhecimento. Rotineiramente, lidamos com algoritmos na realizao
das mais variadas tarefas. Eles podem ser utilizados para lavar um carro, preparar um bolo, tomar
banho, montar um guarda-roupa, etc. Perceba que os algoritmos no devem ser confundidos com as
atividades. Eles se referem aos passos seguidos para que estas sejam realizadas. Como exemplo de
algoritmos, podemos citar as instrues para montagem de equipamentos, para utilizao de cosmticos como shampoos e condicionadores, para sada de emergncia em meios de transporte, receitas
culinrias, manuais de uso, entre outros.
A partir do que foi exposto, podemos definir algoritmo como uma sequncia finita, ordenada e no
ambgua de passos para solucionar determinado problema ou realizar uma tarefa.
Na cincia da computao, esse conceito foi formalizado em 1936, por Alan Turing e Alonzo Church,
da seguinte forma:
D EFINIO DE A LGORTIMO
Um algoritmo um conjunto no ambguo e ordenado de passos executveis que definem
um processo finito.
O exemplo a seguir mostra como pode ser elaborado um algoritmo para realizar uma atividade com a
qual lidamos corriqueiramente:
A LGORITMO PARA FRITAR UM OVO

Introduo Programao

3 / 10

1. Retire o ovo da geladeira.


2. Coloque a frigideira no fogo.
3. Coloque leo na frigideira.
4. Quebre ovo, separando a casca.
5. Ponha a clara e a gema na frigideira.
6. Espere um minuto.
7. Apague o fogo.
8. Retire o ovo da frigideira.
Agora considere o seguinte problema. Suponha que voc dispe de duas vasilhas de nove e quatro
litros respectivamente. Como elas no possuem marcao, no possvel ter medidas intermedirias
sobre o volume ocupado. O problema consiste, ento, em elaborar uma sequncia de passos, por meio
da utilizao das vasilhas de nove e quatro litros, a fim de encher uma terceira vasilha com seis litros
de gua. A figura abaixo ilustra dois possveis passos de um algoritmo para resolver o problema.

Figura 1.2: Ilustra dois passos possveis envolvendo as operaes de encher e esvaziar as vasilhas.
Em (a) apenas a primeira vasilha est cheia. J em (b) os nove litros da primeira vasilha so colocados
nas outras duas.
Uma soluo para o problema pode ser alcanada a partir do seguinte algoritmo:
A LGORITMO PARA ENCHER VASILHAS
1. Encha a vasilha de nove litros.
2. Usando a vasilha de nove litros, encha a de quatro.
3. Coloque a quantidade que sobrou (cinco litros) na terceira vasilha (v3 = 5).
4. Esvazie a vasilha de quatro litros.

Introduo Programao

4 / 10

5. Encha novamente a vasilha de nove litros.


6. Usando a vasilha de nove litros, encha a de quatro.
7. Esvazie a de quatro litros.
8. Usando a sobra da de nove litros (cinco litros), encha novamente a de quatro litros.
9. Coloque a sobra da de nove litros (agora um litro) na terceira vasilha (v3 = 5 + 1 = 6).

1.3

Caractersticas de um algoritmo

Todo algoritmo, seja ele computacional ou no, recebe uma entrada, processa-a e gera uma sada
segundo seu conjunto de passos. No caso do algoritmo para fritar ovo, a entrada corresponde
frigideira, ao ovo e ao leo. O processamento ocorre com a execuo de seus passos, gerando como
sada o ovo frito.
Os algoritmos computacionais, especificamente, possuem as seguintes caractersticas:
Definio
Os passos de um algoritmo devem ser bem definidos, objetivando a clareza e evitando ambiguidades.
Finitude
Um algoritmo deve chegar ao seu fim aps um nmero finito de passos.
Efetividade
Um algoritmo deve ser efetivo, ou seja, suas operaes devem ser bsicas o suficiente para que
possam, em princpio, serem executadas de maneira exata e em um tempo finito.
Entradas
Um algoritmo deve possuir zero ou mais entradas. Estas so insumos ou quantidades que so
processados pelos algoritmos durante a execuo de seus passos.
Sadas
Um algoritmo deve possuir uma ou mais sadas. Elas representam o resultado do trabalhado
realizado pelos algoritmos.

1.4

Formas de representao

As formas mais comumente utilizadas para representar algoritmos so as seguintes:


Descrio narrativa
Fluxograma
Linguagem Algortmica
Todas elas apresentam pontos fortes e fracos, no existindo consenso entre os especialistas sobre a
melhor forma de representao. Apresentaremos as nuances de cada uma nas prximas sees.

Introduo Programao

1.4.1

5 / 10

Descrio Narrativa

Os algoritmos so expressos em linguagem natural (portugus, ingls, francs, espanhol, etc.). Sua
principal desvantagem se encontra no fato da linguagem natural estar bem distante da linguagem
utilizada pelos computadores. Logo, a traduo de uma para a outra se torna uma atividade bastante
dispendiosa. Alm disso, linguagens naturais so mais propensas a ambiguidades. Muitas vezes uma
palavra pode ter vrios significados, dependendo do contexto no qual so utilizadas. Em contrapartida,
bem mais fcil elaborar um algoritmo por meio de uma linguagem com a qual j temos uma certa
familiaridade, do que atravs de linguagens que no so utilizadas com frequncia no dia a dia.
Os exemplos de algoritmos mostrados anteriormente (Algoritmo para fritar um ovo [2] e Algoritmo
para encher vasilhas [3]) refletem esta forma de representao.

1.4.2

Fluxograma

Consiste em usar formas geomtricas padronizadas para descrever os passos a serem executados pelos
algoritmos. As formas apresentadas na Figura 1.3 so as mais comumente utilizadas em fluxogramas.

Figura 1.3: Formas geomtricas utilizadas em fluxogramas


A vantagem de se fazer uso dos fluxogramas est na facilidade de compreend-los. Descries de
algoritmos mediante formas grficas so mais facilmente compreendidas do que descries que envolvem apenas textos. Alm do mais, os fluxogramas possuem um padro mundial no que se refere
sua simbologia, tornando sua utilizao independente das peculiaridades das linguagens naturais.
Para exemplificar o uso de fluxogramas, a Figura 1.4 [6] mostra um algoritmo para calcular a mdia
final de um aluno com base em suas notas e classific-lo como aprovado ou reprovado. Analisando-a
com mais cuidado, possvel perceber que os fluxogramas tendem a crescer bastante quando descrevem algoritmos constitudos de muitos passos, o que dificulta tanto sua construo como sua visualizao. Alm dessa desvantagem, por impor regras para sua utilizao de acordo com cada forma
geomtrica, h uma limitao no seu poder de expresso, se comparado com a descrio narrativa.

Introduo Programao

6 / 10

Figura 1.4: Fluxograma para calcular a mdia de um aluno

1.4.3

Linguagem Algortmica

A linguagem que o computador capaz de compreender tem grande influncia na elaborao de


algoritmos projetados para ele. Seus passos no podem conter instrues desconhecidas ou fazer
referncia a smbolos ou expresses que os computadores no conseguem decifrar. Tal linguagem,
tantas vezes mencionada neste captulo, se baseia em conceitos e em arquiteturas de hardware que
determinam o funcionamento bsico de um computador. Dentre as existentes, a mais utilizada nos
computadores atuais a arquitetura de von Neumann. Seu autor, John Von Neumann (Figura 1.5 [7]),
props um modelo em que as instrues e os dados ficam juntos na memria.
O processador busca as instrues na memria e as executa uma de cada vez, segundo o seguinte ciclo
de execuo:
1. Busca instruo;
2. Decodifica instruo;
3. Executa instruo;
4. Volta para o passo 1 para buscar a instruo seguinte na memria.

Introduo Programao

7 / 10

Figura 1.5: John von Neumann


Para esclarecer como funciona a execuo de um algoritmo baseado no ciclo de execuo mencionado, considere uma memria com 32 posies para armazenamento, organizada conforme Figura 1.6
[7].

Figura 1.6: Representao de uma memria com 32 posies para armazenamento.


Os nmeros do canto superior direito de cada clula indicam os endereos de memria correspondentes a cada posio da memria representada. Nas trs primeiras clulas constam as instrues
que sero executadas e, da oitava dcima, constam valores armazenados nas posies de memria
nomeadas por x, y e z, respectivamente.
Supondo que a execuo do algoritmo em questo inicia-se com a busca da instruo no endereo 0
(zero), o ciclo de execuo continua com a decodificao da instruo x = 2, que, aps sua realizao,
resulta no armazenamento do valor 2 na posio de memria de nmero 8, nomeada de x. O passo
4 ento executado, dando incio busca da prxima instruo. Com isso, a instruo y = 3
encontrada e decodificada, gerando como resultado o armazenamento do valor 3 na posio de nmero
9, nomeada de y. O mesmo ocorre com a instruo z = x.y, que, aps sua decodificao, armazena
o valor 6 (produto de x por y) na posio de endereo 10 e rotulada de z. O algoritmo em descrio
narrativa para a execuo das instrues anteriores encontra-se logo abaixo:
A LGORITMO PARA MULTIPLICAR DOIS NMEROS
1. Escreva 2 na posio de memria nomeada de x.

Introduo Programao

8 / 10

2. Escreva 3 na posio de memria nomeada de y.


3. Multiplique x e y e o resultado escreva em z.
Modelos como o mencionado anteriormente no apenas definem a forma como os dados so processados pelo computador, mas tambm a linguagem que eles so capazes de compreender. Assim sendo,
a linguagem utilizada pelos computadores est restrita a um conjunto limitado de instrues, cujo
funcionamento depende de sua arquitetura de hardware. As linguagens de programao imperativas
(Pascal, C, Cobol etc), por exemplo, foram criadas em funo da arquitetura de von Neumman.
A linguagem algortmica, tambm chamada de pseudocdigo ou pseudo-linguagem, por sua vez,
consiste no emprego de uma linguagem intermediria entre a linguagem natural e uma linguagem de
programao. Esse meio termo resulta em uma linguagem que se aproxima das construes de uma
linguagem de programao, sem exigir, no entanto, rigidez na definio das regras para utilizao de
suas instrues. Geralmente, essa forma de representao de algoritmos uma verso reduzida de
linguagens de alto nvel como C e Pascal. Segue abaixo o algoritmo da Figura 1.4 [6] em pseudocdigo:
1
2
3
4
5
6
7
8
9
10
11

ALGORITMO
DECLARE nota1, nota2, M : NUMRICO
LEIA nota1
LEIA nota2
M (nota1 + nota2) / 2
SE M >= 7.0 ENTO
ESCREVA Aprovado
SENO
ESCREVA Reprovado
FIM-SE
FIM_ALGORITMO.

As palavras em letras maisculas correspondem a palavras reservadas que fazem parte do conjunto de
regras que a linguagem algortmica deve seguir. Embora sejam mais flexveis do que as linguagens de
programao em relao ao seu uso (a instruo LEIA, por exemplo, muitas vezes substituda por
LER, OBTER, etc.), algumas palavras so necessrias, pois facilitam o entendimento e aproximam o
pseudocdigo de um programa de computador. As palavras INCIO e FIM, por exemplo, indicam
onde comea e termina o algoritmo. J as instrues LEIA e ESCREVA referem-se a operaes de
entrada e sada de dados (ex.: ler dados do teclado ou exibir uma frase no monitor), presentes na
maioria das linguagens de programao.
Seguindo com a explicao do algoritmo, perceba que a linha com a instruo M (nota1 +
nota2) /2 contm dois smbolos ainda no apresentados. O smbolo / diz respeito operao
aritmtica da diviso, ao passo que o smbolo expressa uma operao de atribuio, que pode ser
lida da seguinte forma: A posio de memria, representada simbolicamente por M, recebe o valor
da soma de nota1 e nota2, dividido por dois. Para finalizar, a linha 6 apresenta uma estrutura de
controle condicional essencial para as linguagens de programao. Operaes de atribuio, expresses e estruturas de controle fazem parte do ncleo das linguagens de programao imperativas e so,
portanto, fundamentais para o aprendizado da programao. Todos esses assuntos sero abordados de
forma mais aprofundada em captulos posteriores.
A principal vantagem da forma de representao em linguagem algortmica est na facilidade com
a qual um pseudocdigo pode ser transcrito para uma linguagem de programao. Assim como os
fluxogramas, a desvantagem fica por conta da limitao do seu poder de expresso, devido s regras
impostas para a elaborao das instrues.

Introduo Programao

1.5

9 / 10

Recapitulando

Neste captulo voc estudou algoritmos, suas principais caractersticas e suas formas de representao.
Apesar de ser um tema mais abordado na cincia da computao, algoritmos esto presentes nas mais
diversas reas e em vrias atividades do cotidiano. Lidamos com eles, por exemplo, quando tomamos
banho, cozinhamos, planejamos uma rota para fugirmos do trnsito, consultamos um manual de montagem, enfim, sempre que nos deparamos com um conjunto lgico de passos para realizarmos uma
tarefa ou solucionarmos um problema, estamos em contato com algoritmos. por meio deles que
os computadores passam a iluso de que so inteligentes, realizando tarefas capazes de impressionar
qualquer ser humano. No entanto, sabemos que eles apenas processam dados, segundo um conjunto
de instrues que lhe so passadas os algoritmos.
Voc viu que os algoritmos computacionais, aqueles elaborados para serem executados em computadores, devem ser claros, ter um nmero finito de passos, e que estes devem ser simples o suficiente
para serem executados de maneira exata e em um tempo finito. Alm disso, os algoritmos computacionais devem possuir zero ou mais entradas e uma ou mais sadas.
As formas de representao de algoritmos mais comuns so a linguagem algortmica, o fluxograma e
o pseudocdigo. Da primeira ltima h uma aproximao em relao s linguagens de programao,
ou seja, o pseudocdigo a forma de representao que mais se assemelha s linguagens utilizadas
na programao de computadores. Na direo inversa, h uma maior liberdade na elaborao de
algoritmos, aumentando, assim, a capacidade de express-los.
No prximo captulo abordaremos o processo de traduo de um programa escrito em uma linguagem de alto nvel, os paradigmas de programao existentes, e introduziremos os conceitos bsicos
da programao de computadores. Alm disso, voc ter o primeiro contato com a linguagem de
programao a ser estudada neste livro: a linguagem C.

1.6

Atividades

1. Explique, com suas prprias palavras, o que algoritmo.


2. Rotineiramente, usamos algoritmos para as mais diversas tarefas. Cite trs algoritmos que
podemos encontrar no dia a dia.
3. Em que consiste a caracterstica de efetividade de um algoritmo?
4. Suponha que o quarto passo de um determinado algoritmo ordene que a execuo retorne ao
primeiro. Qual caracterstica no est sendo satisfeita por esse algoritmo?
5. Discorra sobre as formas de representao de algoritmos mais comuns, destacando suas vantagens e desvantagens.
6. Suponha que voc foi premiado com um rob capaz de auxili-lo nas tarefas domsticas. Antes
que execute determinada atividade, voc precisa instru-lo corretamente atravs de um algoritmo especfico. Sabendo disso, escreva algoritmos, em linguagem natural, para ensin-lo a
realizar cada uma das tarefas abaixo:
a. Trocar a lmpada do seu quarto.
b. Trocar o pneu do seu carro.

Introduo Programao

10 / 10

c. Fazer uma vitamina de banana com aa.


d. Lavar e secar os pratos.
e. Calcular quanto voc precisar tirar na terceira nota para passar por mdia em Introduo
Programao.
7. Escreva um algoritmo, utilizando fluxograma, que receba como entrada o peso e altura de uma
pessoa, calcule seu IMC (ndice de Massa Corprea) e exiba sua situao, segundo os seguinte
critrio:
Se o IMC ? 25, a pessoa est acima de seu peso, caso contrrio, est abaixo. Onde o IMC =
(Peso)/(Altura2 )
8. Usando fluxograma, faa um algoritmo que receba como entrada a idade de uma pessoa expressa em anos, meses e dias (Ateno: so 3 entradas) e mostre-a expressa apenas em dias.
Considere anos de 365 dias e meses de 30 dias.
9. Considere as instrues armazenadas na memria a seguir:

Considerando que a instruo inicial se encontra no endereo 0 (zero) e as posies 8, 9 e 10


correspondem a x, y e z, respectivamente, explique como funciona a execuo das instrues
acima, segundo a arquitetura de von Neumann. Antes da execuo da instruo de endereo 2
(z=x/y + z), a posio de memria referente a z possua o valor 1 (um).
10. Escreva um algoritmo, em pseudocdigo, que receba como entrada a base e a altura de um
tringulo, calcule e exiba sua rea.

Você também pode gostar