59
Informática para as Ciências e Engenharias Versão : C (Engenharia Civil) Pedro Barahona 2017 / 18

Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

  • Upload
    doquynh

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Informática para as Ciências e EngenhariasVersão : C

(Engenharia Civil)

Pedro Barahona2017 / 18

Page 2: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Sumário

• Instrução IF.

• Operadores relacionais e lógicos.

§ Avaliação de conjunções e de disjunções.

• Matrizes.

§ Criação de matrizes.

§ Relações entre vetores e matrizes.

§ Percursos em matrizes.

22 Março 2018 2Instrução IF; Matrizes

Page 3: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Equação do 2º Grau

• Problema: Obtenha as raízes de uma equação do 2º grau, dados osseus parâmetros a, b, e c.

ax2 + bx +c = 0

• A função é suficientemente simples para não ser necessário decomporeste problema em problemas mais simples, usando uma função comassinatura

function raizes = equacao2(a,b,c)

• No entanto a solução depende do valor do discriminante, e portantoexige uma instrução para controlar um execução condicional: o IF.

22 Março 2018 3Instrução IF; Matrizes

Page 4: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Equação do 2º Grau - Algoritmo

• Algoritmo: O algoritmo para resolver a equação do 2º grau ébem conhecido:

ax2 + bx +c = 0• Informalmente

d = b2 – 4acse d < 0 então

não há raízessenão

se d = 0 entãouma só raíz: -b / 2a

senãoduas raízes: (-b ± sqrt(d)) / 2a

22 Março 2018 4Instrução IF; Matrizes

Page 5: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Equação do 2º Grau

• Apesar de muito simples, este algoritmo levanta duas questões quevamos agora abordar:1. Como implementar a execução condicional de instruções• Resposta: Instrução IF.2. Como determinar o valor das condições que determinam essa

execução condicionada• Resposta: Através de operadores relacionais e lógicos.

22 Março 2018 5Instrução IF; Matrizes

Page 6: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Sumário

22 Março 2018 6

• Instrução IF.

• Operadores relacionais e lógicos.

§ Avaliação de conjunções e de disjunções.

• Matrizes.

§ Criação de matrizes.

§ Relações entre vetores e matrizes.

§ Percursos em matrizes.

Instrução IF; Matrizes

Page 7: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Implementação – Que questões?

1. Como é que se executam blocos de instruções distintos conformeseja o resultado da avaliação de uma condição?No problema: se ... então ... senão ... .

2. Como é que se escrevem condições?No problema: d > 0 e d = 0.

22 Março 2018 7Instrução IF; Matrizes

Page 8: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

A instrução IF [1]

22 Março 2018 8

Sintaxe:

if condição1

instruções1

end

Exemplo:

if sopa está insossa

adicione sal

end

Operacionalmente:

1. A condição1 é avaliada.

§ Se for verdadeira, executam-se as instruções1.

§ (Se for falsa, não se faz mais nada.)

Instrução IF; Matrizes

Page 9: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

A instrução IF [2]

22 Março 2018 9

Sintaxe:if condição1

instruções1

elseinstruções2

end

Operacionalmente:

1. A condição1 é avaliada.

§ Se for verdadeira, executam-se as instruções1.

§ Se for falsa, executam-se as instruções2

Exemplo:if está sol e calor

almoce no terraço

else

almoce na sala

end

Instrução IF; Matrizes

Page 10: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

A instrução IF [3]

22 Março 2018 10

Sintaxe:if condição1

instruções1

elseif condição2

instruções2

elseinstruções3

end

Exemplo:if semáforo está verde

avance

elseif semáforo está vermelho

páre

else % semáforo amarelo

acelere

end

• O número de condições pode ser arbitrário

• Neste caso existem 2 condições alternativas, mas poderiam serconsideradas mais com blocos elseif adicionais.

Instrução IF; Matrizes

Page 11: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

A instrução IF [4]

22 Março 2018 11

Sintaxe:

if condição1

instruções1

elseif condição2

instruções2

elseinstruções3

end

Exemplo:if semáforo está verde

avance

elseif semáforo está vermelho

páre

else % semáforo amarelo

acelere

end

Operacionalmente:

1. A condição1 é avaliada.

2. Se for verdadeira, executam-se as instruções1.

3. Se for falsa, avalia-se a condição2

4. Se for verdadeira, executam-se as instruções2.

5. Se for falsa executam-se as instruções3.

Instrução IF; Matrizes

Page 12: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Sumário

22 Março 2018 12

• Instrução IF.

• Operadores relacionais e lógicos.

§ Avaliação de conjunções e de disjunções.

• Matrizes.

§ Criação de matrizes.

§ Relações entre vetores e matrizes.

§ Percursos em matrizes.

Instrução IF; Matrizes

Page 13: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Implementação – Que questões?

1. Como é que se executam blocos de instruções distintos conformeseja o resultado da avaliação de uma condição?No problema: se ... então ... senão ... .

2. Como é que se escrevem condições?No problema: d > 0 e d = 0.

• Comecemos pelo caso das condições simples, que podem seravaliadas comum só operador relacional

22 Março 2018 13Instrução IF; Matrizes

Page 14: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Operadores relacionais

• Operadores relacionais:== (igual) ~= ou !=(diferente: til igual ou exclamação igual)> (maior) >= (maior ou igual)< (menor) <= (menor ou igual)

• O resultado de uma operação relacional é um valor lógico (verdade oufalso)

Exemplo: x == 10 é uma expressão lógica que vale:• 1 (verdade), se o valor da variável x for (igual a) 10;• 0 (falso), se o valor da variável x não for (igual a) 10.

• Nota: Em Matlab, todo o valor diferente de 0 é consideradologicamente como verdade.

22 Março 2018 14Instrução IF; Matrizes

Page 15: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Constantes e operadores lógicos

• Funções que retornam as constantes lógicas:true (vale 1) false (vale 0)

As condições podem ser mais complexas e exigir a utilização de:

• Operadores lógicos:&& (conjunção, “e”) || (disjunção, “ou”)~ ou ! (negação: til ou exclamação)

~ tem precedência sobre && e ||;&& tem precedência sobre ||

22 Março 2018 15Instrução IF; Matrizes

Page 16: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Constantes e operadores lógicos

Exemplos:

• x >= 10 && x < 20 é uma expressão lógica que vale:§ 1, se o valor da variável x pertence ao intervalo [10,20[;§ 0, se o valor da variável x não pertence a [10,20[.

• x < 10 || x >= 20 é uma expressão lógica que vale:§ 1, se o valor da variável x não pertence ao intervalo [10,20[;§ 0, se o valor da variável x pertence a [10,20[.

22 Março 2018 16Instrução IF; Matrizes

Page 17: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

O operador && (conjunção) [1]

• Operacionalmente:expr1 && expr2

1. A expressão expr1 é sempre avaliada.2. Se o valor de expr1 for 1 (verdade), a expr2 é avaliada (porque ainda

não se sabe o resultado da conjunção):1 ∧ 1 vale 1 1 ∧ 0 vale 0

• Se o valor de expr1 for 0 (falso), a expr2 não é avaliada (porque já sesabe o resultado da conjunção, que é 0):

0 ∧ 1 vale 0 0 ∧ 0 vale 0

22 Março 2018 17Instrução IF; Matrizes

Page 18: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

O operador || (disjunção)

• Operacionalmente:expr1 || expr2

A expressão expr1 é sempre avaliada.• Se o valor de expr1 for 0 (falso), a expr2 é avaliada (porque ainda não

se sabe o resultado da disjunção):0� 1 vale 1 0 � 0 vale 0

• Se o valor de expr1 for 1 (verdadeiro), a expr2 não é avaliada (porquejá se sabe o resultado da disjunção, que é 1):

1� 1 vale 1 1 � 0 vale 1

22 Março 2018 18Instrução IF; Matrizes

Page 19: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

O operador && (conjunção) [2]

Exemplos:

22 Março 2018 19

>> x = 15;>> y = 20;>> x >= 12 && y < 15 ans = 0>> x >= 25 || y < 25 ans = 1>> clear y>> x > 25 && y < 15 ans = 0>> x > 25 || y < 15 error: 'y' undefined near line 1 column 12>> x > 12 && y < 15 error: 'y' undefined near line 1 column 12

Instrução IF; Matrizes

Page 20: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Equação do 2º Grau - Função

22 Março 2018 20

function raizes = equacao2( a, b, c )% raizes = equacao2( a, b, c )% Calcula as raizes da equação% ax^2 + bx + c = 0

d = b^2 – 4*a*c;if d < 0

raizes = [];elseif d == 0

raizes = [-b/(2*a)];else

raizes = [(-b + sqrt(d))/(2*a),(-b - sqrt(d))/(2*a)];

endend

ax2 + bx +c = 0d = b2 – 4acse d < 0 então

não há raízessenãose d = 0 então

uma só raíz: -b / 2ªsenão

duas raízes: (-b ± sqrt(d)) / 2a

• Podemos agora implementar a função para calcular as raízes da equação do 2º grau, para todos os casos:

Instrução IF; Matrizes

Page 21: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Equação do 2º Grau - Teste

Podemos ainda fazer alguns testes, com valores conhecidos, para avaliara correcção da implementação:

22 Março 2018 21

>> equacao2( 1, 0, 0 )ans = 0>> equacao2( 1, 1, 0 )ans = 0

-1>> equacao2( 1, 1, 4 )ans = [](0x0)

x2 = 0

x2 + x = 0

x2 + x + 4 = 0

Instrução IF; Matrizes

Page 22: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Problema da Pauta de ICE

• Problema: Faça um programa que produz a pauta com as notas finaisde ICE por avaliação contínua.

§ O programa recebe, por cada aluno, o número e as notas dos doisexercícios, do projecto e dos dois testes do aluno (E1, E2, P, T1 eT2), arredondadas às décimas.

§ Por cada aluno, a pauta tem o número e a nota final por avaliaçãocontínua do aluno.

§ Os dados de entrada e os resultados estão em tabelas.

22 Março 2018 22Instrução IF; Matrizes

Page 23: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Problema [1]

• Os dados de entrada e os resultados estão em tabelas, do tipo:

• Uma primeira questão se coloca: como representar tabelas emMatlab?

§ Resposta: em matrizes

22 Março 2018 23

Notas: Pauta:

Instrução IF; Matrizes

Page 24: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Implementação – Que questões?

1. Como é que se executam blocos de instruções distintos conformeseja o resultado da avaliação de uma condição?No problema: se ... então ... senão ... .

2. Como é que se escrevem condições?No problema: CompL >= 8.5 e CompTP >= 8.5.

3. Como é que se manipula uma tabela?No problema: as tabelas Notas e Pauta.

22 Março 2018 24Instrução IF; Matrizes

Page 25: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes [1]

• Uma matriz é uma estrutura de dados que guarda um número pré-definido de dados do mesmo tipo (tal como um vetor).

• Uma matriz corresponde a uma sequência de posições de memória (talcomo um vetor). Essas posições de memória estão agrupadas como numatabela com L linhas e C colunas.

• Acede-se a uma posição da matriz através de dois índices, que sãointeiros positivos. O primeiro índice (entre 1 e L) indica a linha; o segundoíndice (entre 1 e C) indica a coluna.

-3.5 5 -18 6 6.7 -20 0

41 89 3.1 3.1 0 44 7

22 Março 2018 25Instrução IF; Matrizes

Page 26: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes – Criação

• Uma matriz pode ser criada através da enumeração de todos os seuselementos.

§ Os elementos de cada linha são separados por vírgulas ou espaços.

§ As diferentes linhas são separadas por ponto e vírgula.

• Exemplo:

22 Março 2018 26

>> M = [1 2 3 4; 5,6,7,8; 9 10,11,12]M =

1 2 3 45 6 7 89 10 11 12

>>

Instrução IF; Matrizes

Page 27: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes – Funções de criação

• Tal como no caso dos vetores uma matriz pode ser inicializada a zerosou uns com as funções

M = zeros(nºLinhas, nºColunas)

M = ones(nºLinhas, nºColunas)

§ em que M é uma matriz de nºLinhas por nºColunas, criada comzeros ou uns em todas as posições

• Em Matlab, um vetor é uma matriz!

• Assim as funções de inicialização de vetores

zeros(1, c) e ones(1, c) ,

• criam de facto matrizes com 1 linha e c colunas.

22 Março 2018 27Instrução IF; Matrizes

Page 28: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes – Funções de Informação

• O tamanho de cada uma das dimensões de uma matriz M pode serobtido pela função size

nl = size(M, 1) % nl é o nº de linhas de Mnc= size(M, 2) % nc é o nº de linhas de M[ nl, nc] = size(M) % idem para nl e nc

22 Março 2018 28

>> M = [1 2 3 4; 5,6,7,8; 9 10,11,12];>> nl = size(M,1), nc = size(M,2)nl = 3nc = 4>> size(M)ans =

3 4>> [a, b] = size(M)a = 3b = 4>>

Instrução IF; Matrizes

Page 29: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes – Acesso a uma posição

• Os elementos de uma matriz vetor podem ser acedidosindividualmente,

• Sintaxe: nomeMatriz( expressão1, expressão2 )§ O valor da expressão1 é um inteiro positivo inferior ou igual ao

numero de linhas da matriz, i.e. size(nomeMatriz, 1).§ O valor da expressão2 é um inteiro positivo inferior ou igual ao

número de colunas da matriz, i.e. size(nomeMatriz, 2).

• Exemplo:

22 Março 2018 29

>> M = [1 2 3 4; 5,6,7,8; 9 10,11,12];>> a = M(2,3)a = 7>>

Instrução IF; Matrizes

Page 30: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes - Acesso & criação

• Em Matlab, uma sub-matriz pode ser obtido de outra através de um doisvetores que indexam as linhas e colunas a extrair.

• É muito comum usarem-se sequências para indexação de vetores, enúmeros para linhas/colunas “simples”.§ Nota: O identificador end representa até ao fim no devido contexto

22 Março 2018 30

>> M = [1 2 3 4; 5,6,7,8; 9 10,11,12];>> M(1:2, 3:4) ans =

3 47 8

>> X = M(2:end, 4) ans =

812

>>Instrução IF; Matrizes

Page 31: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes – Acesso a uma posição

• O acesso a uma ou mais posições pode ser feita quer para leitura querpara escrita.

• Exemplos:

22 Março 2018 31

>> M = [1 2 3 4; 5,6,7,8; 9 10,11,12];>> M(1,3) = 0 M =

1 2 0 45 6 7 89 10 11 12

>> M(2:3, 3:end) = [20 21 ; 22 23]M =

1 2 0 45 6 20 219 10 22 23

Instrução IF; Matrizes

Page 32: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matrizes– Erros Típico de Acesso

• Tal como nos vetores, não é possível ler um valor de uma posiçãoinexistente de uma matriz.

22 Março 2018 32

>> M = [1 2 3 4; 5,6,7,8; 9 10,11,12];>> M(4,4) % indice maior que o número de linhas ???error: A(I,J): row index out of bounds; value 4 out of

bound 3>> M(3,-1) % indice de coluna negativo ???error: subscript indices must be either positive integers

less than 2^31 or logicals>> V(1.5, 3.2) % indice não inteiro ???error: subscript indices must be either positive integers

less than 2^31 or logicals

Instrução IF; Matrizes

Page 33: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Matlab – Escrita numa posição

• Tal como nos vetores, as matrizes podem “crescer” se se atribuiremvalores a posições não existentes.

• Eficiência: Como nos vetores, as matrizes devem ser criada com o nºde linhas e o nº de colunas necessários para que nunca se escrevanuma posição inexistente.

22 Março 2018 33

>> M = [1 2 3 4; 5,6,7,8; 9 10,11,12];>> M(5,7) = 33 M =

1 2 3 4 0 0 05 6 7 8 0 0 09 10 11 12 0 0 00 0 0 0 0 0 00 0 0 0 0 0 33

>>

Instrução IF; Matrizes

Page 34: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Problema [1]

Problema: Faça um programa que produz a pauta com as notas finais deICE por avaliação contínua.

1. Compreender totalmente o problema.• Os dados de entrada e os resultados estão em tabelas:

22 Março 2018 34

Notas: Pauta:

Instrução IF; Matrizes

Page 35: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Problema [2]

1. Compreender totalmente o problema.

• Seja CompL = 20% E1 + 20% E2 + 60% P (arredondada às décimas)

• Se não tem frequência (CompL < 8.5), NF = −1.

• Se tem frequência (CompL ≥ 8.5)

§ Seja CompTP = (T1 + T2)/2 (arredondada às décimas)

§ Se CompTP < 8.5,

« NF = CompTP (arredondada às unidades).

§ Se CompTP ≥ 8.5,

« NF = 0.6 CompTP + 0.4 CompL (arredondada às unidades).

22 Março 2018 35Instrução IF; Matrizes

Page 36: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Problema [3]

2. Caracterizar o problema.

• Problema: Pauta de ICE.

• Entrada: Uma tabela de números, com uma linha por aluno e seis colunas (nº, E1, E2, P, T1, T2).

• Saída: Uma tabela de números, com uma linha por aluno e duas colunas (nº e NF).

3. Generalizar o problema (sempre que for possível).

• Não é possível generalizar este problema.

22 Março 2018 36Instrução IF; Matrizes

Page 37: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Algoritmo [1]

4. Desenhar o algoritmo para resolver o problema.a) Conceber o algoritmo, decompondo o problema em sub-problemas.• Como calcular a pauta de ICE com a tabela E (L×6)?

§ Cria-se a tabela Pauta (L×2).§ Para cada linha i de Notas (abreviada por N abaixo)

« Pautai1 ç Ni1; % copia-se o nº de aluno« Pautai2 ç Nota final de ICE (Ni2, Ni3, Ni4, Ni5, Ni6).

22 Março 2018 37

è

Notas: Pauta:

Instrução IF; Matrizes

Page 38: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Algoritmo [2]

b) Identificar, caracterizar e generalizar cada sub-problema.• Problema: nota final de ICE.• Entrada: vetor (com E1, E2, P, T1, T2).• Saída: a nota final de ICE.

22 Março 2018 38Instrução IF; Matrizes

Page 39: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Algoritmo [3]

c) Conceber o algoritmo, assumindo que os sub-problemas estão

resolvidos.

• Pauta de ICE E (L×6) :

§ Cria-se a tabela Pauta (L×2).

§ Para cada linha i de N (Notas):

« Pautai1 ç Ni1;

« Pautai2 ç Nota final de ICE (vetor) em que

– Vetor = [Ni2, Ni3, Ni4, Ni5, Ni6).

22 Março 2018 39

è

Notas: Pauta:

Instrução IF; Matrizes

Page 40: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Algoritmo [4]

5. Para cada sub-problema, desenhar o algoritmo para o resolver.Nota final de ICE (vetor com E1, E2, P, T1, T2) :

(no próximo slide)

22 Março 2018 40Instrução IF; Matrizes

Page 41: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Algoritmo [5]

• Nota final de ICE (vetor com E1, E2, P, T1, T2) :

CompL = 20% E1 + 20% E2 + 60% P (arredondada às décimas)

se CompL< 8.5 entãonotaFinal ç −1

senãocompTP ç (T1 + T2)/2 (arredondada às décimas)

se compTP < 8.5 entãonotaFinal ç round(compTP)

senãocompL ç Arredonda às décimas( compL)

notaFinal ç round(0.6*compTP + 0.4*compL)

22 Março 2018 41Instrução IF; Matrizes

Page 42: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Algoritmo [6]

5. Para cada sub-problema, identificar, caracterizar e generalizar cadasub-sub-problema e desenhar o algoritmo para o resolver.

• Problema: Arredonda às décimas.

• Entrada: real valor.

• Saída: o valor arredondado às décimas.

Arredonda às décimas (valor) :

valorArredondado ç round(valor * 10) / 10

22 Março 2018 42Instrução IF; Matrizes

Page 43: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Programa

6. Para cada sub-problema (começando pelos mais simples),implementar o respetivo algoritmo e testar o “sub-programa”.§ Arredonda às décimas (valor)§ Nota final de ICE (vetor com E1, E2, P, T1, T2)

7. Implementar o algoritmo que resolve o problema e testar oprograma pedido.§ Pauta de ICE (E)

22 Março 2018 43Instrução IF; Matrizes

Page 44: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Programa [1]

• Comecemos pelas funções mais simples

• que devemos testar, antes de utilizar

22 Março 2018 44

function res = arredondaDec(valor)% res = arredondaDec(valor)% Arredonda as decimas o valor real dado.

res = round(valor * 10) / 10;end

>> arredondaDec(5.3000001)ans = 5.3000>> arredondaDec(2.4500001)ans = 2.5000>>

Instrução IF; Matrizes

Page 45: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Programa [2]

22 Março 2018 45

• Passemos agora à implementação da função notaFinalICE, começandopela sua documentação

function res = notaFinalICE(notasAC)% res = notaFinalICE(notas)% Calcula a nota final de ICE por avaliacao continua.% O vetor notasAC tem as notas dos dois exercicios,% do trabalho e dos dois testes:% (exer1, exer2, trab, teste1, teste2).% Sejam:% compTP = 0.4 teste1 + 0.6 teste2 e% compL = (trab1 + trab2) / 2,% ambas arredondadas `as decimas.

...end

Instrução IF; Matrizes

Page 46: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Programa [2]

22 Março 2018 46

• E terminando a documentação antes de passar para o código.

function res = notaFinalICE(notasAC)% pauta = notaFinalICE(notas)% ...% O resultado é:% −1,% se o aluno nao tem frequencia;% compTP (arredondada as unidades),% se o aluno tem frequencia e compTP < 8.5;% 60% compTP + 40% compL (arredondada as unidades),% nos restantes casos.

...end

Instrução IF; Matrizes

Page 47: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Programa [4]

22 Março 2018 47

• E agora o código da função notaFinalICE, condicionada pela obtençãoou não de frequência.

• Começando no caso do aluno não ter frequência

function res = notaFinalICE(notasAC)% ...

notaL = 0.2*notasAC(1)+0.2*notasAC(2)+0.6*notasAC(3);compL = arredondaDec(notaL);if compL < 8.5

% O aluno nao tem frequencia.res = -1;

else% O aluno tem frequencia....

endend

Instrução IF; Matrizes

Page 48: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Programa [5]

22 Março 2018 48

• E acabando no caso em que o aluno obtém frequência

function res = notaFinalICE(notasAC)% ...

...else

% O aluno tem frequencianotaTP = (notasAC(4)+notasAC(5))/2;compTP = arredondaDec(notaTP);if compTP < 8.5

res = round(compTP);else

res = round(0.6 * compTP + 0.4 * compL);end

endend

Instrução IF; Matrizes

Page 49: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Teste Unitário

• A função notaFinalICE pode ser testada para os vários casos

22 Março 2018 49

>> notaFinalICE([15.5, 16.4, 18.0, 15.7, 14.8])notaL = 17.18notaTP = 15.25compTP = 15.3 % nota teorico-pratica arredondadacompL = 17.2 % nota laboratorial arredondadares = 16 % arredondademnto de 16.06>> >> notaFinalICE([12.3, 9.2, 9.4, 8.7, 7.2])notaL = 9.94notaTP = 7.95compTP = 8 % nota teorico-pratica insuficiente!res = 8>> notaFinalICE([8.0, 4.5, 7.2, 8.1, 10.2])notaL = 6.82 % não tem frequencia !res = -1>>

Instrução IF; Matrizes

Page 50: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Programa [6]

22 Março 2018 50

function pauta = pautaICE(notasAC)% pauta = pautaICE(notasAC)% Produz a pauta de ICE por avaliacao continua.% A matriz notasAC tem uma linha por aluno, com% o numero e as notas dos dois exercícios% do trabalhos e dos dois testes do aluno% (numero, exer1, exer2, trab, teste1, teste2).% A matriz pauta tem uma linha por aluno, com% o numero e a nota final por avaliacao continua% do aluno (numero, notaFinal)

...end

• Finalmente a função principal, pautaICE, começando pela suadocumentação

Instrução IF; Matrizes

Page 51: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

• E terminando no código da função principal, pautaICE, que utiliza asfunções implementadas anteriormente

Resolução – Programa [7]

22 Março 2018 51

function pauta = pautaICE(notasAC)% ...

numAlunos = size(notasAC, 1);pauta = zeros(numAlunos,2);for i = 1:numAlunos

pauta(i, 1) = notasAC(i, 1);notasAluno = notasAC(i, 2 : end);pauta(i, 2) = notaFinalICE(notasAluno);

endend

Instrução IF; Matrizes

Page 52: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Resolução – Teste Final

• A função pautaICE pode ser testada para os vários casos.

• Para isso basta criar uma matriz de entrada com as notas testadasanteriormente e chamar a função pautaICE com esse argumento. Porexemplo:

22 Março 2018 52

>> N = zeros(2,6);>> N(1,:) = [58322, 15.5, 16.4, 18.0, 15.7, 14.8];>> N(2:3,:) = [57413, 12.3, 9.2, 9.4, 8.7, 7.2;

55064, 8.0, 4.5, 7.2, 8.1, 10.2];>> pauta = pautaICE(N)pauta =

58322 1657413 855064 -1

>>

Instrução IF; Matrizes

Page 53: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Operações sobre Matrizes

• Com o o nome indica, Matlab (MATrix LABoratory) é uma linguagemespecialmente desenhada para cálculo matricial. Neste sentido, emMatlab

§ Todas as variáveis numéricas são implementadas como matrizes.

« Em particular, números (escalares) correspondem a matrizes de uma linhapor uma coluna.

§ Todas as operações definidas na álgebra matricial são suportadasem Matlab.

§ Em particular são suportadas operações« Operações algébricas entre matrizes (+, -, *, e \ e /)« Operações algébricas entre matrizes e escalares (as mesmas e ^)« Operações ponto a ponto entre matrizes.

22 Março 2018 53Instrução IF; Matrizes

Page 54: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Operações sobre Matrizes

• As operações algébricas entre matrizes (e vectores) incluem§ a soma e diferença de matrizes;§ o produto de matrizes e vetores (produto interno);§ divisão entre matrizes (produto pela inversa de uma matriz).

• Exemplos:

22 Março 2018 54

>> V = [1 2 3];>> M = [3 1 2; 4 5 6; 7,0,9]>> V * Mans = 32 11 41>> M * Verror: operator *:nonconformant arguments (op1 is 3x3,op2 is 1x3)>> M * V’ % V’ é a transposta de Vans = 11

3234

>>

Instrução IF; Matrizes

Page 55: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Operações sobre Matrizes

• Em Matlab, as funções pre-definidas estão (normalmente) preparadaspara reveber vetores/matrizes como argumentos, distribuindo asfunções pelos elementos individuias e retornando os resultados naestrutura apropriada.

22 Março 2018 55

>> raiz = sqrt([1:3;4:6;7:9])raiz =

1.0000 1.4142 1.7321 2.0000 2.2361 2.4495 2.6458 2.8284 3.0000

>> AngG = [0 15 30 45 60];>> AngR = Ang * 180/piAngR =

0.00000 0.26180 0.52360 0.78540 1.04720 >> tg = tan(AngR)tg =

0.0000e+00 2.6795e-01 5.7735e-01 1.0000e+00 1.7321e+00>>

Instrução IF; Matrizes

Page 56: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Operações sobre Matrizes

• Problema:

a. Determinar o comprimento do vetor (3D) delimitado pelos

pontos P1 = (3,5,7) e P2 = (4,0.3) .

b. Que ângulo faz esse vetor com o vetor (2,5,7)

22 Março 2018 56

>> P1 = [3 6 7];>> P2 = [4,5,8];>> V = P2 – P1V1 = 1 -1 1>> c = sqrt(V*V�) % raiz quadrada do produto internoc = 1.7321 % sqrt(3)>> V2 = [2,4,7];>> cosv1v2 = V*V2’ / (sqrt(V*V’) * sqrt(V*V’))cosv1v2 = 0.34752>> ang = acos(cosv1v2) * 180 / pi % convertido em grausang = 69.664>>

Instrução IF; Matrizes

Page 57: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Operações sobre Matrizes

• Problema:§ Resolver o sistema de 2 equações a 2 incógnitas§ Em termos algébricos AX = B com

« Portanto X = A-1 B

22 Março 2018 57

>> A = [2 4; 3 -2];>> B = [8; 4]>> Ainv = A^(-1) % ou Ainv = inv(A)Ainv = 0.12500 0.25000

0.18750 -0.12500>> X = Ainv * BX = 2

1>> Y = A \ B % Multiplicação pela inversa (à esquerda)Y = 2

1>> Z = B / A % Multiplicação pela inversa (à direita)error: operator /: nonconformant arguments (op1 is 2x1, op2 is

2x2)

2x + 4y = 83x – 2y = 4

A = 2 4 e B = 8 3 -2 4

Instrução IF; Matrizes

Page 58: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

Operações sobre Matrizes

• Problema:§ Quais as posições do vetor V em que ocorre o valor a.

§ Exemplo:

• Desafio:§ Escrever uma função que devolva as posições de um vetor V em

que ocorre o valor a.22 Março 2018 58

>> V = [3 5 7 -2 9 -1 0 -5 7 8 -6 4];>> a = 7>> V == aans =

0 0 1 0 0 0 0 0 1 0 0 0>> n = length(V)n = 12>> pos = (1:n) .* (V == a) % atenção: produto ponto a ponto

0 0 3 0 0 0 0 0 9 0 0 0>>

Instrução IF; Matrizes

Page 59: Informáticaparaas Ciênciase Engenharias Versão: C ...icec.ssdi.di.fct.unl.pt/1718/teoricas/T04/icec_t04.pdf · Equação do 2º Grau •Problema:Obtenhaasraízesdeumaequaçãodo2ºgrau,dadosos

• Physical Modeling in MATLAB

• Capítulo 4

• Consultar o manual Octave

• Matrizes (1.2)

• If (10.1)

Para estudar esta Aula

22 Março 2018 59Instrução IF; Matrizes