====== Algoritmos e fluxogramas ====== Um algoritmo é geralmente descrito como uma receita, ou um conjunto de regras ou instruções passo-a-passo, para executar uma dada tarefa ou alcançar uma solução para um problema específico. Um fluxograma é um método de representação gráfico de um algoritmo. O fluxograma recorre a elementos gráficos como caixas, quadrados, círculos e setas que representão a ligação entre os vários elementos e o fluxo de controlo do próprio algoritmo. Cada um destes elementos, representa uma única instrução no conjunto de instruções que compõem um algoritmo. Elementos de um fluxograma: ==== Início ==== Círculo. {{:method:algorithms:algus.png|}} ==== Fim ==== Círculo preenchido no interior de outro círculo maior. {{:method:algorithms:lopp.png|}} ==== Ação ou expressão ==== Retângulo. Dentro do retângulo está o nome da instrução, tarefa, sub-rotina ou uma pequena descrição da ação a executar. Tarefas e instruções similares são podem ser agregadas numa única ação genérica. {{:images:programming:algorithm_action.png|}} ==== Sequência ==== Seta, aponta para a próxima instrução. {{:method:algorithms:nool.png|}} ==== Condição / Decisão ==== "Diamante" (losângulo). Dentro do losângulo encontra-se uma expressão lógica de onde geralmente partem duas setas distintas. Uma delas resulta no fato da expressão lógica ser Verdade (Sim / 1), a outra no caso de a expressão lógica ter resultado Falso (Não / 1). Cada uma destas setas deve ser identificada com o respetivo resultado da expressão que se pretende representar. Em alguns casos particulares, uma única seta pode ser utilizada num bloco de condição/decisão (losângulo), nesse caso a expressão lógica apresenta claramente apenas uma possível solução, por exemplo Verdadeiro. Este é o caso do ciclo interminável que é usado como controlo de fluxo de um programa (tópico que será abordado mais adiante - //while true//). {{:images:programming:algoritmid_if.png|}} ==== Fluxo de dados ==== Trapezóide. No interior do trapezóide encontra-se a descrição de uma tarefa. Em robótica é geralmente utilizado, por exemplo, para representar a comunicação de dados entre valores de um sensor e o utilizador. Para termos de simplificação, geralmente também é utilizado o elemento retangular já antes descrito, em vez de o tradicional trapézio. {{:images:programming:data_exchange.png|}} ==== Exemplos ==== Para a construção de fluxogramas, são muitas vezes utilizadas programas da suite de Office comuns, como o MS Word ou o MS Excel ou OpenOffice/LibreOffice Writer ou Calc. Mas existem outros programas específicos para estas tarefas que nos permitem obter melhores resultados, é o caso do MS Visio, OpenOffice/LibreOffice Draw, Google Draw ou qualquer outro tipo de software destinado a esta tarefa. Os fluxogramas que descrevem o programa de um microcontrolador, não apresentam geralmente um fim. Em vez disso, representam uma atividade principal que se insere num ciclo infinito de execução. A condição de saída para este ciclo principal geralmente nunca resulta no valor Verdadeiro e como tal este é o caso em que onde um bloco condicional (losângulo) é geralmente utilizado para representar uma condição de saída. Esta condição pode simplesmente ter o valor Verdadeiro (ou 1), este é o caso do ciclo infinito. A criação de fluxogramas é importante para manter uma visão geral da estrutura de um programa. Os exemplos que se seguem ilustram a utilização de fluxogramas para a descrição de algoritmos simples. No primeiro exemplo temos uma rotina simples que descreve o fluxo uni-direccional descendente, ou seja, não inclui nenhum ciclo ou bloco de decisão. {{:images:programming:algorithm_example1.png|}} No caso do exemplo que se segue, o fluxograma representa um sistemas que deteta a presença de um objeto na proximidade de 1 m, e neste caso é disparado um alarme que atua durante um intervalo de 10 segundos. O alarme é então desativado caso o objeto detetado não se encontre mais na área abrangida pelo sensor. {{:images:programming:algorithm_example2.png?550|}}