Informática para Ciências e Engenharias (B) 2016/17 Teórica 2
Na aua de hoje Decomposição de probemas Abstração, generaização e agoritmos Ficheiros e código fonte scripts, funções e como escrever código Testes unitários Tipos de erros. Representação de números em binário Cico de vida de um programa 15 Março 2017 Programação Estruturada; Funções 2
Probema Cacuar ph do ácido benzóico C 6 H 5 COOH H + + C 6 H 5 COO - K a = 6.5 x 10-5 % Constante de Dissociação C i = 0.1 (m/mmo/vo) % Concentração Moar Inicia Como resover sendo x = [H + ] = [C 6 H 5 COO - ] K a = x 2 / (C i x) x 2 + K a x C i K a = 0 ph = - og 10 (x) % Concentração Iónica 15 Março 2017 Programação Estruturada; Funções 3
Como impementar, opção 1 Cacuar directamente, Usando a Janea de Comandos do Octave Cácuo de expressões pode utiizar funções pre-definidas Raiz quadrada / sqrt, e ogaritmo de base 10 / og10 >> Ci = 0.01 o vaor da concentração Ci = 0.010000 tem de ser positivo >> Ka = 6.5e-5 Ka = 6.5000e-005 >> x = (-Ka + sqrt(ka^2+4*ka*ci))/2 x = 7.7438e-004 >> ph = -og10(x) ph = 3.1110 >> 15 Março 2017 Programação Estruturada; Funções 4
Como impementar, opção 1 Escrever directamente Má soução mais difíci de corrigir erros temos de escrever tudo cada vez que precisamos cacuar o ph só viáve com probemas simpes quanto maior a ista de instruções mais prováve é haver erros e mais difíci é de os identificar impossíve de resover probemas compexos 15 Março 2017 Programação Estruturada; Funções 5
Como impementar, opção 2 Criar um script um script Matab é um ficheiro contendo código fonte e gravado com a extensão.m Pode ser criado com o Octave/Matab no modo de Edição O editor ajusta as cores das instruções Mostra os números de inha (úti para reportar erros) benzoico.m 1 2 3 4 Ci = 0.01 Ka = 6.5e-5 x =(-Ka + sqrt(ka^2+4*ka*ci))/2 ph = -og10(x) 15 Março 2017 Programação Estruturada; Funções 6
Como impementar, opção 2 Chamar o script Escrever o nome do script (sem o.m) se não existe variáve ou função definida, o interpretador procura o ficheiro nome.m tem de estar na pasta de trabaho (ou numa pasta que o interpretador conheça) As instruções são executadas (e ecoadas) como se estivessem a ser dadas pea janea de comandos >> benzoico Ci = 0.010000 Ka = 6.5000e-005 x = 7.7438e-004 ph = 3.1110 >> 15 Março 2017 Programação Estruturada; Funções 7
Como impementar, opção 2 Os ecos podem ser eiminados escondendo as instruções de atribuição com ; Ci = 0.01 Ka = 6.5e-5 x =(-Ka + sqrt(ka^2+4*ka*ci))/2 ph = -og10(x) Ci = 0.01; Ka = 6.5e-5; x =(-Ka + sqrt(ka^2+4*ka*ci))/2 ph = -og10(x) >> benzoico Ci = 0.010000 Ka = 6.5000e-005 x = 7.7438e-004 ph = 3.1110 >> >> benzoico x = 7.7438e-004 ph = 3.1110 >> 15 Março 2017 Programação Estruturada; Funções 8
Ficheiro de Código Fonte Na inguagem MATLAB, um ficheiro.m É interpretado como texto, código fonte Quando o interpretador encontra um identificador verifica 1º se é uma variáve definida 2º se é uma função já carregada 3º se há um ficheiro com esse nome e extensão.m Se chega à 3º opção, executa o que está no ficheiro 15 Março 2017 Programação Estruturada; Funções 9
Como Impementar, Opção 2 Criar um script Vantagens mais fáci de executar e de editar comentários (mais inteigíve) fica guardado Probemas fica tudo junto variáveis comuns a todo o programa diferentes tarefas não são separadas não estruturado e mau para probemas compexos 15 Março 2017 Programação Estruturada; Funções 10
Ficheiros Ficheiro sequência de bits, agrupados em bytes 1 byte = 8 bits armazenado num suporte persistente disco rígido, cartão de memória, CD... associado peo SO a um identificador único caminho e nome C:\My Documents\ICE\teste.m ~/ICE/teste.m 15 Março 2017 Programação Estruturada; Funções 11
Ficheiros Tipos de ficheiro todos os ficheiros são sequências de bits em ficheiros de tipo diferente a sequência é interpretada de forma diferente Muitas vezes o tipo de ficheiro é identificado pea extensão.pdf,.txt,.jpg,.wav,.doc,.mp3 associada ao programa que interpreta o ficheiro (há excepções, depende do SO e, especiamente, do programa que usamos como interface) 15 Março 2017 Programação Estruturada; Funções 12
Programação Estruturada Programação Estruturada 15 Março 2017 Programação Estruturada; Funções 13
Programação Estruturada Decompor o probema em partes autónomas (dividir para conquistar) perceber o probema e todas as tarefas abstrair e generaizar cada tarefa Conceber o agoritmo perceber como resover cada tarefa perceber como as várias partes encaixam Impementar e testar cada parte 15 Março 2017 Programação Estruturada; Funções 14
Agoritmo Muhammad ibn Mūsā a-khwārizmī Compêndio do Cácuo por Competude e Baanço. Cácuo com Numerais Hindu Agoritmi de numero Indorum (sec. XII) Agoritmo Agarismo 15 Março 2017 Programação Estruturada; Funções 15
Agoritmo Conjunto finito de instruções. No sentido estrito, operações sobre símboos Matemática Lógica Programas. No sentido ato: receitas procedimentos de emergência etc... 15 Março 2017 Programação Estruturada; Funções 16
Agoritmo 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, igar Enquanto não está pronta Esperar 15 Março 2017 Programação Estruturada; Funções 17
Agoritmo da torrada Pegar no pão Se faca na bancada, Pegar na faca Obter faca Caso contrário Ir buscar faca à gaveta Cortar fatia Pôr na torradeira, igar Enquanto não está pronta Esperar 15 Março 2017 Programação Estruturada; Funções 18
Agoritmo da torrada Pegar no pão Se faca na bancada, Obter faca Pegar na faca Cortar fatia Caso contrário Pôr na torradeira, igar Ir buscar faca à gaveta Enquanto não está pronta Esperar 15 Março 2017 Programação Estruturada; Funções 19
Agoritmo da torrada Pegar no pão Obter faca Cortar fatia Pôr na torradeira, igar Enquanto não está pronta Esperar Torrar 15 Março 2017 Programação Estruturada; Funções 20
Agoritmo da torrada Pegar no pão Obter faca Cortar fatia Pôr na torradeira, igar Torrar Enquanto não está pronta Esperar 15 Março 2017 Programação Estruturada; Funções 21
Programação Estruturada Resover probemas compexos através de probemas simpes um de cada vez Hierarquizar os probemas Abstrair dos detahes concretos Generaizar souções Decompor as tarefas e impementar partes Testar cada uma Juntar tudo no programa fina 15 Março 2017 Programação Estruturada; Funções 22
Programação Estruturada Na inguagem Matab usada em ICE os probemas, simpes ou compexos, são resovidos através de funções. Para cada probema/função teremos de ter bem presente Quais os dados de entrada do probema Qua o resutado pretendido Ao desenhar uma função esta informação deverá constar da sua assinatura que tem a forma genérica function nomeresutado = nomefuncao(parametros) 15 Março 2017 Programação Estruturada; Funções 23
Programação Estruturada function nomeresutado = nomefuncao(parametros) Os parâmetros da função são variáveis, separadas por vírguas A variáve nomeresutado, recebe o vaor da função Exempo: function ph = cacuaph(ka, Ci) Antes de impementarmos esta função em particuar, vamos anaisar em mais detahe vários aspectos a considerar no desenho / impementação de funções. 15 Março 2017 Programação Estruturada; Funções 24
Funções Em Matab, ta como no caso dos scripts, as funções devem ser definidas em ficheiros texto com a extensão.m. No entanto, o nome do ficheiro não é arbitrário e deve ser igua ao nome da função. Os ficheiros, podem ser criados com quaquer editor de texto, nomeadamente com o do interpretador Octave, e começam com a assinatura da função e terminam com a paavra end. cacuaph.m function ph= cacuaph(ka, Ci)... end 15 Março 2017 Programação Estruturada; Funções 25
Funções Para faciitar a egibiidade e compreensão de uma função é devem ser atribuídos nomes significativos quer à função quer às variáveis utiizadas na sua impementação. As funções devem ser comentadas de forma a que o seu objectivo possa ser inspecionado com a instrução hep. Isso é feito com a inserção de uma ou mais inhas de comentário imediatamente após a assinatura da função. function ph = cacuaph(ka, Ci) % cacuaph(ka, Ci) % cacua o ph de um acido fraco monoprotico, dados: % Ka: constante de dissociacao % Ci: concentracao... end 15 Março 2017 Programação Estruturada; Funções 26
Funções function ph = cacuaph(ka, Ci) % cacuaph(ka, Ci) % cacua o ph de um acido fraco monoprotico, dados: % Ka: constante de dissociacao % Ci: concentracao... end >> hep cacuaph 'cacuaph' is a function from the fie... cacuaph(ka, Ci) cacua o ph de um acido fraco monoprotico, dados: Ka: constante de dissociacao Ci: concentracao Additiona hep... >> 15 Março 2017 Programação Estruturada; Funções 27
Funções A utiização de funções permite o uso de variáveis ocais que não se confundem com variáveis com o mesmo nome, mas definidas noutras funções ou na janea de comandos. Há três tipos de variáveis ocais usadas numa função, que são criadas quando a função é executada e são destruídas uma vez terminada a sua execução: Parâmetros de entrada Variáve resutado Variáveis auxiiares function ph = cacuaph(ka, Ci) %... x =... % concentracao iónica ph =... end 15 Março 2017 Programação Estruturada; Funções 28
Funções Dentro do boco function... end As variáveis são ocais e estão isoadas Não há acesso a variáveis exteriores Permite estruturar o programa separar tarefas sem interferência controar entrada e saída garantir que cada parte funciona e resover probemas compexos. Vamos anaisar em mais detahe uma função muito simpes. 15 Março 2017 Programação Estruturada; Funções 29
Funções function res = soma(a,b) res = a+b end Assinatura da função 15 Março 2017 Programação Estruturada; Funções 30
Funções function res = soma(a,b) end res = a+b Nome da variáve resutado (na função) com o vaor a devover. Operacionamente: quando chega ao end fina, o interpretador devove uma cópia do vaor guardado na variáve indicada aqui. 15 Março 2017 Programação Estruturada; Funções 31
Funções function res = soma(a,b) end res = a+b Nome da função Para o interpretador encontrar a função o nome da função tem de ser igua ao nome do ficheiro com o código fonte: 15 Março 2017 Programação Estruturada; Funções 32
Funções function res = soma(a,b) end res = a+b Parâmetros da função variáveis da função que recebem os argumentos, cujo vaor se desconhece na impementação usados na execução. e.g: soma(5,10) parâmetros: a, b argumentos: 5, 10 15 Março 2017 Programação Estruturada; Funções 33
Funções function res = soma(a,b) end res = a+b Os parâmetros a e b contêm cópias dos argumentos fornecidos à função. Estas variáveis a, b e res só existem dentro da função. 15 Março 2017 Programação Estruturada; Funções 34
Funções function s = soma3(a,b,c) x = a + b s = x + c end >> soma3(1,3,5) x = 4 s = 9 ans = 9 >> z = soma3(1,3,5) x = 4 s = 9 z = 9 >> >> z z = 9 >> a error: a' undefined near ine 1 coumn 1 >> x error: x' undefined near ine 1 coumn 1 >> s error: 's' undefined near ine 1 coumn 1 >> 15 Março 2017 Programação Estruturada; Funções 35
Funções function x = incrementa(x) x = x + 1 end >> x = 4 x = 4 >> incrementa(x) x = 5 ans = 5 >> x x = 4 >> cear x >> error: x' undefined... >> y = 4 y = 4 >> z = incrementa(y) x = 5 z = 5 >> y = incrementa(y) x = 5 y = 5 >> x >> error: x' undefined... >> 15 Março 2017 Programação Estruturada; Funções 36
Funções function res = soma(a,b) end res = a+b Útimo detahe: Não queremos ver res no cácuo intermédio >> soma(2,5) res = 7 ans = 7 >> 15 Março 2017 Programação Estruturada; Funções 37
Funções function res = soma(a,b) end res = a+b ; Útimo detahe: Não queremos ver res no cácuo intermédio Usar ; >> soma(2,5) res = 7 ans = 7 >> >> soma(2,5) ans = 7 >> 15 Março 2017 Programação Estruturada; Funções 38
Funções Recapituando: function res = soma(x,y) Os parâmetros da função recebem cópias dos vaores dados como argumentos. As variáveis na função estão isoadas Não vêem nem são vistas fora da função. Só sai da função uma cópia do vaor da variáve indicada na assinatura da função: 15 Março 2017 Programação Estruturada; Funções 39
Funções Nota 1: A variáve (ou variáveis) designada para guardar o vaor devovido tem de ter um vaor atribuído no fina da função. function res = soma(a,b) s = a + b end >> x = soma(2,5) warning: soma: some eements in ist of return vaues are undefined x = [](0x0) >> 15 Março 2017 Programação Estruturada; Funções 40
Funções Nota 2: O interpretador verifica primeiro se há uma variáve com esse nome: Se fosse ao contrário, um novo ficheiro.m podia estragar um programa já existente. >> soma = 0 soma = 0 >> s = soma(2,5) function res = soma(a,b) s = a + b end >> error: A(I,J): row index out of bounds; vaue 2 out of bound 1 >> cear soma >> s = soma(2,5) >> s = 7 >> 15 Março 2017 Programação Estruturada; Funções 41
Um Probema Cacuar ph do ácido benzóico (mas pode ser de outro ácido.) Variáveis (parâmetros do probema) K a, C i Passos semehantes Fórmua resovente para obter x Cacuar ogaritmo de base 10 para ph 15 Março 2017 Programação Estruturada; Funções 42
Um Probema Cacuar ph do ácido benzóico 0.01M C 6 H 5 COOH H + + C 6 H 5 COO - K a = 6.5 x 10-5 (constante de dissociação mais depois) Como resover sendo x = [H + ] = [C 6 H 5 COO - ] K a = x 2 / (C i x) x 2 + K a x C i K a = 0 ph = - og 10 (x) 15 Março 2017 Programação Estruturada; Funções 43
Como impementar Compreender totamente o probema dados de entrada resutado e saída 15 Março 2017 Programação Estruturada; Funções 44
Como impementar Compreender totamente o probema Agoritmo decompor o probema saber como resover cada parte Usar fórmua resovente para obter x Cacuar -ogaritmo de x 15 Março 2017 Programação Estruturada; Funções 45
Como impementar Compreender totamente o probema Agoritmo Abstrair e generaizar ph para quaisquer vaores de K a e C i não é só para o ácido benzóico a maior raiz de uma equação quadrática com a positivo x 2 + K a x C i K a = 0 pode ser úti noutros casos 15 Março 2017 Programação Estruturada; Funções 46
Como impementar Compreender totamente o probema Agoritmo Abstrair e generaizar Impementação Precisamos das assinaturas function x = raizmaior(a,b,c) cacua a maior raiz pea fórmua resovente function ph = cacuaph(ka,ci) cacua o ph usando raizmaior 15 Março 2017 Programação Estruturada; Funções 47
Como impementar Apesar de ainda não estarem impementadas as funções auxiiares, a função cacuaph já pode ser competamente definida. function ph = cacuaph(ka, Ci) % cacuaph(ka, Ci) % cacua o ph de um acido fraco monoprotico, dados: % Ka: constante de dissociacao % Ci: concentracao H = raizmaior(1, ka, -Ka*Ci) x 2 + K a x C i K a = 0 ph = -og10(h) end Naturamente temos de impementar e testar as funções auxiiares, antes de poder testar esta função. 15 Março 2017 Programação Estruturada; Funções 48
Como impementar A função raizmaior pode ser cacuada a partir duma função que devova as raízes de uma equação do 2º grau. No entanto podemos simpificar esta função, retornado apenas o vaor da maior raiz (com o + na fórmua resovente) e sem nos preocuparmos com os casos de raízes imaginárias. function x = raizmaior(a, b, c) % raizmaior(a, b, c) % cacua a maior raiz da equação de grau 2 % com termos a, b, c d = sqrt(b^2-4*a*c) x = (-b + d)/(2*a) end 15 Março 2017 Programação Estruturada; Funções 49
Testes Unitários É importante testar cada função individuamente é mais fáci diagnosticar e corrigir erros se sabemos onde ocorrem depois da função estar impementada e testada já não precisamos pensar nessa parte do probema 15 Março 2017 Programação Estruturada; Funções 50
Testes Unitários Testar casos diferentes pode haver erros de execução em certas condições pode não dar o resutado certo em certos casos Testar casos com resutado conhecido só assim podemos identificar erros ógicos e numéricos, que não produzem mensagens de erro. 15 Março 2017 Programação Estruturada; Funções 51
Testar a Função Pensamos num caso com soução conhecida. x 2-4x + 4 = 0 (a = 1, b = -4, c = 4) deve dar x = 2 Experimentamos >> raizmaior(1,-4,4) ans = 2 >> 15 Março 2017 Programação Estruturada; Funções 52
Testar a Função Pensamos noutro caso com soução conhecida. x 2 = 0 (a = 1, b = 0, c= 0) deve dar x = 0 Experimentamos este outro caso >> raizmaior(1, 0, 0) ans = 0 >> Experimentamos... 15 Março 2017 Programação Estruturada; Funções 53
Testar a Função Uma vez testadas as funções auxiiares já se pode testar a função principa. function ph = cacuaph(ka, Ci) % cacuaph(ka, Ci) % cacua o ph de um acido fraco monoprotico, dados: % Ka: constante de dissociacao % Ci: concentracao H = raizmaior(1, ka, -Ka*Ci) ph = -og10(h) end >> cacuaph(6.5e-5,0.01) ans = 3.1110 >> O mesmo resutado que se obteve com o script benzoico 15 Março 2017 Programação Estruturada; Funções 54
Decomposição de Funções Decompor em funções Vantagens Divide o probema em partes menores podemos pensar em cada tarefa individuamente Permite testes unitários Permite construir programas compexos dentro de function end o código fica isoado Permite reutiizar código e.g. raizmaior pode servir noutros casos Permite obter aprovação a ICE... 15 Março 2017 Programação Estruturada; Funções 55
Um Probema Semehante Fazer a mesma coisa, mas dando massa moar, massa em soução, voume e K a. e.g. qua o ph de 0.01g de ácido benzóico em 0.250 dm3? Decompor o probema Cacuar concentração Cacuar ph esta parte já está feita 15 Março 2017 Programação Estruturada; Funções 56
Um Probema Semehante ph dada a massa moar, massa em soução, voume e Ka. function x = raizmaior(a,b,c) cacua a maior raiz da equação quadrática que dá a concentração de [H+] function ph = cacuaph(ka,ci) cacua o ph a partir da constante de dissociação e a concentração inicia usando raizmaior function ph = phmassvo(mass,vo,massmo,ka) cacua concentração e chama cacuaph 15 Março 2017 Programação Estruturada; Funções 57
Um Probema Semehante ph dada a massa moar, massa em soução, voume e K a. function ph = phmassvo(mass, vo, massmo, Ka) % phmassvo(mass, vo, massmo, Ka) % cacua o ph de um acido fraco monoprotico, dados: % mass: massa do acido % vo: voume da soucao % massmo: massa moar do acido % Ka: constante de dissociacao Ci = (mass/massmo)/vo; % concentracao moar inicia ph = cacuaph(ka, Ci) end 15 Março 2017 Programação Estruturada; Funções 58
Um Probema Semehante Podemos iguamente testar esta nova função. function ph = phmassvo(mass, vo, massmo, Ka) % phmassvo(mass, vo, massmo, Ka) % cacua o ph de um acido fraco monoprotico, dados: % mass: massa do acido % vo: voume da soucao % massmo: massa moar do acido % Ka: constante de dissociacao Ci = (mass/massmo)/vo; % concentracao moar inicia ph = cacuaph(ka, Ci) end >> phmassvo(1.2212,1,122.12,6.5e-5) ans = 3.1110 >> phmassvo(0.01,0.25,122.12,6.5e-5) ans = 3.9319 resutado anterior resutado correcto 15 Março 2017 Programação Estruturada; Funções 59
Testes: quatro tipos de erro Erro de sintaxe na interpretação do código fonte parênteses, picas, operadores em fata, Erros de afectação >> 6 + * 12 parse error: syntax error >>> 6 + * 12 ^ >> a + 2 = 6 parse error: invaid eft hand side of assignment >>> a+2 = 6 ^ 15 Março 2017 Programação Estruturada; Funções 60
Testes: quatro tipos de erro Erro de execução o programa é interrompido variáve não definida, função não definida, >> cear x >> y = x + 1 error: 'x' undefined near ine 1 coumn 5 >> x = f(5) error: f' undefined near ine 1 coumn 5 >> 15 Março 2017 Programação Estruturada; Funções 61
Testes: quatro tipos de erro Erro ógico não há mensagem de erro mas o resutado está errado function x = raizmaior(a, b, c) % raizmaior(a, b, c) d = sqrt(b^2-4*a*c) x = (-b + d)/ 2 % ERRO: fata o a no denominador end Só podem ser detectados através dos testes (unitários) >> raizmaior(1, -4, 4) ans = 2 >> raizmaior(2, -4, 2) ans = 2 >> resutado correcto?? com a = 1 o erro não se revea resutado incorrecto!! ans deveria ser 1 15 Março 2017 Programação Estruturada; Funções 62
Testes: quatro tipos de erro Erro numérico se resutados das operações aritméticas não são exactos a fata de precisão pode afectar a saída do programa. >> x = sin(pi) x = 1.2246e-16 >> 2 - sqrt(2)^2 ans = -4.4409e-16 >> Especiamente importantes se os cácuos são iterados um número muito grande de vezes 15 Março 2017 Programação Estruturada; Funções 63
Representação de Inteiros Um número inteiro pode ser representado com uma combinação de bits. em base 2 2 bits, 2 2 possibiidades 00 01 10 11 4 bits, 2 4 possibiidades 0000 0001 1111 8 bits (1 byte), 2 8 = 256 possibiidades 00000000 11111111 em binário 0 255 em decima 15 Março 2017 Programação Estruturada; Funções 64
Representação de Inteiros Um número inteiro pode ser representado com uma combinação de bits. por omissão, MATLAB usa 32 bits para representar cada número inteiro 2 32 = 4294967296 combinações um bit para o sina -2147483648 2147483647 intmin intmax NOTA: Cácuos que utrapassem estes imites dão erro 15 Março 2017 Programação Estruturada; Funções 65
Representação de Inteiros 32 bits para representar um inteiro Funções (constantes) intmax e intmin >> intmax ans = 2147483647 >> intmax+10 ans = 2147483647 >> (intmax+10)-intmax ans = 0 >> intmin ans = -2147483648 >> intmin -10 ans = -2147483648????????? 15 Março 2017 Programação Estruturada; Funções 66
Representação de Reais Um número rea é representado com 64 bits* (vírgua futuante) Sina (+, -) : 1 bit * Em precisão dupa, por omissão em MATLAB. Em precisão simpes são 32 bits. Expoente: 11 bits (8) Fracção: 52 bits (23) r = (-1) Sina Fracção 2 Expoente Sina Expoente Fracção 15 Março 2017 Programação Estruturada; Funções 67
Representação de Reais Maior vaor: reamax: ±1.7977 10 +308 ±3.4028 10 38 em precisão simpes Menor vaor não nuo reamin: ±2.2251 10-308 ±1.1755 10-38 em precisão simpes Precisão reativa (épsion) eps: ±2.2204x 10-16 ±1.1921 x 10-7 em precisão simpes 15 Março 2017 Programação Estruturada; Funções 68
Representação de Reais Precisão reativa (épsion) eps: ±2.2204x 10-16 ±1.1921 x 10-7 em precisão simpes O menor número que somado a 1 dá um resutado diferente de 1: >> eps ans = 2.2204e-016 >> (1+eps) - 1 ans = 2.2204e-016 >> eps/2 ans = 1.1102e-16 >> (1+eps/2) - 1 ans = 0??? 15 Março 2017 Programação Estruturada; Funções 69
Representação de Reais Resumindo: Todos os dados no computador são sequências de bits. A memória é imitada (64 bits para os números), por isso a precisão é imitada. Normamente não há probema, mas atenção aos arredondamentos 15 Março 2017 Programação Estruturada; Funções 70
Scripts vs Functions Em ICE os ficheiros de script são opcionais ficheiros de código fonte que não definem uma função podem ser úteis para testes e desenvovimento são úteis quando utiizam programas reprodutibiidade, registo dos argumentos, conveniência mas em ICE não vamos pedir (nem querer) que entreguem os vossos programas como scripts. Sempre funções 15 Março 2017 Programação Estruturada; Funções 71
Scripts vs Functions Funções function end são fundamentais vão precisar deas para tudo em ICE exercícios, trabahos, testes, exame os programas que entregam devem ser executados chamando uma função. isto garante que o programa é independente do que se faça antes ou depois. sem saber escrever funções não se faz praticamente nada em MATLAB... 15 Março 2017 Programação Estruturada; Funções 72
Cico de Vida do Código Edição do código fonte escrito, guardado em ficheiros.m Interpretação do código fonte o interpretador traduz as instruções em instruções para o CPU Execução o CPU executa o programa Testar e avaiar o resutado e votar à edição as vezes que for preciso... 15 Março 2017 Programação Estruturada; Funções 73
Estio de Código O código fonte serve para o interpretador executar o programa para nós (quem?) percebermos o programa Código difíci de perceber terá mais erros é mais difíci de corrigir, mehorar, aterar ou reaproveitar dá pior nota a ICE 15 Março 2017 Programação Estruturada; Funções 74
Estio de Código Nomes de variáveis: Descritivos, começando em minúscua e indicando diferentes paavras com maiúscua. Exempos: mass, vo, massmo function ph = phmassvo(mass, vo, massmo, Ka) % phmassvo(mass, vo, massmo, Ka) % cacua o ph de um acido fraco monoprotico, dados: % mass: massa do acido % vo: voume da soucao % massmo: massa moar do acido % Ka: constante de dissociacao Ci = (mass/massmo)/vo; % concentracao moar inicia ph = cacuaph(ka, Ci) end 15 Março 2017 Programação Estruturada; Funções 75
Estio de Código Nomes de variáveis: Excepção quando os nomes correspondem a uma convenção prévia. Nesse caso os nomes das variáveis devem respeitar a convenção esperada. Exempos: a, b, c e x na fórmua resovente, ou Ka, Ci e ph function x = raizmaior(a, b, c) % raizmaior(a, b, c) d = sqrt(b^2-4*a*c) x = (-b + d)/ 2 % ERRO: fata o a no denominador end 15 Março 2017 Programação Estruturada; Funções 76
Estio de Código Nomes de funções: Devem descrever o que a função faz. Há três convenções comuns: só minúscuas, (menos probemas com nomes de ficheiros) minúscuas e maiúscuas (e.g. phmassvo) ou underscore (_) para separar temos (e.g. ph_mass_vo) function ph = phmassvo(mass, vo, massmo, Ka) % phmassvo(mass, vo, massmo, Ka) %... Ci = (mass/massmo)/vo; % concentracao moar inicia ph = cacuaph(ka, Ci) end 15 Março 2017 Programação Estruturada; Funções 77
Estio de Código Indentação: Devem descrever o que a função faz. Cada boco de código é ainhado à esquerda e indentado para indicar a que parte pertence (votaremos a isto nas próximas auas quando o código se tornar mais compexo). function ph = phmassvo(mass, vo, massmo, Ka) % phmassvo(mass, vo, massmo, Ka) %... Ci = (mass/massmo)/vo; % concentracao moar inicia ph = cacuaph(ka, Ci) end 15 Março 2017 Programação Estruturada; Funções 78
Estio de Código Inteigibiidade: Cada inha de código deve corresponder a um passo do programa fáci de perceber e faça sentido naquee contexto. Também se deve evitar inhas demasiado ongas, dividindo expressões compexas em vários passos. function ph = cacuaph(ka, Ci) % cacuaph(ka, Ci) % cacua o ph de um acido fraco monoprotico, dados: % Ka: constante de dissociacao % Ci: concentracao H = raizmaior(1, ka, -Ka*Ci) ph = -og10(h) end 15 Março 2017 Programação Estruturada; Funções 79
Estio de Código Documentação e comentários: As funções devem conter documentação que expique o seu funcionamento usando a função hep. Outros comentários também devem ser acrescentados sempre que forem úteis para escarecer agum ponto do funcionamento do código. function ph = phmassvo(mass, vo, massmo, Ka) % phmassvo(mass, vo, massmo, Ka) %... Ci = (mass/massmo)/vo; % concentracao moar inicia ph = cacuaph(ka, Ci) end 15 Março 2017 Programação Estruturada; Funções 80
Estio de Código Mais (muito mais...) sobre estio em: MATLAB Programming Stye Guideines, por Richard Johnson, 2003 ver http://www.datatoo.com/prod02.htm 15 Março 2017 Programação Estruturada; Funções 81
Resumo Programação estruturada Decompor um probema compexo em probemas mais simpes E assim por diante, até ter probemas eementares Impementar souções em móduos autónomos pensar primeiro na assinatura da função testar bem depois de impementar Abstracção e generaização Abstrair dos detahes do probema Generaizar a soução 15 Março 2017 Programação Estruturada; Funções 82
Resumo Perceber o enunciado o que é fornecido e pedido Perceber o probema o que se tem de fazer Conceber o agoritmo tarefas, funções, assinatura de cada uma Impementar cada parte do programa e testar, testar, testar... 15 Março 2017 Programação Estruturada; Funções 83
Resumo Estio de código Nome de função deve ser descritivo usar umas das 3 convenções Nome de variáve começando em minúscua e com maiúscuas a indicar composição de paavras excepto variáveis que se espera obedecer a outras convenções (Ka, ph,...) Indentação, documentação e comentários 15 Março 2017 Programação Estruturada; Funções 84
Para estudar a aua de hoje Recomendado Physica Modeing in MATLAB Capítuo 2 todo Capítuo 5, só secções 5.1 a 5.5 Opciona Manua do Octave Secções 11.1 e 11.9 (tem mais matéria do que é dada nesta discipina) 15 Março 2017 Programação Estruturada; Funções 85
Dúvidas? 15 Março 2017 Programação Estruturada; Funções 86