variables en un Bucle

Iniciado por TheGhost(Z), 22 Mayo 2010, 13:33 PM

0 Miembros y 1 Visitante están viendo este tema.

TheGhost(Z)

hola verán quería que me ayudaran como declarar correctamente una variable que se usara en un bucle For, en este caso la variable mensaje.
la variable mensaje lo he declarado siempre y cuando exista un 5 en el bucle para ahorrar memoria; ya que, tambien pude declararlo antes de inicar el bucle, pero en este último ya estaría metiendo a la memoria, la variable mensaje, sin saber si existe o no.

resulta que en este código funciona perfectamente tanto si la variable mensaje lo declaro antes de iniciar el bucle o como también en el momento en que se cumpla la condición.

Dim i As Long
Dim MostrarMensaje As Boolean

For i = 0 To 10
    If i = 5 Then
        Dim Mensaje As String
        Mensaje = "Sí, existe 5"
        MostrarMensaje = True
    Else
        MostrarMensaje = False
    End If
Next i

If MostrarMensaje = True Then
    MsgBox Mensaje, vbInformation
End If



PERO en este otro no funciona debido a que la variable es un contador. no se supone que cada ves que se declara una variable enpienza en null y el valor que se le asige será la variable inicial?

Dim i As Long

For i = 0 To 3
    If i > 0 Then
        Dim j As Long
        Dim suma As Long
        For j = 0 To i
            suma = suma + j
        Next j
    End If
    MsgBox "La suma desde (0) hasta (" & i & ") es: " & suma
Next i


lo correcto que mostraría el mensaje en cada (For i) sería:

(caso i=0) la suma desde (0) hasta (0) = 0
(caso i=1) la suma desde (0) hasta (1) = 1
(caso i=2) la suma desde (0) hasta (2) = 3 y NO ( 4)
(caso i=3) la suma desde (0) hasta (3) = 6 y NO (10)


el problema esta en que al cunplir la condicion y declarar la variable suma. ésta no incia con cero ya que suma lo que se obtuvo en el (For i) anterior.

Pues de aqui mi confusión. no se supone que se permite úncamente una variable en un procedimiento..? mi lógica es que cada ves que i > 0 destruye a la declaración y declara la misa variable.. o es que vasandose en que debe haher solo una variable con el mismo nombre en un procedimiento. una ves cunplida la condición al leer la linea de código "Dim suma As Long" verifica si se declaro en el For anterior, y si es así pasa por alto esa linea de código?

es esto cierto o que, ayuda?? :?

Shell Root

#1
No entendí  :huh:

Código (vb) [Seleccionar]
Dim i As Long
Dim j As Long
Dim suma As Long

For i = 0 To 3
  For j = 0 To i ' WTF! Esto para que?
     suma = suma + j
  Next
  MsgBox "La suma desde (0) hasta (" & i & ") es: " & suma
Next


Creo que debería ser así:
Código (vb) [Seleccionar]
Dim i As Integer
Dim valInicial, valFinal As Integer
Dim suma As Long

valInicial = 0
valFinal = 3

For i = valInicial To valFinal
  suma = suma + i
  MsgBox "La suma desde ("& valInicial &") hasta (" & valFinal & ") es: " & suma
Next

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

TheGhost(Z)

Se corrige por:

Para sumar los valores desde 0 hasta i ( i esta vairando de 0 a 3)

Es procedimiento para solo entender el problema.

TGa.

lo solucionas poniendo luego del msgbox, q la variable suma tome nuevamente el valor de 0
Código (vb) [Seleccionar]
Dim i As Long

For i = 0 To 3
    If i > 0 Then
        Dim j As Long
        Dim suma As Long
        For j = 0 To i
            suma = suma + j
        Next j
    End If
    MsgBox "La suma desde (0) hasta (" & i & ") es: " & suma
    suma = 0
Next i

Shell Root

Ponedlo mejor así.
Código (vb) [Seleccionar]
Dim i As Long
Dim j As Long
Dim suma As Long

For i = 0 To 3
   For j = 0 To i
      suma = suma + j
   Next
   MsgBox "La suma desde (0) hasta (" & i & ") es: " & suma
   suma = 0
Next
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

TheGhost(Z)

Sí. Y sabía que tenía que poner en cero para cada bucle. mi pregunta más bien se refería al funcionamiento de un bucle con variables de tipo contadores. Me refiero si como ética siempre a de inicializar una variable cada ves que inicie un nuevo proceso..