A palavra ALGORITMO teve origem com um Matemático Persa, al Khawarizmi. O seu trabalho mais famoso foi Al-jabr walmuquabalah, ou a ciência das Equações que, em última análise suscitaram o desenvolvimento da ÁLGEBRA e dos ALGORITMOS. «Um algoritmo é constituído por um conjunto de expressões simbólicas que representam acções (escolher, atribuir, etc.) testes de condições (estruturas condicionais) e estruturas de controlo (ciclos na estrutura sequencial do algoritmo) de modo a especificar o problema e respectiva solução.» Vasconcelos e Carvalho (2005)
A algoritmia é uma disciplina basilar na área das ciências da computação, e por isso muito relevante no desenvolvimento de competências noutras áreas do conhecimento. A execução de um algoritmo é também designada por processamento de dados e consiste em três fases de execução: Entrada dados (input), processamento de dados, e saída de dados (output). O termo programa computacional refere-se à representação de um algoritmo numa linguagem de programação. Que linguagens de programação conhece?
Um algoritmo é uma lista de instruções para realizar uma determinada tarefa. No dia-a-dia quando se dá instruções para guiar um carro ou fazer um bolo, por exemplo, está ser criado de algum modo um algoritmo. Claro que estes algoritmos são apresentados de um modo bastante informal e vago:. assegure-se que o carro está no parque;. verifique que tem o travão de mão;. retire a chave, etc..
No conjunto das instruções atrás assume-se que quem está a ler consegue compreender os inúmeros detalhes que não estão explícitos. Quando se escreve uma algoritmo para o computador toda a informação tem que estar explícita. É um exercício interessante tentar escrever um algoritmo para uma tarefa do dia-adia. Voltando ao exemplo do carro: If a porta está fechada then Inserir a chave na porta dar a volta à chave If a porta ainda está fechada then abrir a porta ( ) dar a volta chave para o outro lado
Características de um ALGORITMO Deve ser constituído por um número finito de instruções; Cada etapa deve ser definida de forma precisa; Cada instrução deve ser precisa e não ambígua; Cada resposta deve depender unicamente nos valores de input para resolver o problema em particular; O algoritmo deve funcionar para qualquer conjunto de valores de input. A sua execução termina num período finito de tempo
Sintaxe e Semântica Para evitar a ambiguidade das linguagens naturais, foram criadas as linguagens de programação para exprimir algoritmos. O pseudocódigo é considerado uma linguagem intermédia entre a linguagem natural e a de programação. Problema (mundo real) Algoritmo Linguagem natural Pseudocódigo Linguagem de programação Entrada de dados Computador Saída de resultados
Componentes de um algoritmo: Estrutura de dados Instruções Estruturas condicionais Estruturas de controlo Módulos
Componentes de um algoritmo: Estrutura de dados São as representações dos dados nos algoritmos. Quando um algoritmo é implementado e executado através de um programa, os valores dos dados necessitam de ter um suporte para o seu armazenamento e manipulação. Uma variável é o exemplo mais simples de uma estrutura de dados, na qual o seu conteúdo poderá ter diferentes valores (dados) durante a execução do programa
Componentes de um algoritmo: Estrutura de dados Exemplo de variável x=5 x = x+10 y=7 x = y+7 x=1 Que valores assume a variável x?
Componentes de um algoritmo: Estrutura de dados Exemplo de variável x=5 [ x assume o valor 5] x = x+10 [x assume o valor 15] y=7 x = x+y [x assume o valor 22] x=1 [x assume o valor 1] Que valores assume a variável x?
Componentes de um algoritmo: Instruções As instruções permitem manipular os dados. Existem diferentes tipos de instruções: instruções de atribuição, instruções de entrada de dados, instruções para a saída de dados e instruções de controlo. Estruturas condicionais ou de decisão Uma estrutura ou expressão condicional (If then else ) permite a tomada de decisões através da definição de condições lógicas que assomem um dos dois valores lógicos.
Componentes de um algoritmo: Estruturas de controlo Estas estruturas permitem a repetição controlada de determinadas instruções, ou seja, através da declaração de ciclos iterativos permitem uma repetição contínua de grupos de instruções Módulos Os módulos são interpretados como grupos independentes e coerentes de instruções, normalmente associados a uma determinada funcionalidade. A utilização de módulos facilita o entendimento do algoritmo e também permite a reutilização de módulos já existentes. Existem 2 tipos (procedimentos e funções)
Existem duas formas standard para representar os ALGORITMOS: 1 FLUXOGRAMAS 2 PSEUDOCÓDIGO FLUXOGRAMAS: são usadas para começar e terminar são usadas para fazer input ou output de dados são usadas para cálculos ou instruções são usados para decisões
Exemplo de FLUXOGRAMA (Cálculo de raízes de uma equação do 2ºgrau fórmula resolvente) Ler A, B, C D = B 2 4AC Não D < 0? Sim Imprime sem Raízes D = 0? Sim X = B 2A Não X1 = X 2 = ( B + D ) 2A ( B D ) 2A Imprime X Imprime X1, X2 TERMINA
Quando se utiliza PSEUDOCÓDIGO, ou seja, quando um Algoritmo é escrito como uma série de instruções: As instruções são escritas de forma simples; -Existem palavras reservadas para as estruturas condicionais (Ifthen-else); paras as estruturas cíclicas (For, Do While) entre outras.
Exercício: Escreva agora o PSEUDOCÓDIGO, necessário para algoritmo que resolve equações de 2º grau do tipo: Ax 2 + Bx + C = 0 A fórmula para resolver equações quadráticas deste tipo é: X = B ± ( ) B 2 4AC 2A
Exemplo de PSEUDOCÓDIGO Algoritmo em PSEUDOCÓDIGO: Entrada de Dados A, B, C Calcular D = B 2 4AC If D<0 Then Imprimir Não há raízes Else If D=0 Then Fazer Imprimir X Else Calcular B X = 2A X1 = ( B + D ) 2A X 2 = ( B D ) 2A TERMINAR Imprimir X1 e X2
Experimente agora Escreva agora um algoritmo (utilizando pseudocódigo ou fluxograma) que determine se: 1. Dados dois números se a sua soma é par ou ímpar. 2. Dados dois números se o seu produto é positivo ou negativo sem calcular o produto.
Bibliografia Stephens, R. (1996). Visual Basic Algorithms. John Wiley & Sons, Inc.: New York Vasconcelos, J., Carvalho, J. (2005). Algoritmia estruturas de dados. Centro Atlântico: Lisboa