Sessão 2 UFCD 0804 Algoritmos Revisões Sessão 1 Algoritmo - Definição Um algoritmo é formalmente uma sequência finita de passos que levam a execução de uma tarefa, é uma sequência de instruções para atingir uma meta específica. Estas tarefas não podem ser redundantes nem subjectivas na sua definição, devem ser claras e precisas. 1
Características fundamentais dum algoritmo Um algoritmo deve ter 5 características fundamentais: Entradas: um algoritmo deve ter uma ou mais entradas, isto é quantidades que lhe são fornecidas antes do algoritmo iniciar. Saídas: um algoritmo deve ter uma ou mais saídas, isto é quantidades que tem uma relação específica com as entradas. Precisão: Todos os passos do algoritmo devem ter um significado preciso, não ambíguo, especificando exactamente o que deve ser feito. Características fundamentais dum algoritmo Um algoritmo deve ter 5 características fundamentais: Eficácia: Os passos devem conduzir à resolução do problema proposto. Devem ainda ser executáveis numa quantidade finita de tempo e com uma quantidade finita de esforço. Eficiência: Um algoritmo deve ser eficiente. Isto significa que todas as operações devem ser suficientemente básicas de modo que possam ser em princípio executadas com precisão em um tempo finito por um ser humano usando papel e lápis. NOTA: Pode haver mais do que um algoritmo para resolver um problema. 2
Algoritmo O algoritmo deve ser fácil de se interpretar e fácil de codificar. Ou seja, ele deve ser o intermediário entre a linguagem falada e a linguagem de programação Algoritmo Exemplo 1 Uma receita é uma descrição dum conjunto de passos ou acções que fazem a combinação dum conjunto de ingredientes com vista a obter um produto gastronómico particular. 3
Algoritmo Exemplo 1(Cont.) Um algoritmo opera sobre um conjunto de entradas (farinha ovos, fermento, etc. no caso do bolo) de modo a gerar uma saída que seja útil (ou agradável) para o utilizador (o bolo pronto). Algoritmo (receita de bolo): 1. Bater duas claras em castelo; 2. Adicionar duas gemas; 3. Adicionar uma chávena de açúcar; 4. Adicionar duas colheres de manteiga; 5. Adicionar uma chávena de leite de coco; 6. Adicionar farinha e fermento; 7. Colocar numa forma e levar ao forno em lume brando. 8. Verificar tempo de cozedura 9. Retirar do forno Algoritmo Exemplo2 Somar dois números Escreva o primeiro número no rectângulo A Escreva o segundo número no rectângulo B Some o número do rectângulo A com número do rectângulo B Coloque o resultado no rectângulo C 4
Exercícios 1. Descreva a sequência lógica: a. Para Comer; b. Para ferver água; c. Para trocar uma lâmpada. d. Que permita efectuar a mudança do pneu furado de uma viatura. Exercício a) Inicio Pegar no garfo Colocar comida no garfo Levar o garfo à boca Abrir a boca Meter a comida dentro da boca Fechar a boca Mastigar a comida Engolir Fim Enunciado 5
Exercício b) Inicio Pegar no recipiente Colocar água no recipiente Levar recipiente à placa Ligar a placa Deixar ferver Desligar a placa Retirar o recipiente da placa Fim Enunciado Exercício c) Algoritmo simples Início Preparar acessos à lâmpada fundida colocar escada Retirar lâmpada fundida Escolher lâmpada nova Colocação da lâmpada nova Verificar se luz acende Arrumar escada Fim 6
Definir as operações elementares Algoritmo mais complexo dar passos subir/descer degraus pegar/largar objectos rodar objectos sentido directo/indirecto capacidade de decisão Exercício c) Exercício c) 1. [Preparar acessos à lâmpada fundida] 1.1 Repetir enquanto não chegar à escada 1.1.1 Dar passos 1.2 Pegar objecto (escada) 1.3 Repetir enquanto não chegar debaixo lâmpada fundida 1.3.1 Dar passos 2. [Retirar lâmpada fundida] 2.1 Repetir enquanto não chegar à lâmpada fundida 2.1.1 Subir degraus 2.2 Repetir enquanto não soltar a lâmpada fundida 2.2.1 Rodar objecto(l.f.) no sentido indirecto 2.3 Repetir enquanto não chegar ao chão 2.3.1 descer degraus 3.[Escolher lâmpada nova] 3.1 Repetir enquanto não chegar junto gaveta das lâmpadas novas 1.3.1 Dar passos 3.2 Repetir enquanto houver lâmpadas novas ou potência L.N. diferente de potência L.F. 3.2.1 Pegar objecto (L.N.) 3.2.2 Se potência L.N. = Potência L.F. 3.2.2.1 Então largar a L.F. 3.2.2.2 Senão largar a L.N. 4. [Colocação da lâmpada nova] 4.1 Repetir enquanto não chegar à escada 4.1.1 Dar passos 4.2 Repetir enquanto não chegar ao casquilho 4.2.1 Subir degraus 4.3 Repetir enquanto não firmar a lâmpada nova 4.3.1 Rodar objecto(l.n.) no sentido directo 4.4 Repetir enquanto não chegar ao chão 4.4.1 descer degraus 5. [Arrumar escada] 5.1 Pegar objecto(escada) 5.2 Repetir enquanto não chegar ao sítio da escada 5.2.1 Dar passos 5.3 Largar objecto (escada) 6. [FIM] Enunciado 7
Exercício d) 1º (graficamente): Exercício d) 2º Definir as operações elementares: dar passos abrir ou fechar pegar ou largar rodar deslocar no sentido... capacidade de decisão 8
3º Narrativa Identada: [Substituição pneu furado] 1. [Buscar macaco, chave e pneu sobresselente] 1.1 Repetir até chegar ao carro 1.1.1 Dar passos 1.2 Abrir a mala 1.3 Pegar macaco, chave e pneu bom 1.4 Repetir até chegar ao pneu furado 1.4.1 Dar passos 2. [Colocar o macaco em posição correcta e elevar o carro] 2.1 Largar o pneu e a chave 2.2 Encaixar macaco 2.2.1 Deslocar o macaco no sentido do carro até encaixar 2.3 Elevar o carro 2.3.1 Repetir até carro elevado 2.3.1.1 Rodar manivela no sentido horário 3.[Retirar o pneu furado e substituí-lo] 3.1 Pegar na chave 3.2 Repetir quatro vezes 3.2.1 Deslocar a chave até encaixar na porca 3.2.2 Repetir até porca cair 3.2.2.1 Rodar sentido anti-horário Exercício d) 3.3 Largar chave 3.4 Pegar no pneu furado 3.5 Deslocá-lo sentido contrário ao carro 3.6 Largar pneu furado 3.7 Pegar no pneu bom 3.8 Deslocar pneu no sentido do carro 3.9 Encaixar pneu 3.10 Pegar na chave 3.11 Repetir quatro vezes 3.11.1 Pegar na porca 3.11.2 Encaixar porca 3.11.3 Pegar chave 3.11.4 Repetir até ficar apertado 3.11.4.1 Rodar no sentido horário 3.12 Largar chave 4. [Guardar o macaco, chave e o pneu furado] 4.1 Baixar o carro 4.1.1 Rodar manivela no sentido contrário ao horário 4.2 Desencaixar macaco 4.3 Pegar pneu furado+macaco+chave 4.4 Repetir até à mala 4.4.1 Dar passos 4.5 Largar chave+macaco+pneu furado 4.6 Fechar mala [FIM] TIPO DE DADOS, VARIÁVEIS E CONSTANTES 9
Constantes, variáveis e tipo de dados Os principais tipos de dados utilizados em algoritmia e em programação são: Caracteres, cadeias de caracteres ou texto; Números (podendo estes serem de diferentes tipos); Dados do tipo lógico ou booleano. Cadeias de caracteres Existem dados que são do tipo texto ou cadeias de caracteres (strings); Por exemplo Hoje e dia 14. Para este tipo de dados também se utiliza, por vezes, a designação de dados alfanuméricos o que quer dizer que são dados em que entram caracteres alfabéticos ou letras e onde podem entrar também algarismos. 10
Dados numéricos E constituída pelos diferentes tipos de números: Inteiros por exemplo -10, -5, 0, 5, 10 Reais por exemplo 1.5, 0, 2.5, -4.1; Nota: na programação e utilizado o. como sinal decimal. Dados lógicos ou booleanos São utilizados com muita frequência em algoritmia e programação; Este tipo de dados caracteriza-se por admitir de cada vez apenas um entre dois resultados. Verdadeiro(true, 1) ou falso(false, 0); 11
Constantes e Variáveis Constante: é um dado que permanece inalterável do inicio ao fim do algoritmo Variável: é um dado que pode sofrer alterações de valor ao longo do algoritmo Identificador: é um nome que é associado (pelo programador) a uma constante, a uma variável ou outro tipo de elemento, em programação. Constantes As constantes podem surgir: Sob a forma directa, ou seja, valores numéricos, alfanuméricos, por exemplo: 0.75; Janeiro ; Sob a forma de identificadores, por exemplo: Constante Taxa=0.16 Nome = Ana Matias Exemplo 1 Define uma constante através do identificador Taxa e com o valor 0.16 Exemplo 2 - Define uma constante através do identificador Nome ao qual se associa a string Ana Matias E como o nome indica nunca mudam. 12
Variáveis As variáveis surgem sempre designadas através de identificadores e associadas a determinado tipo de dados (inteiro, real, string, booleano, etc) Exemplo: Variável Idade : inteiro A característica principal das variáveis e o facto de poderem assumir diferentes valores ao longo do algoritmo ou programa. Instruções de atribuição São operações internas de um programa ou algoritmo que atribuem valores às variáveis Exemplos: Variável Custo: inteiro Lucro: real Nome: String Nome Joao Miguel Custo 16 Lucro Custo * 1.25 Exemplo 1: Indica que a variável Nome recebe a string ou cadeiade caracteres Joao Miguel Exemplo 2: Indica que a variável Custo recebe o valor 16. Exemplo 3: Indica que a variável lucro recebe o valor da variável custo depois de multiplicado por 1.25. Nota: O sinal de atribuição na linguagem algorítmica e mas na linguagem C e =. 13
Operadores aritméticos m + n adição de m e n m - n m subtraído de n m / n quociente da divisão inteira de m por n m * n produto de m e n m % n resto da divisão inteira de m por n Operadores relacionais m < n valor da proposição m é menor que n m == n valor da proposição m é igual a n m <> n valor da proposição m é diferente de n m = n atribui o valor de n a m, i.e., altera o valor de m para o valor contido em n 14
Operadores lógicos p e q conjunção das proposições p e q p ou q disjunção das proposições p e q não p negação da proposição p Instruções de Input ou entrada de dados São utilizadas quando se pretende obter a entrada de dados, através de uma interacção com o exterior ou com pessoas que podem fornecer os dados com que se vão efectuar as operações. A leitura de um valor deve ser lida para uma variável, que irá guardar temporariamente esse valor. Exemplo: Ler Nome 15
Instruções de Output ou saída de dados A saída ou escrita de dados, por parte de um programa ou algoritmo pode ser feita através de diferentes tipos de dispositivos, como o monitor ou a impressora. Este tipo de operação pode ser representada por palavras como escrever, imprimir, etc. Por exemplo: Escrever Olá Mundo Escrever 2500 Escrever de Valor é 250 DESENVOLVENDO ALGORITMOS 16
Representações de algoritmos Linguagem Natural Os algoritmos são expressos directamente em linguagem natural (e.g. o português como no exemplo do bolo). Fluxograma (ou Diagrama de Fluxo) Esta é uma representação gráfica que emprega formas geométricas padronizadas para indicar as diversas acções e decisões que devem ser executadas para resolver o problema. Pseudo-linguagem ou pseudocódigo Emprega uma linguagem intermediária entre a linguagem natural e uma linguagem de programação para descrever os algoritmos. Linguagem Natural Considera-se como algoritmo em linguagem natural uma sequência lógica de instruções ou ordens (correspondentes a operações), expressas em linguagem corrente (por exemplo, o português), que nos permitem resolver um problema. 17
Linguagem natural - Exemplo Cálculo do zero da equação ax+b=0 1.Início de programa 2. ler a, b 3. se a é diferente de 0 então calcula o valor de x (ax+b=0) escrever valor de x senão escrever Não há zero 4. Fim de programa Exercícios 1. Elabore um algoritmo em linguagem natural que: a. Receba dois números e no final mostre a soma, subtracção, multiplicação e divisão dos mesmos. b. Determine o consumo médio de um automóvel sendo fornecida a distância total percorrida pelo automóvel e o total de combustível gasto. c. Receba notas de 3 testes e apresente a média aritmética das mesmas. 18
Exercício 1.a) Iniciar programa Ler a, b Calcular a+b Escrever valor da soma Calcula a-b Escrever valor da subtracção Se b ou a é diferente de zero Calcula a*b Escrever valor da multiplicação Senão Escrever multiplicação igual a zero Se b é diferente de zero Calcula a/b Escrever valor da divisão Senão Escrever Não é possível dividir por zero Fim do programa Enunciado Exercício 1.b) Inicio do programa Ler disttotal, TotalComb Se TotalComb for diferente de zero então Calcular disttotal/totalcomb Escrever resultado do cálculo Senão Escrever Impossível efectuar o calculo - automóvel parado Fim de programa Enunciado 19
Exercício 1.c) Inicio do programa Ler nota1, nota2, nota3 Calcular (nota1+nota2+nota3)/3 Apresentar resultado da média Fim de programa 20