Índice 1. 2. 3. 4. 5. 6. 7. 8. Estructuras condicionales 2. Estructuras condicionales Fundamentos de Informática Dpto. Lenguajes y Sistemas Informáticos Curso 2012 / 2013 Ej07: Cond. simple Ej08: Cond. doble Ej09: Cond. anidada Ej10: Cond. cascada Recomendaciones Resumen Operadores relacionales Operadores booleanos o lógicos 2 Condicionales Ej07: Cond. simple Conditionals Ej07: Cond. simple Ej07: Diagrama de Flujo Ejemplo 07 • Título: cmd07_Click – Condicional simple n: entero • Nombre n ← LeeEntero – cmd07_Click • Descripción no – Leer una variable entera, calcular su valor absoluto (en la misma variable) y mostrar el resultado sí n<0 Condicional simple n←-n • Observaciones – Condicional simple Escribe n Fin 3 4 Conditionals Ej07: Codificación VB Ej07: Cond. simple Condicionales cmd07_Click n: entero n ← LeeEntero no Sub cmd07_Click() Dim s As String Dim n As Integer 2. Ejemplo 08 • Título: – Condicional doble • Nombre sí n<0 Ej08: Cond. doble – cmd08_Click • Descripción n←-n – Leer una variable entera, calcular su valor absoluto en otra variable, y mostrar el resultado s = InputBox ("Introduce número") n = CInt (s) Escribe n If n < 0 Then n = -n End If Fin MsgBox "Valor absoluto: " & CStr (n) End Sub • Observaciones – Condicional doble 5 Condicionales 6 Ej08: Cond. doble Condicionales Ej08: Diagrama de Flujo Ej08: Cond. doble Ej08: Codificación VB cmd08_Click n, a: entero cmd08_Click Sub cmd08_Click() Dim s As String Dim n As Integer Dim a As Integer n, a: entero n ← LeeEntero no n<0 a←n sí Condicional doble n ← LeeEntero no n<0 sí a←-n a←n s = InputBox ("Número:") n = CInt (s) If n < 0 Then Escribe n, a a = -n Else a = n Fin End If MsgBox "Valor absoluto de " & CStr (n) & _ " es " & CStr (a) End Sub a←-n Escribe n, a Fin 7 8 Condicionales Ej09: Cond. anidada Condicionales Ej09: Cond. anidada Ej09: Diagrama de Flujo 3. Ejemplo 09 • Título: n1, n2, n3: entero m: entero cmd09_Click – Condicional anidada • Nombre – cmd09_Click • Descripción Condicional anidada – Leer tres variables enteras, calcular cuál es la mayor de ellas y mostrar el resultado n1 ← LeeEntero n2 ← LeeEntero n3 ← LeeEntero no • Observaciones no – Condicional anidada (condicional dentro de una condicional) n2 > n3 m ← n3 n1 > n2 Condicional anidada sí no sí m ← n2 n1 > n3 m ← n3 sí m ← n1 Escribe n1, n2, n3, m Fin 9 Condicionales Ej09: Cond. anidada 10 Condicionales Ej09: Codificación VB (I) Ej09: Cond. anidada Ej09: Codificación VB (II) … Sub cmd09_Click() Dim s As String Dim n1 As Integer, n2 As Integer, n3 As Integer Dim m As Integer s = InputBox ("Introduce primer número: ") n1 = CInt (s) s = InputBox ("Introduce segundo número: ") n2 = CInt (s) s = InputBox ("Introduce tercer número: ") n3 = CInt (s) … MsgBox "El mayor de " & CStr (n1) & ", " & _ CStr (n2) & " y " & CStr (n3) & _ " es: " & CStr (m) End Sub n3 = CInt (S) If n1 > n2 Then If n1 > n3 Then m = n1 Else m = n3 End If Else If n2 > n3 Then m = n2 Else m = n3 End If End If MsgBox "El mayor de " & CStr (n1) & ", " & _ … 11 12 Condicionales Ej10: Cond. cascada Condicionales Ej10: Cond. cascada Ej10: Diagrama de Flujo 4. Ejemplo 10 • Título: cmd10_Click – Condicional en cascada • Nombre n1, n2, n3: entero m: entero n1 ← LeeEntero n2 ← LeeEntero n3 ← LeeEntero – cmd10_Click • Descripción (Mismo problema que el ejemplo anterior) – Leer tres variables enteras, calcular cuál es la mayor de ellas y mostrar el resultado – Variante distinta de la solución no • Observaciones no – Condicional en cascada – Tras la alternativa Else inmediatamente viene una nueva condición, convirtiendose en ElseIf n2 > n3 m ← n3 sí n1 > n2 ∧ n1 > n3 sí m ← n2 m ← n1 Escribe n1, n2, n3, m Único punto de fin Fin 13 Condicionales 14 Ej10: Cond. cascada Condicionales Ej10: Codificación VB (I) Ej10: Cond. cascada Ej10: Versión anidada (II) … Sub cmd10_Click() Dim s As String Dim n1 As Integer, n2 As Integer, n3 As Integer Dim m As Integer s = InputBox "Introduce primer número: " n1 = CInt (s) s = InputBox "Introduce segundo número: " n2 = CInt (s) s = InputBox "Introduce tercer número: " n3 = CInt (s) … MsgBox "El mayor de " & CStr (n1) & ", " & _ CStr (n2) & " y " & CStr (n3) & _ " es: " & CStr (m) End Sub n3 = CInt (S) If n1 > n2 And n1 > n3 Then m = n1 Else If n2 > n3 Then m = n2 Else m = n3 End If Dos puntos de fin End If MsgBox "El mayor de " & CStr (n1) & ", " & _ … 15 16 Condicionales Ej10: Cond. cascada Condicionales Ej10: Versión en cascada (III) 5. Recomendaciones 5. Recomendaciones (I) • El cuerpo de las instrucciones condicionales normalmente irá sangrado dos espacios en cada anidamiento, a añadir al cuerpo del subprograma • Es por legibilidad, ya que Visual Basic lo entenderá de igual manera • Ejemplo: … n3 = CInt (S) If n1 > n2 And n1 > n3 Then m = n1 ElseIf n2 > n3 Then m = n2 Else Único punto de fin m = n3 End If Sub ejemplo () . . . If a > b Then t = a a = b b = t End If End Sub MsgBox "El mayor de " & CStr (n1) & ", " & _ … 17 Condicionales 5. Recomendaciones Condicionales 5. Recomendaciones (II) 5. Recomendaciones 5. Recomendaciones (III) • Para facilitar la programación es conveniente identificar conjuntos disjuntos y la condición que las distingue • Es mejor no volver a verificar condiciones excluidas • Ejemplo: If nota < 5 Then cal = "suspenso" ElseIf nota < 7 Then cal = "aprobado" ElseIf nota < 9 Then cal = "notable" Else cal = "sobresaliente" End If 18 • Cuando hay dos condiciones a las que queremos asociar la misma acción se agruparán en una sola No volvemos a mirar si es mayor o igual a 5 sí no c1 A1 sí A1 19 c2 no ... sí A1 c1 ∨ c2 no ... 20 Condicionales 5. Recomendaciones Condicionales 5. Recomendaciones (IV) 6. Resumen (I) • • Cuando han de cumplirse dos condiciones simultaneas no pondremos dos instrucciones condicionales sino una sola con la conjunción de las condiciones Condicional simple If condición Then no ... condición sí sí ... End If no 6. Resumen condición no ... sí c1 no c2 sí no • sí c1 ∧ c2 Condicional doble If condición Then ... A1 A1 Else no condición ... End If ... sí sí no condición ... ... ... 21 Condicionales 22 6. Resumen Condicionales 6. Resumen (II) • 6. Resumen (III) Condicional anidada If condición Then ... Else If condición Then 6. Resumen no no condición ... condición • sí If condición Then Else . . . End If sí ... Condicional simple incorrecta ... . . . • Else sí no no condición sí condición ... Negar la condición y OK ... . . . End If End If • Condicional en cascada • no If condición Then condición Representaciones incorrectas (confusión con bucles) sí . . . ElseIf condición Then no condición sí no . . . Else ... ... ... . . . condición condición sí no ... ... End If ... 23 sí ... 24 Condicionales 7. Relacionales Condicionales 7. Operadores relacionales 7. Booleanas 7. Operaciones booleanas o lógicas – Comparan valores y tienen resultado lógico True ó False – Relacionan expresiones lógicas – El resultado es de tipo lógico (Boolean): True ó False – Los operadores relacionales son 6 – Los operandos lógicos son 4: VB Descripción > > Mayor DdF VB Descripción ≥ >= Mayor o igual ¬ Not Negación, no = ≠ < ≤ = <> < <= Igual Distinto Menor Menor o igual ∧ And Conjunción, y ∨ Or Disyunción, o ⊕ Xor Disyunción exclusiva, o exclusiva DdF – Hay que tener cuidado porque no se pueden formar expresiones matemáticas de acotamiento 25 Condicionales 7. Booleanas Condicionales • Operadores booleanos o lógicos Not And Or Xor Cambia de cierto a falso y viceversa Cierto sólo si ambos operandos son ciertos Cierto si algún operando o ambos son ciertos Cierto si los operandos son distintos Negación Conjunción Disyunción ¬a a∧b a∨b Not (a Or b) ≡ Not a And Not b Ejemplo: DdF: ¬ (a > 0 ∧ b > 0) ≡ VB: Not (a>0 And b>0) ≡ a⊕b b Falso Falso Cierto Falso Falso Falso Falso Cierto Cierto Falso Cierto Cierto Cierto Falso Falso Falso Cierto Cierto Cierto Cierto Falso Cierto Cierto Falso a≤0∨b≤0 a<=0 Or b<=0 – La negación de la conjunción es equivalente a la disyunción de las negaciones (cambia ∧ por ∨ ) ¬(a ∧ b) ≡ ¬a ∨ ¬b Disyunción exclusiva a 7. Booleanas • Leyes de De Morgan (Augustus De Morgan 1806-1871) – La negación de la disyunción es equivalente a la conjunción de la negaciones (cambia ∨ por ∧ ) ¬ (a ∨ b) ≡ ¬a ∧ ¬b – El resultado se expresa mediante tablas de verdad DdF VB Descripción ¬ ∧ ∨ ⊕ 26 Not a a And b a Or b a Xor b Not (a And b) ≡ Not a Or Not b Ejemplo: DdF: ¬(a ≥ 0 ∧ b > 0) ≡a<0∨b≤0 VB: Not (a >= 0 And b > 0) ≡ a < 0 Or b <= 0 27 28