Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Duda con 2 arrays

Estas en el tema de Duda con 2 arrays en el foro de Visual Basic clásico en Foros del Web. Hola Tengo 2 arrays con un largo de 10 campos que contienen numeros. Los llamaremos array1 y array2. Tengo que crear un tercer array (array3) ...
  #1 (permalink)  
Antiguo 19/06/2007, 05:20
 
Fecha de Ingreso: noviembre-2002
Ubicación: Suecia
Mensajes: 253
Antigüedad: 21 años, 5 meses
Puntos: 2
Duda con 2 arrays

Hola
Tengo 2 arrays con un largo de 10 campos que contienen numeros. Los llamaremos array1 y array2. Tengo que crear un tercer array (array3) que me de el promedio de los array1 y 2. Me explico con un grafico:

array1 array2 array3
10 40 25
20 30 25
30 20 25
40 10 25

Pero no se como hacerlo. Tengo los 2 primeros arrays pero no se como hacer el tercero.
Les coloco el codigo por si me pueden ayudar:

Código:
Public Class Form1
    Dim array1(9), array2(9), array3(9) As Integer
    Function IniArray(ByVal arr() As Integer, ByVal filName As String) As Integer()
        Dim sr As IO.StreamReader
        Dim i As Integer

        sr = IO.File.OpenText(filName)

        For i = 0 To arr.GetUpperBound(0)
            arr(i) = sr.ReadLine
        Next

        sr.Close()
        Return arr
    End Function

    Function ReadArray(ByVal arr() As Integer) As String
        Dim i As Integer, s As String
        For i = 0 To arr.GetUpperBound(0)
            s &= arr(i) & Chr(13) & Chr(10)
        Next
        Return s
    End Function
    Function ReadArray2(ByVal arr() As Integer) As String
        Dim i As Integer, s As String
        For i = arr.GetUpperBound(0) To 0 Step -1
            s &= arr(i) & Chr(13) & Chr(10)
        Next
        Return s
    End Function


    Private Sub btnExecute_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExecute.Click
        txtList.Text = ReadArray(IniArray(array1, "array1.txt"))
        txtList2.Text = ReadArray2(IniArray(array2, "array1.txt"))

    End Sub
End Class
  #2 (permalink)  
Antiguo 19/06/2007, 06:30
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Re: Duda con 2 arrays

Hola

No he mirado del todo el código pero puede que lo siguiente te sea útil,

Código:
For i=1 to 9
   array3(i)=(array1(i)+array2(i))/2
next i
Con este código le estas indicando que guarde en el array3 posición 1 (en la 1º vuelta) el resultado de sumar el contenido de la posicion 1 del array 1 y del 2 y dividir entre dos.

Haz la prueba y comenta como ha ido.

--Saludos--
  #3 (permalink)  
Antiguo 19/06/2007, 06:48
 
Fecha de Ingreso: noviembre-2002
Ubicación: Suecia
Mensajes: 253
Antigüedad: 21 años, 5 meses
Puntos: 2
Re: Duda con 2 arrays

Hola
Gracias por el codigo.
Funciona "casi" bien. Lo que me entrega es la division entre el primer campo del array1 y el ultimo del array2, o sea:

array 1 array2 array3
10 40 5
20 30
30 20
40 10

Donde esta fallando?
  #4 (permalink)  
Antiguo 19/06/2007, 11:12
 
Fecha de Ingreso: noviembre-2002
Ubicación: Suecia
Mensajes: 253
Antigüedad: 21 años, 5 meses
Puntos: 2
Re: Duda con 2 arrays

ok, he elaborado un poco mas el codigo y he lleagdo a esto:

Código:
Public Class Form1
    Dim array1(9), array2(9), array3(9) As Integer
    Function IniArray(ByVal arr() As Integer, ByVal filName As String) As Integer()
        Dim sr As IO.StreamReader
        Dim i As Integer

        sr = IO.File.OpenText(filName)

        For i = 0 To arr.GetUpperBound(0)
            arr(i) = sr.ReadLine
        Next

        sr.Close()
        Return arr
    End Function

    Function ReadArray(ByVal arr() As Integer) As String
        Dim i As Integer, s As String
        For i = 0 To arr.GetUpperBound(0)
            s &= arr(i) & Chr(13) & Chr(10)
        Next
        Return s
    End Function
    Function ReadArray2(ByVal arr() As Integer) As String
        Dim i As Integer, s As String
        For i = arr.GetUpperBound(0) To 0 Step -1
            s &= arr(i) & Chr(13) & Chr(10)
        Next
        Return s
    End Function

    Function ReadArray3(ByVal arr() As Integer) As String
        Dim i, b As Integer, s As String
        For i = 0 To arr.GetUpperBound(0)

            For b = 9 To arr.GetUpperBound(0) Step -1
                s &= ((array1(i) + array2(b)) / 2) & Chr(13) & Chr(10)
            Next
        Next
        Return s
    End Function


    Private Sub btnExecute_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExecute.Click

        txtList.Text = ReadArray(IniArray(array1, "array1.txt"))
        txtList2.Text = ReadArray2(IniArray(array2, "array1.txt"))
        txtList3.Text = ReadArray3(IniArray(array3, "array1.txt"))
    End Sub
End Class
El problema: solo en el primer loop me entrega el resultado correcto, despues me va entregando los valores con 0,5 de diferencia: por ejemplo:
La primera vuelta esta bien, pero no el resto:

array1 array2 array3
1 10 5.5
2 9 6
3 8 6.5
4 7 7
5 6 7.5
6 5 8
7 4 8.5
8 3 9
9 2 9.5
10 1 10
  #5 (permalink)  
Antiguo 20/06/2007, 02:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 751
Antigüedad: 18 años, 5 meses
Puntos: 13
Re: Duda con 2 arrays

Hola

No se cual puede ser el problema, yo he echo una pequeña prueba con el código mas reducido y me funciona perfectamente, no tengo tiempo para analizar todo tu código, ademas no es VB6, supongo que será .NET al cual aún no estoy acostumbrado, te pongo el código que he creado de ejemplo, solo tiene un Form1 y un List1

Código:
Private Sub Form_Load()

    Dim Array1(10) As Integer
    Dim Array2(10) As Integer
    Dim Array3(10) As Single
    
    x = 9
    
    For i = 0 To 9
        Array1(i) = i + 1
        Array2(i) = x + 1
        x = x - 1
    Next i
        
    For i = 0 To 9
        Array3(i) = (Array1(i) + Array2(i)) / 2
        List1.AddItem Array3(i)
    Next i
    
End Sub
Espero que te sirva de algo.

--Saludos--
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:46.