.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:
Material necessário:
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:
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á:
imc1.c A execução do programa produz o seguinte resultado: 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:
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> é 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: ::= separa um conceito da sua definição. A definição da linguagem é completa apenas quando todos os conceitos saõ definidos: 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:
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 casasimplesmente 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.