You are on page 1of 9

Algortmo

Seo dedicada a soluo de problemas rotineiros de programao, assim como explicao das
estruturas de programao.

O que um algoritmo?
Um algoritmo caracterizado por qualquer forma de resolver um problema de forma procedural a
partir de padres e regras. Veja um exemplo:
Cinco vezes cinco igual ao nmero cinco somado cinco vezes.
5X5=5+5+5+5+5
Isso, de forma simples, um algoritmo.

Algoritmo computacional
O algoritmo computacional se extende dessa idia. um programa que realiza procedimentos
para solucionar um problema.
A diferena est na forma que isso deve ser feito. Algoritmos computacionais usam estruturas que
ajudam o processador a chegar a um determinado resultado. Ou seja, o programador tem que
realmente expressar como chegar ao resultado passo-a-passo, pois no existe o bvio para o
computador.
Para isso, define-se que para criar um algoritmo (programa) apenas necessrio trs estruturas:
Estrutura de procedimento
Estrutura seletiva
Estrutura repetitiva
E, para isso, podemos tambm usar alguns paradigmas dos dias atuais, como a programao
orientada a eventos e a programao orientada a objetos.

Tipos de dados
Em algoritmos computacionais muitas vezes temos que tratar com tipos de dados.
Os tipos de dados influenciam na forma como o algoritmo ir trabalhar, o desempenho do
algoritmo e o seu consumo de memria.
Linguagens de programao desktop como C, C++, Visual Basic, Java entre outros so o que
chamamos de linguagens tipadas, pois todo dado deve ter seu tipo definido. Mas, o mesmo no se
aplica a linguagens de script, geralmente, empregadas em programao web como JavaScript,
ASP ou PHP, embora, os dados tratados pelos scripts seguem a mesma definio de tipagem de
dados de linguagens tipadas.
Dentre os tipos de dados, podemos destacar trs tipos bases: nmeros, caracteres e booleanos.

Nmeros
Em tipos de numricos podemos trabalhar de duas formas, ou com nmeros inteiros ou com
nmeros decimais.
Os dados mais simples de trabalhar so os inteiros, pois, geralmente, no exigem muito
processamento, nem muita memria para serem armazenados. Toda linguagem de programao
capaz de lidar com nmeros inteiros. Por questes de performance, h linguagens mais modernas
que dividem os nmeros inteiros em tipos menores ou maiores para se adequar exatamente ao
dado que ir receber. Java, por exemplo, tem 4 tipos diferentes de inteiros.
Os nmeros decimais so descritos no mundo da programao como flutuantes ou nmeros de
ponto flutuante. Como na maioria dos computadores no h um processador prprio para
aritmtica de ponto flutuante, isso fica por conta da prpria linguagem de programao. Nmeros
decimais ou de ponto flutuante consomem mais memria, porm, nos possibilita clculos com
maiores precises que no so possveis de realizar com nmeros inteiros.

Caracteres
Os caracteres so a forma mais bsica de representao. A codificao da letra varia de linguagem
para linguagem, o que afeta consideravelmente seu alcance de representao. Por exemplo, em C
muitos caracteres, principalmente orientais, no podem ser representados e outros caracteres,
como os de origem latina, so dificilmente representados. Na linguagem de marcao de texto,
como so o HTML, XML, CSS entre outros, podemos inclusive escolher que tipo de codificao de
caracteres queremos utilizar (UTF-8, os vrios padres ISO diferentes, etc.).
Ainda falando em caracteres, podemos destacar tambm as cadeias de caracteres conhecidas
como strings. Linguagens de script ou com foco na web conseguem tratar com mais facilidade um
conjunto de caracteres em um nico endereo de memria (varivel).

Booleanos
Os tipos de dados booleanos so cruciais em qualquer algoritmo. Os dados booleanos baseiam-se
no bit para determinar uma condio, no qual, bit 1 true ou verdadeiro e bit 0 false ou falso.
O conceito da aritmtica booleana foi de suma importncia para o desenvolvimento
computacional, observando do ponto de vista que qualquer computador trabalha com pulsos
eltricos, portanto, apenas tem-se dois estados com pulso (1, ligado, ON, true e verdadeiro) ou
sem pulso (0, desligado, OFF, false e falso).

Fluxograma e pseudocdigo
Fluxogramas e pseudocdigos so formas simples e diagramadas de cdigo pronto. O objetivo de
um fluxograma ou pseudocdigo mostrar de antemo a lgica usada na soluo de um problema
(algoritmo).

Pseudocdigo
O pseudocdigo um cdigo simplrio, ou seja, no um cdigo real, mas um cdigo imaginrio
que lembra o cdigo de programao.
O pseudocdigo muito utilizado em cursos de programao e faculdades para apresentar a lgica
algortmica de forma mais simples, sem ter que se preocupar muito com o aspecto tcnico das
linguagens reais.
O pseudocdigo no segue um padro definido, portanto, qualquer um pode escrever seu
pseudocdigo da forma que bem entender desde que ele transmita a idia central da lgica da
programao. Por exemplo, abaixo esto dois pseudocdigos que descrevem o mesmo algoritmo:
pseudocdigo1

INICIO
entrada de dado : grava em VAR1
verificar var1 : letra ?
verdade : imprimir dado -> "Voc digitou uma letra"
falso : imprimir dado -> "Voc digitou um nmero"
FIM
pseudocdigo2

INICIO: procedimento
VARIVEIS var1
var1 <- entrada de dados:TECLADO
se (var1 letra) ento
imprimir dado:MONITOR -> "Voc digitou uma letra"
caso contrrio
imprimir dado:MONITOR -> "Voc digitou um nmero"
FIM: procedimento

Como podemos ver, ambos lembram a forma de programar, mas nenhum dos dois so linguagens
de programao reais. Porm, dessa forma evidencia seu maior ponto fraco que a falta de
portabilidade. Como qualquer um pode criar se prprio cdigo, nem sempre o outro entender.

Fluxograma
Fluxogramas tm o mesmo objetivo dos pseudocdigos, a nica diferena que os fluxogramas
so representaes grficas.
A vantagem principal dos fluxogramas que, diferentemente dos pseudocdigos, eles so
padronizados. Ou seja, cada smbolo representa uma ao especfica e sempre representar.
Um fluxograma usa linhas para ligar seus elementos, criando assim, um caminho que deve ser
seguido.

Abaixo est uma tabela com as representaes do fluxograma e o que so.

Processo

Processo Alternativo

Deciso

Dados

Processo Pr-definido

Armazenamento
Interno

Documento

Vrios Documentos

Terminao

Preparao

Entrada Manual

Operao Manual

Conector

Conector Fora de
Pgina

Carto

Fita Perfurada

Somador

Ou

Agrupar

Classificar

Extrair

Mesclar

Dados Armazenados

Atraso

Armazenamento de
Acesso Sequencial

Disco Magntico

Armazenamento de
Acesso Direto

Exibir

Apesar do nmero de representaes assustar a princpio, a maior parte das representaes so


utilizadas raramente ou no so utilizadas. Por exemplo, ns raramente - o mais provvel que
nunca - utilizaremos o smbolo fita perfurada, porque no so mais utilizadas aplicaes que
realmente necessitem de entrada de dados por fita perfurada como ocorria h 20 ou 30 anos
atrs. Porm, outros so utilizados com muito mais frequncia como o exibir, entrada manual,
processo e assim por diante.
Outra vantagem que os fluxogramas tm em relao aos pseudocdigos que existem programas
que reproduzem essas representaes de forma simples e intuitiva como, por exemplo, o Microsoft
Visio, o BizAgi Modeler e o open source Star UML.

Ento, vejamos abaixo a representao do pseudocdigo j utilizado nesta pgina no formato de


fluxograma.

Estrutura Seletiva
As estruturas seletivas so umas das estruturas base de qualquer linguagem de programao que
desempenha um papel importante no algoritmo. Essa estrutura responsvel pela tomada de
deciso de um programa, deixando-o mais "inteligente".
As estruturas seletivas se apiam no conceito booleano, no qual apenas dois resultados so
possveis: verdadeiro ou falso.
Geralmente, descritos como if e else em muitas linguagens de programao, sua sntase tambm
se assemelha muito.
Para a estrutura seletiva if determinar se algo verdadeiro ou falso, ela utiliza operadores
lgicos como maior (>), menor ou igual (), etc...
Dessa forma conseguimos o seguinte: SE comparao ENTO faa isso. Ilustrando isso usando
cdigos:
Java:

if (var1 > var2){


System.out.print("var1 maior que var2");
}
VBScript:

If var1 > var2 Then


Response.Write ("var1 maior que var2")
End If
O cdigo a ser executado ser sempre se a comparao de if for verdadeira, mas se quisermos
executar um cdigo especfico se if for falso, usamos uma segunda clusula que o caso
contrrio - o else.
O cdigo contido em else apenas executado se a comparao for falsa, portanto, no existe else
se antes no existir if.
Outro fator importante que dentro de else pode existir outras estruturas seletivas com if e else
criando um formato aninhado.
Sua sntase se assemelha a: SE comparao verdadeira ENTO faa isso CASO CONTRRIO faa
aquilo.
Para demonstrar o uso do else com outra estrutura seletiva aninhada, faremos um algoritmo que
determina se o usurio digitou um nmero ou uma letra e, se for uma letra, determinar se
maiscula ou minscula.

Estrutura de repetio
Juntamente com as estruturas seletivas, as estruturas de repetio ou iterao so de crucial
importncia para a programao do algoritmo.
As estruturas de repetio ou iterao nos possibilitam executar o mesmo trecho de cdigo vrias
vezes seguidas, enquanto um dado critrio no satisfeito.
As estruturas de repetio ou iterao so, comumente, dadas pelas palavras while ou for.
Qualquer estrutura, seja for ou while, funciona com 1 varivel que chamamos de sentinela. Essa
varivel ir ditar quando o programa dever sair da repetio e geralmente tem 3 caractersticas:
1. Qual valor esta varivel ir iniciar; 2. Como esta varivel ter seu valor modificado para que
chegue ao valor final; 3. Qual valor esta varivel deve atingir para que pare a repetio.
No caso, a varivel de controle ou sentinela sempre dever ter essas caractersticas ou poder
ocorrer um erro que chamamos de loop infinito. Isso ocorre por causa de erro de lgica, no qual a
varivel sentinela nunca chega ao seu resultado final. Para ilustrar, vamos imaginar o seguinte
cenrio:
Vamos criar um programa que mostre os mltiplos de trs de 0 a 10 da seguinte forma: a varivel
sentinela iniciar em 0, para cada volta dever ser somado o valor trs sentinela, e por fim,
determinaremos que a iterao deve ser executada enquanto a varivel sentinela for diferente de
10.
Se fizermos um teste simples e rpido, veremos que o programa nunca ir parar de repetir o
mesmo cdigo, porque a sentinela nunca ser 10.
Repetio

Valor sentinela

Comparao

Resultado

0 10

verdadeiro

3 10

verdadeiro

6 10

verdadeiro

9 10

verdadeiro

12

12 10

verdadeiro

15

15 10

verdadeiro

Portanto, importante prestarmos ateno na forma que usamos a comparao para determinar
quando o programa deve parar de dar voltas.

Por exemplo, utilizando o mesmo cenrio acima, bastaria que apenas modificssemos a forma de
comparao. Ao invs de utilizarmos o sinal de diferente, usaramos o sinal de menor. Vejamos:
Repetio

Valor Sentinela

Comparao

Resultado

0 < 10

verdadeiro

3 < 10

verdadeiro

6 < 10

verdadeiro

9 < 10

verdadeiro

12

12 < 10

falso

Vale ressaltar que o cdigo da iterao (repetio) s ser executado caso a comparao seja
verdadeira.

Operadores Lgicos
Os operadores lgicos so de suma importncia para muitas estruturas algortmicas,
principalmente, as estruturas base de programao como so as estruturas seletivas e as
estruturas de repetio.
Basicamente, os operadores lgicos se baseiam em tabelas chamadas de tabelas verdade que
mostram o resultado booleano (verdadeiro ou falso) de acordo com as comparaes ou
combinaes.
Os smbolos de comparaes variam um pouco de linguagem para linguagem, mas podemos
destacar dois grandes grupos - as linguagens baseadas em C e as linguagens baseadas em Visual
Basic - embora suas funes so sempre as mesmas.

Tabelas
Maior (>) - C: >; VB: >.
20 > 10

verdadeiro

20 > 20

falso

10 > 20

falso

Menor (<) - C: <; VB: <;


20 < 10

falso

20 < 20

falso

10 < 20

verdadeiro

Maior ou igual () - C: >=; VB: >=;


20 10

verdadeiro

20 20

verdadeiro

10 20

falso

Menor ou igual () - C: <=; VB: <=;


20 10

falso

20 20

verdadeiro

10 20

verdadeiro

Igual a (=) - C: ==; VB: =;


20 = 10

falso

20 = 20

verdadeiro

10 = 20

falso

Diferente de () - C: !=; VB: <>;


20 10

verdadeiro

20 20

falso

10 20

verdadeiro

Operadores lgicos de sentena


Os operadores lgicos de sentena servem para comparar uma combinao de outras
comparaes. Isso muito rotineiro em scripts SQL no qual temos que validar muitos critrios na
clusula WHERE do comando SELECT.
Aqui, novamente podemos destacar os dois grupos de linguagens baseadas em C e Visual Basic.
E - C: &&; VB: AND.
verdadeiro (E) verdadeiro

verdadeiro

verdadeiro (E) falso

falso

falso (E) verdadeiro

falso

falso (E) falso

falso

OU - C: ||; VB: OR.


verdadeiro (OU) verdadeiro

verdadeiro

verdadeiro (OU) falso

verdadeiro

falso (OU) verdadeiro

verdadeiro

falso (OU) falso

falso

OU EXCLUSIVO - C: ^; VB: XOR;


verdadeiro (EX_OR) verdadeiro

falso

verdadeiro (EX_OR) falso

verdadeiro

falso (EX_OR) verdadeiro

verdadeiro

falso (EX_OR) falso

falso

O que operao com mdulo?


Mdulo uma operao matemtica que utilizamos para obter o resto de uma diviso.
Mas, a questo : Para que necessitamos saber o resto de uma diviso?
Por mais que seja estranho ter que obter o resto de uma diviso, no mundo algortmico da
computao, isso faz muito sentido.
Existem muitos nmeros que podem ser descobertos por meio do resto de diviso como nmeros
primos, pares, mpares, etc.
S para dar um exemplo, um nmero sempre ser par se ele for divisvel por 2. Ou seja, se
dividirmos um nmero por 2 e o resto for 0, este nmero com certeza ser par.
Veja:

O fluxograma acima demonstra o seguinte: o usurio digita um nmero que ser gravado na
varivel nr. Depois, verificamos: se nr mdulo de 2 (o resto de nr dividido por 2) igual a 0. Se
for, ento mostrar na tela: nr par. Caso contrrio: nr mpar.