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

 

 

EJERCICIO Nº 1 EJEMPLO RESUELTO LEER FICHERO EN VISUAL BASIC.

Crear el código que dé respuesta al siguiente problema planteado: Un operario de una fábrica recibe cada cierto tiempo un depósito cilíndrico de dimensiones variables, que debe llenar de aceite a través de una toma con cierto caudal disponible. Se desea crear un programa que le indique cuánto tiempo transcurrirá hasta el llenado del depósito.

Visual Basic

 

El caudal disponible se considera estable para los tiempos que tardan los llenados de depósitos y se encuentra almacenado en un archivo del ordenador, figurando el dato en litros por minuto.

Nota: considerar que el caudal disponible se encuentra en el archivo caudal.dat. Suponer que el archivo caudal.dat se encuentra en la unidad de disco C: (o en aquella ruta que se prefiera), y que el valor de caudal disponible en litros por minuto que proporciona es 112.

 

 

SOLUCIÓN

Antes de ejecutar el programa habremos creado el archivo caudal.dat que contendrá un número que representa el valor de caudal.

El código a plantear será diferente según la versión de Visual Basic que estemos utilizando:

a) Para versiones menos recientes de Visual Basic: usaremos la gestión de ficheros basada en las instrucciones Open, Write, Freefile, Write#, Input#, etc.

b) Para las versiones más recientes de Visual Basic usaremos la gestión de ficheros basada en StreamReader, StreamWriter, Write, Read, WriteLine y ReadLine.

 

Nosotros vamos a exponer el código necesario tanto para versiones menos recientes como para versiones más recientes de Visual Basic (aunque dependiendo de la versión de Visual Basic que estés utilizando es posible que necesites hacer pequeñas adaptaciones).

Comenzaremos creando un nuevo proyecto al que añadiremos tres labels (los dos primeros para indicar un mensaje de petición de datos de diámetro y altura y el tercero para mostrar resultados), dos textbox para que el usuario introduzca los datos de diámetro y altura, y finalmente un botón que el usuario deberá pulsar una vez introducidos los datos para obtener los resultados.

 

Código para versiones menos recientes de Visual Basic:

Rem Curso Visual Basic aprenderaprogramar.com
Option Explicit
Const Pi As Single = 3.141592654
Dim D!, R!, H!, V!, Vlitros!, tminutos As Single
Dim Canal%
Dim Q As Single

Private Sub Form_Load()
Form1.Caption = "Tiempo de llenado"
CommandCalcular.Caption = "Determinar tiempo"
Label1 = "Introduzca aquí el diámetro del depósito, en metros"
Label2 = "Introduzca aquí la altura del depósito, en metros"
'[Extracción de dato de caudal del archivo]
Canal = FreeFile
Open "C:\caudal.dat" For Input As Canal
Input #Canal, Q
Close Canal
End Sub

Private Sub CommandCalcular_Click()
D = Val(Text1)
H = Val(Text2)
R = D / 2
V = Pi * (R ^ 2) * H
Vlitros = V * 1000
tminutos = Vlitros / Q
Label3.Alignment = 2
Label3.FontBold = True
Label3 = vbCrLf & "El tiempo que transcurrirá hasta el" & _
" llenado del depósito es de " & tminutos & " minutos"
End Sub

 

 

Gráficamente el resultado será similar a este:

ejercicio resuelto visual basic

 

 

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

REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On

Public Class Form1
    Const Pi As Single = 3.141592654
    Dim D, R, H, V, Vlitros, tminutos As Single
    Dim Q As Single

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   Me.Text = "Tiempo de llenado"
   CommandCalcular.Text = "Determinar tiempo"
   Label1.Text = "Introduzca aquí el diámetro del depósito, en metros"
   Label2.Text = "Introduzca aquí la altura del depósito, en metros"
   '[Extracción de dato de caudal del archivo]
   Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\caudal.dat", False)
   Q = myFileToRead.ReadLine()
   myFileToRead.Close()
   End Sub

    Private Sub CommandCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandCalcular.Click
        D = Val(TextBox1.Text)
        H = Val(TextBox2.Text)
        R = D / 2
        V = Pi * (R ^ 2) * H
        Vlitros = V * 1000
        tminutos = Vlitros / Q
        Label3.Font = New Font("Arial", 10, FontStyle.Bold)
        Label3.TextAlign = ContentAlignment.MiddleCenter
        Label3.Text = vbCrLf & "El tiempo que transcurrirá hasta el" & _
        " llenado del depósito es de " & tminutos & " minutos"
    End Sub
End Class

 

Gráficamente el resultado será similar a este:

ejemplo formulario visual basic

 

 

EJERCICIO Nº 2 EJEMPLO CON LECTURA DE DATOS DE FICHERO Y USO DE BUCLES FOR Y CONDICIONALES IF THEN

Crear el código correspondiente a este problema. Se ha procedido a realizar un conteo de los coches que han pasado por una vía durante 24 horas. Los resultados se encuentran almacenados en un archivo, en un array definido como cocheshora(1), cocheshora(2)... hasta cocheshora(24) indicando el localizador la hora del día y el contenido de la variable la cantidad de coches que pasaron a esa hora. Se desea desarrollar el pseudocódigo y el diagrama de flujo para un programa que determine:

a)   El total de coches que pasaron durante el día.

b)   Cuántas horas de tránsito cero hubo y cuáles fueron.

c)   Cuál fue la hora de máximo tránsito y qué número de coches pasaron.

d)   Cuál fue la última hora a la que pasó un coche y qué número de coches pasaron.

Para simular los datos contenidos en el archivo desde el que ha de leer el programa, crearemos un archivo (usando Visual Basic o manualmente) en la ruta C:\coches1523.dat, ó en aquella ruta que deseemos, cuyo contenido será el siguiente:

archivos de texto visual basic

 

 

SOLUCIÓN AL EJERCICIO

Código para versiones menos recientes de Visual Basic:

Rem Curso Visual Basic aprenderaprogramar.com
Option Explicit
Dim Canal%, i As Integer
Dim cocheshora(24) As Integer
Dim Cochestotal%, Transitocero%, Maxtransito%, Horamaxtran As Integer
Dim Ultimahora%, Cochesultima As Integer

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

Private Sub CommandCalcular_Click()
LabelResultados.Alignment = 2
LabelResultados.FontBold = True
'[Apertura del archivo]
Canal = FreeFile
Open "C:\coches1523.dat" For Input As Canal
For i = 1 To 24
    '[Lectura de datos desde archivo]
    Input #Canal, cocheshora(i)
    Cochestotal = Cochestotal + cocheshora(i)
    If cocheshora(i) = 0 Then
        Transitocero = Transitocero + 1
        LabelResultados = LabelResultados & "La hora " & i & " hubo tránsito cero" & vbCrLf & vbCrLf
    End If
    If cocheshora(i) > Maxtransito Then
        Maxtransito = cocheshora(i)
        Horamaxtran = i
    End If
    If cocheshora(i) > 0 Then
        Ultimahora = i
        Cochesultima = cocheshora(i)
    End If
Next i
Close Canal '[Cerramos el archivo]

LabelResultados = LabelResultados & "El total de coches que" _
& " pasaron durante el día fueron " & Cochestotal & vbCrLf
LabelResultados = LabelResultados & vbCrLf & "Las horas de tránsito cero fueron " & _   
Transitocero & vbCrLf
LabelResultados = LabelResultados & vbCrLf & "La hora de máximo tránsito fue la " & _
Horamaxtran & " registrándose el paso de " & Maxtransito & " coches" & vbCrLf
LabelResultados = LabelResultados & vbCrLf & "La última hora a la que pasó un coche" & _
" fue la " & Ultimahora & " registrándose el paso de " & Cochesultima & " coches"
End Sub

 

 

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

REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On

Public Class Form1
    Dim cocheshora(24) As Integer
    Dim Cochestotal, Transitocero, Maxtransito, Horamaxtran As Integer
    Dim Ultimahora, Cochesultima As Integer

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

    Private Sub CommandCalcular_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommandCalcular.Click

    Dim contador As Integer

    LabelResultados.Font = New Font("Arial", 10, FontStyle.Bold)
    LabelResultados.TextAlign = ContentAlignment.MiddleCenter

   '[Apertura del archivo]
   Dim myFileToRead As New  System.IO.StreamReader("C:\Users\Toshiba\Desktop\coches1523.dat", False)

   For contador = 1 To 24
       '[Lectura de datos desde archivo]
       cocheshora(contador) = myFileToRead.ReadLine()
       Cochestotal = Cochestotal + cocheshora(contador)
       If cocheshora(contador) = 0 Then
         Transitocero = Transitocero + 1
         LabelResultados.Text = LabelResultados.Text & "La hora " & contador & " hubo tránsito cero" & vbCrLf & vbCrLf
       End If
       If cocheshora(contador) > Maxtransito Then
           Maxtransito = cocheshora(contador)
           Horamaxtran = contador
       End If
       If cocheshora(contador) > 0 Then
           Ultimahora = contador
           Cochesultima = cocheshora(contador)
       End If
   Next contador

   myFileToRead.Close()

LabelResultados.Text = LabelResultados.Text & "El total de coches que" _
& " pasaron durante el día fueron " & Cochestotal & vbCrLf
LabelResultados.Text = LabelResultados.Text & vbCrLf & "Las horas de tránsito cero fueron " & _
Transitocero & vbCrLf

LabelResultados.Text = LabelResultados.Text & vbCrLf & "La hora de máximo tránsito fue la " & _
Horamaxtran & " registrándose el paso de " & Maxtransito & " coches" & vbCrLf

LabelResultados.Text = LabelResultados.Text &vbCrLf&"La última hora a la que pasó un coche" & _
" fue la " & Ultimahora & " registrándose el paso de " & Cochesultima & " coches"

    End Sub
End Class

 


Comentarios: en relación a la lógica del programa, es preferible realizar la apertura y cierre del archivo una sola vez, fuera del bucle, a proceder a abrir y cerrar el archivo 24 veces disponiendo el código de apertura y cierre dentro del bucle. El resultado gráfico sería del tipo:

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