Pasar valor de un TextBox N Repeticiones a un arreglo
Publicado por Andrés (27 intervenciones) el 08/10/2018 17:10:17
Buenas tardes amigos, necesito hacer un arreglo a partir del siguiente código.
Como se pueden dar cuenta hago una serie de calculos y luego cargo todo al DataGridView1, tengo un Button y un TextBox que muestra la suma de la columna Area (ValorIntegral += Val(row.Cells(6).Value)) como ese valor que tiene el TextBox siempre va a cambiar ya que los números con los que se genera el calculo son aleatorios, lo que quiero es hacer NRepeticiones (Este valor lo introduce el usuario en el inputbox) para que el programa me re-calcule varios valores y de esta manera pasarlos a un arreglo, lo que pienso que es necesario hacer un nuevo ciclo For para poder cargar el arreglo.
No se si sea necesario un Button para ir cargando los valores al arreglo. Mi idea es pasarlos a un DataGridView2, ya que una vez estén esos valores de NRepeticiones en esa columna del DataGridView2, Poder hacer otros cálculos!
Lo que esta comentado es lo que tenia en mente pero la verdad no se como continuar. Espero me puedan ayudar.
Gracias por su disposición!!!
Como se pueden dar cuenta hago una serie de calculos y luego cargo todo al DataGridView1, tengo un Button y un TextBox que muestra la suma de la columna Area (ValorIntegral += Val(row.Cells(6).Value)) como ese valor que tiene el TextBox siempre va a cambiar ya que los números con los que se genera el calculo son aleatorios, lo que quiero es hacer NRepeticiones (Este valor lo introduce el usuario en el inputbox) para que el programa me re-calcule varios valores y de esta manera pasarlos a un arreglo, lo que pienso que es necesario hacer un nuevo ciclo For para poder cargar el arreglo.
No se si sea necesario un Button para ir cargando los valores al arreglo. Mi idea es pasarlos a un DataGridView2, ya que una vez estén esos valores de NRepeticiones en esa columna del DataGridView2, Poder hacer otros cálculos!
Lo que esta comentado es lo que tenia en mente pero la verdad no se como continuar. Espero me puedan ayudar.
Gracias por su disposición!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
Public Class Trapecio
Private Sub Trapecio_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim tabla As List(Of Fila)
'Dim tabla2 As List(Of Fila2)
Dim valorA, valorB, NVeces, nuevovalorA, NRepeticiones, n As Double
valorA = Integer.Parse(InputBox("Ingrese el límite de Integración de 'a'", "Método del Trapecio", "Valor de 'a'", 100, 100))
valorB = Integer.Parse(InputBox("Ingrese el límite de Integración de 'b'", "Método del Trapecio", "Valor de 'b'", 100, 100))
NVeces = Integer.Parse(InputBox("Ingrese el valor de N Veces", "Método del Trapecio", "Valor de 'N Veces'", 100, 100))
NRepeticiones = Integer.Parse(InputBox("Ingrese el valor de Numero de Repeticiones para el programa", "Método del Trapecio", "Valor de 'N Repeticiones'", 100, 100))
Dim arrayNumeros(NVeces) As Double
Dim repetido As Boolean
Randomize()
For i = 1 To NVeces 'genero numeros aleatorios NVeces
repetido = False
nuevovalorA = (valorB - valorA) * Rnd() + valorA 'genero numeros aleatorios entre a, b
'arrayNumeros(i - 1) = nuevovalorA
While repetido = False
For j = 0 To i - 1 'verificar cada numero del arreglo para buscar repetido
If i > 1 Then
If nuevovalorA = arrayNumeros(j) Then
repetido = False
nuevovalorA = (valorB - valorA) * Rnd() + valorA 'genero numeros aleatorios entre el intervalo a, b
j = -1
ElseIf j = i - 1 Then
'arrayNumeros(i - 1) = nuevovalorA
repetido = True
End If
Else
repetido = True
End If
Next j
End While
arrayNumeros(i - 1) = nuevovalorA
Next i
arrayNumeros(0) = valorA
arrayNumeros(NVeces) = valorB
Array.Sort(arrayNumeros)
' En esta linea o lazo (loop) se asigna el número de orden de cada fila
tabla = arrayNumeros.Take(NVeces).Zip(arrayNumeros.Skip(1), Function(a, b) CalcularFila(a, b)).ToList()
For k As Integer = 1 To tabla.Count
tabla(k - 1).n = k
ListBox1.Items.Add(arrayNumeros(k))
Next
'Dim arrayRepeticiones(NRepeticiones) As Double
'For r = 1 To NRepeticiones
' n = arrayNumeros()
' arrayRepeticiones(r - 1) = n
'Next r
'tabla2 = arrayRepeticiones.Skip(1)
'DataGridView2.DataSource = tabla2
'DataGridView2.Columns("valor").DefaultCellStyle.Format = "N5"
DataGridView1.DataSource = tabla
DataGridView1.Columns("a").DefaultCellStyle.Format = "N5"
DataGridView1.Columns("b").DefaultCellStyle.Format = "N5"
DataGridView1.Columns("deltaX").DefaultCellStyle.Format = "N5"
DataGridView1.Columns("deltaX").HeaderText = "DeltaX"
DataGridView1.Columns("raizA").DefaultCellStyle.Format = "N4"
DataGridView1.Columns("raizA").HeaderText = "f(a)"
DataGridView1.Columns("raizB").DefaultCellStyle.Format = "N4"
DataGridView1.Columns("raizB").HeaderText = "f(b)"
DataGridView1.Columns("Area").DefaultCellStyle.Format = "N4"
DataGridView1.Columns("Area").HeaderText = "Area"
End Sub
Private Function CalcularFila(dato1 As Double, dato2 As Double) As Fila
Dim fila As New Fila
fila.a = dato1
fila.b = dato2
fila.deltaX = dato2 - dato1
fila.raizA = Math.Sqrt(4 + 7 * fila.a ^ 4)
fila.raizB = Math.Sqrt(4 + 7 * fila.b ^ 4)
fila.Area = ((fila.raizA + fila.raizB) / 2) * fila.deltaX
Return fila
End Function
Class Fila
Public Property n() As Integer
Public Property a() As Double
Public Property b() As Double
Public Property deltaX() As Double
Public Property raizA() As Double
Public Property raizB() As Double
Public Property Area() As Double
End Class
'Class Fila2
' Public Property valor() As Integer
'End Class
Private Sub btnValorInt_Click(sender As Object, e As EventArgs) Handles btnValorInt.Click
btnSiguiente.Enabled = True
Dim ValorIntegral As Double
Dim Col1 As Integer = DataGridView1.CurrentCell.ColumnIndex
For Each row As DataGridViewRow In DataGridView1.Rows
ValorIntegral += Val(row.Cells(6).Value)
Next
txtValorInt.Text = ValorIntegral.ToString
End Sub
Private Function PromedioColumna(grid As DataGridView, columnIndex As Integer) As Double
Return grid.Rows.Cast(Of DataGridViewRow).Select(Function(row) CDbl(row.Cells(columnIndex).Value)).Average()
End Function
Private Function DesviacionColumna(grid As DataGridView, columnIndex As Integer) As Double
Dim values As List(Of Double) = grid.Rows.Cast(Of DataGridViewRow).Select(Function(row) CDbl(row.Cells(columnIndex).Value)).ToList()
Dim ret As Double = 0
If values.Count > 0 Then
Dim avg As Double = values.Average()
Dim sum As Double = values.Sum(Function(d) Math.Pow(d - avg, 2))
ret = Math.Sqrt(sum / (values.Count - 1))
End If
Return ret
End Function
Private Sub btnCalcular_Click(sender As Object, e As EventArgs) Handles btnCalcular.Click
Dim promedio As Double = PromedioColumna(DataGridView1, 6)
Dim desviacion As Double = DesviacionColumna(DataGridView1, 6)
txtpromedio.Text = promedio
txtdesviacion.Text = desviacion
End Sub
End Class
Valora esta pregunta


0