Problema de programación BVA

Hola valeroasm, mira tengo la siguiente pregunta:

Diseñar un algoritmo para leer las notas de Q
estudiantes y mostrar el promedio de los que ganaron.

me proponen el siguiente pseudocodigo

NICIO

Leer Q
C = 0
S = 0
Ejemplo 3
Para i:1, <=Q, +1
Leer nota
Si (nota >= 3)
C = C+1
S = S+nota
Fin Si
Fin para
Prom = S/C
Escribir “El promedio de los que ganaron fue: ” Prom
FIN

yo me vaso en eso y hago lo siguiente pero la verdad no me da.

Private Sub p_Click()

Dim Q As Integer
Q = Val(TextoQ.Text)
C = 0
S = 0
For i = 1 To Q Step 1
Dim A As Single, p As Single
A = Val(TextoA.Text)
p = Val(Textoprom.Text)
If (A >= 3) Then
C = C + 1
S = S + A
Else
If (A < 3) Then
Textoprom.Text = "ingresar nota mayor o igual a 3"
End If
End If
Next i
p = S / C
Textoprom = p
End
End Sub

lo que te pido es que por favor me ayudes a digitar bien el código para la interfax muchas gracias de antemano!!

1 Respuesta

Respuesta
1

Bladdy 1227!

Puede hacerse en cualquier lado, pero a mi me gusta declarar todas las variables arriba. Es una reminiscencia de cuando tenía que ser asi obligatoriamente y ayuda a buscar. A no ser que sean sentencias de redimensionamiento condicionadas a resultados en tiempo de ejecución. Asimismo, si declaramos unas las dimensionamos todas. A mi me gustan todas con la primera letra mayúscula salvo las i, j, k que siempre las empleo como índices.

Private Sub p_Click()
Dim i, S, C, Q As Integer
Dim A, P As Single
Q = Val(TextoQ.Text)
C = 0
S = 0
For i = 1 To Q Step 1
  A = Val(TextoA.Text)
  P = Val(TextoProm.Text)
  If (A >= 3) Then
    C = C + 1
    S = S + A
  Else
    TextoProm.Text = "ingresar nota mayor o igual a 3"
   End If
Next i
P = S / C
TextoProm.text = P
End Sub

Sobraba una línea End

En el If (A >= 3)

Si A no es mayor o igual que 3 es directamente menor que 3 luego no se debe volver a preguntar.

Esto lo he probado en Excel y funciona. No sé si usáis un VisualBasic normal, si es así dímelo pero funcionará igual.

Pero falla lo principal, estás ejecutando un bucle Q veces pero estás leyendo siempre la misma nota que hay en TextoA. Es necesario leer notas distintas, para ello necesitaríamos por ejemplo un Listbox donde estuvieran esas notas. Es más, no sería necesario el TexBox con Q ya que ese valor sería la longitud del ListBox.

¿Hacemos esto que te digo? ¿O has pensado en otra forma de leer las notas?

si hagamos lo que dices muchas gracias!!!

Este es el programa

Private Sub P_Click()
Dim i, S, C, Q As Integer
Dim A As Single
Dim P As Variant
Q = Val(TextoQ.Text)
C = 0
S = 0
For i = 1 To Q
   A = Val(InputBox("Alumno " & Str(i), "Notas de los " & TextoQ.Text & " alumnos"))
   If (A >= 3) Then
      S = S + A
      C = C + 1
      TextoAprobados.Text = C
   End If
Next i
If C <> 0 Then
   P = S / C
Else
   P = "No aprobó ninguno"
End If
TextoProm.Text = P
End Sub

Lo controles son

TextoQ donde se introduce el número de alumnos

TextoAprobados donde aparece el número de aprobados

TextoProm donde aparece el promedio

La lectura de datos se hace por teclado a través de un InputBox.

He quitado la línea de mostrar que había que introducir una nota superior a 3 porque podemos introducirla mayor o menor, no hay ninguna obligación.

Y eso es todo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas