A um procedimento constituído de um conjunto de instruções bem definidas, executáveis por alguém, com o objetivo de resolver um problema, chama-se Algoritmo.
A grosso modo pode-se dizer que o homem faz todas as ações de seu dia a dia seguindo algoritmos. É óbvio que estes algoritmos quase nunca estão escritos explicitamente, mas com certeza estão muito bem gravados no subconsciente de quem os executa mecânica e inconscientemente.
Exemplos comuns de algoritmos são as receitas de culinária, os manuais de montagem ou de operação de máquinas, o algoritmo da prova dos nove, o algoritmo para extração de um dente.
Pelos exemplos dados acima parece claro que, quanto mais ignorante no assunto do problema a resolver for a pessoa que vai executar o algoritmo, tanto mais detalhadamente deverá ser este escrito.
EXEMPLO DE ALGORITMO
Suponha que uma pessoa, o Zé, nada conheça de geometria, embora saiba as 4 operações aritméticas. Ele deve ser guiado de forma a calcular a área de um anel circular formado por duas circunferências concêntricas, das quais se conhecem os raios.
SOLUÇÃO
ETAPA 1. Esquematização da Saída e da Entrada
A tarefa de construção de algoritmos deve ser iniciada pela análise do resultado desejado, isto é, do objetivo a alcançar que, neste estudo, será chamado simplesmente de saída do algoritmo. Em seguida se analisam os dados fornecidos para conseguir a saída, isto é, a matéria- prima à disposição, que chamar-se-á aqui de entrada do algoritmo.
SAÍDA
Suponha que se deseja uma saída constituída de uma folha na qual constem os dados e a resposta numérica. Além disso devem constar frases explicando o significado de cada número, conforme indicado na Figura I-3.
Figura I-3. Esquematização da saída desejada para o algoritmo Anel
OBSERVAÇÕES:
ENTRADA
Suponha que os raios das circunferências são fornecidos em uma folha, sendo dado primeiramente o raio da circunferência externa e em seguida, o da circunferência interna. Assim, a entrada terá a aparência da Figura I-4.
Figura I-4. Esquematização da ENTRADA do algoritmo ANEL.
OBSERVAÇÃO:
ETAPA 2. Definição dos Passos Gerais
Uma vez esquematizadas a saída e a entrada, pode-se passar à solução, que é primeiramente apenas delineada em passos gerais:
- Ler os dados fornecidos (entrada)
- Calcular a área do anel (processamento)
- Imprimir os resultados (saída)
ETAPA 3. Detalhamento de Cada Passo Geral
Nesta etapa explicita-se cada passo geral em instruções mais detalhadas, passíveis de serem executadas pelo Zé. Por exemplo, o passo "Calcular a área do anel" pode ser subdividido em:
Calcular a área da circunferência externa multiplicando o valor de seu raio ao quadrado por 3.1416 (= PI) e memorizar o resultado.
Calcular a área da circunferência interna, multiplicando o valor do seu raio ao quadrado por 3.1416 e memorizar o resultado.
Calcular a área do anel subtraindo da área da circunferência externa a área da circunferência interna.
ETAPA 4. Construção do Algoritmo
Suponha-se agora que em vez de memorizar cada resultado lido ou calculado, o Zé resolva guardá-lo em caixinhas, dando nomes a cada uma delas para saber o que tem em cada uma. Além desta nova consideração, desmembram-se também os passos "Ler os dados fornecidos" e "Imprimir os resultados", de modo a estarem de acordo com a entrada fornecida e com a saída projetada. Dando o nome anel ao algoritmo e reescrevendo de outro modo os passos de cálculo, tem-se:
ALGORITMO ANEL
- Leia o raio da circunferência externa e o da circunferência interna e armazene-os nas caixas de nomes RAIOEXT e RAIOINT respectivamente.
- Eleve o conteúdo da caixa de endereço RAIOEXT ao quadrado e multiplique este quadrado por 3.1416, armazenando o total na caixa de nome CIRCEXT.
- Eleve o conteúdo da caixa de endereço RAIOINT ao quadrado e multiplique este quadrado por 3.1416, armazenando o total na caixa de nome CIRCINT.
- Subtraia do conteúdo da caixa CIRCEXT o conteúdo da caixa CIRCINT e o resultado armazene na caixa ARANEL.
- Escreva a frase "raio externo...:" e após, o conteúdo da caixa RAIOEXT, seguido da unidade de comprimento "cm".
- Escreva a frase "RAIO INTERNO ...:" e após, o conteúdo da caixa RAIOINT, seguido da unidade de comprimento "cm".
- Escreva a frase "AREA DO ANEL ...:" e após, o conteúdo da caixa ARANEL, seguido da unidade de área "cm2".
ETAPA 5. Verificação
A Figura I-5 mostra como ficam os conteúdos do conjunto de caixas utilizados pelo Zé para armazenar os valores lidos e calculados, supondo que fossem 8 e 5 os valores dos raios externo e interno, respectivamente, fornecidos na entrada.
CAIXAS |
|||||
PASSO | RAIOEXT |
RAIOINT |
CIRCEXT |
CIRCINT |
ARANEL |
ANT. A 1 |
? |
? |
? |
? |
? |
1 |
8 |
5 |
? |
? |
? |
2 |
8 |
5 |
201 |
? |
? |
3 |
8 |
5 |
201 |
78,5 |
? |
4 |
8 |
5 |
201 |
78,5 |
122,5 |
5 |
8 |
5 |
201 |
78,5 |
122,5 |
6 |
8 |
5 |
201 |
78,5 |
122,5 |
7 |
8 |
5 |
201 |
78,5 |
122,5 |
Figura I-5. Conteúdo das caixas após a execução de cada passo do algoritmo ANEL.
OBSERVAÇÃO:
OUTRO EXEMPLO DE ALGORITMO
Fazer um algoritmo para que o Zé leia o nome, o número de horas trabalhadas e o salário de um operário e imprima seu contra-cheque.
ETAPA 1. Esquematização da Saída e da Entrada
A solução desta etapa deve gerar algo parecido com os esquemas de entrada e saída feitos na Figura I-6.
Figura I-6. Esquema da SAÍDA pretendida e da ENTRADA fornecida.
Supondo que, ficando mais esperto, o Zé dispense as etapas 2 e 3 e escreva diretamente a quarta, obterá um resultado semelhante ao abaixo.
ETAPA 2. Algoritmo Salário
Programa
Um algoritmo escrito em Linguagem Natural passa a ser chamado de Programa depois de convertido para uma linguagem aceita por um computador real.
Todos os trabalhos executados pelo computador são feitos seguindo programas. Um computador sem programas é comparável a uma televisão sem novelas, filmes, jornais, etc.: um móvel sem serventia.
Basicamente um computador só entende Linguagem Binária, ou também chamada Linguagem de Máquina (linguagem que só admite dois símbolos : zero e um). Todos os símbolos nele introduzidos (letras, dígitos e caracteres especiais, como vírgulas, aspas) são "digeridos" pela Unidade de Entrada e, armazenados em forma de um código construído por conjunto de zeros e uns, construído e digitados pelos próprios programadores!
Cada símbolo tem uma codificação própria e existem diversas codificações padronizadas para cada símbolo. Uma dessas codificações padronizadas chama-se ASCII (American Standard Code for Information Interchange) e nela um "A" é codificado em 01000001, um cifrão ($) em 00100100.
Imagine o trabalho de fornecer todos os símbolos utilizados para escrever esta página, em códigos binários, a um computador. Pois bem, foi assim que os primeiros programadores fizeram seus programas nos computadores da década de 50. Seus programas eram filas intermináveis de zeros e uns.
Para não trabalhar com linguagem binária construiram-se os códigos operacionais, mais fáceis de serem manipulados pelo homem, e deu-se ao próprio computador o trabalho de traduzi-los para a linguagem binária, única que ele entende. Assim um único código, com poucos símbolos, substitui uma fila de zeros e uns. Ao computador também competia retransformar estes códigos operacionais para os símbolos normais da linguagem humana, quando desse as respostas do processamento realizado.
Para melhorar ainda mais o seu lado o homem construiu a linguagem de montagem (ASSEMBLY), que, grosso modo, é a utilização de abreviações de palavras inglesas que indicam a função que se deseja do computador.
Exemplos destes códigos: MPY, JMP, ADD, que são abreviações das palavras inglesas multiply, jump, add, significando, respectivamente, multiplicar, saltar, somar. Novamente, montar com estas abreviações de palavras humanas os códigos de zeros e uns da linguagem de máquina, lógico, ficou mais uma vez a cargo do "mais fraco", o computador.
Passar de abreviações à utilização de palavras humanas completas foi só uma questao de tempo. Hoje só programas especiais são escritos em linguagem de montagem. São chamadas Linguagens de Alto Nível as linguagens que utilizam palavras completas e estruturas de expressão semelhantes ao linguajar humano, além de outros recursos importantes. Deve-se entender que "alto nível" não significa maior complexidade e sim o oposto, pois são linguagens mais distantes do linguajar binário, próprio de entes inanimados e desprovidos de inteligência, como são as máquinas e mais próximas do linguajar humano.
Por questões históricas relacionadas ao desenvolvimento dos computadores, estas linguagens geralmente utilizam termos ingleses. Este fato se constitui em uma vantagem, pois padroniza os termos, e um computador japonês, por exemplo, entenderá um alemão que "fale" a mesma linguagem.
A Figura I-7 resume o que foi dito acima. Note que quanto mais próximo se chega da linguagem humana corrente - e este é um dos objetivos mais perseguidos pela pesquisa em informática - mais trabalho terá o computador para levar os termos destas linguagens para zeros e uns. Os computadores vão ficando cada vez mais "felizes" à medida que se escreve programas em linguagens de níveis mais baixos. Se recebem programas em linguagem binária, eles ficam entusiasmados e como não precisam traduzir nenhum código, trabalham muito mais rapidamente, "em agradecimento".
Figura I-7. Níveis de linguagens