• Nenhum resultado encontrado

ELEMENTOS DE PROGRAMAÇÃO I

N/A
N/A
Protected

Academic year: 2019

Share "ELEMENTOS DE PROGRAMAÇÃO I"

Copied!
7
0
0

Texto

(1)

ELEMENTOS DE PROGRAMAÇÃO I

Até a presente aula, apenas comandos simples de atribuição e manipulação algébrica de arranjos foram vistas, além da utilização de várias funções do MATLAB. Porém, é possível neste programa criar algoritmos complexos, formando um código estruturado com expressões condicionais e com a realização de iterações. Para alcançar tal objetivo, é necessário a familiarização com a sintaxe utilizada no MATLAB.

A sintaxe utilizada para o desenvolvimento de um código estruturado é sensivelmente diferente da sintaxe empregada na linguagem C, de modo que será necessário algum tempo até que a fluência na linguagem seja obtida.

De modo a permitir o entendimento da sintaxe, é necessário apresentar os operadores que são extensivamente utilizados no controle de fluxo no MATLAB.

As operações relacionais e lógicas elemento a elemento são interpretadas pelo MATLAB da mesma forma do que no C. Ou seja, qualquer número que não seja zero é interpretado como verdadeiro (true), caso contrário é avaliado como falso (false). Após apresentarmos alguns

operadores partiremos para exemplos.

O

PERADORES

R

ELACIONAIS

São seis os operadores relacionais disponíveis no MATLAB. Eles estão descritos na Tabela 1.

Tabela 1 - Operadores relacionais no MATLAB.

Operador Descrição > Maior do que >= Maior ou igual a < Menor do que <= Menor ou igual a == Igual

~= Diferente

Execute as linhas abaixo na janela de comando e observe a saída.

clear all close all clc

(2)

Perceba que as variáveis C e D são da classe logical. Ou seja, são variáveis booleanas, podendo assumir apenas dois possíveis valores: 0 e 1. Da mesma forma que a classe numérica,

pode-se utilizar a função logical() para criar variáveis lógicas.

Os operadores lógicos são capazes de manipular arranjos, com a mesma facilidade com a qual outros operadores são utilizados. Observe a saída das operações na sequência.

A = [-1 -3 3 5]; B = [3 -5 9 -1]; C = A < B;

D = A > B; disp(C) disp(D) whos

Deve-se atentar para a forma como as expressões são avaliadas. Quando operações relacionais são computadas, as operações e testes ocorrem em pares, e problemas podem surgir, como no exemplo abaixo.

A = 10; B = 20; C = 30; r1 = (A < B < C);

r2 = (C > B > A); disp(r1)

disp(r2)

Note que, matematicamente, ambas as expressões devem ser verdadeiras, no entanto, não é isso que o programa retorna. Tente explicar o que ocorre.

Para corrigir tal problema, deve-se fazer uso de operadores lógicos para concatenar expressões relacionais. Os operadores lógicos podem ser operadores elemento a elemento (elementwise) ou bit a bit (bitwise). A diferença será mostrada na sequência.

O

PERADORES

L

ÓGICOS

E

LEMENTO A

E

LEMENTO

Os operadores lógicos elemento a elemento são apresentados na Tabela 2

Tabela 2 - Operadores Lógicos elemento a elemento.

Operador Descrição & E lógico (AND) | OU lógico (OR) a ~ Negação lógica (NOT) xor OU Exclusivo (XOR)

Note que, diferentemente do que ocorria com o C, a operação de OU e de E lógico não

(3)

uma função. Existem funções análogas para fazer E, OU e a negação lógica. São as funções and(),

or() e not(). Estude os comandos realizados abaixo.

A = 10; B = 20; C = 30; D = 0; r1 = (A < B)&(B < C);

r2 = (C > B)&(B > A); E = [3 ; 2]; F = [0 ; 1]; ~F

and(E,F) or(A,D)

xor([1 1 0],[1 0 0])

F

UNÇÕES PARA

L

ÓGICA

B

IT A

B

IT

O MATLAB possui funções que, assim como no C, podem manipular os bits dos dados. Essas funções são apresentadas na Tabela 3.

Tabela 3 - Funções para realizar operações lógicas bit a bit.

Operador Descrição bitand E lógico bit a bit bitor OU lógico bit a bit bitcmp Complemento bitxor OU Exclusivo bit a bit

As operações serão explicadas estudando-se o exemplo em aula. O exemplo faz uso da função dec2bin()para apresentar o resultado em binário.

clear all close all clc

A = 34; B = 43;

disp(dec2bin(A)) disp(dec2bin(B))

disp('--- resultado da op'); R = bitand(A,B);

disp(dec2bin(R))

Modifique o código para realizar outras operações. Notório que a função bitcmp()

(4)

C

OMANDOS DE

D

ESVIO IF

O comando if possui uma sintaxe genérica dada pelo exemplo na sequência.

if expressão

comandos

elseif expressão

comandos

else

comandos

end

Perceba que os comandos serão executados somente se o campo expressão possuir parte real não nula. Essa definição é fundamental, uma vez que os operadores lógicos, como visto anteriormente, operam também com matrizes e com vetores. Quando a expressão não resultar em um escalar, TODOS os elementos devem ser não zeros (verdadeiros) para que os comandos sejam executados.

Os comandos elseif e else são opcionais, podendo ou não aparecer na estrutura condicional apresentada.

Além disso, a estrutura pode conter quantos elseif seja necessário. O comando

elseif caracteriza e tem o mesmo funcionamento de comandos if e else alinhados na linguagem C, estrutura também chamada de escada if-else naquela linguagem.

Para entender o funcionamento da estrutura apresentada, crie um script com os seguintes comandos e execute-o.

clear all close all clc

a = input('Digite uma vogal, apenas: '); a = upper(a);

if length(a) ~= 1

disp('Digite apenas uma letra...')

elseif (a == 'A')

disp('Digitaste A');

elseif (a == 'E')

disp('Digitaste E');

elseif (a == 'I')

disp('Digitaste I');

elseif (a == 'O')

disp('Digitaste O');

elseif (a == 'U')

disp('Digitaste U');

else

disp('Não foi vogal a letra digitada...')

end

(5)

Estude o script abaixo para melhor compreender o caso onde as expressões não retornam escalares.

clear all close all clc

a = 0+j; b = 1;

A = [1 0;0 1]; B = zeros(2); C = [0 3;2 0];

if b

disp('Opa, b!');

end

if abs(a)

disp('Opa, |a|!');

end

if A

disp('Opa A');

end

if A|~B

disp('Opa A ou ~B');

end

if xor(A,C)

disp('Opa A XOR B');

end

O

C

OMANDO

SWITCH

O comando switch possui funcionamento muito similar ao comando utilizado na linguagem C, com algumas sutis diferenças. Em sua sintaxe básica:

switch expressão

case case_exp

comandos

case case_exp

comandos

(...)

otherwise

comandos

end

Perceba que, diferentemente do que ocorria com a linguagem C, não há necessidade da utilização do comando break. Assim que um case for encontrado e executado, outros comandos case não serão sequer verificados.

(6)

case {case_exp1, case_exp2, case_exp3 }

Nesse caso, os comandos relacionados a este case serão executados se houver coincidência com qualquer uma das constantes listadas.

Um exemplo clássico da aplicação do comando switch:

a = input('Digite um número: '); b = input('Digite um número: ');

if isnumeric(a)&&isnumeric(b) %testa se ambos são números

c = input('Digite a operação (+-*): ','s'); switch c

case '+'

res = a+b;

disp('foi realizado +'); case '-'

res = a-b;

disp('foi realizado -'); case '*'

res = a*b;

disp('foi realizado *'); otherwise

disp('Caractere inválido'); end

disp(res);

end

Outro exemplo já utilizando alguns conceitos que veremos na próxima aula é apresentado abaixo. Crie um script para rodar o programa.

while 1

a = input('Digite uma letra: ','s'); switch a

case {'a','e','i','o','u'}

disp('É vogal e minúscula'); case {'A','E','I','O','U'}

disp('É vogal e maiúscula'); case {'EXIT','exit'}

disp('Terminando programa...'); return

otherwise

disp('Não é vogal...'); end

end

E

XERCÍCIOS

Exercício 1 Crie um script gere randomicamente uma operação de multiplicação (inteira) e apresenta a operação ao usuário. O programa deve corrigir a resposta dada ao usuário, e informar, em caso de erro, o quão distante da resposta correta está da respostada dada. Utilize os critérios que desejar. Caso necessário, execute o comando help rand.

Exercício 2 A equação característica de segunda ordem para um sistema segue, entre outras formas, a forma padrão 2 2

2 n n

s + ζω s+ω da qual pode-se facilmente inferir o tipo da resposta e a

localização das raízes: 2

1,2 n n 1

(7)

diferencias, faça um script que leia os termos referentes à equação de segunda ordem e imprima o tipo da resposta e a localização das raízes da equação.

Exercício 3 Escreva um programa que calcula a potência dissipada em uma resistência. A potência dissipada em uma resistência, basicamente, pode ser calculada de três maneiras diferentes, apresentadas na expressão abaixo:

2

2 V

P VI P RI P

R

= = =

Imagem

Tabela 3 - Funções para realizar operações lógicas bit a bit.

Referências

Documentos relacionados

inteiro, meios, três partes iguais, quatro partes iguais. Fez isso com exatamente 59 cocos quando alguém disse ao catador: eu quero três quintos dos seus terços de coco e metade

● Quando uma linha na tabela da esquerda não tem nenhuma correspondência, ela ainda está selecionada para a saída, mas se juntou com uma fileira &#34;falsa&#34; da

Chamamos de matriz transposta de uma nova matriz obtida pela troca, ordenadamente , das linhas pelas colunas da matriz original. Indicamos essa

Dependentes, de modo geral, de capacidades orgâ- nicas e de autoridade e meios limitados de múltiplos domínios, as unidades táticas amigas estabelecem con- tato com o inimigo,

Sempre que possível, prefira a higienização das mãos, simplesmente com água e sabão Além disso, considere que o etanol / álcool etílico e o hipoclorito de sódio podem danificar

Em 2015, segundo o site Newzoo (2016), por exemplo, a soma de todos os torneios de E-sports rendeu cerca de US$61 milhões em premiações, e já possui cerca de 148

UNIP – SBD – Álgebra Relacional – Prof.Antonio A.Palladino Notamos que como nossa operação é um produto cartesiano temos como resultado o produto das linhas das duas tabelas,

a determinidade dele [do existente para si] já não [é] ao mesmo tempo como numa relação simples consigo, já não é uma determinidade do algo existente, mas sim é posta