Upload
tranlien
View
226
Download
0
Embed Size (px)
Citation preview
Informática para Ciências e Engenharias
2013/14
Teórica 4
2
Na aula de hoje... Controlo de execução
• condições if … elseif … else … end• operadores relacionais e lógicos
• Matrizes• criação e percursos em matrizes
• vectores e matrizes
• Exemplos• fórmula resolvente if … elseif … else
• cromatograma, GC if e for
• pauta de ICE for, if e matrizes
3
Controlo da execução
Sequência• instruções executadas por ordem
function• podemos passar a execução para um bloco
autónomo
for• repetir um número de vezes
4
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
Executar um bloco de código conforme a condição
5
Operadores Booleanos (logical)
Igual • == (Atenção: um igual, =, é atribuição)
Maior, menor, … ou igual • > < >= <=
Negação • ~
Diferente• ~=
6
Booleanos e comparações Booleano (logical): verdadeiro ou falso octave:34> 1==2ans = 0octave:35> 1==1ans = 1octave:36> [1,2,3]==[3,2,1]ans = 0 1 0 (compara cada elemento)octave:37> 'paulo'=='paula'ans = 1 1 1 1 0 (compara cada elemento)
7
Booleanos Booleano (logical),
• 0 é falso.
• 1 é verdadeiro (ou tudo o que não for zero) Constantes já definidas em MATLAB:
octave:34> true
ans = 1
octave:35> false
ans = 0
octave:36> ~true
ans = 0
octave:37> ~false
ans = 1
8
Comparar vectores (inc. strings)octave:28> 'abc'=='acc'
ans =
1 0 1
octave:29> 'abcd'=='acc'
error: … nonconformant arguments (op1 is 1x4, op2 is 1x3)
octave:29> [1 2 3] == [1 3 3]
ans =
1 0 1
octave:30> [1 2 3 4] == [1 3 3]
error: … nonconformant arguments (op1 is 1x4, op2 is 1x3)
Vectores são comparados elemento a elemento e têm de ter a mesma dimensão
9
Comparar stringsoctave:30> strcmp('abcd','acc')
ans = 0
octave:31> strcmp('abcd','abcd')
ans = 1
Especificamente com strings pode-se usar strcmp para saber se são iguais (devolve 1) ou diferentes (devolve 0).
10
Controlo condicional: if
Executa o corpo do if se a expressão for diferente de 0 (0 é falso)• Versão mais simples:
if expressão(corpo)
end
11
Controlo condicional: if
Exemplo: se x<25 soma 5
if x<25x=x+5;
end
octave:38> x=12;octave:39> if x<25> x=x+5;> endoctave:40> xx = 17octave:41> x=80;octave:42> if x<25> x=x+5;> endoctave:43> xx = 80
12
Operadores “e” e “ou”
Conjunção &&• A && B (A e B)
• Se A for falso B já não é avaliado
Disjunção ||• A || B (A ou B)
• Se A for verdadeiro B já não é avaliado
13
Controlo condicional: if
Exemplo: se x e y diferentes de 25, soma y
if x~=25 && y~=25x=x+y;
end
14
Controlo condicional: if
Exemplo: se x ou y forem 25 e nenhum for 5, soma y a x
if (x==25 || y==25) && x~=5 && y~=5
x=x+y;
end
15
Controlo condicional: if
Exemplo: se s não é vazia e se o primeiro carácter é A
if ~strcmp(s,'') && s(1)=='A'
(corpo)
end• a negação ~ tem precedência
• a conjunção && faz “curto circuito”
Importante não verificar a segunda parte se s for vazia (dá erro...)
16
Controlo condicional: if
Exemplo: não aceder fora do vectorif pos>=1 && pos<=length(v) && …
v(pos)>5
(corpo)
end• a conjunção && faz “curto circuito”
Importante não pedir v(pos) se pos<1 ou > length(v)
17
Controlo condicional: if
Dois ramos mutuamente exclusivos e um deles obrigatório
if condicao
(bloco 1)
else
(bloco 2)
end
18
Controlo condicional: if
Dois ramos mutuamente exclusivosif condicao1
(bloco 1)
elseif condicao2
(bloco 2)
end
19
Controlo condicional: if
Dois ramos mutuamente exclusivosif condicao1
(bloco 1)
elseif condicao2
(bloco 2)
end
Uma só palavra: elseif
Se for else if começa um novo bloco if dentro do bloco else
20
Controlo condicional: if
forma mais geralif condicao1
…
elseif condicao2
…
(elseif condicao3, 4, 5, …)
…
else
…
end
21
Exemplo 1: fórmula resolvente
22
Exemplo 1: fórmula resolvente
octave:5> rs=resolvente(-1,3,4)rs = -1 4
octave:6> -rs(1)^2+3*rs(1)+4ans = 0octave:7> -rs(2)^2+3*rs(2)+4ans = 0
teste:y = -x2+3x+4
23
Exemplo 2: conteúdo GC
No ADN, a fracção de GC• determina a temperatura de desnaturação
• (C e G formam 3 pontes de H)
• varia conforme a espécie
• é maior em regiões que codificam proteínas
• ...
24
Exemplo 2: conteúdo GC
Problema:• dada uma sequência de ADN numa string
• adnSeq=['ACAAGATGCCATTGTCCCCCGGC...
• determinar a fracção de GCfunction fracGC=fraccaogc(sequencia)
25
Exemplo 2: conteúdo GC
Algoritmo:function fracGC=fraccaogc(sequencia)
• Contar G
• Contar C
• fracGC= total / comprimento da sequência
26
Exemplo 2: conteúdo GC
Algoritmo:function fracGC=fraccaogc(sequencia)
• Sub problema: como contar?• vamos criar outra função
• pode ser genérica: contar ocorrências de um elemento num vector
function tot=conta(vector,elemento)
27
Exemplo 2: conteúdo GC
Contagens, somas, etc:Inicializar a variávelDepois acumular os valores pretendidos (para contagem, somar 1 a cada ocorrência)
octave:38> conta([1,2,3,2,3],2)ans = 2octave:39> conta('abcea','a')ans = 2octave:40> conta('ACTG','C')ans = 1
28
Ciclo for: índice ou elemento?
for f=1:length(vector) if vector(f)==elemento … endend
for f=vector if f==elemento … endend
Se precisamos de saber a posição (índice) de cada elemento no vector, criamos um vector novo 1:length(...)
Se só queremos os valores dos elementos do vector e não precisamos dos índices, podemos fazer a variável do ciclo percorrer directamente o vector.
29
Exemplo 2: conteúdo GC
Algoritmo:function fracGC=fraccaogc(sequencia)
• Já temos a função para contar• (implementada e testada)
totG = conta(sequencia,'G')
totC = conta(sequencia,'C')
fracGC= (totG+totC) / length(sequencia)
30
Exemplo 2: conteúdo GC
octave:44> fraccaogc('ATCG')ans = 0.50000octave:45> fraccaogc('ATCGCG')ans = 0.66667
GC
31
Exemplo 3: cromatografia
Temos um vector com um cromatograma:
32
Exemplo 3: cromatografia
Queremos as posições dos picos• onde é maior que os elementos adjacentes.
33
Exemplo 3: cromatografia
Algoritmo• receber o cromatograma, devolver picos
function picos=encontrapicos(cromatograma)
• para cada elemento do segundo ao penúltimo do cromatograma• se maior que anterior e maior que seguinte
• acrescentar a picos
34
Exemplo 3: cromatografia
35
Exemplo 3: cromatografia
Permite mudar de linha a meio de uma instrução. Pode tornar mais legível uma expressão complexa
36
Exemplo 3: cromatografia
Uma forma de acrescentar elementos ao vector. Exige redimensionar o vector a cada inserção, mas neste caso é um problema menor.
37
Exemplo 3: cromatografia
Testar:
plot(cromatograma)picos=encontrapicos(cromatograma)hold onfor f=picos plot([f,f],[cromatograma(f)-1,cromatograma(f)+1],'r');end
cromatograma
38
Matrizes
39
Matrizes
Uma matriz é uma estrutura de dados que guarda um número pré-definido de dados do mesmo tipo (tal como um vector).
Uma matriz corresponde a uma sequência de posições de memória (tal como um vector). Essas posições de memória estão agrupadas como numa tabela com L linhas e C colunas.
40
Matrizes
Criar matrizes• Indicar cada elemento, separando por vírgula
ou espaço os da mesma linha, e por ; as linhas• (em MATLAB um vector é uma matriz com 1 linha
ou 1 coluna)octave:8> m=[1,2,3;4,5,6]m =
1 2 3 4 5 6
41
Matrizes
Criar matrizes• Compondo matrizes ou vectores
octave:9> m2=[m;7:9]m2 = 1 2 3 4 5 6 7 8 9
octave:10> m3=[m2,(1:3)']m3 = 1 2 3 1 4 5 6 2 7 8 9 3
42
Matrizes
Criar matrizes• com funções zeros, ones, rand, etc.
octave:12> m4=rand(2,3)m4 = 0.65181 0.86373 0.87949 0.64315 0.57989 0.41006
octave:13> m5=ones(3,5)m5 = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
43
Matrizes
Acede-se a uma posição da matriz indicando os índices, inteiros positivos, da linha e coluna.• matriz(linhas,colunas)
Desta forma podemos ler ou alterar os valores guardados na matriz
44
Matrizes
Podemos aceder a partes da matriz indicando• matrix(vector das linhas, vector das colunas)
octave:53> mat(1:3,2)ans =
2 5 8
mat =
1 2 3 4 5 6 7 8 9
45
Matrizes
Podemos aceder a partes da matriz indicando• matrix(vector das linhas, vector das colunas)
• : indica tudooctave:54> mat(2:3,:)ans =
4 5 6 7 8 9
mat =
1 2 3 4 5 6 7 8 9
46
Matrizes
Podemos aceder a partes da matriz indicando• matrix(vector das linhas, vector das colunas)
• a ordem importaoctave:56> mat([1,3],[3,1])ans =
3 1 9 7
mat =
1 2 3 4 5 6 7 8 9
mat =
1 2 3 4 5 6 7 8 9
47
Matrizes
Compor matrizes numa maior• se encaixarem
octave:31> C = [A,B]C = 1 2 5 6 3 4 7 8
octave:32> D = [A;B]
D = 1 2 3 4 5 6 7 8
octave:29> A = [1,2;3,4]A = 1 2 3 4
octave:30> B = [5,6;7,8]B = 5 6 7 8
48
Matrizes
Também com strings• no Matlab as strings na
matriz têm de ter o mesmo comprimento
• no Octave as mais pequenas são preenchidas com espaços no fim
• cada célula é um carácter
octave:38> s = 'abc's = abcoctave:39> t = 'def't = defoctave:40> u = 'ghi'u = ghioctave:41> M = [s;t;u]M =
abcdefghi
octave:42> N = [s,t,u]N = abcdefghioctave:43>
matrizes
49
Exemplo 4 : pauta de ICE Objectivo
• A partir da uma tabela com os números e as avaliações dos testes e trabalhos, gerar a pauta da com o número e nota final de cada aluno de ICE
50
Exemplo 4 : pauta de ICE Perceber bem o problema
• dados de entrada numa tabela (matriz) com as notas dos vários elementos de avaliação • (Número, P1, P2, T1 e T2)
60133 3.3 1.6 7.4 7.060136 4.9 3.0 4.8 10.460137 11.3 14.9 14.8 3.960145 6.3 16.4 16.3 6.860148 8.0 11.7 17.0 5.960157 8.4 2.1 16.6 4.660161 0.1 12.4 10.6 5.460166 15.3 7.6 18.0 14.360175 12.1 10.0 8.0 6.1
...
51
Exemplo 4 : pauta de ICE Perceber bem o problema
• dados de entrada numa tabela (matriz) com as notas dos vários elementos de avaliação
• resultado: uma pauta indicando• sem frequência (-1)
• nota (0 a 20) 60133 -1 60136 -1 60137 10 60145 11 60148 10 60157 -1 60161 7 ...
52
Exemplo 4 : pauta de ICE Critérios a implementar
• frequência• P1≥9.5 ou P2≥9.5 se não tem, -1
• nota mínima na componente TP• CompTP = 0.4*T1 + 0.6*T2 arredondada a 0.1
• CompTP ≥ 8.5 se não, NF = CompTP arredondada
• nota final• CompL = 0.5* P1 + 0.5*P2 arredondada a 0.1
• Nota Final = 0.4*CompL + 0.6*CompTP arredondada
53
Exemplo 4 : pauta de ICE Estrutura do programa
• função principalfunction pauta = calculapauta(notas)
• recebe a matriz com as notas
• calcula a nota de cada aluno
• podemos remeter isto para outra função
• devolve a pauta com o número na primeira coluna e a nota na segunda
54
Exemplo 4 : pauta de ICE Estrutura do programa
• função principalfunction pauta = calculapauta(notas)
• cálculo da nota de cada alunofunction nota = calculanota(notas)
• recebe um vector com [P1, P2, T1, T2]
• calcula CompTP e CompL
• arredondar às décimas, fazemos noutra função
• devolve -1 se não obteve frequência, CompTP arredondada se não teve nota mínima nesta, ou a média ponderada de CompTP e CompL arredondada.
55
Exemplo 4 : pauta de ICE Generalizar
• nas notas não podemos generalizar• regras fixas de avaliação
• mas podemos fazer o programa independente do número de alunos
• e podemos criar uma função de arredondamento mais genérica do que só às décimasfunction res=arredonda(valor,casasDec)
• algoritmo: multiplicar por 10casasDec, arredondar, dividir novamente
56
Exemplo 4 : pauta de ICE
octave:23> arredonda(pi,4)ans = 3.1416octave:24> arredonda(pi,3)ans = 3.1420octave:25> arredonda(pi,2)ans = 3.1400octave:26> arredonda(pi,1)ans = 3.1000octave:27> arredonda(pi,0)ans = 3
57
Exemplo 4 : pauta de ICE Algoritmo para calcular a nota
• é preciso receber P1, P2, T1 e T2
• é preciso devolver um número inteirofunction nota = calculanota(notas)
• vamos implementar• porque já sabemos a assinatura
• e já temos a função arredonda, usada por esta
• caso contrário não vale a pena começar a implementar
• depois, testar antes de continuar o programa
58
Exemplo 4 : pauta de ICE
59
Exemplo 4 : pauta de ICEVariáveis auxiliares que tornam mais claras as condições
60
Exemplo 4 : pauta de ICE
Condições por ordem de prioridade:primeiro verifica se não tem frequênciadepois, se não tem nota mínimae só se tem frequência e nota mínima é que usa a nota provisória para a nota final.
61
Exemplo 4 : pauta de ICE
Testar
octave:2> calculanota([9, 11, 9, 15])ans = 12octave:3> calculanota([9, 9, 9, 15])ans = -1octave:4> calculanota([20, 20, 7, 7])ans = 7
62
Exemplo 4 : pauta de ICE Algoritmo para gerar a pauta
• criar matriz de saída• 2 colunas, tantas linhas quanto tem a de entrada
• para cada linha da matriz de entrada• copiar número de aluno para a primeira coluna da matriz
de saída, na linha correspondente
• calcular a nota e copiar para a segunda coluna da matriz de saída, na linha correspondente
63
Exemplo 4 : pauta de ICEfunction pauta = calculapauta(notas)
• criar matriz de saída• usar zeros, pois sabemos quantos alunos e 2 colunas
• percorrer cada linha da matriz de entrada• ciclo for, de 1 ao número de linhas (alunos)
• copiar número de aluno e nota• trivial, basta copiar o valor na primeira coluna em cada
linha
• calcular a nota• usamos a função que já criámos
64
Exemplo 4 : pauta de ICE
A função size devolve a dimensão indicada (1 para linhas, 2 para colunas)ou ambas se só dermos a matriz
size
65
Exemplo 4 : pauta de ICE
Cria a pauta com tantas linhas quantastem a matriz das notas, e duas colunas.
66
Exemplo 4 : pauta de ICE
A variável aluno vai tomar todos os valores de 1 ao número de linhas da matriz notas
67
Exemplo 4 : pauta de ICE
Copia para a pauta, na linha correspondente a este aluno, o número e a nota calculada.
68
Exemplo 4 : pauta de ICE
octave:6> calculapauta(notas)ans =
60133 -1 60136 -1 60137 8 60145 11 60148 10 60157 -1 60161 8 60166 14 60175 7 60182 -1 60184 11 ...
Aluno P1 P2 T1 T2 60133 3.3 1.6 7.4 7.060136 4.9 3.0 4.8 10.460137 11.3 14.9 14.8 3.960145 6.3 16.4 16.3 6.860148 8.0 11.7 17.0 5.960157 8.4 2.1 16.6 4.660161 0.1 12.4 10.6 5.460166 15.3 7.6 18.0 14.360175 12.1 10.0 8.0 6.160182 7.2 5.2 0.6 6.260184 8.5 18.8 11.0 8.0...
69
Exercício
70
O máximo da matriz
Queremos uma função que• Recebe uma matriz
• Devolve o valor máximo e as coordenadas desse valor:
function [vMax,lMax,cMax]=maximo(mat)
71
Resumindo
Controlar a execução• sequência
• condições if … elseif … else
• ciclo for • se sabemos quantas iterações (vector, matriz …)
72
Resumindo
Controlar a execução Operadores de comparação e booleanos
• nota == não é o mesmo que =
• strings• há várias funções para testar caracteres
• isupper, islower, ischar, isdigit, etc...
• comparar strings com strcmp
73
Resumindo
Controlar a execução Operadores de comparação e booleanos Matrizes
• como criar • zeros, ones, enumerando elementos, compondo
• como aceder a elementos ou partes• M(:,2) M([1,2,3],[5,4,2]) M(1:3,4:8)
• como percorrer• size(M) for
74
Para estudar esta aula
Physical Modeling in MATLAB• Capítulo 4
Consultar o manual Octave• if, 10.1
• funções para caracteres e strings, 5.7
75
Dúvidas