ludwig krippahl, 2007 programação para as ciências experimentais 2006/7 teórica 2
TRANSCRIPT
Ludwig Krippahl, 2007
Programação para as Ciências Experimentais
2006/7
Teórica 2
Ludwig Krippahl, 2007 2
Trabalhadores Estudantes
Consultem regras de avaliação no site.
Ludwig Krippahl, 2007 3
Na aula de hoje...
Algoritmos Funções e Variáveis Teste de Octave
Ludwig Krippahl, 2007 4
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 5
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 6
«Algoritmo» da torrada
Pegar no pão Se faca na bancada,
• Pegar na faca Caso contrário
• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta
• Esperar
Ludwig Krippahl, 2007 7
Controlo da execução
Pegar no pão Se faca na bancada,
• Pegar na faca Caso contrário
• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta
• Esperar
Ludwig Krippahl, 2007 8
Controlo da execução
Pegar no pão Se faca na bancada,
• Pegar na faca Caso contrário
• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta
• Esperar
Sequência
Ludwig Krippahl, 2007 9
Controlo da execução
Pegar no pão Se faca na bancada,
• Pegar na faca Caso contrário
• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta
• Esperar
Condição
Ludwig Krippahl, 2007 10
Controlo da execução
Pegar no pão Se faca na bancada,
• Pegar na faca Caso contrário
• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta
• Esperar Ciclo
Ludwig Krippahl, 2007 11
Implementação Modular
Pegar no pão Se faca na bancada,
• Pegar na faca Caso contrário
• Ir buscar faca à gaveta Cortar fatia, pôr na torradeira, ligar Enquanto não está pronta
• Esperar
Ludwig Krippahl, 2007 12
Implementação Modular
Pegar no pão Se faca na bancada,
• Pegar na faca Caso contrário
• Ir buscar faca à gaveta 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 Cortar fatia Pôr na torradeira, ligar Enquanto não está pronta
• Esperar
Ludwig Krippahl, 2007 15
Implementação Modular
Pegar no pão Encontrar faca Cortar fatia Torrada = Torradeira(Pão)
Procedimento
Função
Ludwig Krippahl, 2007 16
Implementação Modular
Pegar no pão Encontrar faca Cortar fatia Torrada = Torradeira(Pão)
Procedimento
Função
Ludwig Krippahl, 2007 17
Programação
Resolver problemas complexos um problema simples de cada vez
Hierarquizar os problemas
Ludwig Krippahl, 2007 18
Hardware
Dentro do PC
HDD P. Gráfica
CPU RAM
...
Bus
Controladores
Ludwig Krippahl, 2007 19
Sistema operativo
Núcleo (kernel) do sistema operativo:
Gestão de ficheiros, processos, periféricos (Drivers), memória...
Dentro do PC
HDD P. Gráfica
CPU RAM
...
Bus
Controladores
Ludwig Krippahl, 2007 20
Outros programas
Núcleo (kernel) do sistema operativo:
Dentro do PC
HDD P. Gráfica
CPU RAM
...
Bus
Controladores
Interface (Shell) do sistema operativo:
Janelas, botões, interface gráfica, linha de comandos...
Ludwig Krippahl, 2007 21
Outros programas
Núcleo (kernel) do sistema operativo:
Dentro do PC
HDD P. Gráfica
CPU RAM
...
Bus
Controladores
Interface (Shell) do sistema operativo:
Minesweeper, Messenger, Octave, IExplorer, ...
Ludwig Krippahl, 2007 22
Implementação Modular
Pegar no pão Encontrar faca Cortar fatia Torrada = Torradeira(Pão)
Como fazer no Octave...
Procedimento
Função
Ludwig Krippahl, 2007 23
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 24
Implementação Modular
Script• EdiPO, criar novo ficheiro teste
• a=2
(no teste.m)
a=2
(no Octave)
octave:13> a=4a = 4octave:14> testea = 2octave:15> aa = 2
Ludwig Krippahl, 2007 25
Implementação Modular
Script• Útil para guardar um pequeno programa
reutilizável, mas não é um módulo independente.
Ludwig Krippahl, 2007 26
Implementação Modular
Function (procedimento ou função)• As variáveis são locais e independentes.
(no teste.m)
function testea=2endfunction
(no Octave)
octave:13> a=4a = 4octave:14> testea = 2octave:15> aa = 4
Ludwig Krippahl, 2007 27
Implementação Modular
Function• As variáveis são locais e independentes.
(no teste.m)
function testea=2endfunction
(no Octave)
octave:13> a=4a = 4octave:14> testea = 2octave:15> aa = 4
Mesmo nome que o ficheiro
Ludwig Krippahl, 2007 28
Implementação Modular
Function• As variáveis são locais e independentes.
(no teste.m)
function testea=2endfunction
(no Octave)
octave:13> a=4a = 4octave:14> testea = 2octave:15> aa = 4
A variável a da função só existe dentro da função
Ludwig Krippahl, 2007 29
Implementação Modular
Mas queremos uma torradeira:• Torrada = Torradeira (Pão)
• Tem que receber e devolver valores.
(no soma.m)
function res=soma(a,b) res=a+bendfunction
(no Octave)
octave:16> soma(2,5)res = 7ans = 7octave:17>
Ludwig Krippahl, 2007 30
Implementação Modular
function res=soma(a,b)
res=a+b
endfunctionArgumentos da função
Ludwig Krippahl, 2007 31
Implementação Modular
function res=soma(a,b)
res=a+b
endfunctionNome da variável (na função) com o valor a devolver
Ludwig Krippahl, 2007 32
Implementação Modular
function res=soma(a,b)
res=a+b
endfunctiona e b são cópias dos valores
Ludwig Krippahl, 2007 33
Implementação Modular
function x=incrementa(x)
x=x+1
endfunctionx é cópias do valor
octave:17> x=3x = 3octave:18> incrementa(x)x = 4ans = 4octave:19> xx = 3
Ludwig Krippahl, 2007 34
Implementação Modular
function res=soma(a,b)
res=a+b
endfunction
Último detalhe:• Não queremos o res
(no Octave)
octave:16> soma(2,5)res = 7ans = 7octave:17>
Ludwig Krippahl, 2007 35
Implementação Modular
function res=soma(a,b)
res=a+b;
endfunction
Último detalhe:• Não queremos o res
• ; resolve o problema.
(no Octave)
octave:20> soma(2,5)ans = 7octave:21>
Ludwig Krippahl, 2007 36
Implementação Modular
Importante:• Os argumentos da função são cópias locais
dos valores.
Ludwig Krippahl, 2007 37
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 38
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 39
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 undefinederror: evaluating assignment expression near line 24, column 2
Ludwig Krippahl, 2007 40
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 41
Próxima aula
Como controlar a execução:• if... elseif.. else ... endif
• while ... endwhile
• for ... endfor
Ludwig Krippahl, 2007 42
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 43
Dúvidas