Autor Tema: Ejercicio 5 - Semana 9 curso tutorizado on-line bases de la programación  (Leído 3480 veces)

JValero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 27
    • Ver Perfil
Buenos días,

Realizando el ejercicio 5 correspondiente a la semana 9 me encuentro ante la siguiente situación.

El programa me funciona correctamente, o eso creo, excepto a la hora de extraer el peso más bajo de todos los que hay en el grupo.

La media me la calcula correctamente (no calcula el peso correspondiente al señalero -99 Kg), el paso máximo también lo calcula correctamente pero a la hora de extraer de los datos el peso más bajo me muestra -99Kg cuando al principio del programa he indicado que haga los cálculas con todos los datos que sean iguales o superiores a 0.

Pego el código que llevo realizado hasta el momento:

Código: [Seleccionar]
Option Explicit

Dim Peso(1 To 12) As Integer
Dim Media As Single
Dim PesoMin As Integer
Dim PesoMax As Integer
Dim Suma As Integer
Dim i As Integer

Private Sub form_Load()
Show
Peso(1) = 55
Peso(2) = 78
Peso(3) = 56
Peso(4) = 89
Peso(5) = 66
Peso(6) = 109
Peso(7) = 44
Peso(8) = 57
Peso(9) = 29
Peso(10) = 58
Peso(11) = 76
Peso(12) = -99
Form1.Caption = "Peso grupo de personas"

i = 1
Do While Peso(i) >= 0
Suma = Suma + Peso(i)
i = i + 1
If Peso(i) > PesoMax Then
PesoMax = Peso(i)
End If
If Peso(i) < PesoMin Then
PesoMin = Peso(i)
End If
Loop

Media = Suma / (i - 1)
Label1.Alignment = 2
Label1.Font = True
Label1 = "El peso medio del grupo de personas es de " & Media & " Kilogramos"
Label2.Alignment = 2
Label2.Font = True
Label2 = "La persona con mayor peso del grupo tiene un peso de " & PesoMax & " Kilogramos"
Label3.Alignment = 2
Label3.Font = True
Label3 = "La persona con menos peso del grupo tiene un peso de " & PesoMin & " Kilogramos"

End Sub

¿Qué tendría que modificar? ¿Qué falla?
Entiendo que la linea Do While Peso(i) >= 0 debería de hacer que automáticamente no se calculase los datos de Peso(-99) correspondiente al señalero de la serie de datos.

Cualquier ayuda será bienvenida.

Muchas gracias.
« Última modificación: 02 de Septiembre 2014, 18:27 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicio 5 - Semana 9
« Respuesta #1 en: 17 de Mayo 2014, 18:41 »
Hola, repasando lo indicado:

"Entiendo que la linea Do While Peso(i) >= 0 debería de hacer que automáticamente no se calculase los datos de Peso(-99) correspondiente al señalero de la serie de datos."

La idea es correcta, de hecho esa condición del bucle impide que se trate el dato Peso(12) que es el que contiene el valor -99.

No obstante si ese valor está apareciendo es porque de alguna manera existen instrucciones en el código que hacen que aparezca ¿dónde?

Supongamos que llegamos con i=11, se comprueba Do While Peso(i) >= 0 y se entra en el bucle:

Suma = Suma + Peso(11)
i = i + 1 es decir i = 11 +1 = 12
If Peso( i ) > PesoMax Then  ... no se cumple que peso(12) sea mayor que el máximo
PesoMax = Peso(i)
End If
If Peso( i ) < PesoMin Then ... sí se cumple que peso(12) sea mayor que el mínimo, ahí tienes el problema
PesoMin = Peso(i)
End If


Solución: tienes que considerar dónde incrementas el valor de la variable de control. No puede ser en cualquier punto del bucle, en este caso (que es lo más habitual) tiene que ser al final del bucle para que no afecte a las comprobaciones o procesos intermedios. Es decir:

Código: [Seleccionar]
Do While Peso(i) >= 0
Suma = Suma + Peso(i)
If Peso(i) > PesoMax Then
PesoMax = Peso(i)
End If
If Peso(i) < PesoMin Then
PesoMin = Peso(i)
End If
i = i + 1
Loop

Fíjate que simplemente ha cambiado la situación de la línea i = i + 1

Además tienes que tener en cuenta que para que se asigne un valor a PesoMin, deberás inicializarlo con un valor muy grande, ya que en caso contrario el valor de PesoMin es cero y será 0 lo que te aparezca como PesoMin.

Por tanto al principio del código añade algo así como PesoMin = 10000

Esto significa que "das un valor aleatorio muy grande a PesoMin". Cuando se realice la comparación If Peso (i ) < PesoMin será verdadero y se asignará a PesoMin un valor.

Si no haces esto al ser PesoMin 0 la comparación If peso( i) < PesoMin no será cierta y te aparecerá erróneamente que PesoMin es 0.

Saludos

JValero

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 27
    • Ver Perfil
Re:Ejercicio 5 - Semana 9
« Respuesta #2 en: 17 de Mayo 2014, 19:45 »
Hola Álex,

Muchísimas gracias por la ayuda.

La verdad que no se me hubiera ocurrido mover la linea i=i+1 y mucho menos tener qe poner un valor aleatorio a PesoMin.

Lo dicho, muchas gracias!!




 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".