Professional Documents
Culture Documents
Algoritmos
Um algoritmo uma seqncia de instrues que permite realizar uma determinada tarefa.
O conceito de algoritmo tambm conhecido por outros nomes, entre eles podemos citar:
receitas, procedimentos ou tcnicas.
Recordando
Em geral,
Algoritmo uma seqncia finita de instrues necessrias para se
realizar uma determinada tarefa.
As instrues que compem o algoritmo so executadas uma de cada vez, seguindo-se a
ordem especificada na seqncia dada. Normalmente, inicia-se a execuo pela primeira
instruo, exceto quando outra instruo explicitamente indicada como sendo a primeira a
executar. As instrues devem ser sempre primitivas, no sentido de que cada uma delas
individualmente executvel pelo computador, no dependendo de interferncia de outros
agentes. No nosso caso, ao escrevermos nossos algoritmos na linguagem C, esta condio
estar automaticamente satisfeita, pois que a linguagem C s conta com instrues que j
so suficientemente primitivas. Mais especificamente, todas as instrues da linguagem C
so tratadas adequadamente pelo compilador C correspondente. Este ltimo, por sua vez,
gera uma seqencia de instrues que so primitivas para o computador em questo.
Durante a execuo do algoritmo, uma de suas instrues pode determinar que viole a
ordem seqencial das instrues, fazendo com que o ponto de execuo salte para outra
instruo que no seja a prxima instruo na seqncia do algoritmo. Por exemplo, pode
determinar a volta para a primeira instruo, ou determinar que se ignore a prxima
instruo passando a executar a segunda seguinte na seqncia. Normalmente, um salto est
associado ao teste de uma condio como, por exemplo, uma comparao entre dois
nmeros. Nesses casos, realizar o salto depender se a condio avaliada como verdadeira
ou falsa, nesse instante. Tambm possvel que uma instruo simplesmente indique um
salto para outra instruo, independente de condies a ela associadas.
Em algum momento, o algoritmo deve encontrar uma instruo sinalizando o fim da
execuo. Ou seja, o tempo total necessrio para terminar a execuo do algoritmo deve
sempre ser finito e, preferencialmente, dentro de um prazo razovel.
Para ser de utilidade, o algoritmo precisa produzir algum resultado, ou dado de sada. Caso
contrrio, o algoritmo no nos forneceria nenhuma informao nova. Por exemplo, ele
poderia calcular uma frmula complexa ou localizar alguma informao em um banco de
dados, e informar os resultados. Usualmente, algoritmos tambm aceitam dados como
entrada, que so usados para guiar sua execuo. Seno, ele sempre produziria os mesmos
dados de sada, ou respostas.
O MDC determinado realizando divises entre os dois nmeros. Caso a diviso resulte
em resto no nulo, a diviso novamente realizada, substituindo os nmeros anteriores pelo
divisor e pelo resto. Descrevendo essa idia como uma seqncia de passos elementares,
poderamos ficar com o seguinte algoritmo:
ALGORITMO:
1. Leia dois nmeros.
2. Divida o primeiro pelo segundo e guarde o resto.
3. Se o resto for 0 (zero),
ento escreva o segundo nmero e PARE.
4. Substitua o primeiro nmero pelo segundo.
5. Substitua o segundo nmero pelo resto da diviso.
6. Retorne ao passo 2.
Algoritmo 1 MDC (Euclides)
Vamos calcular o MDC entre 24 e 18, seguindo o algoritmo acima. esquerda est
indicado qual passo do algoritmo est sendo executado:
Ou seja, segundo o valor gerado pelo algoritmo, o MDC entre 21 e 15 3, o que est
correto.
Note que:
O algoritmo iniciou sua execuo pela primeira instruo (passo 1) e realizou um
nmero finito de instrues at encontrar a instruo PARE (num total de 13 passos
executados).
A entrada do algoritmo foram os nmeros 21 e 15. A sada foi o nmero 3.
Linguagem de Programao
Essas dificuldades no podem persistir quando se descreve um algoritmo para execuo em
um computador, pois este no tem a capacidade de desambiguar as instrues que no esto
claras, nem de executar instrues que no estejam pr-definidas em seus circuitos internos.
Para aliviar esses e outros problemas quando se descreve algoritmos que vo executar em
um computador, buscou-se outras formas para descrever algoritmos.
A primeira alternativa seria o uso de recursos grficos, como, por exemplo, diagramas. No
entanto, esta abordagem muito trabalhosa e difcil de automatizar para tratamento por um
computador. Assim, predominou uma forma mais prtica, as linguagens de programao.
Essas linguagens possuem um vocabulrio restrito (normalmente palavras do idioma ingls)
e vrias regras indicando vrias restries que devem ser obedecidas ao se escrever
algoritmos. Seguindo-se essas regras risca, idealmente, toda seqncia de instrues
descrever um algoritmo muito bem definido. De forma geral, uma linguagem de
programao impede que a pessoa escreva uma instruo de forma ambgua.
O computador
Os componentes que formam um computador podem ser classificados em duas categorias:
armazenamento e processamento. O primeiro grupo envolve componentes que guardam
dados a serem utilizados pelo computador. Alguns exemplos so: memrias, discos
magnticos, CDs e fitas magnticas. O segundo grupo formados por componentes capazes
de utilizar os dados armazenados no computador e realizar alguns tipos de operaes sobre
os mesmos, como localizar informaes de um cliente, gerar relatrios, calcular estatsticas
ou atualizar os dados armazenados.
Novos dados ou comandos para controlar o computador so obtidos atravs de dispositivos
de entrada (teclado, mouse, conexes de rede, scanner, cmera digital, etc). Outros
dispositivos, chamados dispositivos de sada, permitem ao computador divulgar dados
obtidos pelo processamento ou contidos no armazenamento. Exemplos so: monitor,
impressora, caixas de som.
Instrues de mquina
Para realizar operaes sobre os dados contidos nos dispositivos de armazenamento, o
processamento do computador segue um algoritmo, ou seja, uma seqncia finita de
instrues bem definidas. Em contraste com as instrues escritas em uma linguagem de
programao como C, porm, as instrues diretamente executadas pelo computador esto
escritas em outro dialeto, chamado de instrues, ou cdigo, de mquina. Essas instrues
so muito mais primitivas do que aquelas que podemos utilizar ao descrever algoritmos em
linguagens de programao tais como C. Infelizmente, o hardware do computador no
consegue executar diretamente as instrues escritas em C. Por outro lado, felizmente,
existem meios automticos de se converter uma seqncia de instrues escritas na
linguagem C para instrues de mquina. Dessa forma, os programadores no precisam
usar cdigo de mquina diretamente para descrever seus algoritmos, o que seria um esforo
muito mais severo e muito mais suscetvel a erros. Basta usar instrues da linguagem C e,
uma vez pronto o algoritmo, acionar os mecanismos automticos de converso.
O cdigo gerado um algoritmo que o computador consegue executar de forma montona
e repetitiva, porm em altssima velocidade, simulando as instrues que havamos escrito
na linguagem C.
Exemplo
A ttulo de ilustrao, apresentamos, nos slides que acompanham este texto, um algoritmo
para encontrar o MDC de dois nmeros escrito na linguagem de mquina especifica de um
computador com um processador Intel.
Note como as instrues so pouco intuitivas, pois no conseguem expressar diretamente
nossa capacidade de abstrair o problema. Ademais, cada instruo do algoritmo original
exige vrias instrues de mquina para que se produza o meso efeito, ou seja, o cdigo de
mquina uma descrio extremamente detalhista.
Para complicar ainda mais a descrio do algoritmo, o cdigo de mquina exige instrues
que s dizem respeito ao circuito eletrnico especfico de um tipo de processador. Ou seja,
alm do programador preocupar-se em escrever corretamente o algoritmo, ele forado a
planejar seu algoritmo respeitando as caractersticas internas de um determinado
processador. Muito provavelmente, o algoritmo em cdigo de mquina escrito para um
determinador processador no vai executar corretamente em outro processador.
Nveis de Abstrao
Durante esta introduo, apresentamos diversas opes para se descrever um algoritmo.
So elas: portugus, linguagem de programao, e cdigo de mquina.
Construo do Programa
A preparao de um programa, ou algoritmo, para execuo em um computador envolve
vrios passos. O objetivo final obter um arquivo com um cdigo de mquina que possa
ser diretamente interpretado pelo computador como um programa ou aplicao:
1. O programador deve, primeiro, elaborar um algoritmo considerando todas as
questes estudadas anteriormente, principalmente eficcia e correo. O
programador pode represent-lo da forma que preferir.
2. Em seguida, o programador descreve o mesmo algoritmo utilizando uma linguagem
de programao. A esta descrio damos o nome de cdigo fonte. Neste curso,
aprenderemos a linguagem C para este propsito.
3. Depois, necessrio utilizar um compilador para, automaticamente, traduzir o
programa escrito em C para um conjunto de instrues que formam o cdigo de
mquina. Para isso, temos vrios compiladores disponveis.
4. Depois de compilar o algoritmo, devemos test-lo, executando o cdigo de mquina
no computador.
Eventualmente, ao escrevermos o algoritmo numa linguagem de programao, cometemos
erros que sero acusados pelo compilador. Neste caso, voltamos ao passo 2 para corrigir o
cdigo fonte do algoritmo.
Durante a execuo do algoritmo, eventualmente, encontraremos algumas inconsistncias
no seu comportamento. A origem do erro exigir um retorno ao passo 1, para reprojetar o
algoritmo, ou tambm ao passo 2, para reescrever seu cdigo fonte.
Prticas de programao
Um bom programador, alm de preocupar-se com um cdigo fonte, descrevendo um
algoritmo de forma correta e eficiente, tambm considera que a aparncia visual do cdigo
fonte um fator importante para que outras pessoas possam compreender o cdigo sem
muito esforo.
Algumas prticas e estilos aqui recomendados facilitam o entendimento do cdigo fonte:
Linhas em branco. So ignoradas pelo compilador. Utilize para separar blocos de
instrues.
Espaos e tabulaes. So ignorados pelo compilador. Podem ser teis para formatar o
cdigo fonte. Recomenda-se escrever todas as instrues comeando na mesma coluna.
Utilize espaos em branco ou tabulaes para recuar as instrues um pouco para a direita,
diferenciando-as do cabealho do procedimento ou da funo. Note que a maioria dos
editores para a linguagem C fazem isso automaticamente para voc.
Uma instruo por linha. Atravs do emprego correto de pontuao, o compilador capaz
de reconhecer vrias instrues que apaecem uma mesma linha. Mesmo assim, recomenda-
se escrever apenas uma instruo por linha, terminando-a sempre com ponto e vrgula.
No decorrer deste curso, sero apresentadas outras boas prticas de escrita de cdigo fonte.