Username: Password:

.Algoritmos e Linguagens

A diferença entre um algoritmo e um programa é semelhante à diferença que existe entre uma ideia e a sua descrição numa lingua natural (Português, Italiano, Inglês etc ...). O programador deve encontrar um algoritmo que resolve o seu problema e implementa-lo usando uma linguagem de programação.

Durante os últimos 60 anos muitas linguagens de programação foram inventadas. As primeiras eram marcadas pelas limitações dos computadores da altura. Hoje em dia, a procura de linguagens de programação que permitem a implementação de algortimos cada vez mais complexos continua. Apesar das numerosas tentativas, ainda não foi inventada a linguagem de programação ideal. Todas as linguagens de programação apresentam idiossincrasias, qualidades e defeitos próprios. Tal como não existe uma linguagem de programação ideal, não existe uma linguagem de programação ideal para aprender a programar.

Mesmo que existisse uma linguagem ideal (ou superior às outras) para aprender a programar, seria provavelmente bastante diferente das linguagens de programação usadas no Mundo Real e esta diferença seria o seu principal defeito. Aprender a programar consiste (entre outras coisas) em aprender a lidar com essas idiossincrasias.

Um algoritmo é portanto um conjunto de operações lógicas para a realização de uma acção particular. O termo é usado habitualmente no contexto da matemática ou da informática mas existe noutros domínios. Por exemplo, uma receita de cozinha assemelha-se a um algoritmo. Vejamos agora como fazer um ovo estrelado:

(missing image) Material necessário:

  • uma frigideira.
  • um ovo fresco.
  • manteiga.
  • uma colher de sopa.
  • sal.
  • pimenta.
  1. Ponha a frigideira ao lume.
  2. Adicione a manteiga. Sinta-se livre para ser bastante generoso: deve abranger todo o fundo da frigideira.
  3. Quando a manteiga estiver completamente derretida, quebre o ovo na panela. Não ponha a casca na panela !
  4. Cubra a panela. Dê uma olhada de vez em quando: deixar de cozinhar quando apenas a superfície é um líquido branco.
  5. Adicione um pouco de sal e pimenta. Bom apetite !
Consultando qualquer livro de culinária pode constatar que uma receita é composta geralmente de uma lista de ingredientes seguida da descrição dos passos necessários à realização do prato.

Voltando à programação vamos descrever um primeiro algoritmo: o calculo do índice de massa corporal (IMC). O IMC é um índice definido pela Organização Mundial da Saúde para avaliar os riscos ligados ao excesso de peso. O algoritmo para calcular o IMC de uma pessoa é simples:

  1. medir a altura da pessoa.
  2. medir o seu peso.
  3. IMC = peso / (altura x altura)

O IMC de uma pessoa que mede 1.78m e pesa 75kg é: 75 / (1.78 x 1.78) = 23.6. Uma transcrição possível deste algoritmo em linguagem C será:

1 #include <stdio.h>
2
3 int main (void) {
4   printf("Indice de Massa Corporal: %f\n", 75.0 / (1.78 * 1.78));
5   return 0;
6 }
7
imc1.c A execução do programa produz o seguinte resultado:
> imc1
Indice de Massa Corporal: 23.671254

Ainda não é altura de explicar cada linha do programa em pormenor mas já terá percebido que o resultado foi produzido pela instrução da linha 4. Nesta linha a instrução printf é responsável por escrever o resultado no ecrã. O valor do IMC resulta do cálculo da expressão 75.0 / (1.78 * 1.78). Até agora, vimos que um programa é uma sequência de instruções que traduzem um algoritmo numa linguagem de programação.

Qualquer que seja a linguagem de programação o programa será sempre escrito com o auxilio de uma ferramenta produz ficheiros de texto por exemplo o Notepad nos sistemas windows, o emacs ou o gedit nos sistemas Linux. Essas ferramentas não devem ser confundidas com applicações de processamento de texto (por exemplo Word) que têm como objectivo de produzir documentos que serão impressos (cartas, relatórios etc...). Encontrará mais informações sobre a edição de programas aqui.

O ficheiro que contém o programa é chamado «ficheiro fonte».

Mais uma vez, sem entrar nos pormenores podemos ver que a linha 3 é responsável por imprimmir o resultado no ecrã. No caso da linguagem java, o compilador usado chama-se javac. A compilação e a execução do programa são executadas da seguinte maneira:

> javac imc1.java
> java imc1
Indice de Massa Corporal: 23.671253629592222

Regras de Sintaxe

As linguas naturais têm as suas regras gramaticais que são muitas vezes ambíguas e comportem quase sempre excepções. As linguagens de programação obdecem à regras sintácticas rígidas cujo principal benéficio é a ausência de ambiguidades, tornando possível a análise automática de programas (por computadores). Desde a invenção das primeiras linguagens de programação, as regras sintáctias foram sempre descritas formalmente usando uma linguagem especialisada para a descrição da síntaxe. Por sua vez esta linguagem obdece à regras sintácticas ! É o objectivo desta secção descrever esta linguagem de forma a poder usa-la mais tarde para definir a síntaxe das instruções da linguagem C.

Uma das notações as mais usadas para descrever a síntaxe de uma linguagem de programação é a notação BNF (Backus-Naur Form dos nomes dos seus inventores: John Backus e Peter Naur). Para ilustar esta notação vamos imaginar uma linguagem cujas frases são compostas por um grupo nominal, um verbo e um outro grupo nominal. Esta linguagem poderá ser descrita na notação BNF assim:

<frase> ::= <grupo nominal> <verbo> <grupo nominal>
<frase> é o conceito mais geral da linguagem, descreve todas as sequências de caracteres que podem ser escritas. <grupo nominal> e <verbo> são outros conceitos da linguagem que devem ser definidos. O <grupo nominal> será definido como um artigo seguido de um nome pela regra:
<grupo nominal> ::= <artigo> <nome>
Como pode ver o ::= separa um conceito da sua definição. A definição da linguagem é completa apenas quando todos os conceitos saõ definidos:
<artigo> ::= "a" | "o" | "as" | "os"

Esta regra define um artigo como podendo ser ou a ou o ou as ou os (o símbolo | define uma alternativa). As áspas servem para assinalar as palavras da linguagem e não devem ser confundidos com os conceitos que aparecem entre < e >. A designação correcta para as «palavras» e os «conceitos» da linguagem são os símbolos terminais e os símbolos não terminais, respectivamente. Esta linguagem imaginária fica completa com as seguintes definições:

<nome> ::= "gato" | "cão" | "rato" | "dono" | "maçã" | "menina"
<verbo> ::= "come" | "passea"

Aqui estão alguns exemplos de frases desta linguagem :

o gato come o rato
o dono passea o cão
a menina come a maçã
Esta linguagem simples dá uma oportunidade para ilustrar os diferentes aspectos que surgem na análise de linguagens. As três frases anteriores são correctas e têm sentido. As seguintes frases são também correctas de um ponto de vista sintático :
o cão come a casa
as cão come as casa
simplesmente porque respeitam as regras enunciadas mais em cima. Esses exemplos mostram a diferença que existe entre a sintaxe e a semântica. A notação BNF transcreve apenas a síntaxe da linguagem. As regras semânticas devem ser descritas por outros meios.