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

 

 

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. En algunos casos, propondremos la solución a un ejercicio con distintas estructuras de programación.

 

Visual Basic
 

EJERCICIO EJEMPLO Nº 1

En un fichero se encuentran las notas de 35 alumnos de una clase en un array Nota(1), Nota(2), Nota(3), ..., Nota(35), establecidas entre cero y 10. Desarrollar el código para un programa que determine:

· El porcentaje de aprobados.

· El porcentaje de suspensos.

· El número de alumnos que han obtenido un 10.

· El número de alumnos que han obtenido un 0.

 

Considerar que los datos se encuentran en el fichero notas.dat, cuyo contenido es el siguiente:6 – 7 – 8 – 5 – 6 – 4 – 7 – 8 – 7 – 10 – 0 – 5 – 6 – 7 – 6 – 5 – 0 – 7 – 8 – 10 – 2 – 3 – 4 – 5 – 6 – 7 – 6 – 5 – 4 – 10 – 4 – 3 – 2 – 3 – 4 (suponemos que cada dato está en una línea, aquí los ponemos separados por guiones para no ocupar 35 líneas).

 

 

SOLUCIÓN

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 un label para mostrar los resultados y un botón que el usuario deberá pulsar para comenzar a leer los datos desde el archivo y procesarlos.

 

Código para versiones menos recientes de Visual Basic:

Rem Curso Visual Basic aprenderaprogramar.com
Option Explicit

Dim Canal As Integer
Dim i As Integer
Dim Nota(35) As Single
Dim Aprobados!, Suspensos As Single
Dim Dieces%, Ceros As Integer

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

Private Sub CommandCalcular_Click()
LabelResultados.Alignment = 2
LabelResultados.FontBold = True
'[Apertura del archivo]
Canal = FreeFile
Open "C:\notas.dat" For Input As Canal
For i = 1 To 35
    '[Lectura de datos desde archivo]
    Input #Canal, Nota(i)
    If Nota(i) >= 5 Then
        Aprobados = Aprobados + 1
    Else
        Suspensos = Suspensos + 1
    End If
    If Nota(i) = 10 Then
        Dieces = Dieces + 1
    End If
    If Nota(i) = 0 Then
        Ceros = Ceros + 1
    End If
Next i
Close Canal '[Cerramos el archivo]

LabelResultados = vbCrLf & "% de aprobados es " & (Aprobados / 35) * 100 & vbCrLf
LabelResultados = LabelResultados & vbCrLf & "% de suspensos es " & (Suspensos / 35) * 100 _
& vbCrLf
LabelResultados = LabelResultados & vbCrLf & "Obtienen 10 un total de " & Dieces & _  
" alumnos" & vbCrLf
LabelResultados = LabelResultados & vbCrLf & "Obtienen 0 un total de " & Ceros & " alumnos"
End Sub

 

El resultado gráfico es el que se muestra más abajo.

 

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

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
        Me.Text = "Notas"
        Button1.Text = "Leer archivo"
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
   Dim contador As Integer
   Dim Nota(35) As Single
   Dim Aprobados, Suspensos As Single
   Dim Dieces, Ceros As Integer

   LabelResultados.Font = New Font("Arial", 10, FontStyle.Bold)
   LabelResultados.TextAlign = ContentAlignment.MiddleCenter
   '[Apertura del archivo, ojo: poner la ruta que sea correcta]
   Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\notas.dat", False)
   For contador = 1 To 35
            '[Lectura de datos desde archivo]
            Nota(contador) = myFileToRead.ReadLine()
            If Nota(contador) >= 5 Then
                Aprobados = Aprobados + 1
            Else
                Suspensos = Suspensos + 1
            End If
            If Nota(contador) = 10 Then
                Dieces = Dieces + 1
            End If
            If Nota(contador) = 0 Then
                Ceros = Ceros + 1
            End If
   Next contador
   myFileToRead.Close()

   LabelResultados.Text = vbCrLf & "% de aprobados es " & (Aprobados / 35) * 100 & vbCrLf
   LabelResultados.Text = LabelResultados.Text & vbCrLf & "% de suspensos es " & (Suspensos / 35) * 100 & vbCrLf
 LabelResultados.Text = LabelResultados.Text & vbCrLf & "Obtienen 10 un total de " & Dieces &
 " alumnos" & vbCrLf
    LabelResultados.Text = LabelResultados.Text & vbCrLf & "Obtienen 0 un total de " & Ceros & " alumnos"
    End Sub

End Class

 

 

El resultado gráfico:

calcular nota media visual basic

 

 

El bucle se puede plantear igualmente con un Do While. Este sería el código:

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

'[Curso VB aprenderaprogramar.com]
i = 1
'[Apertura del archivo]
Canal = FreeFile
Open "C:\notas.dat" For Input As Canal
Do While i <= 35
    '[Lectura de datos desde archivo]
    Input #Canal, Nota(i)
    If Nota(i) >= 5 Then
        Aprobados = Aprobados + 1
    Else
        Suspensos = Suspensos + 1
    End If
    If Nota(i) = 10 Then
        Dieces = Dieces + 1
    End If
    If Nota(i) = 0 Then
        Ceros = Ceros + 1
    End If
    i = i + 1
Loop                                                           
Close Canal '[Cerramos el archivo]
'[Curso VB aprenderaprogramar.com]
 contador = 1
'[Apertura del archivo, ojo: poner ruta que sea correcta]
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\notas.dat", False)
        Do While contador <= 35
            '[Lectura de datos desde archivo]
            Nota(contador) = myFileToRead.ReadLine()
            If Nota(contador) >= 5 Then
                Aprobados = Aprobados + 1
            Else
                Suspensos = Suspensos + 1
            End If
            If Nota(contador) = 10 Then
                Dieces = Dieces + 1
            End If
            If Nota(contador) = 0 Then
                Ceros = Ceros + 1
            End If
            contador = contador + 1
        Loop
myFileToRead.Close()

 

 

EJERCICIO EJEMPLO Nº 2

En un fichero tenemos las notas de 35 alumnos de una clase en un array Nota(1), Nota(2), ..., Nota(35), establecidas entre cero y 10. Se desea desarrollar un programa que determine la nota media.

Considerar que los datos se encuentran en el fichero notas.dat, cuyo contenido es el siguiente:6 – 7 – 8 – 5 – 6 – 4 – 7 – 8 – 7 – 10 – 0 – 5 – 6 – 7 – 6 – 5 – 0 – 7 – 8 – 10 – 2 – 3 – 4 – 5 – 6 – 7 – 6 – 5 – 4 – 10 – 4 – 3 – 2 – 3 – 4 (suponemos que cada dato está en una línea, aquí los ponemos separados por guiones para no ocupar 35 líneas).

 

 

SOLUCIÓN

Comenzaremos creando un nuevo proyecto al que añadiremos un label para mostrar los resultados y un botón que el usuario deberá pulsar para comenzar a leer los datos desde el archivo y procesarlos.

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

‘Curso VB aprenderaprogramar.com
Option Explicit

Dim Canal%, i As Integer
Dim Nota(35) As Single
Dim Sumatorio!, Media As Single

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

Private Sub CommandCalcular_Click()
LabelResultados.Alignment = 2
LabelResultados.FontBold = True
'[Apertura del archivo]
Canal = FreeFile
Open "C:\notas.dat" For Input As Canal
For i = 1 To 35
    '[Lectura de datos desde archivo]
    Input #Canal, Nota(i)
    Sumatorio = Sumatorio + Nota(i)
Next i
Close Canal '[Cerramos el archivo]
Media = Sumatorio / 35
LabelResultados = vbCrLf & "La nota media de la clase es " & Media
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
        Me.Text = "Media"
        Button1.Text = "Leer archivo"
    End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim contador As Integer
        Dim Nota(35) As Single
        Dim Sumatorio, Media As Single
LabelResultados.Font = New Font("Arial", 10, FontStyle.Bold)
LabelResultados.TextAlign = ContentAlignment.MiddleCenter
'[Apertura del archivo, ojo: poner ruta correcta]
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\notas.dat", False)
        For contador = 1 To 35
            '[Lectura de datos desde archivo]
            Nota(contador) = myFileToRead.ReadLine()
            Sumatorio = Sumatorio + Nota(contador)
        Next contador
        myFileToRead.Close()
        Media = Sumatorio / 35
LabelResultados.Text = vbCrLf & "La nota media de la clase es " & Media
    End Sub

End Class

 

 

Gráficamente:

leer datos de archivos 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: