Estruturas de Decisão APROG (Civil) Aula 6 Tuesday, December 1, 2009 APROG Conteúdo Civil • Estruturas • Estrutura If...Then • Estrutura If...Then...Else ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 de Decisão 2 Estruturas de Decisão Conceito APROG Civil • As Estruturas de Controlo servem para modificar o fluxo das instruções seguidas por um determinado programa. • As Estruturas de Controlo Condicional (Estruturas de Decisão) são usadas para escolher um entre vários caminhos possíveis, permitindo a tomada de decisões em função da situação do momento. ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 3 Estruturas de Decisão Estruturas de Decisão APROG Civil As linguagens de programação têm instruções que permitem tomar decisões com base numa condição (expressão lógica). Em VBA existe o IF ... Then − Sintaxe (geral) If <expressão lógica> then <bloco de instruções 1> [Else <bloco de instruções 2>] End If − O código entre parêntesis rectos é opcional, ou seja, não tem necessariamente que existir. Explicação Se a expressão lógica for verdadeira será executado o bloco de instruções 1, caso contrário executa-se o 2. ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 4 Estruturas de Decisão APROG Civil Estrutura If...Then...Else IF...THEN ... ELSE Instrução NÃO Condição Verdadeira? Bloco de Instruções 2 SIM Bloco de Instruções 1 Instrução ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 5 Estruturas de Decisão Estrutura If...Then APROG Civil Instrução IF...THEN Condição Verdadeira? NÃO SIM Bloco de Instruções Instrução ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 6 Estruturas de Decisão APROG Civil Exemplo - Enunciado Pretende-se um programa que resolva equações do 2º grau. − Raízes: ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 7 Estruturas de Decisão Exemplo - Código APROG Civil O código do programa é o seguinte: Para o interpretador do VBA - obriga a declarar variáveis Declaração das variáveis Public Sub Equation2ndDegree() Option Explicit Dim a As Single, b As Single, c As Single Dim delta As Single a = [C3] b = [D3] c = [E3] Leitura dos valores contidos em 3 células da folha activa. Não é são validados os valores. delta = Sqr(b ^ 2 - 4 * a * c) [C5] = (-b + delta) / (2 * a) [C6] = (-b - delta) / (2 * a) End Sub Sqr() é uma função do VBA que fornece a raiz quadrada de um número positivo A variável delta permite economizar alguns cálculos, não sendo necessário repetir o cálculo da raiz quadrada para a segunda raiz. Caso não se trate da folha de cálculo activa, deverá ser inserida a referência à folha específica: a = Worksheets("Folha2").[C3] ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 8 Estruturas de Decisão Exemplo - teste APROG Civil Vamos testar com outros valores: 1, 0, 1 (raízes complexas +i e -i). Ocorreu um erro e o programa foi interrompido: a função Sqr() não aceita argumentos negativos! ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 9 Estruturas de Decisão Exame - Solução APROG Civil A função Sqr() não pode receber argumentos negativos. Option Explicit Private Sub Equation2ndDegree() Dim a As Single, b As Single, c As Single Dim delta As Single a = [C3] b = [D3] c = [E3] delta representa agora o interior da raiz Se delta for maior ou igual a zero então é possível calcular a raiz quadrada. Existem raízes reais para a equação. delta = b ^ 2 - 4 * a * c If delta >= 0 Then [C5] = (-b + Sqr(delta)) / (2 * a) [C6] = (-b - Sqr(delta)) / (2 * a) Else Mensagem a indicar que as raízes MsgBox "Raízes complexas!" são complexas. End If End Sub ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 10 Estruturas de Decisão Exemplo - Novo teste APROG Civil De novo com os valores: 1, 0, 1 (raízes complexas +i e -i). O programa já não dá erro, informando antes o utilizador da natureza complexa das raízes! Sugestão: O programa pode ainda dar erro devido a certos valores introduzidos pelo utilizador. Tente descobrir e eliminar essa possibilidade (pista: atenção às divisões!). Tente também apresentar as raízes complexas da equação. ISEP-DEI, António Silva, © 2007-2009 ISEP–DEI, Angelo Martins © 2006 Tuesday, December 1, 2009 11 Estruturas de Decisão