Mostrando entradas con la etiqueta Bucle "do - while". Mostrar todas las entradas
Mostrando entradas con la etiqueta Bucle "do - while". Mostrar todas las entradas

sábado, 3 de marzo de 2012

"While... End" y "Do... Loop"

A continuación se muestra un sencillísimo ejemplo de todas las variantes de estos bucles:

Module Module1

    Sub Main()
        DoLoop()
        Console.ReadKey()
    End Sub

    Sub DoLoop()
        Dim a As Integer = 1

        ' While
        While (a < 10)
            a += 1
        End While

        ' Equivalente al while
        Do While (a < 10)
            a += 1
        Loop

        ' Evalúa la condición al final
        ' Por lo tanto el bloque se ejecutará al menos una vez
        Do
            a += 1
        Loop While (a <= 10)

        ' Se ejecuta "hasta que", no "mientras"
        Do Until (a > 10)
            a += 1
        Loop

        ' Lo mismo, pero el bloque se ejecuta al menos una vez
        Do
            a += 1
        Loop Until (a > 10)
    End Sub

End Module

Instrucción Select... Case

La instrucción Select... Case es similar al Switch de Java, pero bastante más potente, ya que permite indicar intervalos, expresiones y varios valores en el mismo "Case".

EJEMPLO DE SELECT... CASE

Module Module1

    Sub Main()
        Menu()
        Console.ReadKey()
    End Sub

    Sub Menu()
        Dim opcion As Integer = 1
        While (opcion <> 0)
            Console.Clear()
            Console.WriteLine("Menú")
            Console.WriteLine("====")
            Console.WriteLine("1. Si introduce uno se ejecuta esta opción")
            Console.WriteLine("2-5. Si introduce un número entre 2 y 5 se ejecuta esta")
            Console.WriteLine("6, 9, 10. Si introduce 6, 9 o 10 se ejecuta esta")
            Console.WriteLine("Mayor de 15. Si es mayor de 15 se ejecuta esta")
            Console.WriteLine("0. Salir")
            Console.WriteLine()
            Try
                opcion = CInt(Console.ReadLine())
            Catch ex As InvalidCastException
                ' Sólo se ve desde el Visual Studio
                Debug.WriteLine("Error: " & ex.Message)
                opcion = 7
            Catch e As OverflowException
                ' lo que queramos hacer
            End Try

            Select Case opcion
                Case 1
                    Console.WriteLine("Ha seleccionado la opción 1")
                Case 2 To 5 ' Intervalo
                    Console.WriteLine("Ha seleccionado una opción entre 2 y 5")
                Case 6, 9, 10 ' Varios valores
                    Console.WriteLine("Ha seleccionado 6, 9 o 10")
                Case Is > 15 ' Expresión
                    Console.WriteLine("Ha seleccionado una opción mayor que 15")
                Case 0
                    Console.WriteLine("Ha elegido salir, ¡adiós!")
                Case Else ' Si no entra por las anteriores...
                    Console.WriteLine("Ha elegido una opción incorrecta")
            End Select

            ' vbCrLf -> constante que representa retorno de carro más salto de línea
            Console.WriteLine(vbCrLf & "Pulse ENTER para continuar")
            Console.ReadKey()

        End While
    End Sub

End Module

EJERCICIO
Realizar una aplicación que tenga un menú que permita elegir entre calcular el área de un círculo o un rectángulo. Dependiendo de lo que se elija, se pedirán los datos correspondientes y se mostrará el resultado.

Module Module1

    Sub Main()
        Const PI As Double = 3.14159265
        Dim opcion As Integer
        Dim ancho, alto As Double
        Dim radio As Double

        Do
            Menu()
            Console.Write("Elija una opción: ")
            opcion = Console.ReadLine
            Console.WriteLine()

            Select Case opcion
                Case 1
                    Console.Write("Ancho: ")
                    ancho = Console.ReadLine
                    Console.Write("Alto: ")
                    alto = Console.ReadLine
                    Console.WriteLine("Área del rectángulo: " & (ancho * alto) & " uds cuadradas")
                Case 2
                    Console.Write("Radio: ")
                    radio = Console.ReadLine
                    Console.WriteLine("Área del círculo: " & (PI * (radio ^ 2)) & " uds cuadradas")
                Case 3
                    Console.WriteLine("Ha elegido salir del programa.")
                Case Else
                    Console.WriteLine("Opción incorrecta.")
            End Select

            Console.WriteLine(vbCrLf & "Pulse ENTER para continuar")
            Console.ReadKey()

        Loop While opcion <> 3

    End Sub

    'Procedimiento que muestar el menú
    Sub Menu()
        Console.Clear()
        Console.WriteLine("CALCULAR ÁREA")
        Console.WriteLine()
        Console.WriteLine("1. Rectángulo")
        Console.WriteLine("2. Círculo")
        Console.WriteLine("3. Salir")
    End Sub

End Module

miércoles, 29 de febrero de 2012

Varios ejercicios

EJERCICIO 1
Hacer una aplicación que pida un nombre por teclado y luego salude a esa persona.

Module Module1

    Sub Main()
        Dim nombre As String

        Console.WriteLine("¿Cómo te llamas?")
        nombre = Console.ReadLine
        Console.WriteLine()
        Console.WriteLine("Hola " & nombre)

        Console.ReadKey()

    End Sub

End Module

EJERCICIO 2
Hacer una aplicación que recoja números desde teclado hasta que se introduzca vacío (cadena ""). Se deben sumar estos números y mostrar el resultado.

Module Module1

    Sub Main()
        Dim Numero As String
        Dim Resultado As Integer = 0

        Do
            Console.Write("Número: ")
            Numero = Console.ReadLine()
            Try
                Resultado = Resultado + CInt(Numero)
            Catch ex As InvalidCastException

            End Try
        Loop While Numero <> ""

        Console.WriteLine("Resultado final: " & Resultado)

        Console.ReadKey()

    End Sub

End Module

NOTA: por defecto, se realizan conversiones implícitas de datos, si quisiésemos desactivar esta opción (recomendable), tendremos que poner la siguiente línea al principio de nuestro código (antes de Module Nombre_del_Módulo)

Option Explicit On

En este caso, para realizar las conversiones, se utilizarán las funciones de conversión. Algunas de estas funciones son:

  • CDate(expresión): para convertir a tipo Date
  • CDbl(expresión): para convertir a tipo Double
  • CInt(expresión): para convertir a tipo Integer
  • CStr(expresión): para convertir a tipo String

EJERCICIO 3
Hacer una aplicación que pida por teclado el radio de una circunferencia y muestre su área y su perímetro.

Module Module1

    Sub Main()
        Dim Radio, Area, Perimetro As Double
        ' Definición de constantes en VB
        Const PI As Double = 3.14159265

        Console.Write("Radio de la circunferencia: ")
        Radio = Console.ReadLine

        Area = PI * (Radio ^ 2)
        Perimetro = 2 * PI * Radio

        Console.WriteLine("Área: " & Area & " uds cuadradas")
        Console.WriteLine("Perímetro: " & Perimetro & "uds")

        Console.ReadKey()

    End Sub

End Module

jueves, 16 de junio de 2011

Ejercicio número en un rango

Dado un rango entre dos números enteros, realizar una función que reciba estos dos números y pida al usuario que introduzca un número del rango. el programa seguirá pidiendo el número hasta que el usuario introduzca un número válido.
Se añade el programa principal con el que se probó la función.

public class Rango {
    public static void main(String[] args) {
        int desde, hasta, resultado;
        desde = 1;
        hasta = 15;
        System.out.println("Numero entre "+desde+" y "+hasta);
        resultado = leerRango(desde, hasta);
    }
    public static int leerRango(int ini, int fin) {
        Scanner entrada = new Scanner(System.in);
        int numero=0;
        boolean valido;
        do{
            try{
                numero = entrada.nextInt();
                if (numero < ini | numero > fin)
                    valido = false;
                else
                    valido = true;
            }
            catch(InputMismatchException e){
                valido = false;
            }
            entrada.nextLine();
        }while (!valido);
        return numero;
    }
}