Fundamentos da Programação 2:
• Programação como arte de resolução de problemas
• Algoritmos
• Descrição de algoritmos em… Snap!
Apresentação 2 da unidade curricular de Fundamentos de Programação da Universidade Europeia. Alterações de Manuel Menezes de Sequeira sobre versão original por vários autores do DCTI do ISCTE-IUL, incluindo Luís Nunes, Ricardo Ribeiro, André Santos e o próprio Manuel Menezes de Sequeira.
PROJETO DE EXTENÇÃO - GESTÃO DE RECURSOS HUMANOS.pdf
2. Programação e resolução de problemas; Algoritmos; Snap! – Fundamentos de Programação
1. Programação como arte de resolver problemas
Algoritmo como sequência finita de instruções que resolvem um dado
problema
Descrição de algoritmos em... Snap!
2. 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 programa
2013/2014 Fundamentos de Programação 22
3. 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 programa
2013/2014 Fundamentos de Programação 33
4. 2013/2014 4
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
5. 2013/2014 5
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. Knuth
Fundamentos de Programação 5
6. 2013/2014 6Fundamentos de Programação 6
Fonte: Fundamentos de Programação em Java 2 (Mendes e Marcelino, 2005, p. 7)
7. 2013/2014 7
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
8. 2013/2014 8
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
9. 2013/2014 9
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
10. 2013/2014 10
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.
11. 2013/2014 11
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
12. 2013/2014 12
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
13. 2013/2014 13
Variável:
Declaração:
Fundamentos de Programação 13
n
0
No Snap! o valor por
omissão é 0 (zero).
14. 2013/2014 14
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
15. 2013/2014 Fundamentos de Programação 1515
…condicional e de
selecção
…de iteração, ciclos
…de entrada/saída
personalizado...
personalizado... personalizado...
19. 2013/2014 19
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
20. 2013/2014 20
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 n
Fundamentos de Programação 20
x é divisível por y se o resto da
divisão inteira de x por y for zero.
21. 2013/2014 21
0 < mdc(m, n), ou seja, 1 ≤ mdc(m, n)
mdc(m, n) ≤ min(m, n)
Fundamentos de Programação 21
Porquê?
Há mais…
22. Onde começar a procurar?
Como evoluir?
Quando parar?
2013/2014 Fundamentos de Programação 22
23. 2013/2014 23
Entradas: m e n inteiros
Saídas: mdc inteiro
No Snap!...
Fundamentos de Programação
24. Entradas: m e n inteiros
Saídas: mdc inteiro
2013/2014 Fundamentos de Programação 24
26. 2013/2014 26
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.
27. 2013/2014 27
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
28. 2013/2014 28
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