• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
96
0
0

Texto

(1)

Informática para Ciências e

Engenharias (B)


2015/16

(2)

Na aula de hoje

l  Decomposição de problemas

Abstracção, generalização e algoritmos

l  Ficheiros e código fonte

scripts, funções e como escrever código

l  Testes unitários

l  Ciclo de vida de um programa l  Tipos de erros.

(3)

Problema

l  Calcular pH do ácido benzóico 0.01M

C6H5COOH ↔ H+ + C

6H5COO-

Ka = 6.5 x 10-5 % Constante de Dissociação

Ci = (m/mmol/vol) % Concentração Molar Inicial

l  Como resolver

sendo x = [H+] = [C

6H5COO- ] % Concentração Iónica

Ka = x2 / (C

i – x)

x2 + K

a x – Ci Ka = 0

(4)

Como implementar, opção 1

l  Escrever directamente

Raiz quadrada: sqrt( )

Logaritmo de base 10: log10( )

(5)

Como implementar, opção 1

l  Escrever directamente

Raiz quadrada: sqrt( )

Logaritmo de base 10: log10( )

(6)

Como implementar, opção 1

l  Escrever directamente

Má solução

•  mais difícil de corrigir erros

•  temos de escrever tudo cada vez que precisamos

calcular o pH

•  só viável com problemas simples

•  quanto maior a lista de instruções mais provável é haver erros e mais difícil é de os identificar

(7)

Como implementar, opção 2

l  Criar um script

um script Matlab é um ficheiro contendo código fonte e gravado com a extensão .m

l  Chamar o script

Escrever o nome do script (sem o .m)

•  se não existe variável ou função definida, o

interpretador procura o ficheiro nome.m

•  tem de estar na pasta de trabalho (ou numa pasta

(8)

Ficheiros

l  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 pelo SO a um identificador único

•  caminho e nome

•  C:\My Documents\ICE\teste.m

(9)

Ficheiros

l  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 pela extensão

•  .pdf, .txt, .jpg, .wav, .doc, .mp3

•  associada ao programa que interpreta o ficheiro

•  (há excepções, depende do SO e, especialmente, do

(10)

Ficheiro de Código Fonte

l  Na linguagem MATLAB, um ficheiro .m

É interpretado como texto, código fonte

Quando o interpretador encontra um identificador verifica

•  1º se é uma variável definida

•  2º se é uma função já carregada

•  3º se há um ficheiro com esse nome e extensão .m

(11)

Editar o Código Fonte

l  Ficheiro: benzoico.m

Utilizador

(12)

Executar o Código Fonte

l  Ficheiro: benzoico.m

Utilizador

•  dá ao interpretador o comando para executar o código no ficheiro.

Interpretador

•  carrega o ficheiro, e interpreta-o;

(13)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

(14)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

ficheiro benzoico.m

(15)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

ficheiro benzoico.m

(16)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

ficheiro benzoico.m

(17)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

ficheiro benzoico.m

l  Executar

(18)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

ficheiro benzoico.m

l  Executar

octave:26> cd 'C:\My Documents\ICE'

octave:27> benzoico Ci = 0.010000 Ka = 6.5000e-005 x = 7.7438e-004 pH = 3.1110 octave:28>

Esta é a pasta onde guardámos o ficheiro. cd para “change directory”. Também pode ser:

(19)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

ficheiro benzoico.m

l  Executar

octave:26> cd 'C:\My Documents\ICE' octave:27> benzoico Ci = 0.010000 Ka = 6.5000e-005 x = 7.7438e-004 pH = 3.1110 octave:28>

(20)

Como Implementar, Opção 2

l  Criar um script

Notepad ++ (ou equivalente)

ficheiro benzoico.m

l  Executar

octave:26> cd 'C:\My Documents\ICE' octave:27> benzoico Ci = 0.010000 Ka = 6.5000e-005 x = 7.7438e-004 pH = 3.1110 octave:28>

Isto é o eco dos cálculos no script.

(21)

Como Implementar, Opção 2

l  Testar

Nota: Ecos eliminados por ;

octave:28> benzoico pH = 3.1110

(22)

Como Implementar, Opção 2

l  Criar um script

Vantagens

•  mais fácil de executar e de editar

•  comentários (mais inteligível)

•  fica guardado

Problemas

•  fica tudo junto

•  variáveis comuns a todo o programa

•  diferentes tarefas não são separadas

(23)

Programação Estruturada

(24)

Programação Estruturada

l  Decompor o problema em partes autónomas (dividir para

conquistar)

perceber o problema e todas as tarefas

abstrair e generalizar cada tarefa

l  Conceber o algoritmo

perceber como resolver cada tarefa

perceber como as várias partes encaixam

(25)

Algoritmo

l  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

(26)

Algoritmo

l  Conjunto finito de instruções.

No sentido estrito, operações sobre símbolos

(27)

“Algoritmo da torrada”

l  Pegar no pão

l  Se faca na bancada,

Pegar na faca

l  Caso contrário

Ir buscar faca à gaveta

l  Cortar fatia

l  Pôr na torradeira, ligar l  Enquanto não está pronta

(28)

“Algoritmo da torrada”

l  Pegar no pão

l  Se faca na bancada,

Pegar na faca

l  Caso contrário

Ir buscar faca à gaveta

l  Cortar fatia

l  Pôr na torradeira, ligar l  Enquanto não está pronta

Esperar

(29)

“Algoritmo da torrada”

l  Pegar no pão l  Obter faca l  Cortar fatia

l  Pôr na torradeira, ligar l  Enquanto não está pronta

Esperar

l  Se faca na bancada,

• 

Pegar na faca

l  Caso contrário

(30)

“Algoritmo da torrada”

l  Pegar no pão l  Obter faca l  Cortar fatia

l  Pôr na torradeira, ligar l  Enquanto não está pronta

Esperar

(31)

“Algoritmo da torrada”

l  Pegar no pão l  Obter faca l  Cortar fatia

l  Pôr na torradeira, ligar

l  Torrar l  Enquanto não está pronta

(32)

Programação Estruturada

l  Resolver problemas complexos através de problemas simples

um de cada vez

l  Hierarquizar os problemas

Abstrair dos detalhes concretos

Generalizar soluções

Decompor as tarefas e implementar partes

•  Testar cada uma

(33)

Funções

l  Entre function e end

As variáveis são locais e estão isoladas

•  mesmo que tenham o mesmo nome

Nota: A variável a dentro da função é independente da variável a fora da função.

Função no ficheiro igualdois.m:

(34)

Funções

l  Entre function e end

As variáveis são locais e estão isoladas

Nota: A variável a dentro da função só está acessível na função (dentro do seu contexto).

Função no ficheiro igualdois.m:

function igualdois a = 2 end octave:3> clear a octave:4> igualdois a = 2 octave:5> a

error: `a' undefined near line 5 column 1

(35)

Funções

l  Dentro do bloco function ... end

As variáveis são locais e estão isoladas

Não há acesso a variáveis exteriores

l  Permite estruturar o programa …

separar tarefas sem interferência

controlar entrada e saída

garantir que cada parte funciona

(36)

Funções

l  Normalmente queremos

fornecer valores (argumentos) à função

obter valores da função. (no ficheiro soma.m)

(37)

Funções

function res = soma(a,b)

res = a+b end

(38)

Funções

function res = soma(a,b)

res = a+b end

l  Nome da variável

(na função)

com o valor a devolver.

l  Operacionalmente:

quando chega ao end final, o

(39)

Funções

function res = soma(a,b)

res = a+b end

l  Nome da função

Para o interpretador encontrar a função o nome da função tem de ser igual ao

(40)

Funções

function res = soma(a,b)

res = a+b end

l  Parâmetros da função

variáveis da função que recebem os

argumentos, cujo valor se desconhece na

implementação usados na execução.

l  e.g: soma(5,10)

parâmetros: a, b

(41)

Funções

function res = soma(a,b)

res = a+b end

l  Os parâmetros a e b contêm cópias dos

argumentos fornecidos à função.

l  Estas variáveis a, b e res só existem

(42)

Funções

function x = incrementa(x)

x = x + 1

end x é cópia do valor

(43)

Funções

function res = soma(a,b)

res = a+b end

l  Último detalhe:

Não queremos ver res no cálculo intermédio

octave:16> soma(2,5) res = 7

ans = 7

(44)

Funções

function res = soma(a,b)

res = a+b end

l  Último detalhe:

Não queremos ver res no cálculo intermédio

Usar ;

octave:16> soma(2,5) ans = 7

octave:17>

(45)

Funções

l  Recapitulando:

function res = soma(x,y)

Os parâmetros da função recebem cópias dos valores dados como argumentos.

As variáveis na função estão isoladas

• 

Não vêem nem são vistas fora da função.

(46)

Funções

l  Nota 1:

A variável (ou variáveis) designada para guardar o valor devolvido tem de ter um valor atribuído no final da função.

function res = soma(a,b) c = a+b;

end

octave:24> a = soma(2,5)

error: value on right hand side of assignment is undefined

(47)

Funções

l  Nota 2:

O interpretador verifica primeiro se há uma variável com esse nome:

Se fosse ao contrário, um novo ficheiro .m podia estragar um programa já existente.

octave:21> soma = 0 soma = 0

octave:22> soma(2,5)

(48)

Um Problema

l  Calcular pH do ácido benzóico

(mas pode ser de outro ácido.)

l  Variáveis

Ka , Ci

l  Passos semelhantes

Fórmula resolvente para obter x

(49)

Um Problema

l  Calcular pH do ácido benzóico 0.01M

C6H5COOH ↔ H+ + C

6H5COO-

Ka = 6.5 x 10-5 (constante de dissociação – mais depois)

(50)

Como implementar

l  Compreender totalmente o problema

dados de entrada

(51)

Como implementar

l  Compreender totalmente o problema l  Algoritmo

decompor o problema

saber como resolver cada parte

•  Usar fórmula resolvente para obter x

(52)

Como implementar

l  Compreender totalmente o problema l  Algoritmo

l  Abstrair e generalizar

pH para quaisquer valores de Ka e Ci

•  não é só para o ácido benzóico

•  a maior raiz de uma equação quadrática com a positivo

pode ser útil noutros casos x2 + K

(53)

Como implementar

l  Compreender totalmente o problema l  Algoritmo

l  Abstrair e generalizar l  Implementação

Precisamos das assinaturas

•  function x = raizmaior(a,b,c)

•  calcula a maior raiz pela fórmula resolvente

(54)

Como implementar

l  Criamos raizmaior.m

(55)

Como implementar

l  Criamos raizmaior.m

(56)

Documentar a Função

l  Comentário explicando o funcionamento

Pode haver comentários noutras partes do código, mas o primeiro bloco contíguo de linhas de comentário, antes ou depois da assinatura da função, é mostrado pelo comando

(57)

Documentar a Função

l  Comentário explicando o funcionamento

octave:10> help raizmaior

`raizmaior' is a function from the file C:\ICE\raizmaior.m

calcula a raiz maior do polinomio ax^2+bx+c assumindo o coeficiente a positivo

(58)

Testar a Função

l  Pensamos num caso com solução conhecida.

(59)

Testar a Função

l  Pensamos noutro caso com solução conhecida.

x2 = 0 (a = 1, b = 0, c= 0)

•  deve dar x = 0

l  Experimentamos este outro caso

l  Experimentamos ...

octave:7> raizmaior(1,0,0) ans = 0

(60)

Testes Unitários

l  É importante testar cada função individualmente

é mais fácil diagnosticar e corrigir erros se sabemos onde ocorrem

(61)

Testes Unitários

l  Testar casos diferentes

pode haver erros de execução em certas condições

pode não dar o resultado certo em certos casos

l  Testar casos com resultado conhecido

(62)

Testes: quatro tipos de erro

l  Erro de sintaxe

na interpretação do código fonte

•  parênteses, plicas, operadores em falta, …

(63)

Testes: quatro tipos de erro

l  Erro de sintaxe l  Erro de execução

o programa é interrompido

•  variável não definida, função não definida, …

•  y = x+1 (sem ter definido x primeiro)

octave:1> y = x+1

(64)

Testes: quatro tipos de erro

l  Erro de sintaxe l  Erro de execução l  Erro lógico

(65)

Testes: quatro tipos de erro

l  Erro de sintaxe l  Erro de execução l  Erro lógico

l  Erro numérico

se resultados das operações aritméticas não são exactos a falta de precisão pode afectar a saída do programa.

(66)

Representação de Inteiros

l  Um número inteiro pode ser representado com uma

combinação de bits.

em base 2

•  2 bits, 22 possibilidades 00 01 10 11

•  4 bits, 24 possibilidades 0000 0001 … 1111

•  8 bits (1 byte), 256 possibilidades

•  00000000 … 11111111 em binário

(67)

Representação de Inteiros

l  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

•  232 = 4294967296 combinações

•  um bit para o sinal

(68)

Representação de Inteiros

l  32 bits para representar um inteiro

funções intmax e intmin

(69)

Representação de Reais

l  Um número “real” é representado com 64 bits* (vírgula flutuante)

Sinal (+, -) : 1 bit

Expoente: 11 bits (8)

Fracção: 52 bits (23)

(-1) Sinal × Fracção × 2 Expoente

* Em precisão dupla, por omissão em MATLAB. Em precisão simples são 32 bits.

(70)

Representação de Reais

l  Maior valor:

realmax: ±1.7977 × 10+308

•  ±3.4028 × 1038 em precisão simples

l  Menor valor não nulo

realmin: ±2.2251 × 10-308

•  ±1.1755 × 10-38 em precisão simples

l  Precisão relativa (épsilon)

eps: ±2.2204x 10-16

(71)

Representação de Reais

l  Precisão relativa (épsilon)

eps: ±2.2204x 10-16

•  ±1.1921 x 10-7 em precisão simples

l  O menor número que somado a 1 dá um resultado diferente de 1:

octave:15> (1+eps) - 1 ans = 2.2204e-016

(72)

Representação de Reais

l  Resumindo:

Todos os dados no computador são sequências de bits.

A memória é limitada (64 bits para os números), por isso a precisão é limitada.

Normalmente não há problema, mas atenção aos arredondamentos:

•  erros numérico

(73)

Como implementar

l  Decompor em

function x=raizmaior(a,b,c)

•  calcula a maior raiz pela fórmula resolvente

function pH=calculaph(Ka,Ci)

•  recebe os valores de Ka e Ci

•  usa a função raizmaior

(74)

Como implementar

l  Decompor

função raizmaior

(75)

Como implementar

octave:9> help calculaph

calculaph(Ka, Ci)

calcula o pH de um acido fraco monoprotico Ka: constante de dissociacao

Ci: concentracao inicial do acido octave:10> calculaph(6.5e-5,0.01)

(76)

Como implementar

l  Decompor em funções

Vantagens

•  Divide o problema em partes menores

•  podemos pensar em cada tarefa individualmente

•  Permite testes unitários

•  Permite construir programas complexos

•  dentro de function … end o código fica isolado

•  Permite reutilizar código

•  e.g. raizmaior pode servir noutros casos

(77)

Um Problema Semelhante

l  Fazer a mesma coisa, mas dando

•  massa molar,

•  massa em solução,

•  volume e

•  Ka.

•  e.g. qual o pH de 0.01g de ácido benzóico em 0.250 dm3?

l  Decompor o problema

Calcular concentração

Calcular pH

(78)

Um Problema Semelhante

l  pH dada a massa molar, massa em solução, volume e Ka.

function x = raizmaior(a,b,c)

•  calcula a raiz da equação quadrática que dá a

concentração de [H+]

function pH = calculaph(Ka,Ci)

•  calcula o pH a partir da constante de dissociação e a

concentração inicial usando raizmaior

(79)

Um Problema Semelhante

(80)

Um Problema Semelhante

l  teste (massa molar do ácido benzóico: 122.12)

octave:27> help phmassvol

`phmassvol' is a function from the file C:\ICE\phmassvol.m phmassvol(mass, vol, massMol, Ka)

calcula o pH de um acido fraco monoprotico mass: massa do acido

vol: volume da solucao massMol: massa molar

Ka: constante de dissociacao

octave:28> phmassvol(1.2212,1,122.12,6.5e-5) ans = 3.1110

(81)

Scripts vs Functions

l  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 desenvolvimento

são úteis quando utilizam programas

•  reprodutibilidade,

•  registo dos argumentos,

•  conveniência

l  mas em ICE não vamos pedir (nem querer) que entreguem os

(82)

Scripts vs Functions

l  Funções function … end são fundamentais

vão precisar delas para tudo em ICE

•  exercícios, trabalhos, 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.

(83)

Ciclo de Vida do Código

l  Edição do código fonte

escrito, guardado em ficheiros .m

l  Interpretação do código fonte

o interpretador traduz as instruções em instruções para o CPU

l  Execução

o CPU executa o programa

l  Testar e avaliar o resultado

(84)

Estilo de Código

l  O código fonte serve

para o interpretador executar o programa

para nós (quem ?) percebermos o programa

l  Código difícil de perceber

terá mais erros

é mais difícil de corrigir, melhorar, alterar ou reaproveitar

(85)

Estilo de Código

l  Nomes de variáveis:

Descritivos, começando em minúscula e indicando diferentes palavras com maiúscula.

(86)

Estilo de Código

l  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.

(87)

Estilo de Código

l  Nomes de funções: Devem descrever o que a função faz.

Há três convenções comuns:

•  só minúsculas, (menos problemas com nomes de ficheiros)

•  minúsculas e maiúsculas (e.g. phMassVol)

(88)

Estilo de Código

l  Indentação: Devem descrever o que a função faz.

(89)

Estilo de Código

l  Inteligibilidade:

Cada linha de código deve corresponder a um passo do

programa fácil de perceber e faça sentido naquele contexto.

(90)

Estilo de Código

l  Documentação e comentários:

As funções devem conter documentação que explique o seu funcionamento usando a função help.

(91)

Estilo de Código

l  Mais (muito mais...) sobre estilo em:

MATLAB Programming Style Guidelines, por Richard

Johnson, 2003

(92)

Resumo

l  Programação estruturada

Decompor um problema complexo em problemas mais simples

•  E assim por diante, até ter problemas elementares

•  Implementar soluções em módulos autónomos

•  pensar primeiro na assinatura da função

•  testar bem depois de implementar

l  Abstracção e generalização

Abstrair dos detalhes do problema

(93)

Resumo

l  Perceber o enunciado

o que é fornecido e pedido

l  Perceber o problema

o que se tem de fazer

l  Conceber o algoritmo

tarefas, funções, assinatura de cada uma

l  Implementar cada parte do programa

(94)

Resumo

l  Estilo de código

Nome de função deve ser descritivo

•  usar umas das 3 convenções

Nome de variável começando em minúscula e com maiúsculas a indicar composição de palavras

•  excepto variáveis que se espera obedecer a outras

convenções (Ka, pH, ...)

(95)

Para estudar a aula de hoje

l  Recomendado

Physical Modeling in MATLAB

•  Capítulo 2 todo

•  Capítulo 5, só secções 5.1 a 5.5

l  Opcional

Manual do Octave

•  Secções 11.1 e 11.9

(96)

Referências

Documentos relacionados

У оквиру парцеле, предвиђене су и интерне саобраћајнице као и 2 гаражна бокса од тога обезбеђено је 1гаражно место за паркирање инвалидног лица и

M ATERIAIS RESTAURADORES DEFINITIVOS : RESINAS COMPOSTAS FOTOPOLIMERIZÁVEIS  Usadas para todas as classes de cavidades  Sistema de polimerização física-luz.  Compostas

[r]

UDESC UDESC Camada de rede Camada de rede Tabela de rotas Protocolos de Roteamento Seleçao de caminho •RIP, OSPF, BGP Protocolo IP •convenções de endereçamento •Formato

Considerando o caso ótimo de rastreamento, onde apenas 1 atacante é encontrado, a análise dos filtros mostra que o Filtro de Bloom convencional em seu caso ótimo, onde

O browser contacta a máquina com aquele endereço IP na porta 80 para o protocolo HTTP... World

•   Neste caso, se as strings não tiverem o mesmo comprimento, as mais pequenas são preenchidas com brancos.. Acesso

l  Propagar os focos do incêndio.. Para todas as células internas da matriz que estejam a arder. Nota: Não queremos propagar as da fronteira para evitar sair dos limites da