CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Visual Basic IV - Decisões CFAC – Concepção e Fabrico Assistidos por Computador João Manuel R. S. Tavares Sumário 1) Operadores Relacionais e Lógicos; 2) Blocos If; 3) Blocos Select Case. @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 2 1 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Operadores Relacionais A execução de um bloco If é controlada por uma expressão ã Booleana. B l Uma expressão Booleana pode ser Verdadeira ou Falsa. Expressões Booleanas são formadas pela utilização de seis operadores Relacionais e três operadores Lógicos. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 3 Operadores Relacionais Notação Matemática Notação Visual Basic Significado Numérico = # < > <= >= @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares = <> < > <= >= Igual a Diferente de Menor do que M i do Maior d que Menor ou igual a Maior ou igual a CFAC: Visual Basic: IV - Decisões 4 2 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Operadores Relacionais com Strings Os computadores utilizam um sistema de codificação especial i l para a comparação ã de d cadeias d i de d caracteres. Usualmente é utilizado nos PCs o sistema de codificação ANSI (também designado por ASCII). @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 5 Exemplos de Comparação de Cadeias de Caracteres Expressão Resultado “Chase” < “Chaz” “ Cat” < “Cat” “Pay” < “Pay ” “Jones” <> “James” “Hope” < “Hopeful” @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares Verdadeiro Verdadeiro Verdadeiro Verdadeiro Verdadeiro CFAC: Visual Basic: IV - Decisões 6 3 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Operadores Lógicos O resultado de um operador lógico é Verdadeiro ou Falso (True/False). Os três operadores lógicos são: Not (negação) And ((e)) Or (ou) @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 7 Not Negação de uma única expressão (operador unário). Exemplo: Supondo que answ = “Y” Not ( answ = “y”) dá Verdadeiro @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 8 4 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI And Combina duas expressões (operador binário); cada expressão ã deve d ser verdadeira d d i para a expressão ã resultante ser verdadeira. Exemplo: (answ Supondo que answ = “Y” = “Y”) Y ) And (answ = “y”) y ) dá Falso @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 9 Or Combina duas expressões; uma das expressões (ou ambas as expressões) õ ) deve d ser verdadeira d d i para a expressão ã resultante ser verdadeira. Exemplo: Supondo que answ = “Y” (answ = “Y”) Or (answ = “y”) dá Verdadeiro @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 10 5 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Determinar se as condições seguintes são verdadeiras ou falsas? (“Y” <> “X”) And (143.55 < 143.55) ( 0 = 14) Or (6 ^ 2 - 3 <= 4 / 2 + 8) Not ( 6 = 7) And ( 44 > 33) Respostas: 1ª é falsa; 2ª é falsa e a 3ª é verdadeira. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 11 Estruturas de Controlo Permitem ao programador alterar o fluxo normal de execução do programa. Tipos de estruturas de controlo: Repetição (Loop); Decisão (Decision). @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 12 6 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Tipos de Estruturas de Decisão A declaração If Com alternativa simples: if Com alternativa composta: if….else A declaração Select Case @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 13 Decisão com Alternativa Simples Uma acção é executada se a condição for verdadeira, caso contrário á i o controlo l do d programa vaii para a próxima declaração. Fluxograma: Sintaxe: Falsa If condição Then acção/acções End If @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares Verdadeira condição acção/acções CFAC: Visual Basic: IV - Decisões 14 7 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Exemplo de Decisão com Alternativa Simples If (grade > = 90) Then picOutput.Print “Excellent Student” letterGrade = “A” picOutput.Print “Your grade is “; letterGrade End If Se o valor da variável grade for superior ou igual a 90 as três instruções são executas; senão são desprezadas e é executada a instrução imediatamente a seguir ao End If. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 15 Decisão com Alternativa Composta Sintaxe: If condição Then acção1 Else acção2 End If Fluxograma: Falsa Verdadeira condição accão2 accão1 Se a condição for verdadeira é executa a acção1, se é falsa é executa a acção2. @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 16 8 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Exemplo de uma declaração de If composto (determinar o maior de dois números) Private Sub cmdFindLarger_Click() Di largerNum Dim l N A As Si Single l picResult.Cls If Val(txtFirstNum.Text) > Val(txtSecondNum.Text) Then largerNum = Val(txtFirstNum.Text) Else largerNum = Val(txtSecondNum Val(txtSecondNum.Text) Text) End If picResult.Print "The larger number is"; largerNum End Sub @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 17 Notas Importantes na utilização da declaração If Utilizar indentação; Em declarações de If’s embutidos cada If deve ter a sua própria declaração End If; Devesse ter cuidado para tentar criar blocos de If fá Ifs fáceis i de d compreender. d @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 18 9 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Exemplo If cond1 Then If cond2 d2 Then Th acção(s) End If End If Um bloco If confuso @2009 - João Manuel R. S. Tavares If cond1 And cond2 Then acção(s) ã () End If M i fácil Mais fá il de d compreender d CFAC: Visual Basic: IV - Decisões 19 Decisões Alternativas Embutidas Sintaxe: If condição1 Then acção1 ElseIf condição2 Then acção2 ElseIf condição3 Then acção3 ç Else acção4 End If @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares É procurada a primeira condição verdadeira, executada a acção correspondente, e depois o controlo salta para a declaração imediatamente a seguir a End If. O Else pode não existir. CFAC: Visual Basic: IV - Decisões 20 10 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Exemplo (determinar o maior de dois números, e informar se os dois números são iguais) Private Sub cmdFindLarger_Click() picResult Cls picResult.Cls If Val(txtFirstNum.Text) > Val(txtSecondNum.Text) Then picResult.Print "The larger number is"; txtFirstNum.Text ElseIf Val(txtSecondNum.Text) > Val(txtFirstNum.Text) Then picResult.Print "The larger number is "; txtSecondNum.Text Else picResult.Print "The two numbers are equal." End If End Sub @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 21 Exemplo (determinar o custo de uma chamada telefónica de NY para LA) Private Sub cmdDisplay_Click() Dim length As Single Call InputLength (length) Call DisplayCost(length) End Sub @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 22 11 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Subrotinas DisplayCost e InputLenght Private Sub DisplayCost (length As Single) ' Di Display l the h cost off a call ll PicOutput.Print "Cost of call: " ; FormatCurrency ( Cost (length)) End Sub Private Sub InputLength(length As Single) 'R Requestt the th length l th off a phone h call ll length = Val (InputBox("Duration of the call in minutes? ")) End Sub @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 23 Função Cost Private Function Cost (length As Single) As Single If length l h < 1 Then Th Cost = .46 Else Cost = .46 + (length –1) * .36 End If End Function @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 24 12 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Bloco Select Case Similar à declaração If; Utilizado em vez de Ifs embutidos; Uma acção é seleccionada a partir de uma lista de alternativas; Evita a confusão de blocos If profundamente embutidos. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 25 Sintaxe do Bloco Select Case Select Case selector C Case valor1 l 1 acção1 Case valor2 acção2 ….. Case Else acção por defeito End Select @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 26 13 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Bloco Select Case Cada valor contém um ou mais dos seguintes tipos de itens separados por virgulas: uma constante; uma variável; uma expressão; um sinal de desigualdade procedido de Is e seguido de uma constante, variável, ou expressão; uma gama de valores expressa na forma a To b, onde a e b são constantes, variáveis, ou expressões. @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 27 Exemplo de um Bloco Select Case letterGrade = txtGrade.text S l C Select Case letterGrade l G d Case “A”, “B” picOutput.Print “ Good Work” Case “C” picOutput.Print “Average Work” Case Else picOutputPrint “Poor Work” End Select @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 28 14 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Exemplo com If’s embutidos letterGrade = txtGrade.Text If ( letterGrade l G d = “A”) O Or (l (letterGrade G d = “B”) Then Th picOutput.print “Good Work” ElseIf (letterGrade = “C”) Then picOutput.Print “ Average Work” Else picOutput.Print “Poor Work” End If @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 29 Exemplo com Vários tipos de valores para o bloco Select Case Private Sub cmdInterpret_Click() Dim x As Integer, y As Integer, num As Integer ' One, Two, Buckle Myy Shoe picPhrase.Cls x=2 y=3 num = Val(txtNumber.Text) Select Case num Case y - x, x picPhrase.Print "Buckle my shoe." Case Is <= 4 picPhrase.Print "Shut the door." Case x + y To x * y picPhrase.Print "Pick up sticks." Case 7, 8 picPhrase.Print "Lay them straight." Case Else picPhrase.Print "Start all over again." End Select End Sub @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 30 15 CFAC: Visual Basic: IV - Decisões FEUP/DEMec/SDI Exemplo com um Selector do tipo String Private Sub cmdInterpret_Click() Dim firstName As String firstName = txtAnswer.Text Select Case firstName Case "Thomas" picSolution.Print "Correct." Case "Woodrow" picSolution.Print "Sorry, his full name was" picSolution.Print "Thomas Woodrow Wilson." C Case "P id " "President" picSolution.Print "Are you for real?" Case Else picSolution.Print "Nice try, but no cigar." End Select End Sub @2009 - João Manuel R. S. Tavares @2009 - João Manuel R. S. Tavares CFAC: Visual Basic: IV - Decisões 31 16