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

Introduo Programao i

Introduo Programao
Ed. v1.0
Introduo Programao ii
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 especicada 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 ns 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/ .
Introduo Programao iii
REVISION HISTORY
NUMBER DATE DESCRIPTION NAME
v1.0 Maro 2013 Primeira verso do livro Bruno Jefferson
de Sousa
Introduo Programao iv
Sumrio
1 Algoritmos 1
1.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 O que um algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Caractersticas de um algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Formas de representao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1 Descrio Narrativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.2 Fluxograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.3 Linguagem Algortmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Recapitulando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Introduo Programao 1 / 10
Captulo 1
Algoritmos
OBJETIVOS DO CAPTULO
Ao nal deste captulo voc dever ser capaz de:
Denir 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. Enm, 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, sobre-
tudo, a relao entre eles e a programao de computadores.
1.1 Introduo
Fonte inspiradora de livros e lmes, 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. Enten-
dendo tal linguagem, conseguiu rapidamente ganhar a conana 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 par-
ticular. 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 voca-
bulrio 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 cosm-
ticos 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 denir algoritmo como uma sequncia nita, 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:
DEFINIO DE ALGORTIMO
Um algoritmo um conjunto no ambguo e ordenado de passos executveis que denem
um processo nito.
O exemplo a seguir mostra como pode ser elaborado um algoritmo para realizar uma atividade com a
qual lidamos corriqueiramente:
ALGORITMO 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 m de encher uma terceira vasilha com seis litros
de gua. A gura 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:
ALGORITMO 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, especicamente, possuem as seguintes caractersticas:
Denio
Os passos de um algoritmo devem ser bem denidos, objetivando a clareza e evitando ambigui-
dades.
Finitude
Um algoritmo deve chegar ao seu m aps um nmero nito de passos.
Efetividade
Um algoritmo deve ser efetivo, ou seja, suas operaes devem ser bsicas o suciente para que
possam, em princpio, serem executadas de maneira exata e em um tempo nito.
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 5 / 10
1.4.1 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 signicados, dependendo do contexto no qual so utilizadas. Emcontrapartida,
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]) reetem 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 uxogramas.
Figura 1.3: Formas geomtricas utilizadas em uxogramas
A vantagem de se fazer uso dos uxogramas est na facilidade de compreend-los. Descries de
algoritmos mediante formas grcas so mais facilmente compreendidas do que descries que en-
volvem apenas textos. Alm do mais, os uxogramas possuem um padro mundial no que se refere
sua simbologia, tornando sua utilizao independente das peculiaridades das linguagens naturais.
Para exemplicar o uso de uxogramas, a Figura 1.4 [6] mostra um algoritmo para calcular a mdia
nal de um aluno com base em suas notas e classic-lo como aprovado ou reprovado. Analisando-a
com mais cuidado, possvel perceber que os uxogramas tendem a crescer bastante quando descre-
vem algoritmos constitudos de muitos passos, o que diculta tanto sua construo como sua visua-
lizao. 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 inuncia 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 cam 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. Decodica 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 mencio-
nado, 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 correspon-
dentes 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 decodicao 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 decodicada, 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 decodicao, 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:
ALGORITMO 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 denem a forma como os dados so processa-
dos 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 denio 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 pseudoc-
digo:
1 ALGORITMO
2 DECLARE nota1, nota2, M : NUMRICO
3 LEIA nota1
4 LEIA nota2
5 M (nota1 + nota2) / 2
6 SE M >= 7.0 ENTO
7 ESCREVA Aprovado
8 SENO
9 ESCREVA Reprovado
10 FIM-SE
11 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 exveis 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 nalizar, a linha 6 apresenta uma estrutura de
controle condicional essencial para as linguagens de programao. Operaes de atribuio, expres-
ses 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
uxogramas, a desvantagem ca por conta da limitao do seu poder de expresso, devido s regras
impostas para a elaborao das instrues.
Introduo Programao 9 / 10
1.5 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 mon-
tagem, enm, 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 computa-
dores, devem ser claros, ter um nmero nito de passos, e que estes devem ser simples o suciente
para serem executados de maneira exata e em um tempo nito. Alm disso, os algoritmos computa-
cionais devem possuir zero ou mais entradas e uma ou mais sadas.
As formas de representao de algoritmos mais comuns so a linguagem algortmica, o uxograma 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 lingua-
gem 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 vanta-
gens 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 algo-
ritmo especco. 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 uxograma, 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)/(Altura
2
)
8. Usando uxograma, faa um algoritmo que receba como entrada a idade de uma pessoa ex-
pressa 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.

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