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