Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC ESTRUTURAS DE CONTROLE Estruturas Condicionais ou de Seleção Estruturas Condicionais Simples Estruturas Condicionais Compostas Estruturas Condicionais Encadeadas Estruturas Condicionais Aninhadas Estruturas Condicionais de Múltipla Escolha
Na construção de algoritmos, utilizamos os conceitos de: Variáveis Constantes Atribuições Operadores e expressões aritméticas, lógicas e relacionais Comandos que traduzem esses conceitos de forma a representar o conjunto de ações desejadas. Exemplo 02 – Variáveis no MATLAB a = 5; % variável numérica b = 8.35; % variável numérica s = ‘c’; % caractere l = 1; % variável lógica v = ‘casa’; % seqüência de caracteres Exemplo 10: 2 < 5 | (~(15/3==5)) v | (~v) v | f v
Estruturas de controle Para viabilizar essas ações, é necessário estabelecer o fluxo de execução do algoritmo. Isso é possível a partir do uso das estruturas básicas de controle do fluxo de execução e das combinações entre elas. Tipos básicos de estruturas de controle: Seqüenciais Condicionais Repetição
Estruturas de Controle de Fluxo As estruturas de controle de fluxo determinam o fluxo de execução dos comandos do programa. Sem elas só haveria uma maneira do programa ser executado: de cima para baixo comando por comando. Em função dos dados fornecidos pelo usuário, não haveria como deixar de executar algum comando ou alterar o número de repetições de comandos. É possível elaborar programas sem utilizar todas elas, mas deve-se notar que a elegância e a facilidade de entendimento de um programa dependem do uso correto das estruturas nos locais certos.
Estruturas de Seleção (Condicional) Essas estruturas condicionam a execução de um comando ou de um bloco de comandos ao atendimento de condições (Se “verdadeiro”, então) definidas pelo programador. Aqui, são usados os conceitos de expressões lógicas e relacionais vistos anteriormente.
Expressão Lógica e/ou relacional Seleção Simples Usada quando precisamos testar uma certa condição antes de executar uma ação. Seu modelo é descrito abaixo. Expressão Lógica e/ou relacional if ( condição ) comando 1; comando 2; ... comando n; end Bloco de comandos 2 < 5 | (~(15/3==5)) v | (~v) v | f v
expressão Lógica ou relacional? Seleção Simples Exemplo: Cálculo da média com verificação de aprovação. N1 = input(‘Entre com a nota 1: ’); N2 = input(‘Entre com a nota 2: ’); N3 = input(‘Entre com a nota 3: ’); N4 = input(‘Entre com a nota 4: ’); MA = (N1+N2+N3+N4)/4; fprintf(‘A media é %5.2f\n’,MA); if ( MA >= 7 ) disp(‘Aluno aprovado!’); end expressão Lógica ou relacional?
Valor lógico: Pode resultar de expressão lógica ou relacional Seleção Composta Usada quando existem situações em que duas alternativas dependem de uma mesma condição (uma ser verdadeira e outra falsa). Valor lógico: Pode resultar de expressão lógica ou relacional if ( condição ) comando a1; comando a2; comando an; else comando b1; comando b2; comando bn; end Verdadeiro Falso
Seleção Composta Exemplo: cálculo da média com verificação de aprovação e reprovação. N1 = input(‘Entre com a nota 1: ’); N2 = input(‘Entre com a nota 2: ’); N3 = input(‘Entre com a nota 3: ’); N4 = input(‘Entre com a nota 4: ’); MA = (N1+N2+N3+N4)/4; fprintf(‘A media é %5.2f\n’,MA); if( MA >= 7 ) disp(‘Aluno aprovado!’); else disp(‘Aluno reprovado!’); end Verdadeiro Falso
Falso para 1 e Verdadeiro para 2 Seleção Encadeada Usada quando existe a necessidade de agrupar várias seleções de forma encadeada. Verdadeiro para 1 Valor lógico: Pode resultar de expressão lógica ou relacional if ( condição 1) comando a1; comando a2; comando an; elseif ( condição 2) comando b1; comando b2; comando bn; else comando c1; comando c2; comando cn; end Falso para 1 e Verdadeiro para 2 Falso para 1 e 2
Seleção Encadeada Exemplo: cálculo da média verificando aprovação, reprovação e final. … MA = (N1+N2+N3+N4)/4; fprintf(‘A media é %5.2f\n’,MA); if( MA >= 7 ) disp(‘Aluno aprovado!’); elseif( MA < 5 ) disp(‘Aluno reprovado!’); else disp(‘Aluno na final’); end
Seleção Aninhada if ( condição1 ) comando a1; comando a2; comando an; elseif ( condição 2 ) comando b1; comando b2; comando bn; elseif ( condição 3 ) comando c1; if ( condição 3a ) comando c1a; comando c2a; comando cna; end comando c2; else comando d1; comando d2; comando dn;
Seleção de Múltipla Escolha Esse tipo de seleção é uma alternativa ao uso da seleção encadeada if-elseif-else. Switch Verbo – mudar, trocar; Substantivo – interruptor, mudança. switch( variavel ) case v1 comandos 1; break; case v2 comandos 2; case v3 comandos n; otherwise comandos; end Deve-se observar que variável não pode ser uma expressão. Sai da estrutura de controle, mas não do programa. Uso do comando é facultativo.
Exemplo: Variável bandeira disp(‘Estudar, dormir, comer’); disp(‘digite 1 se deseja primeira opcao’); disp(‘digite 2 se deseja segunda opcao’); disp(‘digite 3 se deseja terceira opcao’); x = input(‘’); flag = 0; switch( x) case 1 disp( ‘Você deseja estudar’); flag=1; break; case 2 disp( ‘Você deseja dormir’); flag=2; case 3 disp( ‘Você deseja comer’); flag=3; otherwise disp( ‘Não quero nenhuma das opções’); end Ao final do programa, o valor da variável bandeira denuncia que opção da estrutura de controle foi satisfeita
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC EXERCÍCIOS COMPLEMENTARES
Exercício 1: Escrever um algoritmo que leia 3 valores numéricos e mostre-os em ordem crescente.
A = input(‘Valor 1: ’); B = input(‘Valor 2: ’); C = input(‘Valor 3: ’); disp (‘Os números em ordem ficam: ’); if( A < B ) if( B < C ) disp(A); disp(B); disp(C); elseif( A < C ) disp(A); disp(C); disp(B); else disp(C); disp(A); disp(B); end elseif( A < C) disp(B); disp(A); disp(C); elseif( B < C ) disp(B); disp(C); disp(A); disp(C); disp(B); disp(A);
Exercício 2: Ler 3 números, verificar se eles podem ou não ser lados de um triângulo. Se sim, classificar o triângulo quanto os seus lados. Triângulo Eqüilátero Triângulo Isósceles Triângulo Escaleno 3 lados iguais: Eqüilátero 2 lados iguais: Isósceles Lados desiguais: Escaleno
A = input(‘Entre c/ o primeiro lado: ’); B = input(‘Entre c/ o segundo lado: ’); C = input(‘Entre c/ o terceiro lado: ’); if( A < B+C & B < A+C & C < A+B ) if( a == b & b == c ) disp(‘Triangulo Eqüilátero!’); elseif( a == b | b == c | a == c ) disp(‘Triangulo Isosceles!’); else disp(‘Triangulo Escaleno!’); end disp(‘Lados não formam um triangulo!’);