Ejercicio resuelto Visual Basic. Lista de datos con Redim, InputBox, Val, Do While Loop. Ejemplos (CU00346A)

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

 

 

 

EJERCICIO RESUELTO

Generar el código en Visual Basic correspondiente al siguiente pseudocódigo, relativo a un algoritmo para el manejo de una lista de datos sobre la que se desea tener opción a añadir un dato, borrar un dato, conocer el total de datos, visualizar la lista de datos o finalizar.

 

Visual Basic
 

Pseudocódigo:

PROGRAMA DATOS01 [Curso Visual Basic aprenderaprogramar.com]

Variables
Enteras: E
Reales: Dato()

1.  Inicio
2.  Mientras E <> 5 Hacer
    2.1  Si E = 1 Entonces
        Llamar Añadir
    FinSi
    2.2  Si E = 2 Entonces
        Llamar Borrar
    FinSi
    2.3  Si E = 3 Entonces
        Mostrar “El número de datos actualmente en la lista es de”, Limitesuperior(Dato)
    FinSi
    2.4  Si E = 4 Entonces
        Llamar Listar
    FinSi
    2.5  Mostrar “Elija una opción.   1. Añadir dato.
                                                2. Borrar dato.
                                                3. Conocer el total de datos.
                                                4. Mostrar Lista.
                                                5. Salir.”
    2.6  Pedir E
Repetir
3. Fin

Módulo Añadir
1.  Redimensionar Dato(Limitesuperior(Dato) + 1)
2.  Mostrar “Introduzca valor a añadir”
3.  Pedir Dato(Limitesuperior(Dato))
FinMódulo

Módulo Borrar
Variables
Enteras: i, Numborrar
1.  Si Limitesuperior(Dato) <> 0 Entonces
    1.1  Numborrar = 0
    1.2  Mientras Numborrar < 1 ó Numborrar > Limitesuperior(Dato) Hacer
    Mostrar “Introduzca el nº de dato a borrar”
    Pedir Numborrar
    Repetir
    1.3  Si Numborrar < Limitesuperior(Dato) Entonces
    Desde i = Numborrar hasta Limitesuperior(Dato) – 1
    Dato(i) = Dato(i + 1)
    Siguiente
    FinSi
    1.4  Redimensionar Dato(Limitesuperior(Dato) – 1)
    1.5  Mostrar “Dato borrado”
FinSi
2.  Si Limitesuperior(Dato) = 0 Entonces
    Mostrar “La lista está vacía”
FinSi
FinMódulo

Módulo Listar
Variables
Enteras: i
1.  Desde i = 1 hasta Limitesuperior(Dato) Hacer
    Mostrar Dato(i)
Siguiente
FinMódulo

 

 

SOLUCIÓN

 

Código (versiones VB menos recientes) Código (versiones VB más recientes)

'Curso Visual Basic aprenderaprogramar.com
'[PROGRAMA DATOS01]

Option Explicit
Dim Dato() As Single

Private Sub Form_Load()
Form1.Caption = "Datos01"
LabelResultado.Alignment = 2
LabelResultado.FontBold = True
LabelLista.Alignment = 2
LabelLista.FontBold = True
ReDim Dato(0)
Command1.Caption = "Añadir dato"
Command2.Caption = "Borrar dato"
Command3.Caption = "Conocer total de datos"
Command4.Caption = "Mostrar lista"
Command5.Caption = "Salir"
End Sub

Private Sub Command1_Click()
Call Añadir
End Sub

Private Sub Command2_Click()
Call Borrar
End Sub

Private Sub Command3_Click()
LabelResultado = "El número de datos actualmente en la lista es de " & UBound(Dato)
End Sub

Private Sub Command4_Click()
Call Listar
End Sub

Private Sub Command5_Click()
Unload Form1
End
End Sub

Private Sub Añadir()
LabelResultado = " "
LabelLista = " "
ReDim Preserve Dato(UBound(Dato) + 1)
Dato(UBound(Dato)) = Val(InputBox("Introduzca valor a añadir", "Dato"))
End Sub

Private Sub Borrar()
Dim i%, Numborrar As Integer
LabelLista = " "
If UBound(Dato) <> 0 Then
    Numborrar = 0
    Do While Numborrar < 1 Or Numborrar > UBound(Dato)
        Numborrar = InputBox("Introduzca el número de dato a borrar", "Borrar")
    Loop
    If Numborrar < UBound(Dato) Then
        For i = Numborrar To UBound(Dato) - 1
            Dato(i) = Dato(i + 1)
        Next i
    End If
    ReDim Preserve Dato(UBound(Dato) - 1)
    LabelResultado = "Dato borrado"
End If
If UBound(Dato) = 0 Then
    LabelResultado = "La lista está vacía"
End If
End Sub

Private Sub Listar()
Dim i As Integer
LabelLista = "Lista" & vbCrLf
For i = 1 To UBound(Dato)
    LabelLista = LabelLista & vbCrLf & Dato(i)
Next i
End Sub
REM Curso Visual Basic aprenderaprogramar.com
'[PROGRAMA DATOS01]
Option Explicit On

Public Class Form1
    Dim Dato() As Single

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "Datos01"
LabelResultado.Font = New Font("Arial", 12, FontStyle.Bold)
LabelResultado.TextAlign = ContentAlignment.MiddleCenter
LabelLista.Font = New Font("Arial", 12, FontStyle.Bold)
LabelLista.TextAlign = ContentAlignment.MiddleCenter
        ReDim Dato(0)
        Button1.Text = "Añadir dato"
        Button2.Text = "Borrar dato"
        Button3.Text = "Conocer total de datos"
        Button4.Text = "Mostrar lista"
        Button5.Text = "Salir"
    End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Call Añadir()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Call Borrar()
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        LabelResultado.Text = "El número de datos actualmente en la lista es de " & UBound(Dato)
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Call Listar()
End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Me.Close()
        End
End Sub

Private Sub Añadir()
LabelResultado.Text = " "
LabelLista.Text = " "
ReDim Preserve Dato(UBound(Dato) + 1)
Dato(UBound(Dato)) = Val(InputBox("Introduzca valor a añadir", "Dato"))
End Sub

Private Sub Borrar()
Dim i, Numborrar As Integer
LabelLista.Text = " "
If UBound(Dato) <> 0 Then
Numborrar = 0
Do While Numborrar < 1 Or Numborrar > UBound(Dato)
Numborrar = InputBox("Introduzca el número de dato a borrar", "Borrar")
Loop
If Numborrar < UBound(Dato) Then
For i = Numborrar To UBound(Dato) - 1
    Dato(i) = Dato(i + 1)
Next i
End If
ReDim Preserve Dato(UBound(Dato) - 1)
LabelResultado.Text = "Dato borrado"
End If
If UBound(Dato) = 0 Then
        LabelResultado.Text = "La lista está vacía"
End If
End Sub

Private Sub Listar()
        Dim i As Integer
        LabelLista.Text = "Lista" & vbCrLf
        For i = 1 To UBound(Dato)
            LabelLista.Text = LabelLista.Text & vbCrLf & Dato(i)
        Next i
End Sub
End Class

 

 

Aspecto gráfico del programa:

visual basic listas datos

 

 

Comentarios: Visual Basic no admite pedir el límite superior de una matriz cuyo número de dimensiones no ha sido definido. Por ello introducimos la línea ReDim Dato(0) cuando se carga el programa. De este modo, con el primer dato a añadir ya podemos dar la orden de que se amplíe el límite superior del vector Dato en una unidad, asignándose el primer valor introducido a Dato(1). ¿Qué ocurre con Dato(0)? Simplemente se trata de un elemento auxiliar de un array que facilita la programación, sin otra funcionalidad. Se trata de una decisión que adoptamos como programadores, aunque podríamos haber usado el elemento de índice cero si hubiéramos querido.

 

 

 

 

 

 

 

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.

Donar o colaborar

Este sitio se mantiene abierto gracias al apoyo de muchas personas. Si crees que merece la pena apoyar económicamente este sitio web puedes realizar una donación o colaborar. Contacta con nosotros.

¿Puedo yo aprender?

Seas o no del área informática, si quieres aprender a programar te ofrecemos una solución guiada y personalizada: realizar un curso tutorizado on-line. Con este tipo de curso, podrás aprender a programar de forma ágil y amena.

Acceder a detalles y precios de los cursos tutorizados on-line

Política sobre cookies

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, de acuerdo a tus hábitos de navegación.

Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra Política de Cookies.

En Facebook!

Ahora puedes seguirnos en Facebook. Noticias, novedades y mucho más ¡Te esperamos!

RANKING APR2+

Ranking de lenguajes y entornos de programación aprenderaprogramar.com
 

SEPTIEMBRE - OCTUBRE 2017

1. Java / J2EE
2. Entornos Oracle
3. Entornos SQL Server
4. .NET, C#
5. JavaScript, jQuery
6. HTML, CSS
7. Php, MySql
8. Android, iOS


Acceder a detalles sobre el ranking de programación aprenderaprogramar.com

FOROS APR2+

Pregunta, responde, consulta, lee, intercambia...

Participa!!! Entra en los foros aprenderaprogramar.com.

             Copyright 2006-2017 aprenderaprogramar.com                La web abierta a cualquier persona interesada en la programación