Programação para as
Ciências Experimentais
2006/7
Teórica 2
Ludwig Krippahl, 2007
Trabalhadores Estudantes

Consultem regras de avaliação no site.
Ludwig Krippahl, 2007
2
Na aula de hoje...



Algoritmos
Funções e Variáveis
Teste de Octave
Ludwig Krippahl, 2007
3
Algoritmos




Muhammad ibn Mūsā al-Khwārizmī
“Compêndio do Cálculo por Completude
e Balanço.”
“Cálculo com Numerais Hindu”
Algoritmi de numero Indorum (sec. XII)
• Algoritmo
• Algarismo
http://en.wikipedia.org/wiki/Muhammad_ibn_Mūsā_al-Khwārizmī
Ludwig Krippahl, 2007
4
Algoritmo



Conjunto finito de instruções.
No sentido estrito, operações sobre
símbolos (matemática, lógica,
programas)
No sentido lato: receitas, procedimentos
de emergência, etc...
http://en.wikipedia.org/wiki/Algorithm
Ludwig Krippahl, 2007
5
«Algoritmo» da torrada

Pegar no pão
Se faca na bancada,

Caso contrário

Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta


• Pegar na faca
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2007
6
Controlo da execução

Pegar no pão
Se faca na bancada,

Caso contrário

Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta


• Pegar na faca
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2007
7
Controlo da execução

Pegar no pão
Se faca na bancada,

Caso contrário

Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta


• Pegar na faca
Sequência
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2007
8
Controlo da execução

Pegar no pão
Se faca na bancada,

Caso contrário

Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta


• Pegar na faca
Condição
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2007
9
Controlo da execução

Pegar no pão
Se faca na bancada,

Caso contrário

Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta


• Pegar na faca
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2007
Ciclo
10
Implementação Modular

Pegar no pão
Se faca na bancada,

Caso contrário

Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta


• Pegar na faca
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2007
11
Implementação Modular

Pegar no pão
Se faca na bancada,

Caso contrário

Cortar fatia, pôr na torradeira, ligar
Enquanto não está pronta


• Pegar na faca
• Ir buscar faca à gaveta
• Esperar
Ludwig Krippahl, 2007
12
Implementação Modular





Pegar no pão
Encontrar faca
Cortar fatia
Pôr na torradeira, ligar
Enquanto não está pronta
• Esperar
Ludwig Krippahl, 2007
13
Implementação Modular





Pegar no pão
Encontrar faca
Cortar fatia
Pôr na torradeira, ligar
Enquanto não está pronta
• Esperar
Ludwig Krippahl, 2007
14
Implementação Modular




Pegar no pão
Encontrar faca
Procedimento
Cortar fatia
Torrada = Torradeira(Pão)
Função
Ludwig Krippahl, 2007
15
Implementação Modular




Pegar no pão
Encontrar faca
Procedimento
Cortar fatia
Torrada = Torradeira(Pão)
Função
Ludwig Krippahl, 2007
16
Programação


Resolver problemas complexos um
problema simples de cada vez
Hierarquizar os problemas
Ludwig Krippahl, 2007
17
Dentro do PC

Hardware
CPU
Bus
RAM
Controladores
HDD
Ludwig Krippahl, 2007
...
P. Gráfica
18
Dentro do PC

Sistema operativo
Núcleo (kernel) do sistema operativo:
Gestão de ficheiros, processos, periféricos
(Drivers), memória...
CPU
Bus
RAM
Controladores
HDD
Ludwig Krippahl, 2007
...
P. Gráfica
19
Dentro do PC

Outros programas
Interface (Shell) do sistema operativo:
Janelas, botões, interface gráfica, linha de comandos...
Núcleo (kernel) do sistema operativo:
CPU
Bus
RAM
Controladores
HDD
Ludwig Krippahl, 2007
...
P. Gráfica
20
Dentro do PC

Outros programas
Minesweeper, Messenger, Octave, IExplorer, ...
Interface (Shell) do sistema operativo:
Núcleo (kernel) do sistema operativo:
CPU
Bus
RAM
Controladores
HDD
Ludwig Krippahl, 2007
...
P. Gráfica
21
Implementação Modular




Pegar no pão
Encontrar faca
Procedimento
Cortar fatia
Torrada = Torradeira(Pão)
Função
Como fazer no Octave...
Ludwig Krippahl, 2007
22
Implementação Modular

Script
• Conjunto de instruções guardado num ficheiro
• Ficheiro tem nome.m
• Quando Octave recebe um nome, se não é
variável procura o ficheiro
Ludwig Krippahl, 2007
23
Implementação Modular

Script
• EdiPO, criar novo ficheiro teste
• a=2
(no teste.m)
(no Octave)
a=2
octave:13> a=4
a=4
octave:14> teste
a=2
octave:15> a
a=2
Ludwig Krippahl, 2007
24
Implementação Modular

Script
• Útil para guardar um pequeno programa
reutilizável, mas não é um módulo
independente.
Ludwig Krippahl, 2007
25
Implementação Modular

Function (procedimento ou função)
• As variáveis são locais e independentes.
(no teste.m)
(no Octave)
function teste
a=2
endfunction
octave:13> a=4
a=4
octave:14> teste
a=2
octave:15> a
a=4
Ludwig Krippahl, 2007
26
Implementação Modular

Function
• As variáveis são locais e independentes.
(no teste.m)
(no Octave)
function teste
a=2
endfunction
octave:13> a=4
a=4
octave:14> teste
a=2
octave:15> a
a=4
Mesmo nome que o ficheiro
Ludwig Krippahl, 2007
27
Implementação Modular

Function
• As variáveis são locais e independentes.
(no teste.m)
(no Octave)
function teste
a=2
endfunction
octave:13> a=4
a=4
octave:14> teste
a=2
octave:15> a
a=4
A variável a da função só
existe dentro da função
Ludwig Krippahl, 2007
28
Implementação Modular

Mas queremos uma torradeira:
• Torrada = Torradeira (Pão)
• Tem que receber e devolver valores.
(no soma.m)
(no Octave)
function res=soma(a,b)
res=a+b
endfunction
octave:16> soma(2,5)
res = 7
ans = 7
octave:17>
Ludwig Krippahl, 2007
29
Implementação Modular
function res=soma(a,b)
res=a+b
Argumentos da função
endfunction
Ludwig Krippahl, 2007
30
Implementação Modular
function res=soma(a,b)
res=a+b
Nome da variável (na
função) com o valor a
endfunction
devolver
Ludwig Krippahl, 2007
31
Implementação Modular
function res=soma(a,b)
res=a+b
a e b são cópias dos valores
endfunction
Ludwig Krippahl, 2007
32
Implementação Modular
function x=incrementa(x)
x=x+1
x é cópias do valor
endfunction
octave:17> x=3
x=3
octave:18> incrementa(x)
x=4
ans = 4
octave:19> x
x=3
Ludwig Krippahl, 2007
33
Implementação Modular
function res=soma(a,b)
res=a+b
endfunction
(no Octave)

Último detalhe:
• Não queremos o res
Ludwig Krippahl, 2007
octave:16> soma(2,5)
res = 7
ans = 7
octave:17>
34
Implementação Modular
function res=soma(a,b)
res=a+b;
endfunction
(no Octave)

Último detalhe:
• Não queremos o res
• ; resolve o problema.
Ludwig Krippahl, 2007
octave:20> soma(2,5)
ans = 7
octave:21>
35
Implementação Modular

Importante:
• Os argumentos da função são cópias locais
dos valores.
Ludwig Krippahl, 2007
36
Implementação Modular

Importante:
• O Octave primeiro verifica se há uma variável
com esse nome:
octave:21> soma=0
soma = 0
octave:22> soma(2,5)
error: invalid row index = 2
error: invalid column index = 5
Ludwig Krippahl, 2007
37
Implementação Modular

Importante:
• O Octave primeiro verifica se há uma variável
•
com esse nome.
Se fosse ao contrário, um novo ficheiro .m
podia estragar um programa já existente...
Ludwig Krippahl, 2007
38
Implementação Modular

Importante:
• A variável (ou variáveis) designada para
guardar o valor devolvido tem que ter um
valor atribuído no final da função.
function res=soma(a,b)
c=a+b;
endfunction
octave:24> a=soma(2,5)
error: value on right hand side of assignment is undefined
error: evaluating assignment expression near line 24, column 2
Ludwig Krippahl, 2007
39
Aula de hoje


Decompor problema complexo em
problemas simples.
No Octave, usar funções:
• Reutilizáveis (como a torradeira)
• As variáveis locais garantem que só entra e
sai o que quisermos (melhor que a
torradeira!)
Ludwig Krippahl, 2007
40
Próxima aula

Como controlar a execução:
• if... elseif.. else ... endif
• while ... endwhile
• for ... endfor
Ludwig Krippahl, 2007
41
Teste de Octave





Saber o que fizeram nas práticas
Reutilizar código
Desenrascar
90 minutos certos
Consulta livre, mas nada de chat ou
email.
Ludwig Krippahl, 2007
42
Dúvidas
Ludwig Krippahl, 2007
43
Download

Slides da aula.