Informática para Ciências e Engenharias...

Preview:

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

Recommended