Codificación aprenderaprogramar.com: CU00334A-1
EJERCICIOS RESUELTOS VISUAL BASIC
El objetivo de estos ejercicios es aplicar conocimientos sobre "Herramientas básicas para la programación" a un lenguaje como es Visual Basic. Para su realización debemos tener conocimientos básicos sobre algoritmia, uso de bucles o estructuras iterativas y apertura y cierre de archivos.
EJERCICIO RESUELTO Nº 1 EJEMPLO DE USO DE ARRAYS ESTÁTICOS, DO WHILE … LOOP, IF … THEN, LECTURA DE FICHEROS...
Generar el código que permita solucionar el siguiente problema:
Un fabricante de maquinaria envía un archivo a un almacén donde se encuentran los números de serie (5 dígitos) de una partida de maquinaria enviada, organizados en Dato(1), Dato(2), ..., Dato(n). Informa de lo siguiente: el archivo empieza con palas cargadoras siendo la correspondiente al número de serie 78345 la última, sigue con retroexcavadoras siendo el número de serie 33287 el último, y termina con dumpers siendo el número de serie 63287 el último.
Se quiere desarrollar un programa que muestre el tipo de máquina y todos los números de serie correspondientes.
Nota: considerar que la cantidad de datos es igual o inferior a 50, y que se encuentran en el fichero maquinaria.dat, que deberá haber sido creado previamente. Probar un caso supuesto con estos datos:
Dato | Nº de inventario |
1 | 11252 |
2 | 22541 |
3 | 78345 |
4 | 47854 |
5 | 33287 |
6 | 25478 |
7 | 63287 |
SOLUCIÓN
Cuando no conocemos a priori el número de datos de un array, como es la situación de que tenemos una lista de números de serie delimitados por señaleros (centinelas), sin saber un número exacto, lo más habitual será declarar arrays dinámicos y redimensionarlos a medida que vamos extrayendo paquetes de datos. Esto lo veremos más adelante. En este caso usaremos otra opción: crear un array de rango 50 en el cual usaremos una cantidad de elementos del array igual o inferior al rango. Puede ocurrir que la mayor parte de los elementos del array queden sin ser ocupados. Consideremos un fichero que contiene los siete datos indicados en el enunciado, creado previamente.
Necesitaremos un label para mostrar los resultados, al que denominaremos Labelfinal. Consideraremos que el código se ejecuta nada más abrir el programa, sin necesidad de pulsar un botón. También debemos conocer la ruta en que se ubica el archivo de datos y escribirla correctamente.
Código (versionesVB menos recientes) | Código (versiones VB más recientes) |
'Curso Visual Basic aprenderaprogramar.com '[Maquinaria] Option Explicit Dim Canal As Integer Dim i As Integer Dim Dato(50) As Single Private Sub Form_Load() Show Form1.Caption = "Maquinaria" Labelfinal.Alignment = 2 Labelfinal.FontBold = True i = 1 Canal = FreeFile Open "C:\maquinaria.dat" For Input As Canal Input #Canal, Dato(i) Labelfinal = "Números de serie de palas cargadoras" & vbCrLf & vbCrLf Do While Dato(i) <> 63287 Labelfinal = Labelfinal & Dato(i) & vbCrLf If Dato(i) = 78345 Then Labelfinal = Labelfinal & vbCrLf & "Números de serie de retroexcavadoras" & vbCrLf & vbCrLf End If If Dato(i) = 33287 Then Labelfinal = Labelfinal & vbCrLf & "Números de serie de dumpers" & vbCrLf & vbCrLf End If i = i + 1 Input #Canal, Dato(i) Loop Close Labelfinal = Labelfinal & Dato(i) & vbCrLf Labelfinal = Labelfinal & vbCrLf & "Finalizada la extracción el total de máquinas es" & i 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(50) As Single Me.Text = "Maquinaria" Labelfinal.TextAlign = ContentAlignment.MiddleCenter Labelfinal.Font = New Font("Arial", 10, FontStyle.Bold) Labelfinal.Text = "" i = 1 Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\maquinaria.dat", False) Dato(i) = myFileToRead.ReadLine() Labelfinal.Text = "Números de serie de palas cargadoras" & vbCrLf & vbCrLf Do While Dato(i) <> 63287 Labelfinal.Text = Labelfinal.Text & Dato(i) & vbCrLf If Dato(i) = 78345 Then Labelfinal.Text = Labelfinal.Text & vbCrLf & "Números de serie de retroexcavadoras" & vbCrLf & vbCrLf End If If Dato(i) = 33287 Then Labelfinal.Text = Labelfinal.Text & vbCrLf & "Números de serie de dumpers" & vbCrLf & vbCrLf End If i = i + 1 Dato(i) = myFileToRead.ReadLine() Loop Labelfinal.Text = Labelfinal.Text & Dato(i) & vbCrLf Labelfinal.Text = Labelfinal.Text & vbCrLf & "Finalizada la extracción el total de máquinas es" & i myFileToRead.Close() End Sub End Class |
El resultado gráfico con los datos de prueba indicados será este:
EJERCICIO RESUELTO Nº 2 EJEMPLO DE USO DE FOR … NEXT, CONSTANTES vbYes Y vbNo, MSGBOX, Y DO WHILE … LOOP
Generar un programa que resuelva el siguiente problema: calcular el sumatorio de los 10 primeros números enteros positivos y según decida el usuario calcular o no la suma de los 20, 30, 40..., n – 10, n enteros positivos.
SOLUCIÓN
Código (versionesVB menos recientes) | Código (versiones VB más recientes) |
‘Curso Visual Basic aprenderaprogramar.com Option Explicit Dim i%, j As Integer Dim Respuesta As Integer Dim Suma As Integer Private Sub Form_Load() Show j = 1 Respuesta = vbYes Do While Respuesta = vbYes For i = j To j + 9 Suma = Suma + i Next i j = j + 10 Respuesta = MsgBox("La suma de los " & j - 1 & " primeros números da " & Suma & vbCrLf & _ "¿Quiere continuar?", vbYesNo, "¿Continuar?") 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 i, j As Integer Dim Respuesta As Integer Dim Suma As Integer j = 1 Respuesta = vbYes Do While Respuesta = vbYes For i = j To j + 9 Suma = Suma + i Next i j = j + 10 Respuesta = MsgBox("La suma de los " & j - 1 & " primeros números da " & Suma & vbCrLf & _ "¿Quiere continuar?", vbYesNo, "¿Continuar?") Loop End Sub End Class |
En vez de usar una variable string para almacenar la respuesta, usamos los botones predeterminados de Visual Basic y las constantes vbYes (sí) y vbNo (no).
Gráficamente el resultado será similar a este: