8 - Estructuras condicionales con condiciones compuestas y operadores lógicos


Hasta ahora hemos visto los operadores:

relacionales (>, <, >=, <= , =, <>)
matemáticos (+, -, *, /, Mod)

pero nos están faltando otros operadores imprescindibles:

lógicos (And, Or).

Estos dos operadores se emplean fundamentalmente en las estructuras condicionales para agrupar varias condiciones simples.

Operador And

condiciones compuestas
Traducido se lo lee como “Y”. Si la Condición 1 es verdadera Y la condición 2 es verdadera luego ejecutar la rama del verdadero.
Cuando vinculamos dos o más condiciones con el operador "And", las dos condiciones deben ser verdaderas para que el resultado de la condición compuesta de Verdadero y continúe por la rama del verdadero de la estructura condicional.

La utilización de operadores lógicos permiten en muchos casos plantear algoritmos más cortos y comprensibles.

Problema:

Confeccionar un programa que lea por teclado tres números distintos y nos muestre el mayor.

Diagrama de flujo:

condiciones compuestas
Este ejercicio está resuelto sin emplear operadores lógicos en un concepto anterior del tutorial. La primera estructura condicional es una ESTRUCTURA CONDICIONAL COMPUESTA con una CONDICION COMPUESTA.
Podemos leerla de la siguiente forma:
Si el contenido de la variable num1 es mayor al contenido de la variable num2 Y si el contenido de la variable num1 es mayor al contenido de la variable num3 entonces la CONDICION COMPUESTA resulta Verdadera.
Si una de las condiciones simples da falso la CONDICION COMPUESTA da Falso y continua por la rama del falso.
Es decir que se mostrará el contenido de num1 si y sólo si num1>num2 y num1>num3.
En caso de ser Falsa la condición, analizamos el contenido de num2 y num3 para ver cual tiene un valor mayor.
En esta segunda estructura condicional no se requieren operadores lógicos al haber una condición simple.

Programa:

Module Module1

    Sub Main()
        Dim num1, num2, num3 As Integer
        Console.Write("Ingrese primer valor:")
        num1 = Console.ReadLine()
        Console.Write("Ingrese segundo valor:")
        num2 = Console.ReadLine()
        Console.Write("Ingrese tercer valor:")
        num3 = Console.ReadLine()
        If num1 > num2 And num1 > num3 Then
            Console.Write(num1)
        Else
            If num2 > num3 Then
                Console.Write(num2)
            Else
                Console.Write(num3)
            End If
        End If
        Console.ReadKey()
    End Sub

End Module

Operador Or

operador or

Traducido se lo lee como "O". Si la condición primera es Verdadera o la condición segunda es Verdadera, luego ejecutar la rama del Verdadero.
Cuando vinculamos dos o más condiciones con el operador "Or", con que una de las dos condiciones sea Verdadera alcanza para que el resultado de la condición compuesta sea Verdadero.

Problema:

Se carga una fecha (día, mes y año) por teclado. Mostrar un mensaje si corresponde al primer trimestre del año (enero, febrero o marzo) Cargar por teclado el valor numérico del día, mes y año.
Ejemplo: dia:10 mes:1 año:2016.

Diagrama de flujo:

operador logico or

La carga de una fecha se hace por partes, ingresamos las variables dia, mes y año.
Mostramos el mensaje "Corresponde al primer trimestre" en caso que el mes ingresado por teclado sea igual a 1, 2 ó 3.
En la condición no participan las variables dia y año.

Programa:

Module Module1

    Sub Main()
        Dim dia, mes, año As Integer

        Console.Write("Ingrese nro de día:")
        dia = Console.ReadLine()
        Console.Write("Ingrese nro de mes:")
        mes = Console.ReadLine()
        Console.Write("Ingrese nro de año:")
        año = Console.ReadLine()
        If mes = 1 Or mes = 2 Or mes = 3 Then
            Console.Write("Corresponde al primer trimestre")
        End If
        Console.ReadLine()
    End Sub

End Module

Problemas propuestos

  1. Realizar un programa que pida cargar una fecha cualquiera, luego verificar si dicha fecha corresponde a Navidad.
  2. Se ingresan tres valores por teclado, si todos son iguales se imprime la suma del primero con el segundo y a este resultado se lo multiplica por el tercero.
  3. Se ingresan por teclado tres números, si todos los valores ingresados son menores a 10, imprimir en pantalla la leyenda "Todos los números son menores a diez".
  4. Se ingresan por teclado tres números, si al menos uno de los valores ingresados es menor a 10, imprimir en pantalla la leyenda "Alguno de los números es menor a diez".
  5. Escribir un programa que pida ingresar la coordenada de un punto en el plano, es decir dos valores enteros x e y (distintos a cero).
    Posteriormente imprimir en pantalla en que cuadrante se ubica dicho punto. (1º Cuadrante si x > 0 Y y > 0 , 2º Cuadrante: x < 0 Y y > 0, etc.)
  6. De un operario se conoce su sueldo y los años de antigüedad. Se pide confeccionar un programa que lea los datos de entrada e informe:
    a) Si el sueldo es inferior a 500 y su antigüedad es igual o superior a 10 años, otorgarle un aumento del 20 %, mostrar el sueldo a pagar.
    b)Si el sueldo es inferior a 500 pero su antigüedad es menor a 10 años, otorgarle un aumento de 5 %.
    c) Si el sueldo es mayor o igual a 500 mostrar el sueldo en pantalla sin cambios.
  7. Escribir un programa en el cual: dada una lista de tres valores numéricos distintos se calcule e informe su rango de variación (debe mostrar el mayor y el menor de ellos)
Solución
Module Module1

    Sub Main()
        Dim dia, mes, año As Integer
        Console.Write("Ingrese nro de día:")
        dia = Console.ReadLine()
        Console.Write("Ingrese nro de mes:")
        mes = Console.ReadLine()
        Console.Write("Ingrese nro de año:")
        año = Console.ReadLine()
        If mes = 12 And dia = 25 Then
            Console.Write("La fecha ingresada corresponde a navidad.")
        End If
        Console.ReadKey()
    End Sub

End Module





Module Module1

    Sub Main()
        Dim num1, num2, num3 As Integer
        Console.Write("Ingrese primer valor:")
        num1 = Console.ReadLine()
        Console.Write("Ingrese segundo valor:")
        num2 = Console.ReadLine()
        Console.Write("Ingrese tercer valor:")
        num3 = Console.ReadLine()
        If num1 = num2 And num1 = num3 Then

            Dim suma, producto As Integer
            suma = num1 + num2
            Console.Write("La suma del primero y segundo:")
            Console.WriteLine(suma)
            producto = suma * num3
            Console.Write("La suma del primero y segundo multiplicado por el tercero:")
            Console.Write(producto)
        End If
        Console.ReadKey()
    End Sub

End Module





Module Module1

    Sub Main()
        Dim num1, num2, num3 As Integer
        Console.Write("Ingrese primer valor:")
        num1 = Console.ReadLine()
        Console.Write("Ingrese segundo valor:")
        num2 = Console.ReadLine()
        Console.Write("Ingrese tercer valor:")
        num3 = Console.ReadLine()
        If num1 < 10 And num2 < 10 And num3 < 10 Then
            Console.Write("Todos los números son menores a diez")
        End If
        Console.ReadKey()
    End Sub

End Module





Module Module1

    Sub Main()
        Dim num1, num2, num3 As Integer
        Console.Write("Ingrese primer valor:")
        num1 = Console.ReadLine()
        Console.Write("Ingrese segundo valor:")
        num2 = Console.ReadLine()
        Console.Write("Ingrese tercer valor:")
        num3 = Console.ReadLine()
        If num1 < 10 Or num2 < 10 Or num3 < 10 Then
            Console.Write("Alguno de los números es menor a diez")
        End If
        Console.ReadKey()
    End Sub

End Module






Module Module1

    Sub Main()
        Dim x, y As Integer
        Console.Write("Ingrese coordenada x:")
        x = Console.ReadLine()
        Console.Write("Ingrese coordenada y:")
        y = Console.ReadLine()
        If x > 0 And y > 0 Then
            Console.Write("Se encuentra en el primer cuadrante")
        Else
            If x < 0 And y > 0 Then
                Console.Write("Se encuentra en el segundo cuadrante")
            Else
                If x < 0 And y < 0 Then
                    Console.Write("Se encuentra en el tercer cuadrante")
                Else
                    Console.Write("Se encuentra en el cuarto cuadrante")
                End If
            End If
        End If
        Console.ReadKey()
    End Sub

End Module





Module Module1

    Sub Main()
        Dim sueldo As Single
        Dim antiguedad As Integer
        Console.Write("Ingrese sueldo del empleado:")
        sueldo = Console.ReadLine()
        Console.Write("Ingrese su antiguedad en años:")
        antiguedad = Console.ReadLine()
        If sueldo < 500 And antiguedad > 10 Then
            Dim aumento As Single
            aumento = sueldo * 0.2
            Dim sueldoTotal As Single
            sueldoTotal = sueldo + aumento
            Console.Write("Sueldo a pagar:")
            Console.Write(sueldoTotal)
        Else
            If sueldo < 500 Then
                Dim aumento As Single
                aumento = sueldo * 0.05
                Dim sueldoTotal As Single
                sueldoTotal = sueldo + aumento
                Console.Write("Sueldo a pagar:")
                Console.Write(sueldoTotal)
            Else
                Console.Write("Sueldo a pagar:")
                Console.Write(sueldo)
            End If
        End If
        Console.ReadKey()
    End Sub

End Module





Module Module1

    Sub Main()
        Dim num1, num2, num3 As Integer
        Console.Write("Ingrese primer valor:")
        num1 = Console.ReadLine()
        Console.Write("Ingrese segundo valor:")
        num2 = Console.ReadLine()
        Console.Write("Ingrese tercer valor:")
        num3 = Console.ReadLine()
        Console.Write("Rango de valores:")
        If num1 < num2 And num1 < num3 Then
            Console.Write(num1)
        Else
            If num2 < num3 Then
                Console.Write(num2)
            Else
                Console.Write(num3)
            End If
        End If
        Console.Write("-")
        If num1 > num2 And num1 > num3 Then
            Console.Write(num1)
        Else
            If num2 > num3 Then
                Console.Write(num2)
            Else
                Console.Write(num3)
            End If
        End If
        Console.ReadKey()
    End Sub

End Module

Retornar