Informática para Ciências e
Engenharias (B)
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
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
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
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
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)
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
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
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’
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’)
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)
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!
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
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;
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)
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)
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
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
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.
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
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:
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
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
Exemplo 2: conteúdo GC
l Em contagens, somas e outras “agregações”:
1. Inicializar a variável
2. Acumular os valores pretendidos
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 ...
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')
Exemplo 2: conteúdo GC
octave:44> fraccaogc('ATCG') ans = 0.50000
Exemplo 3: Cromatografia
l Dado um vector com um cromatograma
•
Obter as posições dos picos
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
Exemplo 3: Cromatografia
• Permite mudar de linha a meio de uma instrução.
Exemplo 3: Cromatografia
• Uma forma de acrescentar elementos ao vector. • Exige redimensionar o vector a cada inserção,
Matrizes
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.
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 =
Criação de Matrizes
l Criar matrizes (2)
•
Através de funções pré-definidas (zeros, ones, rand, etc)
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.
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.
Criação de Matrizes
l Na composição, as matrizes componentes têm de “encaixar”
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.
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
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
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 “:”
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
Exemplo 4: Pauta de ICE
Objectivo
l A partir da uma tabela com os números e as avaliações dos
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
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
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
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
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
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,
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
Exemplo 4: Pauta de ICE
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
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
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
Exemplo 4: Pauta de ICE
A função size devolve
Exemplo 4: Pauta de ICE
Cria a pauta com
Exemplo 4: Pauta de ICE
A variável aluno vai tomar todos os valores
Exemplo 4: Pauta de ICE
Copia para a pauta,
Matrizes
Exemplo 4: Pauta de ICE
l Queremos uma função que
•
Recebe uma matriz
•
Devolve o valor máximo e as coordenadas desse valor
Resumindo
l Controlar a execução
•
sequência
•
condições if … elseif … else
•
ciclo for
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...
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
Para estudar esta aula
l Physical Modeling in MATLAB
•
Capítulo 4
l Consultar o manual Octave