Informática para Ciências e Engenharias (B) 2016/17. Teórica 2

Documentos relacionados
Informática para Ciências e Engenharias (B) 2015/16. Teórica 2

Informática para Ciências e Engenharias 2013/14. Teórica 2

Informática para Ciências e Engenharias (B) 2015/16. Teórica 3

Informática para Ciências e Engenharias (B) 2016/17. Teórica 3

Informática para Ciências e Engenharias (B) 2015/16. Teórica 5

Informática para Ciências e Engenharias (B) 2015/16. Teórica 4

Informática para Ciências e Engenharias (B) 2015/16. Teórica 9

3 - Programação Estruturada

ICE-B. 4 - Implementação. Ludwig Krippahl

Informá(ca para as Ciências e Engenharias Versão : C (Engenharia Civil) Pedro Barahona 2016 / 17

4 - Implementação ICE-B. Ludwig Krippahl 3/13/2019 ICE-B-04

Informática para Ciências e Engenharias (B) 2015/16. Teórica 8

Informática para Ciências e Engenharias (B) 2016/17. Teórica 1

Informática para Ciências e Engenharias 2013/14. Teórica 3

Informática para Ciências e Engenharias (B) 2015/16. Teórica 1

Informática para Ciências e Engenharias 2013/14. Teórica 7

Informática para Ciências e Engenharias 2014/15. Teórica 7

Na figura abaixo, a balança está em equilíbrio e as três melancias têm o mesmo peso. Nessas condições, qual é o peso (em kg) de cada melancia?

Informá(ca para as Ciências e Engenharias Versão : C (Engenharia Civil) Aula 10. Pedro Barahona 2016 / 17

Informática para as Ciências e Engenharias Versão : C (Engenharia Civil) Aula 10. Pedro Barahona 2018 / 19

A linguagem matemática

Análise matricial de estruturas não-lineares usando o Método de Newton.

A linguagem matemática

ANÁLISE COMPLEXA E EQUAÇÕES DIFERENCIAIS TESTE 2A - 15 DE JUNHO DE DAS 11H. Apresente e justifique todos os cálculos. dy dt = y t t ; y(1) = 1.

Informática para Ciências e Engenharias 2014/15. Teórica 4

Informática para Ciências e Engenharias (B) 2015/16. Teórica 11

ÇÃO COM OBJECTOS PROGRAMAÇÃ. Programação com Objectos. Programação com Objectos INSTRUÇÕES DE CONTROLO ÍNDICE. Nuno Mamede

Informática para Ciências e Engenharias (B) 2015/16. Teórica 10

Recordando operações

Recordando operações

Um dos conceitos mais utilizados em Matemática

Calculando áreas. Após terem sido furadas, qual delas possui maior área?

Informática para Ciências e Engenharias (B) 2015/16. Teórica 6

Triângulos especiais

Calculando áreas. Após terem sido furadas, qual delas possui maior área?

As combinações. combinatória que envolviam o princípio multiplicativo e as permutações.

Podemos utilizar o cálculo do determinante para nos auxiliar a encontrar a inversa de uma matriz, como veremos à seguir.

Operando com potências

Breve resolução do e-fólio B

Informática para Ciências e Engenharias (B) 2016/17. Teórica 9

Informática para Ciências e Engenharias 2012/13. Teórica 9

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

PROGRAMAÇÃO ORIENTADA A OBJETOS: Introdução

Operando com potências

Informática para Ciências e Engenharias (B) 2016/17. Teórica 10

Num determinado jogo de fichas, os valores

TÉCNICO EM MANUTENÇÃO E SUPORTE EM INFORMÁTICA FORMA SUBSEQUENTE. Professora: Isabela C. Damke

Informática para Ciências e Engenharias (B) 2015/16. Teórica 7

Apresentação. Informação geral + Conceitos iniciais

ANÁLISE MATEMÁTICA IV FICHA SUPLEMENTAR 5 EQUAÇÕES DIFERENCIAIS PARCIAIS E TRANSFORMADA DE LAPLACE

Informática para Ciências e Engenharias 2014/15. Teórica 9

Computação e Linguagem de Programação

Informática para Ciências e Engenharias (C) Trabalho Prático /18

8.5 Cálculo de indutância e densidade de energia magnética

Programação Python. Nesta aula... 1 Programação. 2 Python. Operadores e Operandos Variáveis, Expressões, Instruções Funções Ciclos Comentários

O triângulo é uma figura geométrica muito. Você já sabe que o triângulo é uma figura geométrica de:

3. Linguagem de Programação C

A função f(x) = x é a função modular, cujo gráfico. A função g(x) = 1 - x é a função f(x) transformada.

Na natureza nada se cria, nada se perde, tudo se transforma

Computação e Linguagem de Programação

Informática para Ciências e Engenharias B

Triângulos. O triângulo é uma figura geométrica muito. Para pensar. Nossa aula

Perfis Importantes no Scrum

Você já percebeu que os gráficos são cada vez. Relatórios de empresas Análises governamentais Relatórios de pesquisas Balanços financeiros

Informática para Ciências e Engenharias-B 2018/19

Técnicas de Programação

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

A Análise de Causa Raiz pode ser uma das ferramentas mais importantes que sua organização pode ter nas mãos.

Informática para Ciências e Engenharias 2014/15. Teórica 8

DECivil Departamento de Engenharia Civil, Arquitectura e Georrecursos. Apresentação. Computação e Programação (CP) 2013/2014.

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

O círculo e o número p

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

Aula 12: Funções. CI208 - Programação de Computadores. Prof. MSc. Diego Roberto Antunes

XXVII Olimpíada Brasileira de Matemática GABARITO Segunda Fase

FORMAÇÃO CONTINUADA EM MATEMÁTICA FUNDAÇÃO CECIERJ/CONSÓRCIO CEDERJ

Detecção de Infração em faixa de pedestres sem semáforos utilizando visão computacional e redes neurais

Aula teórica 7. Preparado por eng.tatiana Kovalenko

Exercícios de Programação e Computação para Arquitectura. António Menezes Leitão

Unidade 4: Introdução à Lógica de Programação - Parte II Português Estruturado - Versão Estácio Prof. Daniel Caetano

Ambiente Scilab Variáveis, expressões, comando de atribuição Entrada e Saída básica

Do que são formados os átomos?

Um Método para o Cálculo da Inversa de Matrizes Simétricas e Positivas Definidas em Bloco

Algoritmos e Estruturas de Dados I

Inteligência Computacional Aula 2 - Introdução ao MatLab Graduação /2

Programação em Matlab. Apenas Âmbito e Erros de programação

CPV O Cursinho que Mais Aprova na GV

Introdução à linguagem de programação C. Alexandre Mota

Áreas de Figuras Planas: Resultados Básicos - Parte 1. Nono Ano. Autor: Prof. Ulisses Lima Parente Revisor: Prof. Antonio Caminha M.

4 DEFINIÇÃO DA GEOMETRIA, MALHA E PARÂMETROS DA SIMULAÇÃO

Método dos Deslocamentos

Unidade 4: Introdução à Lógica de Programação - Parte II

Os opostos se atraem A U L A. O que você vai aprender. Seria bom já saber. Isto lhe interessa

Introdução à Programação. João Manuel R. S. Tavares

5. Expressões aritméticas

Transcrição:

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