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.
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:
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.