Você está na página 1de 56

Programao Aplicada Engenharia

(Programando no MATLAB)

Prof. M.e: Ricardo Camparim


Programando no MATLAB

O MATLAB dispes de ferramentas para controle de fluxo de


programa:

Sentenas condicionais;
Estrutura switch;
Laos for e while.

Para obter o controle do direcionamento de fluxo de um


programa necessrio criar uma estrutura de deciso.

Adaptado AMOS GILAT (2012) 1


Operadores Lgicos e Relacionais

Dados de entrada de expresses lgicas e relacionais:


Verdadeiro: qualquer valor diferente de zero;
Falso: zero.

Sada: Verdadeiro: 1; Falso: 0;

Quando a sada da operao ocorre em um vetor (neste


caso composto de zeros e uns) este vetor chamado de
vetor lgico.

Adaptado AMOS GILAT (2012) 2


Operadores Lgicos e Relacionais

Os operadores relacionais so os usuais:

Adaptado AMOS GILAT (2012) 3


Operadores Lgicos e Relacionais

Casos:
Se dois escalares so comprados, o resultado ser um
escalar (1 ou 0);

Se dois arranjos (dimenses iguais) so comparados, a


comparao feita elemento a elemento do arranjo. O
resultado ser um arranjo lgico de 1s e 0s;

Se um escalar comparado com um arranjo, o escalar


comparado com cada elemento do arranjo.

Adaptado AMOS GILAT (2012) 4


Operadores Lgicos e Relacionais

Adaptado AMOS GILAT (2012) 5


Operadores Lgicos e Relacionais

Adaptado AMOS GILAT (2012) 6


Operadores Lgicos e Relacionais

Adaptado AMOS GILAT (2012) 7


Operadores Lgicos e Relacionais

Adaptado AMOS GILAT (2012) 8


Operadores Lgicos e Relacionais

Em uma expresso matemtica que contem operadores


lgicos e aritmticos, as operaes (+, -, *, /, \) precedem todas
as operaes relacionais;

Os operadores relacionais tem igual procedncia e so


avaliados da esquerda para a direita quando parnteses so
utilizados para modificar a ordem.

Adaptado AMOS GILAT (2012) 9


Operadores Lgicos e Relacionais

Adaptado AMOS GILAT (2012) 10


Operadores lgicos

O MATLAB dispes de ferramentas para controle de fluxo de


programa:

Adaptado AMOS GILAT (2012) 11


Operadores lgicos

Adaptado AMOS GILAT (2012) 12


Operadores lgicos

Adaptado AMOS GILAT (2012) 13


Ordem de precedncia

Operados lgicos, aritmticos e relacionais podem ser


utilizados simultaneamente em expresses matemticas;

O resultado depender do modo em que os operadores sero


organizados.

Adaptado AMOS GILAT (2012) 14


Ordem de precedncia
Precedncia Operao
1 (Mais alta) Parnteses (se existir parnteses aninhados, os
mais internos tem preferncia).
2 Exponenciao.
3 Lgica NOT ~.
4 Multiplicao e diviso.
5 Adio e subtrao.
6 Operadores relacionais .
7 Lgica AND & .
8 (Mais baixa) Lgica OR | .

OBS: Caso exista duas ou mais operaes com a mesma


ordem de precedncia, a operao mais esquerda ser
executada primeiro.

Adaptado AMOS GILAT (2012) 15


Ordem de precedncia

Adaptado AMOS GILAT (2012) 16


Funes lgicas nativas

Algumas das funes nativas so:

and (A,B) equivalente a A&B;

or (A,B) equivalente a A|B;

Not (A) equivalente a A~B.

Funes adicionais do MATLAB:

Adaptado AMOS GILAT (2012) 17


Funes lgicas nativas
Funo Descrio Exemplo
OR Exclusivo. Retorna 1 se >> xor (7,0)
xor (a,b)
ocorrer desigualdade. ans = 1
>> A = [6 2 15 9 7 11];
Retorna 1 se todos os elementos >> all (A)
de um vetor A so verdadeiros ans = 1
all (A)
(0). Retorna 0 se um ou mais >> B = [6 2 15 9 0 11];
elementos so falsos ( = 0). >> all (B)
ans = 0
Retorna 1 se qualquer elemento >> A = [6 0 15 0 0 11];
any (A) de A for verdadeiro. Retorna 0 se >> any (A)
todos elementos de A so falsos. ans = 1
Se A um vetor, retorna os >> A = [0 9 4 3 7 0 0 1 8];
find (A) ndices dos elementos diferentes >> find (A)
de zero. ans = 2, 3, 4, 5, 8, 9
Se A um vetor, retorna o >> find (A>4)
find (A>d) endereo dos elementos que so ans = 2, 5, 9
maiores que d.

Adaptado AMOS GILAT (2012) 18


Funes lgicas nativas

Tabela verdade operaes lgicas:

Entrada Sada
A B AND OR XOR NOT ~A NOT ~B
0 0 0 0 0 1 1
0 1 0 1 1 1 0
1 0 0 1 1 0 1
1 1 1 1 0 0 0

Adaptado AMOS GILAT (2012) 19


Funes lgicas nativas
Exemplo 1: Anlise de dados de temperatura
Dados de temperatura foram coletados durante um ms, e
correspondem a temperatura mxima diria em F: [58 73 73 53
50 48 56 73 73 66 69 63 74 82 84 91 93 89 91 80 59 69 56 64
63 66 64 74 63 69].
a) Determine o nmero de dias em que a temperatura estava igual ou
acima de 75F;
b) Determine o nmero de dias em que a temperatura estava entre
65F e 80F;
c) Determine os dias do ms em que a temperatura estava entre 50F
e 60F.

Adaptado AMOS GILAT (2012) 20


Funes lgicas nativas
Soluo exemplo 1:

Adaptado AMOS GILAT (2012) 21


Sentenas condicionais
So estruturas que permitem ao MATLAB tomar decises;

Em uma sentena condicional necessrio uma expresso


teste:
Se a expresso de teste for verdadeira, o programa
executado;
Se a expresso de teste for falsa, o programa passa para
outros grupos de comandos.

If expresso condicional constituda de op. relacionais e/ou lgicos

Adaptado AMOS GILAT (2012) 22


Sentenas condicionais

Sentenas condicionais podem fazer parte de uma funo ou


de um programa;

Cada sentena if deve ser seguida de um comando end;

If usada geralmente em trs estruturas:

if end;
if else end;
if elseif else end.

Adaptado AMOS GILAT (2012) 23


Estrutura if - end

Adaptado AMOS GILAT (2012) 24


Estrutura if - end

Exemplo 2: Calculo salrio


Um trabalhador recebe de acordo com a jornada de
trabalho (semanal 40h), mais 50% sobre HE. Escreva um
programa que calcule o salrio do trabalhador, sendo que, o
programa deve solicitar ao usurio a quantidade de horas
trabalhas e o valor pago por elas. O programa deve retornar o
salrio na tela.

Adaptado AMOS GILAT (2012) 25


Estrutura if - end
Soluo exemplo 2:

Adaptado AMOS GILAT (2012) 26


Estrutura if else - end

Adaptado AMOS GILAT (2012) 27


Estrutura if else - end
Exemplo 3:
Suponha que y = sqrt(x) para x 0 e que y = 2*x 1.

Adaptado AMOS GILAT (2012) 28


Estrutura if elseif else - end

Adaptado AMOS GILAT (2012) 29


Estrutura if elseif else - end
Exemplo 4:
O tanque de uma caixa dagua possui a geometria
conforme figura abaixo (a parte de baixo um cilindro e a parte
de cima um cone invertido cortado). Dentro do tanque existe
um a boia que indica o nvel dgua. Escreva um programa que
determine o volume dgua armazena no tanque a partir da
posio indicada pela boia (altura h). O programa deve receber a
varivel h (em m) e retornar o volume dgua em m.

Adaptado AMOS GILAT (2012) 30


Estrutura if elseif else - end
Consideraes :

* *)
"#$% $_ $%' = () + ) +
3

10,5
= 12.5 + ( 19) =
14

= + ( !)( + + )

Adaptado AMOS GILAT (2012) 31


Estrutura if elseif else - end
Programa no script:

Adaptado AMOS GILAT (2012) 32


Estrutura if elseif else - end
Tela usurio Command Window:

Adaptado AMOS GILAT (2012) 33


Sentena switch - case
A sentena switch - case outo mtodo de selecionar uma
opo de um programa;

A primeira linha deve conter o comando switch;

A expresso pode ser um nmero ou um string;

Tambm pode-se introduzir expresses matemticas que


incluam variveis previamente inicializadas;

switch expresso do switch

Adaptado AMOS GILAT (2012) 34


Sentena switch - case

Como funciona a sentena switch - case

A sentena switch comparada com os valores relacionados


em cada case;

Caso seja encontrado uma combinao no grupo de comando


relacionados ao case, ele executado;

Obs.: Somente um grupo de comandos que estejam entre dois


case, ou entre um case e um otherwise ou entre otherwise e
end ser executado.

Adaptado AMOS GILAT (2012) 35


Sentena switch - case

Se tiver mais de uma combinao, s a primeira ser executada;

Caso nenhuma combinao for encontrada e a sentena


otherwise for introduzida, o grupo de comandos entre otherwise
e end ser executado;

Caso nenhuma combinao for encontrada e no conter a


sentena otherwise, nenhum grupo de comando ser executado;

A sentena case pode conter mais de um valor, isso pode ser feito
digitando os valores entre chaves: {valor1, valor2, ...}.

Adaptado AMOS GILAT (2012) 36


Sentena switch - case

Adaptado AMOS GILAT (2012) 37


Sentena switch - case
Exemplo 5:
Escreva um programa que converta uma quantidade de energia ou
trabalho escrita em Joule, ft-lb, cal ou eV nas quantidades de energia
equivalentes nas demais unidades especificadas pelo usurio. O programa
deve solicitar ao usurio que entre com a quantidade de energia, a unidade
atual e a nova unidade requerida. A sada a quantidade de energia escrita na
nova unidade. Fatores de converso: 1 J = 0,738 ft-lb = 0,239 cal = 6,24x10^18
eV. Teste o programa para converter:

a) 150 J para ft-lb.


b) 2800 cal para J.
c) 2,7 eV para cal.

Adaptado AMOS GILAT (2012) 38


Laos (Loops)

Um lao outro mtodo de alterar o fluxo de um programa;

A execuo de um comando ou de um grupo de comandos


repetida diversas vezes;

O MATLAB apresenta dois tipos de laos, so eles:


for end;
while - end

Adaptado AMOS GILAT (2012) 39


Laos for - end
Para este tipo de lao, a execuo de um comando ou de um
grupo de comando repetida um nmero de vezes pr-definidas.

Body of loop

O nome da varivel ndice arbitrrio;


Normalmente so utilizadas as letras i, j k, m e n;
No utilizar as letras i e j se estiver programando para lidar com nmeros
complexos

Adaptado AMOS GILAT (2012) 40


Laos for - end
Sequencia de execuo:

Para k = f, ser executado os comandos entre for e end;

Retorno ao comando for e incrementa k = f + s;

Comparao com o valor t, caso no for igual segue para um

novo passo (repetio);

Para k = t o programa no retorna ao for.

Adaptado AMOS GILAT (2012) 41


Laos for - end
Consideraes:
Caso o incremento s no for declarado, o MATLAB assumir o
valor default;
Se f = t, o lao executado uma vez;
Se f > t e s > 0, ou se f < t e s < 0, o lao no ser executado;
Se os valores de k, s e t forem tais que k no possa ser igual a t,
ento se s > 0, o ultimo passo acontecer para o ultimo valor de
k menor que a condio de parada t. Ex:

K = 8 : 10 : 50
K = 8, 18, 28, 38, 48

Adaptado AMOS GILAT (2012) 42


Laos for - end
Se s < 0, a ltima repetio acontecer para o ultimo valor de k
maior que a condio de parada t;
Em comandos for, possvel atribuir valores de k como vetor;
K no deve ser definido dentro do loop;

Adaptado AMOS GILAT (2012) 43


Laos for - end

Exemplo 6: Soma de sries.


Determinar a soma dos n primeiros termos da srie:

%
(1), -
+
2,
,./

Execute o programa para n = 4e n = 20. Utilize for end.

Adaptado AMOS GILAT (2012) 44


Laos for - end
Resoluo:
1 - % EXEMPLO SOMA SRIE %
2 - n = input (' Entre com o nmero de termos da srie: \n');
3 - S = 0; % Estabelece o resultado inicial da soma em zero %
4 - for k = 1:n
5 - S = S +(-1)^k*k/2^k;
6 - end
7 - fprintf(' A soma da srie ; %f \n', S)

Adaptado AMOS GILAT (2012) 45


Laos for - end
Exemplo 7: Soma de sries
A funo sem(x) pode ser escrita em termos da srie de Taylor
como:
6
(1), 3 *,4/
012 3 = +
2- + 1 !
,.7

Escreva uma funo que calcula sen(x) usando a srie de Taylor.


Chame a funo de y = Tsen(x,n). Os argumentos de entrada so
o ngulo x em graus, e o nmero de termos da srie n. teste a
funo para sem(150), usando 3 e 7 termos

Adaptado AMOS GILAT (2012) 46


Laos for - end
Resoluo:
% PROBLEMA SOMA SRIE TAYLOR %
function y = Tsen(x , n)
% Tsen determina o sen(x) com base na frmula de Taylor.
%Argumentos de entrada:
% x (ngulo em graus) e n (nmero de termos da srie).
xrad = x*pi/180;
y = 0;
for k = 0:n-1
y = y + (-1)^k*xrad^(2*k+1)/factorial(2*k+1);
end

Adaptado AMOS GILAT (2012) 47


Laos while - end
O comando while end utilizado quando no conhecido o
nmero de repeties;
Neste lao, o formato do comando no contm um campo
especificando o nmero de repeties;
Com o uso do while, o processo ir continuar at que certa
condio seja atendida.

Adaptado AMOS GILAT (2012) 48


Laos while - end
Exemplo 8:
Dobrar a varivel x (iniciada em 1) em cada passo at que o
seu valor seja menor ou igual a 15

Adaptado AMOS GILAT (2012) 49


Laos while - end
Exemplo 9: Representao em srie de Taylor de uma funo.
A funo f(x) = ex pode ser representada em srie de Taylor por:

6 %
3
18 = +
2!
,.7
Escreva um programa que determine ex usando a representao em srie de
Taylor. O programa deve calcular ex adicionando-se os termos da srie e parar
quando o valor absoluto da ltima parcela adicionada tornar-se menor que
0,0001. Use um lao while-end, mas limite o nmero de repeties a 30. Se, na
trigsima repetio o valor absoluto do termo for maior que 0,0001, o programa
deve parar e exibir a mensagem So necessrios mais de 30 termos para a
representao em srie de Taylor com a preciso requerida.
Teste o programa para calcular: e2 , e-4 , e21 .

Adaptado AMOS GILAT (2012) 50


Laos while - end
Resoluo:
% REPRESENTAO EM SRIE DE TAYLOR DE UMA FUNO%
x = input('Entre com o valor de x:\n');
n = 1; % Inicio das repeties %
an = 1; % Primeiro termo da srie %
S = an; % Soma dos termos da srie %
while abs(an)>=0.0001 & n<=30
an = x^n/factorial(n);
S = S + an;
n = n + 1;
end
if n>=30
disp(' So necessrios mais de 30 termos.')
else
fprintf ('exp(%.f) = %.f', x,S)
fprintf ('\n O nmero de termos utilizado foi: %i\n',n)
end

Adaptado AMOS GILAT (2012) 51


Laos while - end
Resoluo:

Adaptado AMOS GILAT (2012) 52


Anexo
Converso/Formato do argumento
Cdigo
Nmero decimal inteiro (int). Tambm
%d pode ser usado %i como equivalente
a %d.
Nmero decimal natural (unsigned int),
%u
ou seja, sem sinal.
Nmero inteiro representado na base
%o octal. Exemplo: 41367 (corresponde ao
decimal 17143).
Nmero inteiro representado na base
hexadecimal. Exemplo: 42f7 (corresponde
%x
ao decimal 17143). Se usarmos %X, as
letras sero maisculas: 42F7.
%X Hexadecimal com letras maisculas

Adaptado AMOS GILAT (2012) 53


Anexo
Nmero decimal de ponto flutuante. No
caso da funo printf, devido s
converses implcitas da linguagem C,
%f
serve tanto para float como para double.
No caso da funo scanf, %f serve
para float e %lf serve para double.
Nmero em notao cientfica, por
%e exemplo 5.97e-12. Podemos usar %E para
exibir o E maisculo (5.97E-12).
Nmero em notao cientfica com o
%E
"e"maisculo
Escolhe automaticamente o mais
apropriado entre %f e %e. Novamente,
%g
podemos usar %G para escolher entre %f
e %E.
Ponteiro: exibe o endereo de memria
%p
do ponteiro em notao hexadecimal.

Adaptado AMOS GILAT (2012) 54


Anexo
Caractere: imprime o caractere que tem o
%c cdigo ASCII correspondente ao valor
dado.
Sequncia de caracteres (string, em
%s
ingls).
%% Imprime um %

Adaptado AMOS GILAT (2012) 55

Você também pode gostar