Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: JValero en 17 de Mayo 2014, 18:21
-
Buenas tardes,
En este ejercicio no soy capaz de que me aparezcan los datos correctamente. Los números de modelo de los vehículos no me aparecen dentro de cada correspondiente grupo de vehículos.
El código que llevo hasta ahora realizado es el siguiente:
Option Explicit
Dim i As Integer
Dim Modelo(1 To 8) As Integer
Private Sub Form_Load()
Form1.Caption = "Modelos de vehículos"
Label1.Alignment = 2
Label1.Font = True
Label2.Alignment = 2
Label2.Font = True
Label3.Alignment = 2
Label3.Font = True
i = 1
Modelo(1) = 350
Modelo(2) = 5000
Modelo(3) = 21
Modelo(4) = 100
Modelo(5) = 125
Modelo(6) = 750
Modelo(7) = 800
Modelo(8) = 850
Do While Modelo(i) <> 850
If Modelo(i) = 125 Then
End If
If Modelo(i) = 350 Then
End If
i = i + 1
Loop
End Sub
Los datos deberían de quedar del siguiente modo:
"Números de modelo de Fórmula 1" = 350
"Números de modelo de motocicletas" = 5000, 21, 100, 125
"Numeros de modelos de camiones" = 750, 800, 850
¿Cómo podría hacer para que los datos se mostraran en tres labels que he creado para mostrar los resultados?
Muchas gracias por la ayuda.
Un saludo.
-
Esto supongo que puede hacerse de diversas maneras pues la programación da pie a que se puedan escribir programas de distintas maneras.
Te indico una posible solución (en este caso usando únicamente un label, Label1):
La condición para entrar al bucle puede ser la que tú has indicado: Do While Modelo(i) <> 850 , aunque también podría plantearse de otras maneras. Supongamos que usamos esta.
Antes de entrar al bucle sabemos algo: que lo primero que viene son coches de fórmula 1, por tanto antes de entrar al bucle podemos escribir Label1 = "Números de modelo de coches de fórmula 1: "
Al entrar en el bucle vamos escribiendo en el label los modelos que vengan directamente, hasta detectar el 350.
En ese momento introducimos dos saltos de línea y escribimos Label1 = Label1 & vbCrLf & vbCrLf & "Números de modelo de motocicletas: "
¿Por qué? Porque sabemos que a partir del 350 lo que vienen son motocicletas.
Seguimos escribiendo todo lo que venga hasta que detectemos el 125 que sabemos que es la última motocicleta. En ese momento escribimos:
Label1 = Label1 & vbCrLf & vbCrLf & "Números de modelo de camiones: "
¿Por qué? Porque sabemos que a partir de ese momento vienen camiones.
Ahora vamos escribiendo todo lo que llega, pero tenemos el problema de que cuando se llegue a 850 no se va a entrar en el bucle ¿Qué podemos hacer entonces? Con un condicional if comprobar si una vez incrementado el valor de i nos viene 850. En ese caso, escribimos Label1 = Label1 & Modelo(i) para que se muestre ese número de modelo.
Al intentar volver al inicio del bucel y valer modelo (i ) = 850 no se entra en el bucle y se sale del programa
La idea se refleja en este código, lo importante más que el programa funcione (espero que sí) es que seas capaz de ver por qué funciona, además prueba a introducir más datos de modelo y predecir tú mismo qué supones que va a hacer el programa. Luego ejecuta el programa y comprueba que hace lo que tú has predicho, si logras esto es que estás "comprendiendo adecuadamente lo que hace el código", saludos
Option Explicit
Dim i As Integer
Dim Modelo(1 To 8) As Integer
Private Sub Form_Load()
Form1.Caption = "Modelos de vehículos"
Label1.Alignment = 2
Label1.Font = True
Modelo(1) = 350
Modelo(2) = 5000
Modelo(3) = 21
Modelo(4) = 100
Modelo(5) = 125
Modelo(6) = 750
Modelo(7) = 800
Modelo(8) = 850
Label1 = "Números de modelo de coches de fórmula 1: "
i = 1
Do While Modelo(i) <> 850
Label1 = Label1 & Modelo(i) & " - "
If Modelo(i) = 350 Then
Label1 = Label1 & vbCrLf & vbCrLf & "Números de modelo de motocicletas: "
End If
If Modelo(i) = 125 Then
Label1 = Label1 & vbCrLf & vbCrLf & "Números de modelo de camiones: "
End If
i = i + 1
If Modelo(i) = 850 Then
Label1 = Label1 & Modelo(i)
End If
Loop
End Sub
-
Hola de nuevo Álex,
Está muy claro. Creeme que con tu explicación la duda está resuelta.
El principal problema que estaba encontrando es que usaba varios Labels y los resultados me salían sin el orden apropiado en cada uno de ellos.
Muchas gracias por tu ayuda, se agradece muchísimo.
-
Con varios labels también lo puedes hacer, lo único que tienes que adaptar la lógica para detectar cuándo se deben mostrar los datos en un label y cuándo en un otro. Aquí lo he hecho usando una variable auxiliar denominada mostrando. Si mostrando vale 1 significa que se debe mostrar el mensaje sobre el label1, si mostrando vale 2 que se debe mostrar sobre el label 2, y si mostrando vale 3 que se debe mostrar sobre el label3. En este caso cada label se encarga de un tipo de vehículos... Creo que ambas formas se pueden considerar correctas... Saludos
Option Explicit
Dim i As Integer
Dim Modelo(1 To 8) As Integer
Dim mostrando As Integer
Private Sub Form_Load()
Form1.Caption = "Modelos de vehículos"
Label1.Alignment = 2
Label1.Font = True
Modelo(1) = 350
Modelo(2) = 5000
Modelo(3) = 21
Modelo(4) = 100
Modelo(5) = 125
Modelo(6) = 750
Modelo(7) = 800
Modelo(8) = 850
Label1 = "Números de modelo de coches de fórmula 1: "
Label2 = "Números de modelo de motocicletas: "
Label3 = "Números de modelo de camiones: "
i = 1
mostrando = 1
Do While Modelo(i) <> 850
If mostrando = 1 Then
Label1 = Label1 & Modelo(i) & " - "
End If
If mostrando = 2 Then
Label2 = Label2 & Modelo(i) & " - "
End If
If mostrando = 3 Then
Label3 = Label3 & Modelo(i) & " - "
End If
If Modelo(i) = 350 Then
mostrando = 2
End If
If Modelo(i) = 125 Then
mostrando = 3
End If
i = i + 1
If Modelo(i) = 850 Then
Label3 = Label3 & Modelo(i)
End If
Loop
End Sub