Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos - Introdução
Algoritmos - Introdução
Teoria e Prtica
Marco Medina
Cristina Fertig
Novatec Editora
Captulo 1
Introduo
Neste captulo, faremos uma introduo geral sobre algoritmos, suas aplicaes e alguns
exemplos reais. Mostraremos as diferenas entre algoritmo e programa e tambm explicaremos o que so compiladores e montadores. Em seguida, descreveremos algumas formas
populares de estruturao de algoritmos e apresentaremos a notao que adotaremos.
1.1 Conceituao
Muitas definies podem ser dadas palavra algoritmo. Atualmente, tem-se associado
algoritmo computao, mas este no um termo restrito computao ou que tenha
nascido com ela. Na realidade, a palavra algoritmo vem do nome do matemtico iraniano
Abu Abdullah Mohammad Ibn Musa al-Khawarizmi, nascido em Khawarizm (Kheva), ao
sul do mar Aral, que viveu no sculo XVII. A influncia de Khawarizmi no crescimento
da cincia em geral, particularmente na matemtica, astronomia e geografia, bastante
reconhecida. Tambm considerado o fundador da lgebra, cujo nome derivou de seu
livro Al-Jabr wa-al-Muqabilah. Mais informaes a respeito de al-Khawarizmi podem
ser encontradas na bibliografia (apndice B).
O termo algoritmo tambm utilizado em outras reas, como engenharia, administrao,
entre outras. Vejamos algumas definies de algoritmo:
Um procedimento passo a passo para a soluo de um problema.
Uma seqncia detalhada de aes a serem executadas para realizar alguma tarefa.
Assim, as aes que so necessrias para se fazer um balancete, por exemplo, constituem
um algoritmo. Outro exemplo clssico de algoritmo a receita culinria. Veja o exemplo
a seguir de um bolo de chocolate:
Ingredientes
4 xcaras (ch) de farinha de trigo.
13
Algoritmos e Programao
14
2 xcaras (ch) de acar cristal.
2 xcaras (ch) de achocolatado.
2 colheres (sopa) de fermento em p.
1 pitada de sal.
3 ovos.
2 xcaras (ch) de gua morna.
1 xcara (ch) de leo.
leo para untar.
Farinha de trigo para polvilhar.
Modo de preparo
Numa vasilha, misture 4 xcaras (ch) de farinha de trigo, 2 xcaras (ch) de acar
cristal, 2 xcaras (ch) de achocolatado, 2 colheres (sopa) de fermento em p e 1
pitada de sal. Junte 3 ovos, 2 xcaras (ch) de gua morna e 1 xcara (ch) de leo.
Misture bem. Unte uma forma retangular de 25 cm x 37 cm com leo e polvilhe
farinha de trigo e despeje a massa. Asse em temperatura mdia (de 170C a 180C)
por 30 minutos.
A receita tem todas as caractersticas de um algoritmo. Ela tem uma seqncia detalhada de passos, descrita no modo de preparo. Apresenta a tarefa a ser realizada,
que no caso o bolo de chocolate. Alm disto, podemos identificar na receita
entradas (no caso os ingredientes) e uma sada, que o prprio bolo.
Poderamos, ento, nos perguntar por que a palavra algoritmo ficou to associada
computao? Para compreendermos melhor os motivos, preciso entender,
mesmo que superficialmente, o funcionamento dos computadores.
Captulo 1 Introduo
UCP Unidade
Central de
Processamento
15
Barramento
Dispositivos
Entrada/Sada
Memria
Conexes
externas
Teclado
Mouse
Monitor
Impressora
etc.
Algoritmos e Programao
16
Para que um programa escrito em linguagem de montagem possa ser executado pelo
computador, necessrio que seu cdigo seja traduzido para o cdigo de mquina. Isto
feito por meio de um programa chamado assembler. A figura 1.2 apresenta o esquema
de traduo feita por um assembler.
Cdigo em
linguagem de
montagem
Assembler
Cdigo em
linguagem
de mquina
Compilador
Cdigo em
linguagem
de mquina
Captulo 1 Introduo
Cdigo-fonte em
linguagem
alto nvel
17
Memria
Interpretador
Traduo de cada
instruo na fase
de execuo do
programa
Algoritmos e Programao
18
Cdigo-fonte
Compilador
(etapa I)
Memria
Cdigo-objeto
Compilador
(etapa II)
Cdigo-objeto
executvel
Biblioteca
do sistema
operacional
Captulo 1 Introduo
19
cdigo ser traduzido em tempo real para a linguagem proprietria e executado. A traduo em tempo real pode ser entendida como uma espcie de interpretao. Portanto,
difcil afirmar que a linguagem de programao Java seja uma linguagem puramente
compilada ou interpretada.
-QUINA "
-QUINA !
Essa caracterstica da linguagem Java faz com que esta seja extremamente interessante
para o uso na Internet, visto que o cdigo Java que esteja presente em um site poder
ser executado em qualquer plataforma que contenha a JVM instalada. Normalmente,
os browsers j contm uma JVM para que possam trabalhar com sites que contenham
programas Java. A figura 1.6 apresenta as etapas necessrias para a execuo de um
programa Java.
Cdigo-fonte
Java
Compilador
Memria
Bytecode
Algoritmos e Programao
20
no contexto. Pessoas fazem tudo isso (pelo menos na maior parte das vezes) sem sequer
notar. Por isso, a linguagem de programao precisa ter algumas caractersticas que a
linguagem natural no tem. Veja-as a seguir:
Rigidez sinttica: O compilador um tradutor relativamente limitado, que s consegue
fazer as tradues sobre um idioma bastante limitado, com construes muito bem
definidas. Apesar de encontrarmos palavras pertencentes linguagem natural, elas
no sero usadas com a mesma liberdade.
Rigidez semntica: O computador definitivamente no pode lidar com ambigidades.
Por isso, no adianta o programador ter uma inteno se no conseguir exprimi-la
de forma exata. Podemos dizer que o computador um timo cumpridor de ordens,
porm no tem idia de quais ordens est cumprindo, nem o contexto em que essas
aes esto inseridas. Diferentemente da linguagem de programao, a linguagem
natural apresenta ambigidades. Veja o exemplo:
Essa frase curta pode ser interpretada de pelo menos trs maneiras:
1. A velhinha ouviu o barulho produzido pela janela.
2. A velhinha estava junto janela e ouviu o barulho.
3. A velhinha ouviu o barulho que veio atravs da janela.
Qualquer mquina seria incapaz de interpretar o que realmente est acontecendo, mesmo
que o contexto pudesse ajudar. Por isso, a rigidez semntica to crucial e conseqentemente a linguagem natural no pode ser utilizada como ferramenta para a construo
de algoritmos para computador.
A necessidade desses quesitos faz com que a linguagem natural no seja a escolha
adequada para a escrita de algoritmos para computador. A segunda alternativa seria
escrever o algoritmo diretamente na linguagem de programao. Porm, a rigidez sinttica e a semntica tornam a escrita de algoritmos diretamente em uma linguagem de
programao real, mesmo de alto nvel, uma tarefa bastante difcil, pois as pessoas no
esto acostumadas a essas exigncias para expressar ordens. Muitas vezes, mesmo em
linguagem natural, esta no uma tarefa trivial.
Realmente chegamos a um dilema: a linguagem natural no adequada porque no tem
rigidez sinttica e semntica e a linguagem de programao no adequada justamente
por ter essas caractersticas. Parece claro que teremos de encontrar uma terceira alternativa para expressarmos algoritmos para computador.
Na realidade, j existem algumas alternativas. Apresentaremos duas delas: fluxograma
e pseudocdigo.
Captulo 1 Introduo
21
1.3.2 Fluxograma
Os fluxogramas apresentam os algoritmos de forma grfica. So formados de caixas que
contm as instrues a serem executadas. Tais caixas so ligadas por setas que indicam
o fluxo das aes. Algumas caixas especiais indicam a possibilidade de o fluxo seguir
caminhos distintos, dependendo de certas situaes que podem ocorrer durante a
execuo do algoritmo. Tambm h representaes para o incio do algoritmo e para o
seu final, para que o fluxo do algoritmo possa ser determinado do seu princpio at o
seu trmino. A figura 1.7 apresenta o exemplo de um algoritmo na forma de fluxograma
para a escolha e apresentao do maior valor entre dois nmeros distintos introduzidos
pelo usurio.
De fato, a representao de algoritmos por meio de fluxogramas tem uma srie de vantagens. A primeira a facilidade proporcionada para a compreenso do funcionamento
do algoritmo, mesmo para os leigos. Algumas pessoas tambm se adaptam bem ao
desenvolvimento de algoritmos sob essa representao.
Entretanto, a representao grfica no prtica. A correo de uma linha de pensamento pode implicar a reconstruo de muitas instrues. Alm disso, a construo de
algoritmos mais complexos e longos pode se tornar extremamente trabalhosa, ocupando
vrias pginas. Essas caractersticas acabam tornando a utilizao do fluxograma desaconselhvel como ferramenta principal para o desenvolvimento de algoritmos. Todavia,
a utilizao de fluxogramas continua sendo til para apresentao de algoritmos em um
nvel de abstrao alto, sem entrar nos detalhes de sua implementao.
incio
Sim
No
maior num2
maior num1
escreva maior
fim
22
Algoritmos e Programao
1.3.3 Pseudocdigo
Algoritmos podem ser representados em cdigo diretamente em linguagem de programao. Como j vimos no item 1.3.1, a implementao de algoritmos diretamente em
uma linguagem de programao apresenta algumas desvantagens. Porm, fato que
temos algumas vantagens como o cdigo pronto para a execuo (mesmo que seja aps
a compilao) e, o mais importante, a rigidez sinttica e a semntica, que so imprescindveis para que o algoritmo possa ser lido e executado pelo computador.
O pseudocdigo visa a trazer o mximo possvel desses benefcios, tentando diminuir
o nus da utilizao da linguagem de programao. Abre-se mo do cdigo compilvel
para se ter um cdigo menos rgido, menos dependente das peculiaridades que todo
compilador tem. Ao contrrio da linguagem de programao, o pseudocdigo tem um
grau de rigidez sinttica intermediria entre as linguagens natural e de programao.
Alm disso, podemos utilizar o idioma nativo. Em geral, linguagens de programao
so construdas utilizando palavras reservadas em ingls, uma espcie de padro de
mercado.
Porm, o pseudocdigo deve manter, tanto quanto possvel, a rigidez semntica. A idia
que o pseudocdigo seja um passo intermedirio entre a linguagem natural, a que os
iniciantes esto acostumados, e a linguagem de programao de alto nvel.
Aps a construo do algoritmo em pseudocdigo, necessrio que mais um passo seja
executado para que o algoritmo possa ser compilado e posteriormente executado. a
transformao do pseudocdigo em cdigo de alguma linguagem de programao real.
O pseudocdigo independente do compilador e pode ser traduzido de uma forma
quase direta para uma gama de linguagens de programao.
Um pseudocdigo bastante conhecido no Brasil o Portugol, que apresenta uma aceitao grande e tem suas razes para isso. bastante simples e atende s caractersticas
necessrias no que concerne rigidez semntica e sinttica. Entretanto, o Portugol
opta por algumas construes em detrimento de outras que consideramos interessantes
para o passo posterior, que a transformao do pseudocdigo em programa. A questo principal a ausncia de blocos genricos de comandos, que veremos no captulo
2. Tais construes esto presentes na maior parte das linguagens de programao de
alto nvel e so importantes para que o programador iniciante fique acostumado com
esse tipo de estruturao.
Para representarmos nossos algoritmos, utilizaremos uma adaptao do Portugol, que
incluir algumas construes e mecanismos que julgamos adequados para o melhor
aprendizado do programador, procurando facilitar o processo de construo do algoritmo.
Veja a seguir um exemplo de pseudocdigo, referente ao fluxograma mostrado na
figura 1.7.
Captulo 1 Introduo
23
Algoritmo Maior
var num1, num2, maior: inteiro;
incio
leia(num1, num2);
maior num1;
maior num2;
seno
escreva(maior);
fim