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

 

 

EJERCICIOS EJEMPLOS RESUELTOS EN 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.

Visual Basic

 

EJERCICIO EJEMPLO USO DE ARRAYS DE CONTROLES Y FUNCIÓN VAL

Desarrollar el código que dé respuesta al siguiente problema:

Un vivero forestal actualiza cada seis meses los precios de la planta que vende en función de los valores oficiales de inflación mensual. Desean desarrollar un programa que proporcione el precio actualizado a partir del precio anterior y los valores de inflación. Consideramos que una vez transcurre el mes el nuevo precio es:

Precio = Precio * ( inflación mes / 100 ) + Precio = Precio * ( 1 + inflación mes / 100)

El siguiente mes el precio a aplicar ya no es el inicial, sino el precio afectado por la inflación.

 

 

SOLUCIÓN

Vamos a trabajar con arrays (matrices) de controles. El código para las versiones menos recientes de Visual Basic sería el siguiente:

Rem Curso Visual Basic aprenderaprogramar.com
'[Actualización de precios de planta]

Option Explicit

Dim i As Integer
Dim Actual!, Nuevo As Single
Dim inf(6) As Single

Private Sub Form_Load()
Show
Form1.Caption = "Precios de planta"
CommandCalcular.Caption = "Calcular precio"
LabelPactual.Caption = "Introduzca aquí el precio actual"
For i = 1 To 6
    Label1(i).Caption = "Introduzca aquí la inflación del mes "& i
Next
End Sub

Private Sub CommandCalcular_Click()
Nuevo = Val(TextPactual)
For i = 1 To 6
    inf(i) = Val(Text1(i))
    Nuevo = Nuevo * (1 + (inf(i)) / 100)
Next i
Labelfinal.Alignment = 2
Labelfinal.FontBold = True
Labelfinal = vbCrLf & "El precio nuevo del producto debe ser "& Nuevo
End Sub

 

 

El resultado gráfico se muestra más abajo.

En el diseño del formulario deberemos haber creado un Label denominado LabelPactual y un textBox denominado TextPactual y haberlos situado en la parte superior. Además necesitaremos un botón que el usuario debe pulsar una vez introducidos los datos y un label para mostrar los resultados, que hemos denominado Labelfinal y que hemos situado en la parte inferior de la ventana.

 

Código para versiones más recientes de Visual Basic:

REM Curso Visual Basic aprenderaprogramar.com
Public Class Form1
    Dim LabelArray(6) As Label
    Dim TextBoxArray(6) As TextBox
    Dim Actual, Nuevo As Single
    Dim inf(6) As Single

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Me.Text = "Precios de planta"
        ButtonCalcular.Text = "Calcular precio"
        LabelPactual.Text = "Introduzca aquí el precio actual"
        For i = 1 To 6
            LabelArray(i) = New Label
            TextBoxArray(i) = New TextBox
            LabelArray(i).Text = "Introduzca aquí la inflación del mes " & i
            LabelArray(i).Width = 220 : TextBoxArray(i).Width = 100
            LabelArray(i).Height = 30 : TextBoxArray(i).Height = 30
            TextBoxArray(i).AutoSize = False
            LabelArray(i).TextAlign = ContentAlignment.MiddleCenter
            LabelArray(i).BorderStyle = BorderStyle.FixedSingle
            LabelArray(i).Location = New Point(100, i * 50 + 50)
            TextBoxArray(i).Location = New Point(360, i * 50 + 50)
            Me.Controls.Add(LabelArray(i)) : Me.Controls.Add(TextBoxArray(i))
        Next
    End Sub

    Private Sub ButtonCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcular.Click
        Dim i As Integer
        Nuevo = Val(TextPactual.Text)
        For i = 1 To 6
            inf(i) = Val(TextBoxArray(i).Text)
            Nuevo = Nuevo * (1 + (inf(i)) / 100)
        Next
        Labelfinal.TextAlign = ContentAlignment.MiddleCenter
        Labelfinal.Font = New Font("Arial", 10, FontStyle.Bold)
        Labelfinal.Text = vbCrLf & "El precio nuevo del producto debe ser " & Nuevo
    End Sub
End Class

 

 

Comentarios: en lugar de arrays de controles podríamos haber usado controles simples como Label1, Label2, Label3, etc. pero en este caso no podríamos haber usado bucles para realizar los cálculos, sino que tendríamos que repetir los cálculos.

Gráficamente el resultado será similar a este:

calculos con visual basic

 

 

 

EJERCICIO EJEMPLO USO DE GENERACIÓN DE NÚMEROS ALEATORIOS Y USO DE ARCHIVOS

Desarrollar el código que dé respuesta al siguiente problema:

En un complejo industrial se desea incentivar a los encargados de turnos de producción. A cada encargado le corresponde un turno. Hay 18 turnos, y por cada uno de ellos 40 operarios. Para evaluar a los encargados se ha hecho una encuesta entre los trabajadores. Se les ha pedido que evalúen a su encargado de 0 a 10 siendo el 5 el aprobado. Los resultados están almacenados en un array tipo Nota(turno, operario) donde turno indica el número de turno y operario el número de operario dentro del turno. Desarrollar un programa que determine en qué turnos todos los operarios del mismo han aprobado al encargado.

Nota: las notas las generaremos aleatoriamente en un fichero con un pequeño programa auxiliar.

 

 

SOLUCIÓN

Generaremos una simulación del archivo de evaluación. Para ello haremos una creación de datos con base aleatoria pero "dirigida". Sabiendo que cada turno tiene 40 empleados, dejaremos una generación aleatoria entre 0 y 10 para todos los turnos excepto los número 3 y 18 (asociados a los datos 81 a 120 y 681 a 720), en los que los datos generados “obligaremos” a que se encuentren entre 5 y 10, de modo que sabemos de antemano que todos los empleados de los turnos nº3 y nº18 "han aprobado" a su encargado. Los códigos para crear el archivo de evaluación y el programa serían los siguientes:

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

'Curso Visual Basic aprenderaprogramar.com
'[Archivo de evaluación]

Option Explicit
Dim Canal As Integer
Dim i As Integer

Private Sub Form_Load()
Show
Canal = FreeFile
Open "C:\evaluación.dat" For Output As Canal
For i = 1 To 720
    Randomize
    If i < 81 Or i > 120 And i < 681 Then
    Write #Canal, Int((11) * Rnd)
    Else
    Write #Canal, Int((10 - 5 + 1) * Rnd + 5)
    End If
Next i
Close
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Button1.Text = "Generar archivo de datos"
    End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim myFileToWrite As New System.IO.StreamWriter("C:\Users\Toshiba\Desktop\evaluacion.dat", False)

  For i = 1 To 720
      Randomize()
      If i < 81 Or i > 120 And i < 681 Then
          myFileToWrite.WriteLine(Int(11 * Rnd()))
      Else
          myFileToWrite.WriteLine(Int((10 - 5 + 1) * Rnd() + 5))
      End If
  Next i
  myFileToWrite.Close()
 End Sub
End Class
'[Curso Visual Basic aprenderaprogramar.com]
'[Evaluación de encargados]
Option Explicit
Dim Canal As Integer
Dim i%, j As Integer
Dim Nota(18, 40) As Integer
Dim Haysuspensos As Boolean
Private Sub Form_Load()
Show
Labelfinal.Alignment = 2
Labelfinal.FontBold = True
Canal = FreeFile
Open "C:\evaluación.dat" For Input As Canal
For i = 1 To 18
    For j = 1 To 40
        Input #Canal, Nota(i, j)
        If Nota(i, j) < 5 Then
            Haysuspensos = True
        End If
    Next j
    If Haysuspensos = False Then
  Labelfinal = Labelfinal & vbCrLf & "Todos los operarios del turno " & i & _
        " han aprobado al encargado" & vbCrLf
    End If
    Haysuspensos = False
Next i
Close
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Public Class Form1
    Dim Nota(18, 40) As Integer
    Dim Haysuspensos As Boolean

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Labelfinal.TextAlign = ContentAlignment.MiddleCenter
Labelfinal.Font = New Font("Arial", 10, FontStyle.Bold)
Labelfinal.Text = ""
Button1.Text = "Generar estadísticas"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i, j As Integer
        Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\evaluacion.dat", False)
        For i = 1 To 18
            For j = 1 To 40
                Nota(i, j) = myFileToRead.ReadLine()
                If Nota(i, j) < 5 Then
                    Haysuspensos = True
                End If
            Next j
            If Haysuspensos = False Then
                Labelfinal.Text = Labelfinal.Text & vbCrLf & "Todos los operarios del turno " & i &" han aprobado al encargado" & vbCrLf
            End If
            Haysuspensos = False
        Next i
        myFileToRead.Close()
    End Sub
End Class

 


Gráficamente obtendríamos un mensaje al ejecutar el programa que nos indicaría en qué turnos todos los operarios han aprobado al encargado:

Ejemplo programa encuesta visual basic

 

 

 

 

 

 

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: