Problema con instruccion

Iniciado por nolasco281, 7 Mayo 2014, 21:46 PM

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

nolasco281

Hola

tengo este codigo que es un boton que calcula la mediana

Ahora bien el problema es que cuando se calcula en la mediana y su resultado pasa a un txtbox
y despues calculo la moda me surge ese error antes dicho. no puedo ejecutar los dos al mismo tiempo. el resultado de los calculos se impremen en diferentes textbox.

Estoy trabajando en visual basic.

Código (vbnet) [Seleccionar]
Private Sub btnCalMediana_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalMediana.Click
        Dim temporal As Double
        Try
            Dim valores() As String = listaElementos.Items.Cast(Of String).OrderBy(Function(s) CDec(s)).ToArray
            If listaElementos.Items.Count Mod 2 = 1 Then 'impar
                txtMediana.Text = (valores(CInt(Math.Floor(listaElementos.Items.Count / 2))))
            Else 'par
                txtMediana.Text = (((CDec(valores(listaElementos.Items.Count \ 2 - 1)) + CDec(valores(listaElementos.Items.Count \ 2))) / 2).ToString)
            End If
        Catch ex As Exception
            MsgBox("No puede hacer eso")
        End Try

        'Ordena los elementos de menor a mayor en la lista
        For elementos = 0 To listaElementos.Items.Count - 1
            For ordenar = 0 To listaElementos.Items.Count - 2
                If (listaElementos.Items.Item(ordenar) > listaElementos.Items.Item(elementos)) Then
                    temporal = listaElementos.Items.Item(ordenar)
                    listaElementos.Items.Item(ordenar) = listaElementos.Items.Item(elementos)
                    listaElementos.Items.Item(elementos) = temporal
                End If
            Next
        Next
    End Sub



y este es otro boton que calcula la moda

Código (vbnet) [Seleccionar]
Private Sub btnCalModa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalModa.Click

        Dim valores() As String = listaElementos.Items.Cast(Of String).OrderBy(Function(s) CDec(s)).ToArray
        Dim concurrencias() As Integer = Array.ConvertAll(valores, Function(s1) valores.Count(Function(s2) s2 = s1))

        Dim hecho As New List(Of String)
        Dim salida As String = ""
        For x As Integer = 0 To concurrencias.GetUpperBound(0)
            If concurrencias(x) = concurrencias.Max AndAlso Not hecho.Contains(valores(x)) Then
                hecho.Add(valores(x))
                salida &= valores(x) & ", "
            End If
        Next
        txtModa.Text = (String.Format("{0}{1}{2}", If(hecho.Count = 1, "", If(hecho.Count = 2, "Bimodal, ", "Multimodal, ")), Environment.NewLine, salida.TrimEnd(","c, " "c)))
    End Sub


por si no me explico cuando calculo la media bien si calculo la moda me salta error
pero si calculo la moda primero y despues la mediana no me da error

aca la muestra



si calculo primero la moda y despues la mediana no causa error



Gracias de nuevo.

Pd: por lo que entiendo dice que tengo que convertir un double o string si no me equivoco pero no se como hacerlo.
Lo que se puede imaginar... se puede programar.

Eleкtro

Cita de: nolasco281 en  7 Mayo 2014, 21:46 PMPd: por lo que entiendo dice que tengo que convertir un double o string si no me equivoco pero no se como hacerlo.

No exactamente, el mensaje de error te indica que es imposible tratar un valor de tipo Double como si fuera de tipo String, y la solución sería realizar la conversión a String, pero en mi opinión no es un buen enfoque.

¿Si estás tratando valores numéricos, porque intentas almacenarlos como tipo String?, ¿y si estás usando valores de tipo Double, porque intentas tratarlos como Decimales (CDec)?

Quédate con un datatype (Double o Decimal) e intenta no realizar conversiones innecesarias.

Prueba así:
Código (vbnet) [Seleccionar]
Dim Valores As Double() =
   (From Valor As Double In listaelementos.Items Order By Valor Ascending).ToArray


Saludos.