Resumen: Entrega nº36 del curso Aprender a programar en Visual Basic desde cero.
Codificación aprenderaprogramar.com: CU00337A

 

 

SALIR DE UN BUCLE FOR CON EXIT FOR EN VISUAL BASIC

Cuando realizamos un esquema de programa usando pseudocódigo podemos reflejar la salida de un bucle For (Desde … Siguiente) con la instrucción SalirDesde. La sintaxis a emplear en Visual Basic es Exit For dentro de cualquier bucle For ... Next. Cuando existe anidamiento de bucles, se produce la salida del bucle más interno al inmediato superior

Visual Basic

Si se escribe un Exit For fuera de un bucle aparece el mensaje: "Error de compilación. Exit For no está dentro de For ... Next".

 

 

EJERCICIO RESUELTO CON EXIT FOR

Transformar en código el ejemplo de aplicación de la Instrucción SalirDesde que se muestra a continuación en forma de pseudocódigo, considerando que Numerodatos tiene un valor fijo de 35, y que los datos están el archivo notas.dat, que habrá sido creado previamente.

 

    Pseudocódigo ejemplo de uso de SalirDesde (Exit For):

1.  Inicio [Algoritmo Media curso VB aprenderaprogramar.com]

2.  Leer Numerodatos [Establece el nº de datos a extraer]

3.  [El dato esperado en fichero debe valer entre 0 y10]

4.  Desde i = 1 hasta Numerodatos Hacer

Leer Dato(i)

Si Dato(i) < 0 ó Dato(i) >10 Entonces [Dato no válido]

Mostrar “No se pudo completar la extracción de datos.

            Motivo: dato no válido. Revise archivo y vuelva a intentarlo”

Fallolectura = Verdadero [Interruptor]

SalirDesde

FinSi

Suma = Suma + Dato(i)

Siguiente

5.  Si Fallolectura = Falso Entonces

Media = Suma / Numerodatos

Mostrar “La media es”, Media

Sino

Mostrar “Gracias por utilizar este programa”

FinSi

6.  Fin

 

 

SOLUCIÓN AL EJERCICIO CON EXIT FOR

Como paso previo en tiempo de diseño crearemos un label para mostrar los resultados al que denominaremos LabelResultado así como un botón que el usuario debe pulsar para leer los datos desde el archivo.

 

Código (versiones VB menos recientes) Código (versiones VB más recientes)
'Curso VB aprenderaprogramar.com

Option Explicit
Dim Canal%, i As Integer
Dim Dato(35) As Single
Dim Fallolectura As Boolean
Dim Suma!, Media As Single

Private Sub Form_Load()
Show
Form1.Caption = "Notas"
CommandCalcular.Caption = "Leer archivo"
End Sub

Private Sub CommandCalcular_Click()
LabelResultado.Alignment = 2
LabelResultado.FontBold = True
'[Apertura del archivo]
Canal = FreeFile
Open "C:\notas.dat" For Input As Canal
For i = 1 To 35
    '[Lectura de datos desde archivo]
    Input #Canal, Dato(i)
    If Dato(i) < 0 Or Dato(i) > 10 Then                    '[Dato no válido]
        LabelResultado = "No se pudo completar la extracción de datos. Motivo:
dato no válido. Revise archivo y vuelva a intentarlo"
        Fallolectura = True  '[Interruptor]
        Exit For
    End If
    Suma = Suma + Dato(i)
Next i
Close Canal '[Cerramos el archivo]
If Fallolectura = False Then
    Media = Suma / 35
    LabelResultado = "La media es " & Media
Else
    LabelResultado = LabelResultado & vbCrLf & "Gracias por utilizar este programa"
End If
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
    Dim Dato(35) As Single
    Dim Fallolectura As Boolean
    Dim Suma, Media As Single

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "Notas"
        ButtonCalcular.Text = "Leer archivo"
    End Sub

    Private Sub ButtonCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcular.Click
        Dim i As Integer
LabelResultado.TextAlign = ContentAlignment.MiddleCenter
LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold)
LabelResultado.Text = ""
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Asus\Desktop\notas.dat", False)

        For i = 1 To 35
            '[Lectura de datos desde archivo]
            Dato(i) = myFileToRead.ReadLine()
            If Dato(i) < 0 Or Dato(i) > 10 Then '[Dato no válido]
                LabelResultado.Text = "No se pudo completar la extracción de datos. Motivo: " & _
"dato no válido. Revise archivo y vuelva a intentarlo"
                Fallolectura = True  '[Interruptor]
                Exit For
            End If
            Suma = Suma + Dato(i)
        Next i
        myFileToRead.Close()
        If Fallolectura = False Then
        Media = Suma / 35
        LabelResultado.Text = "La media es " & Media
        Else
        LabelResultado.Text = LabelResultado.Text & vbCrLf & "Gracias por utilizar este programa"
        End If
    End Sub
End Class

 

 

Para comprobar el funcionamiento del programa, lo ejecutaremos con un archivo de datos válidos y después modificaremos un dato para hacerlo no válido, con lo cual deberá mostrarse el mensaje "No se pudo completar la extracción de datos. Motivo: dato no válido. Revise archivo y vuelva a intentarlo".

 

 

SALIR DE UN BUCLE DO…LOOP WHILE CON EXIT DO EN VISUAL BASIC

La sintaxis a emplear es Exit Do dentro de cualquier bucle Do ... Loop While. Cuando existe anidamiento de bucles, se produce la salida del bucle más interno al inmediato superior. Si se escribe un Exit Do fuera de un bucle aparece el mensaje: "Error de compilación. Exit Do no está dentro de Do ... Loop".

 

 

INSTRUCCIÓN HACER … REPETIR CON DO … LOOP Y SALIRHACER CON EXIT DO

Dado que con Visual Basic Mientras ... Hacer se construye con el mismo comando (Do) que Hacer ... Repetir Mientras, la instrucción de salida de este tipo de bucles es siempre Exit Do, con las consideraciones que ya hemos hecho. La construcción Hacer...Repetir se consigue usando Do...Loop sin condicionantes a la entrada ni a la salida. Esto nos obliga, necesariamente, a que exista una condición de salida interna y a que exista un Exit Do dentro del bucle. Consideremos el siguiente ejemplo:

Do

    i = i + 1

    Label1 = Label1 & i       

    If i > 5 Then Exit Do

Loop

 

 

En caso de un fallo del contador o de la condición de salida se producirá un bucle infinito. Es poco recomendable usar construcciones tipo Do ... Loop como elemento habitual de programación. Lo más razonable es usarla únicamente en casos excepcionales y en líneas generales prescindir de ella.

 

 

EJERCICIO RESUELTO CON USO DE DO … LOOP Y EXIT DO

Transformar en código el pseudocódigo que se muestra a continuación como ejemplo de aplicación de SalirHacer y Hacer ... Repetir.

Nota: considerar que el valor de SecretCode se encuentra en el archivo code.dat creado previamente.

       

         Pseudocódigo ejemplo de uso de SalirHacer (Exit Do) y de Hacer ... Repetir (Do…Loop).

1.  Inicio [Mensaje si se acierta número secreto curso VB aprenderaprogramar.com]

2.  Leer Secretcode [Valor del número secreto]

3.  Hacer

Mostrar “Introduzca número secreto”

Pedir Numero

Si Numero = Secretcode Entonces

Mostrar “Bienvenido. Su clave para operar será 685297”

SalirHacer

SiNo

Mostrar “Número erróneo”

i = i + 1

Si i > 19 Entonces

Mostrar “Excedido número de pruebas disponibles. Acceso denegado”

SalirHacer

FinSi

FinSi

Repetir

4.  Fin

 

 

 

 

SOLUCIÓN AL EJERCICIO CON USO DE DO … LOOP Y EXIT DO

 

Código (versiones VB menos recientes) Código (versiones VB más recientes)
'[Curso VB aprenderaprogramar.com]
'[Mensaje si se acierta número secreto]

Option Explicit
Dim Canal%, i As Integer
Dim SecretCode!, Número As Single

Private Sub Form_Load()
Show
LabelResultado.Alignment = 2
LabelResultado.FontBold = True
'[Apertura del archivo]
Canal = FreeFile
Open "C:\code.dat" For Input As Canal
'[Lectura de datos desde archivo]
Input #Canal, SecretCode
Close Canal '[Cerramos el archivo]
Do
Número = InputBox("Introduzca número secreto")
If Número = SecretCode Then
        LabelResultado = "Bienvenido. Su clave para operar será 685297"
        Exit Do
Else
        MsgBox "Número erróneo"
        i = i + 1
If i > 19 Then
LabelResultado = "Excedido número de pruebas disponibles. Acceso denegado"
Exit Do
End If
End If
Loop
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim SecretCode, Número As Single
        Dim i As Integer
        Me.Text = "Secret Code"
LabelResultado.TextAlign = ContentAlignment.MiddleCenter
LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold)
LabelResultado.Text = ""
'[Apertura del archivo]
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Asus\Desktop\code.dat", False)
        '[Lectura de datos desde archivo]
        SecretCode = myFileToRead.ReadLine()
        myFileToRead.Close()

        Do
        Número = InputBox("Introduzca número secreto")
        If Número = SecretCode Then
        LabelResultado.Text = "Bienvenido. Su clave para operar será 685297"
        Exit Do
        Else
        MsgBox("Número erróneo")
        i = i + 1
            If i > 19 Then
            LabelResultado.Text = "Excedido número de pruebas disponibles. Acceso denegado"
            Exit Do
            End If
        End If
        Loop
    End Sub
End Class

 

 

INSTRUCCIÓN GOTO CON VISUAL BASIC

El uso de la instrucción IrA (GoTo) no debe contemplarse en la práctica habitual de la programación. La sintaxis a emplear es:

 

GoTo [número de línea]

 

GoTo [etiqueta]

 

 

Para ejecutar un GoTo no es necesario que todas las líneas estén identificadas, pero sí es necesario que la línea de destino esté numerada o etiquetada. No se puede hacer un GoTo a un procedimiento distinto del que se esté ejecutando en ese momento.

 

 

EJERCICIO RESUELTO CON USO DE GOTO

Generar el código correspondiente al pseudocódigo que se muestra a continuación, considerando que Numerodatos es un valor fijo de 35, y que los datos se encuentran en el fichero notas.dat, que se habrá creado previamente.

 

Pseudocódigo ejemplo de uso de IrA (GoTo)

1.  Inicio [Ejemplo de IrA curso VB aprenderaprogramar.com]

2.  Leer Numerodatos [Establece el nº de datos a extraer]

3.  [El dato esperado en fichero debe valer entre cero y diez]

4.  Desde i = 1 hasta Numerodatos Hacer

Leer Dato(i)

 

Si Dato(i) < 0 ó Dato(i) > 10 Entonces [Dato no válido]

IrA 99 [Envío a Gestión de Errores]

FinSi

Suma = Suma + Dato(i)

Siguiente

5.  Media = Suma / Numerodatos

6.  Mostrar “La media es”, Media

7.  Finalizar

99.  [Gestión de Errores]

99.1  Mostrar “No se pudo completar la extracción de datos. Motivo:

dato no válido. Revise archivo y vuelva a intentarlo”

99.2  Mostrar “Gracias por utilizar este programa”

100.  Fin

 

 

 

SOLUCIÓN AL EJERCICIO CON USO DE GOTO

Código (versiones VB menos recientes) Código (versiones VB más recientes)
'[Curso VB aprenderaprogramar.com]
'[Ejemplo de IrA]

Option Explicit
Dim Canal As Integer
Dim i As Integer
Dim Dato(35) As Single
Dim Suma!, Media As Single

Private Sub Form_Load()
Show
LabelResultado.Alignment = 2
LabelResultado.FontBold = True
'[Apertura del archivo]
Canal = FreeFile
Open "C:\notas.dat" For Input As Canal
For i = 1 To 35
    '[Lectura de datos desde archivo]
    Input #Canal, Dato(i)
    If Dato(i) < 0 Or Dato(i) > 10 Then
'[Dato no válido]
        GoTo 99 '[Envío a gestión de errores]
    End If
    Suma = Suma + Dato(i)
Next i
Media = Suma / 35
MsgBox("La media es " & Media)
Close Canal '[Cerramos el archivo]
Unload Form1
End
99 '[Gestión de errores]
LabelResultado = "No se pudo completar la extracción de datos. Motivo: dato no válido. Revise archivo y vuelva a intentarlo" & vbCrLf & "Gracias por utilizar este programa"
Close Canal  '[Cerramos el archivo]
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim i As Integer
        Dim Dato(35) As Single
        Dim Suma, Media As Single

LabelResultado.TextAlign = ContentAlignment.MiddleCenter
LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold)
        LabelResultado.Text = ""
        '[Apertura del archivo]
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Asus\Desktop\notas.dat", False)

        For i = 1 To 35
            '[Lectura de datos desde archivo]
            Dato(i) = myFileToRead.ReadLine()
            If Dato(i) < 0 Or Dato(i) > 10 Then '[Dato no válido]
                GoTo 99 '[Envío a gestión de errores]
            End If
            Suma = Suma + Dato(i)
        Next i
        Media = Suma / 35
        MsgBox("La media es " & Media)
        myFileToRead.Close()
        Me.Close()
        End
99:     '[Gestión de errores]
        LabelResultado.Text = "No se pudo completar la extracción de datos. Motivo: dato no válido. Revise archivo y vuelva a intentarlo" & vbCrLf & "Gracias por utilizar este programa"
        myFileToRead.Close()
    End Sub
End Class

 

 


  

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.
 
Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

Descargar archivo: