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