• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
75
0
0

Texto

(1)

Informática para Ciências e

Engenharias (B)


(2)

Na aula de hoje

l  Controlo de execução

condições if … elseif … else … end

•  operadores relacionais e lógicos

l  Exemplos

1.  fórmula resolvente

2.  cromatograma, GC

3.  pauta de ICE

l  Matrizes

criação e percursos em matrizes

vectores e matrizes

▶  if … elseif … else

▶  if e for

(3)

Controle de Execução

l  sequência

instruções executadas por ordem

l  function

A execução passa para um bloco autónomo

l  for

(4)

Controle de Execução

l  Pegar no pão

l  Se faca na bancada,

Pegar na faca Caso contrário

Ir buscar faca à gaveta

l  Cortar fatia,

l  Pôr na torradeira, l  Ligar

l  Enquanto não está pronta

(5)

Controle de Execução

l  Pegar no pão

l  Se faca na bancada,

Pegar na faca Caso contrário

Ir buscar faca à gaveta

l  Cortar fatia,

l  Pôr na torradeira, l  Ligar

l  Enquanto não está pronta

Esperar

condição

(6)

Operadores Relacionais

l  Os seguintes operadores permitem comparar números e

variáveis numéricas

Igualdade

•  == (Atenção: um igual, =, é atribuição)

Desigualdade

•  !=

Ordem (maior, menor, … ou igual)

(7)

Tipo de Dados: Booleanos

l  O tipo de dados Booleano é predefinido em MATLAB

•  True 1 (ou tudo o que não for zero)

•  False 0

l  O resultado de uma comparação é um valor Booleano

(8)

Comparações de Vectores

l  As comparações podem ser feitas elemento a elemento ( ou

“ponto a ponto”), envolvendo todos os elementos dos vectores

l  Uma string é um vector (de códigos dos caracteres) e portanto

pode ser sujeita a comparações ponto a ponto

(9)

Comparações de Vectores

l  Naturalmente, os vectores que são comparados têm de ter a

mesma dimensão

O mesmo acontecendo no caso das strings

octave:36> [1,2,3]==[1,3]

error: … nonconformant arguments (op1 is 1x3, op2 is 1x2)

octave:36> ‘paulo’ == ‘pero’

(10)

Comparações de Strings

l  Normalmente, no caso das strings, pretende-se saber se elas

são iguais, o que se pode fazer com a função predefinida

strcmp.

l  Que não retorna uma mensagem de erro se as strings não

tiverem o mesmo tamanho

octave:36> strcmp(‘paulo’ == ‘paulo’)

ans = 1

octave:37> strcmp(‘paulo’ == ‘pero’)

(11)

Controle Condicional : If

l  O controle de execução pode ser condicionado à verificação de

uma dada propriedade.

l  Para esse efeito pode ser usada a instrução If... end l  Na sua versão mais simples, tem a forma

l  Operacionalemnte, o corpo é executado apenas se o valor da

expressão for verdadeiro (i.e. diferente de 0).

if expressão (corpo)

(12)

Controle Condicional : If

Exemplo:

l  Obter o valor absoluto de uma variável x.

l  Se a variável x for negativa, multiplica-se por -1!

(13)

Expressões Booleanas

l  As condições a avaliar podem ser mais complicadas do que uma

simples comparação e envolver:

Conjunções (e) &&

Disjunções (ou) ||

Negações (não) ~

l  Exemplo: Se x e y forem ambos iguais a 20, passam a ter

valores 19 e 21, respectivamente

Nota: Diferença entre os operadores de comparação (==) e atribuição (=)

if x == 20 && y == 20 x = 19

(14)

Expressões Booleanas

l  Com estes operadores podem especificar-se expressões

booleanas de qualquer complexidade usando-se parênteses, se necessário.

l  Os parênteses são necessários se se pretender alterar a

prioridade pré-definida dos operadores (negação, conjunção e disjunção):

1º: ~ 2º: && 3º: ||

l  Exemplo: se um de x ou y for igual a 25 e nenhum for 5,

acrescenta y ao valor de x

if (x == 25 || y == 25) && ~(x == 5) && y != 5 x = x+y;

(15)

Expressões Booleanas

l  A avaliação de expressões booleanas é feita da esquerda para

a direita e pode ser “curto-circuitada” se o seu valor já ficar definido.

l  Exemplo 1: se s não é uma string vazia e se o seu primeiro

carácter é A, então …

Nota: É importante que a avaliação seja sujeita ao curto-circuito,

senão esta avaliação dava erro se a string s fosse vazia!

if ~strcmp(s,'') && s(1)=='A' (corpo)

(16)

Expressões Booleanas

l  O curto-circuito na avaliação é igualmente importante no caso

de se pretender aceder a elementos de um vector.

l  Exemplo 2: a variável x toma o valor do i-ésimo elemento do

vector vec, se este existir e for maior do que 5

Nota: Se a avaliação não fosse sujeita ao curto-circuito, haveria

um erro quando o índice i estivesse fora da dimensão do vector.

if i >= 1 && i <= length(v)&& v(i) > 5 x = v(i)

(17)

Controle Condicional : If

l  O controle de execução pode escolher um de dois caminhos,

consoante o valor de uma propriedade.

l  Para esse efeito pode-se usar a instrução if...else...end

l  Operacionalmente, apenas um dos corpos é executado:

o corpo_then se o valor da expressão for verdadeiro

o corpo_else se o valor da expressão for falso

if expressão

(corpo_then) else

(18)

Controle Condicional : If

l  Atribuir a y o valor absoluto de uma variável x.

l  Exemplo: if x < 0 y = -x else y = x end octave:38> x = -12;

octave:39> if x < 0 y = x else y = -x end octave:40> y = 12

octave:41> x = +21;

Octave:41> if x < 0 y = x else y = -x end octave:42> y = 21

(19)

Controle Condicional : If

l  O número de caminhos alternativos pode ser superior a 2,

usando-se uma versão mais completa da instrução if.

sendo o else final opcional.

(20)
(21)
(22)

Exemplo 2: conteúdo GC

Contexto:

l  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

(23)

Exemplo 2: conteúdo GC

Problema:

l  Dada uma sequência de ADN numa string

adnSeq = ['ACAAGATGCCATTGTCCCCCGGC ... ’]

determinar a fracção de GC

function fracGC=fraccaogc(sequencia)

l  Exemplo:

(24)

Exemplo 2: conteúdo GC

Algoritmo

l  Ideia base

Contar número de c’s ou g’s na string (nc)

Contar número de g’s na string (ng)

Obter a fracção f = (nc+ng)/ n

(25)

Exemplo 2: conteúdo GC

l  Algoritmo:

function fracGC = fraccaogc(sequencia)

l  Sub problema: como contar?

através de uma outra função !

que deve ser genérica:

•  contar ocorrências de um qualquer elemento no vector

(26)

Exemplo 2: conteúdo GC

l  Em contagens, somas e outras “agregações”:

1.  Inicializar a variável

2.  Acumular os valores pretendidos

(27)
(28)

Ciclo for: índice vs. elemento

Se pretendemos aceder à posição (índice) de cada elemento no

vector, cria-se um vector novo

1:length(...)

l  No caso mais geral, num ciclo for aplicado a um vector

estamos interessados em aceder aos índices do vector.

l  Em alguns casos, poderemos estar interessados em aceder

aos elementos do vector,

for i = 1:lenght(vecX) vecY(i) = vecX(i) * 2 end s = 0; for v = vecX s = s + v end s termina com ...

a soma dos elementos de vecX É atribuído a vecY ...

(29)

Exemplo 2: conteúdo GC

l  Algoritmo:

function fracGC=fraccaogc(sequencia)

Uma vez definida a função para contar

•  (implementada e testada)

Basta invocá-la duas vezes (para G e C)

totG = conta(sequencia,'G') totC = conta(sequencia,'C')

(30)

Exemplo 2: conteúdo GC

octave:44> fraccaogc('ATCG') ans = 0.50000

(31)

Exemplo 3: Cromatografia

l  Dado um vector com um cromatograma

Obter as posições dos picos

(32)

Exemplo 3: Cromatografia

l  Função

receber o cromatograma, devolver picos

function picos = encontrapicos(cromatograma)

l  Algoritmo

para cada elemento do segundo ao penúltimo do cromatograma

(33)
(34)

Exemplo 3: Cromatografia

•  Permite mudar de linha a meio de uma instrução.

(35)

Exemplo 3: Cromatografia

•  Uma forma de acrescentar elementos ao vector. •  Exige redimensionar o vector a cada inserção,

(36)
(37)

Matrizes

(38)

Matrizes

l  Uma matriz é uma estrutura de dados que guarda um número

pré-definido de dados do mesmo tipo (tal como um vector).

l  Uma matriz corresponde a uma sequência de posições de

memória (tal como um vector).

l  Essas posições de memória estão agrupadas como numa

tabela com L linhas e C colunas.

l  Nota: MATLAB (MATrix LABoratory) é uma linguagem

vocacionada para o tratamento de matrizes. Assim, em MATLAB, um vector é uma matriz com 1 linha ou 1 coluna.

(39)

Criação de Matrizes

l  Existem várias formas de criação de matrizes. l  Uma matriz é associada a um identificador. l  Criar matrizes (1)

Indicar os elementos ente parenteses rectos, separando

•  por vírgula ou espaço, os elementos da mesma linha

•  por ponto e vírgula as diferentes linhas

octave:36> octave:8> m = [1,2,3;4 5 6] m =

(40)

Criação de Matrizes

l  Criar matrizes (2)

Através de funções pré-definidas (zeros, ones, rand, etc)

(41)

Criação de Matrizes

l  Criar matrizes (3)

Por composição de vectores e matrizes

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 m = 1 2 3 4 5 6

Nota: A plica (‘) corresponde ao operador de transposição* do vector ou matriz.

(42)

Criação de Matrizes

l  Criar matrizes (3)

Por composição de vectores e matrizes

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 m = 1 2 3 4 5 6

Nota: A plica (‘) corresponde ao operador de transposição* do vector ou matriz.

(43)

Criação de Matrizes

l  Na composição, as matrizes componentes têm de “encaixar”

(44)

Criação de Matrizes

l  As strings são um caso especial de vectores (de códigos de

caracteres)

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

(45)

Acesso a Matrizes

l  Acede-se a uma posição da matriz indicando os índices,

inteiros positivos, da linha e coluna.

matriz(linhas,colunas)

l  Desta forma podemos ler ou alterar os valores guardados na

(46)

Acesso a Matrizes

l  Mais genericamente, pode-se aceder a partes da matriz

indicando

matriz(vector_linhas,vector_colunas)

l  Desta forma podemos ler ou alterar os valores guardados na

(47)

Acesso a Matrizes

l  Mais genericamente, pode-se aceder a partes da matriz

indicando

matriz(vector_linhas,vector_colunas)

l  Desta forma podemos ler ou alterar os valores guardados na

matriz

Nota: para indicar todas as linhas/colunas usar “:”

(48)

Acesso a Matrizes

l  Mais genericamente, pode-se aceder a partes da matriz

indicando

matriz(vector_linhas,vector_colunas)

l  Desta forma podemos ler ou alterar os valores guardados na

matriz

(49)

Exemplo 4: Pauta de ICE

Objectivo

l  A partir da uma tabela com os números e as avaliações dos

(50)

Exemplo 4: Pauta de ICE

l  Perceber bem o problema

dados de entrada numa tabela (matriz) com as notas dos vários elementos de avaliação

(51)

Exemplo 4: Pauta de ICE

l  Perceber bem o problema

dados de entrada numa tabela (matriz) com as notas dos vários elementos de avaliação

resultado: uma pauta indicando

(52)

Exemplo 4: Pauta de ICE

•  sem frequência (-1)

l  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

(53)

Exemplo 4: Pauta de ICE

l  Função pretendida

function pauta = calculapauta(notas)

l  Estrutura do programa / Algoritmo

recebe a matriz com as notas

calcula a nota de cada aluno

•  podemos remeter isto para outra função

(54)

Exemplo 4: Pauta de ICE

l  Estrutura do programa

função principal

function pauta = calculapauta(notas)

cálculo da nota de cada aluno

function nota = calculanota(notas)

•  recebe um vector com [P1, P2, T1, T2]

•  calcula CompTP e CompL

•  arredondamento às décimas, feito noutra função

•  devolve -1 se não obteve frequência, CompTP arredondada

(55)

Exemplo 4: Pauta de ICE

l  Generalizar

nas notas não podemos generalizar

•  regras fixas de avaliação

mas o programa pode ser independente do número de alunos

e pode-se criar uma função de arredondamento mais genérica do que só às décimas

function res=arredonda(valor,casasDec)

algoritmo:

•  multiplicar valor por 10casasDec

•  arredondar,

(56)
(57)

Exemplo 4: Pauta de ICE

l  Algoritmo para calcular a nota

é preciso receber P1, P2, T1 e T2

é preciso devolver um número inteiro

function 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

(58)
(59)

Exemplo 4: Pauta de ICE

(60)

Exemplo 4: Pauta de ICE

Condições por ordem de prioridade:

•  primeiro verifica se não tem frequência •  depois, se não tem nota mínima

(61)
(62)

Exemplo 4: Pauta de ICE

l  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

(63)

Exemplo 4: Pauta de ICE

function pauta = calculapauta(notas)

l  criar matriz de saída

usar zeros, pois sabemos quantos alunos e 2 colunas

l  percorrer cada linha da matriz de entrada

ciclo for, de 1 ao número de linhas (alunos)

l  copiar número de aluno e nota

trivial, basta copiar o valor na primeira coluna em cada linha

l  calcular a nota

(64)

Exemplo 4: Pauta de ICE

A função size devolve

(65)

Exemplo 4: Pauta de ICE

Cria a pauta com

(66)

Exemplo 4: Pauta de ICE

A variável aluno vai tomar todos os valores

(67)

Exemplo 4: Pauta de ICE

Copia para a pauta,

(68)
(69)

Matrizes

(70)

Exemplo 4: Pauta de ICE

l  Queremos uma função que

Recebe uma matriz

Devolve o valor máximo e as coordenadas desse valor

(71)

Resumindo

l  Controlar a execução

sequência

condições if … elseif … else

ciclo for

(72)

Resumindo

l  Controlar a execução

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

(73)

Resumindo

l  Controlar a execução

l  Operadores de comparação e booleanos l  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

(74)

Para estudar esta aula

l  Physical Modeling in MATLAB

Capítulo 4

l  Consultar o manual Octave

If (10.1)

(75)

Referências

Documentos relacionados