Calcular media Aritmética, Geométrica, Armónica.

Iniciado por Ahinoam, 2 Junio 2016, 21:50 PM

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

Ahinoam

Buenas, quisiera que me ayudaran para este programa que estoy realizando.

Bueno, estoy realizando un programa para un maestro de probabilidad y estadística, y el encargo fue, realizar un programa que calcule las medias de tendencia central.

Comencé a realizar el código el martes pero me encontré con un problema en la media geométrica, el cual es la raíz cuadra e-nesima osea la n ^ √ , no se como ponerla en el código.


Bueno les dejo lo que tengo, la media aritmética esta correcta, el problema lo ayo en la media geométrica....

El programa lo estoy haciendo en Windows Visual Studio 2008, estoy utilizando Botones, texbox y listbox.

Pd: y si de paso saben hacer la media armónica se los agradeceré.


Public Class Media_de_tendencias_central
    Dim d As Double = 0
    Dim c As Double = 0
    Dim suma As Double = 0.0
    Dim multi As Double = 0.0
    Dim numero As String

// MEDIA ARITMÉTICA //

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim num As Double
        num = TextBox1.Text
        suma = suma + num
        d = d + 1
        numero = numero & num & " + "
        ListBox1.Items.Add(TextBox1.Text)
        TextBox1.Text = ""
        TextBox1.Focus()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        ListBox1.Sorted = True
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim aritmetica As Double
        aritmetica = suma / d
        TextBox2.Text = aritmetica
    End Sub

// MEDIA GEOMÉTRICA //

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Dim num2 As Double
        num2 = TextBox3.Text
        multi = multi * num2
        c = c + 1
        numero = numero & num2 & " * "
        ListBox2.Items.Add(TextBox3.Text)
        TextBox3.Text = ""
        TextBox3.Focus()
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        ListBox2.Sorted = True
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim geometrica As Double
        geometrica = Math.Sqrt(multi ^ 1 / c)
        TextBox4.Text = geometrica
    End Sub
End Class


y así es como se ve el form




espero y me puedan ayudar.

FurioMoltisanti

Con este vídeo te debería servir: https://www.youtube.com/watch?v=1_VNR-o48wM

En cuanto a la desviación armónica ahora mismo no te puedo ayudar. Suerte.

Un saludo.

Leiray

Envíame las formulas Matemáticas bien expresadas y separadas para ver si puedo ayudarte, la Matemática no es mi fuerte pero voy a ver que puedo hacer.

DarK_FirefoX

#3
Primero, cuida tu redacción, esto no tiene sentido:

Cita de: Ahinoam en  2 Junio 2016, 21:50 PM
la raíz cuadra e-nesima

Ahora, la raiz n-ésima es como dices:

[latex]\sqrt[n]{x}=x^{1/n}[/latex]

Ya a partir de ahí puedes trabajar, claro está que tienes que tener cuidado con el trabajo de fracciones y el uso de la aritmética de punto flotante de tu PC, pues puedes producir errores de cálculo, más aun trabajando con datos de probabilidades y estadísticos.

Espero esto te pueda ayudar. Cualquier otra cosa, dilo!

Salu2s

Lekim

#4
hola

para poner esto:

n ^ √

en código vb.net es así:

Código (vbnet) [Seleccionar]
n ^ Math.Sqrt(x)


Por ejemplo esto :

25 ^ √12

Se podría así:

Código (vbnet) [Seleccionar]
25 ^ Math.Sqrt(12)

y devuelve esto:

69599,5195898361





Espero sirva..

Creo que está todo bien, si eso comentais y corrijo.



Código (vbnet) [Seleccionar]
Option Strict On

Public Class Form1
   Dim lstValorMedAritmetica As New List(Of Double) 'Variable para los valores de la media aritmética
   Dim indice As Integer

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim myFont As New Font("Arial", 10, FontStyle.Bold)
       RadioButton1.Checked = True
       RadioButton1.Text = "Media Aritmética"
       RadioButton2.Text = "Media Armónica"
       RadioButton3.Text = "Media Geométrica"
       RadioButton4.Text = "Moda"
       RadioButton5.Text = "Mediana "
       RadioButton1.Font = myFont
       RadioButton2.Font = myFont
       RadioButton3.Font = myFont
       RadioButton4.Font = myFont
       RadioButton5.Font = myFont
       Me.Text = "Medidas de centralizaciónl"
       Me.MaximizeBox = False
       btAgregar.Text = "<< Agregar"
       btCalcMed.Text = "Calcular"
       txtValue.TextAlign = HorizontalAlignment.Right

   End Sub

   Private Sub btAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btAgregar.Click
       Try
           'Si no hay nada en la lista borra el listbox y el resultado anterior
           If lstValorMedAritmetica.Count = 0 Then
               ListBox1.Items.Clear()
               txtResultMedArit.Text = ""
           End If
           'Añade un valor a la lista
           lstValorMedAritmetica.Add(CDbl(txtValue.Text))
           'Añade un valor a listbox
           ListBox1.Items.Add(txtValue.Text)
           btCalcMed.Enabled = True
       Catch ex As Exception
           MessageBox.Show("Valor no válido", _
                           "Atención", _
                           MessageBoxButtons.OK, _
                           MessageBoxIcon.Exclamation)
       End Try

   End Sub

   Private Sub btCalcMed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCalcMed.Click
       'Calcula la media aritmética
       If RadioButton1.Checked = True Then
           txtResultMedArit.Text =
               CStr(modEstadisticFunctions.MediaAritmetica(lstValorMedAritmetica).ToString("0.00"))
       End If
       'Calcula la media armónica
       If RadioButton2.Checked = True Then
           txtResultMedArit.Text =
               CStr(modEstadisticFunctions.MediaArmonica(lstValorMedAritmetica).ToString("0.00"))
       End If
       'Calcula Media Geométrica
       If RadioButton3.Checked = True Then
           txtResultMedArit.Text =
               CStr(modEstadisticFunctions.MediaGeometrica(lstValorMedAritmetica).ToString("0.00"))
       End If
       'Calcula moda
       If RadioButton4.Checked = True Then
           txtResultMedArit.Text = CStr(
               modEstadisticFunctions.Moda(lstValorMedAritmetica))
       End If
       'Calcula mediana
       If RadioButton5.Checked = True Then
           txtResultMedArit.Text =
               modEstadisticFunctions.Mediana(lstValorMedAritmetica)
       End If
       lstValorMedAritmetica.Clear()
       btCalcMed.Enabled = False
   End Sub


   Private Sub txtArtimetica_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtValue.Click
       txtValue.SelectAll()
   End Sub

End Class

Module modEstadisticFunctions

   ''' <summary>
   ''' Función para calcular la media aritmética
   ''' </summary>
   ''' <param name="dblValue">Variable array List</param>
   ''' <returns></returns>
   ''' <remarks></remarks>
   Public Function MediaAritmetica(ByVal dblValue As List(Of Double)) As Double
       Try
           Dim Valor As Double
           Dim md As Double
           For I As Integer = 0 To dblValue.Count - 1
               Valor += +dblValue(I)
           Next
           md = Valor / dblValue.Count
           Return md
       Catch ex As Exception
           MessageBox.Show("Valor no válido", _
                    "Atención", _
                    MessageBoxButtons.OK, _
                    MessageBoxIcon.Exclamation)
           Return Nothing
       End Try

   End Function
   ''' <summary>
   ''' Función para calcular la media armónica
   ''' </summary>
   ''' <param name="dblValue">Variable array List</param>
   ''' <returns></returns>
   ''' <remarks></remarks>
   Public Function MediaArmonica(ByVal dblValue As List(Of Double)) As Double
       Try
           Dim Valor As Double
           Dim md As Double
           For I As Integer = 0 To dblValue.Count - 1
               Valor += +(1 / dblValue(I))
           Next
           md = dblValue.Count / Valor
           Return md
       Catch ex As Exception
           MessageBox.Show("Valor no válido", _
                       "Atención", _
                       MessageBoxButtons.OK, _
                       MessageBoxIcon.Exclamation)
           Return Nothing
       End Try

   End Function
   ''' <summary>
   ''' Función para calcular la media geométrica
   ''' </summary>
   ''' <param name="dblValue">Variable array List</param>
   ''' <returns></returns>
   ''' <remarks></remarks>
   Public Function MediaGeometrica(ByVal dblValue As List(Of Double)) As Double
       Try
           Dim Valor As Double = 1
           Dim md As Double
           For I As Integer = 0 To dblValue.Count - 1
               Valor = Valor * dblValue(I)
           Next
           md = Valor ^ (1 / dblValue.Count)
           Return md
       Catch ex As Exception
           MessageBox.Show("Valor no válido", _
                              "Atención", _
                              MessageBoxButtons.OK, _
                              MessageBoxIcon.Exclamation)
           Return Nothing
       End Try


   End Function
   ''' <summary>
   ''' Función para calcular la Moda
   ''' </summary>
   ''' <param name="dblValue">Variable array List</param>
   ''' <returns></returns>
   ''' <remarks></remarks>
   Public Function Moda(ByVal dblValue As List(Of Double)) As Double
       Try
           Return dblValue.Max() 'Obtiene el número mayor
       Catch ex As Exception
           MessageBox.Show("Valor no válido", _
                     "Atención", _
                     MessageBoxButtons.OK, _
                     MessageBoxIcon.Exclamation)
           Return Nothing
       End Try
   End Function
   ''' <summary>
   ''' Función para calcular la Mediana
   ''' </summary>
   ''' <param name="dblValue">Variable array List</param>
   ''' <returns></returns>
   ''' <remarks></remarks>
   Public Function Mediana(ByVal dblValue As List(Of Double)) As String
       Try
           Dim par As Double
           Dim Madn As String = Nothing
          dblValue.Sort()
           If (dblValue.Count / 2) = CInt(dblValue.Count / 2) Then
               par = CDbl(True)
           Else
               par = CDbl(False)
           End If
           Select Case par
               Case CDbl(True) : Madn = String.Format("{0}-{1}",
                   CStr(dblValue(CInt((dblValue.Count / 2) - 1))),
                   CStr(dblValue(CInt(dblValue.Count / 2))))
               Case CDbl(False) : Madn = String.Format("{0}",
                   CStr(dblValue(CInt(Conversion.Int(dblValue.Count / 2)))))

           End Select
           Return Madn
       Catch ex As Exception
           MessageBox.Show("Valor no válido", _
                          "Atención", _
                          MessageBoxButtons.OK, _
                          MessageBoxIcon.Exclamation)
           Return Nothing
       End Try

   End Function
End Module





Faltaría la media aritmética ponderada, pero no la he puesto porque requiere hacerlo aparte y añadir más código. Ya que se necesitan dos datos, los valores y los coeficientes de importancia.



Error corregido

Había un error en el cálculo de la mediana. Se me olvidó ordenar la lista de valores.

He añadido
Código (vbnet) [Seleccionar]
  dblValue.Sort()

Mis disculpas :-\

S2s