1. Noção de algoritmo Em português, a palavra algoritmo quer dizer operação ou processo de cálculo, entre outras definições possíveis (Dicionário Brasileiro de Língua Portuguesa, Mirador Internacional, Ed. 1977). Outra definição de algoritmo pode ser dada como a especificação da sequência ordenada de passos que deve ser seguida para a realização de uma tarefa, garantindo a sua repetibilidade. O algoritmo não é a solução do problema, mas sim o meio de obtê-la. Surgem então algumas questões: - Como se obterá a solução? R: Ela poderá ser obtida por meio de um método previamente conhecido, composto de operações que, conjuntamente, levam ao fim desejado a partir do estado observado. - Quem obterá a solução? R: Para nós, diremos que a solução será obtida por um computador uma ferramenta capaz de executar diversas vezes e muito rapidamente algumas tarefas bem definidas. O nosso objectivo não é fazer com que o computador trabalhe eternamente sobre um problema, talvez até insolúvel em virtude do algoritmo proposto; queremos que a solução seja obtida ou então que sejamos avisados pela máquina de que o problema é insolúvel. Assim, um algoritmo deve ter um número finito de operações executáveis, num determinado período de tempo, e que consiga detectar a viabilidade de resolver o problema proposto. Podemos então definir algoritmo da seguinte forma: um algoritmo é uma sequência ordenada e finita de operações bem definidas e eficazes que, quando executadas por um computador termina sempre num determinado período de tempo e que produz uma solução ou que indica que a solução não pode ser obtida. Pela definição anterior podemos constatar que há uma primeira instrução e uma última instrução, ou seja, um algoritmo tem um princípio e um fim. Ao contrário do que se possa pensar, o conceito de algoritmo não foi criado para satisfazer as necessidades da computação. Pelo contrário, a programação de computadores é apenas um dos campos de aplicação dos algoritmos. Na verdade, há inúmeros casos que podem exemplificar o uso (involuntário ou não) de algoritmos para a padronização do exercício de tarefas rotineiras. - 1 -
Devemos sempre ponderar se todos os algoritmos propostos para a solução de um dado problema são igualmente desejáveis. Quase sempre existe mais do que uma maneira de resolver um problema, e essa escolha é nossa. Qual será então a melhor das escolhas? Dados dois ou mais algoritmos para resolver o mesmo problema, é sensato escolher aquele que obtém uma solução no menor tempo possível e que utiliza o menor espaço para a representação dos dados do problema. Voltando ao contexto computacional, daqui em diante a atenção deste trabalho estará voltada para a automação de tarefas utilizando computadores. A automação é um processo em que a tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por máquinas. Para que a automação de uma tarefa seja bem sucedida é necessário que a máquina que passará a realizá-la seja capaz de desempenhar cada uma das etapas constituintes do processo a ser automatizado com eficiência, de modo a garantir a repetibilidade do mesmo. Assim, deve ser especificado com clareza e exactidão o que deve ser realizado em cada uma das fases do processo a ser automatizado, bem como a sequência em que estas fases devem ser realizadas. Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalhada passo a passo, numa forma compreensível pela máquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador não é mais do que um algoritmo escrito numa forma compreensível pelo computador, ou seja, um algoritmo que diz ao computador os passos específicos e a ordem pela qual devem ser executados. Assim, um algoritmo deve ter robustez, ou seja, um algoritmo deve contemplar todas as facetas possíveis do problema que queremos resolver. Ao elaborar um algoritmo não devemos deixar que nenhum detalhe provoque um mau funcionamento do mesmo. Se conseguirmos construir um algoritmo robusto, qualquer mudança no problema será controlada pelo algoritmo, ou seja, o algoritmo deve ser flexível para mudanças. Um algoritmo deve ser correcto, ou seja, deve dar uma solução para o problema e deve cumprir todos os requisitos propostos nos objectivos. Um algoritmo deve ser eficiente, isto é, deve conseguir chegar aos objectivos propostos utilizando a menor quantidade de recursos possíveis, ou seja, minimizando o uso da memória, de passos e de esforço humano. - 2 -
Diz-se que um algoritmo é eficaz quando atinge o objectivo principal, ou seja, a análise da resolução do problema realiza-se prioritariamente. Pode dar-se o caso que exista um algoritmo eficaz mas não eficiente, na medida do possível devemos tentar obter estes dois conceitos conjuntamente. Para conseguir resolver qualquer problema devem-se ter em atenção os seguintes passos: - Análise do problema neste ponto define-se o problema, compreende-se e analisa-se com todo o detalhe. - Desenho do algoritmo neste ponto deve-se elaborar um algoritmo que reflicta passo a passo a resolução do problema. - 3 -
2. Representação de algoritmos Existem diversas formas de representação de algoritmos, mas não há um consenso em relação à melhor delas. O critério utilizado para classificar hierarquicamente estas formas está directamente ligado ao nível de detalhe ou, inversamente, ao grau de abstracção oferecido. Algumas das formas de representação de algoritmos tratam os problemas apenas ao nível lógico, abstraindo-se de detalhes de implementação muitas vezes relacionados com uma linguagem de programação específica. Por outro lado, existem formas de representação de algoritmos que possuem uma maior riqueza de detalhes que muitas vezes acabam por obscurecer a ideia principal, o algoritmo, dificultando o seu entendimento. Das formas de representação de algoritmos mais conhecidas destacamos: - a narrativa descritiva ou descrição narrativa; - o fluxograma convencional; - o pseudocódigo, também conhecido como linguagem estruturada ou portugol. 2.1. Narrativa descritiva Nesta forma de representação os algoritmos são expressos directamente em linguagem natural. Vejamos os seguintes exemplos: - Receita de bolo: Misture os ingredientes Unte a forma com manteiga Despeje a mistura numa forma Se houver coco ralado então despeje sobre a mistura Leve a forma ao forno Enquanto não corar deixe a forma no forno Retire do forno Deixe arrefecer - Tomar banho: Entrar na casa de banho e tirar a roupa Abrir a torneira do chuveiro Entrar na água Ensaboar-se Fechar a torneira - 4 -
Sair da água Enxugar-se Vestir-se - Cálculo da média de um aluno: Obter as notas da primeira e da segunda provas Calcular a média aritmética entre as duas Se a média for maior ou igual que 9,5, o aluno foi aprovado, senão foi reprovado No entanto, na prática, esta representação é pouco usada porque o uso da linguagem natural dá muitas vezes oportunidade a más interpretações, ambiguidades e imprecisões. 2.2. Fluxograma convencional Um fluxograma é uma representação gráfica de algoritmos onde diferentes formas geométricas implicam distintas acções (instruções, comandos). Tal propriedade facilita o entendimento das ideias contidas nos algoritmos. Esta forma de representação de algoritmos é intermédia à descrição narrativa e ao pseudocódigo, pois é menos imprecisa que a primeira e, no entanto, não se preocupa com detalhes de implementação do programa, como, por exemplo, o tipo de variáveis utilizadas. Há vários padrões que definem as formas geométricas das figuras e que devem ser usados para representar cada um dos diversos tipos de instruções; contudo, nenhum deles sobressai em relação aos demais no que diz respeito à aceitação por parte dos usuários. Nos fluxogramas convencionais existe uma preocupação com os detalhes de nível físico da implementação do algoritmo. Por exemplo, diferentes figuras geométricas são adoptadas para representar operações de saída de dados realizadas em diferentes dispositivos, como uma fita magnética ou um monitor de vídeo. Segue-se uma lista das principais formas geométricas usadas nos fluxogramas. = Início e final do fluxograma = Indica o sentido do fluxo de dados e conecta os símbolos existentes ou = Operação de entrada de dados = Informações recebidas ou fornecidas de ou por um computador - 5 -
= Operação de saída de dados em impressora = Saída de dados em vídeo = Informações exibidas por dispositivos visuais, vídeo ou monitor = Utiliza-se para indicar cálculos (algoritmos) a efectuar, atribuições de valores = Bloco de decisão Em geral, um fluxograma resume-se a um único símbolo inicial, por onde começa a execução do algoritmo, e um ou mais símbolos finais, que são pontos onde a execução do algoritmo acaba. Partindo do símbolo inicial, há sempre um único caminho orientado para ser seguido, que representa a única sequência de execução das instruções. Excepções a esta regra são os símbolos finais, dos quais não sai nenhum fluxo, e os símbolos de decisão, dos quais pode haver saída de mais do que um caminho de saída (normalmente dois caminhos), que representam uma bifurcação no fluxo. Segue-se a representação do algoritmo do cálculo da média de um aluno sob a forma de um fluxograma convencional..v. 9,5-6 -