![Page 1: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/1.jpg)
Apresentação 2
Programação como arte de resolver problemasAlgoritmo como sequência finita de instruções que resolvem um dado problemaDescrição de algoritmos em... Snap!
![Page 2: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/2.jpg)
Fundamentos de Programação 2
Da apresentação anterior…
Computador como máquina programável
Conceitos de línguas naturais linguagens de programação de baixo e
alto nível linguagens máquina
Noções de algoritmo e de programa2013/2014 2
![Page 3: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/3.jpg)
Fundamentos de Programação 3
Programar
Compreender/analisar bem problema e dados envolvidos
Averiguar melhor forma de resolver problema e representar os dados
Determinar instruções duma linguagem de programação que resolvem (de forma genérica) esse problema
Essas instruções formam um programa2013/2014 3
![Page 4: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/4.jpg)
2013/2014 4
Arte de resolver problemas
Diz-se que só se compreende realmente um assunto depois de o ter ensinado a alguém.
Na realidade, só se compreende realmente um assunto depois de o ter ensinado a um computador.
Donald E. Knuth
Fundamentos de Programação 4
![Page 5: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/5.jpg)
2013/2014 5
Algoritmos (primeira abordagem)
Como uma receita, mas mais precisa:
Conjunto finito de regras, traduzíveis numa sequência de operações/instruções, que permitem resolver um determinado tipo de problema.
Donald E. KnuthFundamentos de Programação 5
![Page 6: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/6.jpg)
2013/2014 6
Algoritmo para fazer um bolo
Fundamentos de Programação 6
Fonte: Fundamentos de Programação em Java 2 (Mendes e Marcelino, 2005, p. 7)
![Page 7: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/7.jpg)
2013/2014 7
Algoritmo
Método de resolução de problema
Forma Conjunto de instruções a executar Ordem pela qual são executadas
Pensar na estrutura ajuda programador a planificar programa antes de o escrever (codificar)
numa linguagem de programação e a pensar numa linguagem próxima da sua – para um
programador noviço, codificar directamente não é natural…
Fundamentos de Programação 7
![Page 8: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/8.jpg)
2013/2014 8
Propriedades de um algoritmo Finitude – Tem de terminar
Definitude – Todos os passos bem definidos
Entradas – Zero ou mais, de conjunto bem definido
Saídas – Uma ou mais, dependem das entradas
Eficácia – Todas as operações executáveis (em tempo útil)
Fundamentos de Programação 8
![Page 9: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/9.jpg)
2013/2014 9
Snap!
Instruções em linguagem visual
Facilita compreensão por noviços
Evita-se problemas sintáticos
Obtém-se resultados visíveis imediatamente
Tradução fácil para outras linguagens de programação
Fundamentos de Programação
![Page 10: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/10.jpg)
2013/2014 10
Dados
Valores são números, texto, etc.
Variáveis Guardam diferentes valores ao longo do
tempo Identificadas por nome Variável n guarda valor 7:
Fundamentos de Programação 10
n
7
Mentirita! n é na realidade uma referência para um objecto numérico algures na memória.
![Page 11: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/11.jpg)
2013/2014 11
Variável
Referência para objecto com: tipo (e.g., número, texto, booleano, lista) Valor (e.g., 123, «Olá mundo!»,
verdadeiro)
Definição Nome (reflecte o que a variável guarda) Valor inicial implícito (referência para
número com valor 0)
Fundamentos de Programação 11
![Page 12: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/12.jpg)
2013/2014 12
Nomeando variáveis
Variável normal Completar frase «Actor, esta variável
guarda …»
Variável para valores booleanos Completar frase «Actor, esta variável
indica se …»
Fundamentos de Programação 12
![Page 13: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/13.jpg)
2013/2014 13
Definição de variáveis
Variável:
Declaração:
Fundamentos de Programação 13
n
0
No Snap! o valor por omissão é 0 (zero).
![Page 14: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/14.jpg)
2013/2014 14
Atribuição
atribui o valor que se coloca na ranhura à variável m
Exemplo
Fundamentos de Programação 14
x
2
y
5
x
5
y
6
+ 1
![Page 15: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/15.jpg)
Alguns comandos do Snap!
2013/2014 Fundamentos de Programação 1515
…condicional e de selecção
…de iteração, ciclos
…de entrada/saída
personalizado...
personalizado...
personalizado...
![Page 16: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/16.jpg)
Operações lógicas
2013/2014 Fundamentos de Programação 1616
conjunção
disjunção
negação
![Page 17: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/17.jpg)
Operações aritméticas
2013/2014 Fundamentos de Programação 1717
adição
subtracção
multiplicação
divisão
resto da divisão
![Page 18: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/18.jpg)
Operações de igualdade, diferença e desigualdade
2013/2014 Fundamentos de Programação 1818
igualdade
diferença
desigualdades
personalizado...
personalizado...
personalizado...
![Page 19: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/19.jpg)
2013/2014 19
Problema
Qual o máximo divisor comum (mdc) de dois inteiros positivos arbitrários m e n, i.e., qual o valor de mdc(m, n)?
Fundamentos de Programação 19
![Page 20: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/20.jpg)
2013/2014 20
Máximo divisor comum de m e n inteiros, positivos e arbitrários
Entradas: m e n
Saídas: mdc
Condições a verificar pela saída: mdc = mdc(m, n)
Ou seja: m e n são divisíveis por mdc e não há inteiro maior que mdc que seja divisor
de m e nFundamentos de Programação 20
x é divisível por y se o resto da divisão inteira de x por y for zero.
![Page 21: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/21.jpg)
2013/2014 21
Propriedades conhecidas
0 < mdc(m, n), ou seja, 1 ≤ mdc(m, n)
mdc(m, n) ≤ min(m, n)
Fundamentos de Programação 21
Porquê?
Há mais…
![Page 22: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/22.jpg)
Que algoritmo usar?
Onde começar a procurar?
Como evoluir?
Quando parar?
2013/2014 Fundamentos de Programação 22
![Page 23: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/23.jpg)
2013/2014 23
Programa em Snap!
Entradas: m e n inteirosSaídas: mdc inteiro
No Snap!...
Fundamentos de Programação
![Page 24: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/24.jpg)
Programa em Snap!
Entradas: m e n inteirosSaídas: mdc inteiro
2013/2014 Fundamentos de Programação 24
![Page 25: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/25.jpg)
2013/2014 25
Traçado do programa
Fundamentos de Programação 25
No Snap!…
![Page 26: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/26.jpg)
2013/2014 26
Algoritmos
Múltiplas formas de resolver um problema!
Não há algoritmos perfeitos…
…mas há algoritmos «mais perfeitos» que outros (menos memória, mais rápidos, …)
⇓
Importante procurar soluções simples, claras, estruturadas e eficientes
Fundamentos de Programação 26
Em muitos casos pode-se demonstrar que um algoritmo é óptimo relativamente a uma dada característica.
![Page 27: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/27.jpg)
2013/2014 27
A reter
Revisão do Snap! Variáveis Instruções de selecção Iterações e ciclos Instruções de leitura/escrita
Algoritmo Sequência finita de instruções que resolve um
dado tipo de problema
Fundamentos de Programação 27
![Page 28: 2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação](https://reader035.vdocuments.mx/reader035/viewer/2022062313/5579a64ed8b42ac1148b4b04/html5/thumbnails/28.jpg)
2013/2014 28
Sumário
Programação como arte de resolver problemas
Algoritmo como sequência finita de instruções que resolvem um dado problema
Implementação de algoritmos em Snap! Variáveis Instruções de selecção Iterações e ciclos Instruções de leitura/escrita
Fundamentos de Programação 28