2. programação e resolução de problemas; algoritmos; snap! – fundamentos de programação
DESCRIPTION
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.TRANSCRIPT
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!
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
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
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
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
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)
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
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
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
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.
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
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
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).
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
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...
Operações lógicas
2013/2014 Fundamentos de Programação 1616
conjunção
disjunção
negação
Operações aritméticas
2013/2014 Fundamentos de Programação 1717
adição
subtracção
multiplicação
divisão
resto da divisão
Operações de igualdade, diferença e desigualdade
2013/2014 Fundamentos de Programação 1818
igualdade
diferença
desigualdades
personalizado...
personalizado...
personalizado...
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
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.
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…
Que algoritmo usar?
Onde começar a procurar?
Como evoluir?
Quando parar?
2013/2014 Fundamentos de Programação 22
2013/2014 23
Programa em Snap!
Entradas: m e n inteirosSaídas: mdc inteiro
No Snap!...
Fundamentos de Programação
Programa em Snap!
Entradas: m e n inteirosSaídas: mdc inteiro
2013/2014 Fundamentos de Programação 24
2013/2014 25
Traçado do programa
Fundamentos de Programação 25
No Snap!…
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.
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
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