Saludos a esta distinguida comunidad forera !!! y En especial a mis compadres
YAcosta y
ssccaann43 !!!
Tiempo sin pasar por aquí... Bueno, bueno, suficiente. Muchos saludos y después queremos tomarnos unas 'chelas' ('birras', 'frías' o como carajo quieran llamarle

) y así no se puede programar...!!!

Como no tenía nada que hacer, he estado diseñando una calculadora científica (gran vaina, ¿no?

) en C# 2013, pero para mantener la práctica (si, ya se que el foro es de VB y VB .Net, pero esperen un poquito,por favor).
El asunto es que una de las funciones que le estoy agregando, es sobre algunos cálculos estadísticos:
Población,
Frecuencia Absoluta,
Frecuencia Absoluta Acumulada,
Frecuencia Relativa,
Frecuencia Relativa Acumulada,
Media Aritmética, entre otras...
Aquí les dejo el código, en él, primero se ingresa el nro de datos deseado, luego los datos uno por uno. Estos se guardan en un arreglo tal cual fueron introducidos. Luego se procede a ordenarlos y a continuación, se extraen los elementos duplicados para 'armar' un arreglo de elementos únicos, de manera que pueda compararse con el arreglo original y así determinar las veces que un elemento se repite, de tal forma, establecer su Frecuencia Absoluta y posteriormente su Frecuencias Relativa, etc...
Repito, no es gran cosa pero me sirvió de práctica y ahí va:
Sub Main()
'// Dim datos() as integer = { 29, 8, 43, 4, 29, 83, 55, 62, 81, 5, 8, 77, 34, 29, 81, 18, 29, 8 };
Dim array() As Integer
Dim nTerminos As Integer = 0
Dim sumaTerminos As Integer = 0
Dim datoTemporal As Integer = 0
'// Para depurar el array, eliminando los elementos repetidos...
Dim arraySR() As Integer
Dim tTerminosSinDupl As Integer = 0
'/* Array para guardar las veces que se repite un
' * elemento en el array original (frecuencia absoluta)... */
Dim frecuenciaAbsoluta() As Integer
Dim cont As Integer = 0 '// Se cuentan las veces que se repite un elemento...
'/* Para calcular el promedio de todos los elementos del
' * array original... */
Dim promedio As Decimal = 0
'// Para calcular la frecuecia relativa de cada elemento...
Dim frecuenciaRelativa() As Decimal
'// Array para guardar las frecuencias relativas acumuladas...
Dim frecuenciaRelativaAcumulada() As Decimal
'// Array para guardar las frecuencias absolutas acumuladas...
Dim frecuenciaAbsolutaAcumulada() As Integer
Dim fa As Decimal '// Frecuencia absoluta...
Dim faa As Decimal '// Frecuencia absoluta acumulada...
Dim fr As Decimal '// Frecuancia relativa..
Dim fra As Decimal '// Frecuencia relativa acumulada...
Dim sinDupl As Decimal
Console.Clear()
'/* Se ingresan los datos que seran guardados en un
'* arreglo "array()"... */
Console.Write(" ")
Console.Write("Cuantos números desea ingresar? ")
nTerminos = Convert.ToInt32(Console.ReadLine())
ReDim array(nTerminos)
Console.WriteLine()
For i As Integer = 0 To (nTerminos - 1)
Console.Write(" ")
Console.Write("Ingrese el número [{0}]: ", i + 1)
'// Cargando el array...
array(i) = Convert.ToInt32(Console.ReadLine())
Next
Console.WriteLine()
Console.WriteLine()
Console.WriteLine()
Console.Write(" ")
Console.WriteLine("Mostrando array en el orden en el cual fueron introducidos los datos...")
Console.WriteLine()
Console.Write(" ")
For i As Integer = 0 To (nTerminos - 1)
Console.Write("{0} ", array(i))
Next
'/* Se ordena el Vector de datos o Array mediante el
' * método de la burbuja... */
For i As Integer = 0 To nTerminos - 1
For j As Integer = 0 To nTerminos - 1
'// Se procede a ordenarlo...
If array(i) < array(j) Then
datoTemporal = array(i)
array(i) = array(j)
array(j) = datoTemporal
End If
Next
Next
Console.WriteLine()
Console.WriteLine()
Console.WriteLine()
Console.Write(" ")
Console.WriteLine("Array ordenado en forma creciente...")
Console.WriteLine()
'// Se muestra el array ya ordenado...
Console.Write(" ")
For i As Integer = 0 To nTerminos - 1
Console.Write("{0} ", array(i))
Next
'// Se depura el array, eliminando los elementos repetidos...
arraySR = array.Distinct().ToArray()
tTerminosSinDupl = arraySR.Length
Console.WriteLine()
Console.WriteLine()
Console.WriteLine()
Console.Write(" ")
Console.WriteLine("Array ordenado y sin duplicados...")
Console.WriteLine()
'// Se muestra el array sin elementos duplicados...
Console.Write(" ")
For i As Integer = 0 To tTerminosSinDupl - 2
Console.Write("{0} ", arraySR(i))
Next
ReDim frecuenciaAbsoluta(tTerminosSinDupl)
For i As Integer = 0 To tTerminosSinDupl - 1
For j As Integer = 0 To nTerminos - 1
If arraySR(i) = array(j) Then
'// Se cuenta el número de repeticiones...
cont += 1
End If
Next
'/* Se guarda el número de repeticiones por cada
' * elemento en el array "frecuenciaAbsoluta()"... */
frecuenciaAbsoluta(i) = cont
'/* Se lleva el contador a cero nuevamente para
' * poder contabilizar otro elemento distinto... */
cont = 0
Next
Console.WriteLine()
Console.WriteLine()
Console.WriteLine()
Console.Write(" ")
Console.WriteLine("Frecuencias Absolutas...")
Console.WriteLine()
'/* Se muestra el array con la frecuencia absoluta
' * "frecuenciaAbsoluta()"... */
Console.Write(" ")
For i As Integer = 0 To tTerminosSinDupl - 2
Console.Write("{0} ", frecuenciaAbsoluta(i))
Next
'/* Se calcula la frecuecia relativa de cada elemento:
' * el valor de la frecuencia absoluta de un elemento
' * dado entre el número total de los mismos y se guarda
' * en el array "frecuanciaRelativa()" */
ReDim frecuenciaRelativa(tTerminosSinDupl)
ReDim frecuenciaAbsolutaAcumulada(tTerminosSinDupl)
ReDim frecuenciaRelativaAcumulada(tTerminosSinDupl)
For f As Integer = 0 To tTerminosSinDupl - 1
fa = frecuenciaAbsoluta(f)
'// Se calcula la frecuencia absoluta acumulada...
faa = faa + fa
frecuenciaAbsolutaAcumulada(f) = Convert.ToInt32(faa)
sinDupl = Convert.ToDecimal(arraySR(f))
'// Se calcula la frecuencia relativa...
fr = fa / nTerminos
'// Se guarda en el array "frecuanciaRelativa()"...
frecuenciaRelativa(f) = fr
'// Se calcula la frecuencia relativa acumulada...
fra = faa / nTerminos
frecuenciaRelativaAcumulada(f) = fra
Next
'// Se calcula el propmedio...
'// promedio = array.Average() // No funciona correctamente en VB (en C# sin problemas)...
For prom As Integer = 0 To nTerminos - 1
sumaTerminos = sumaTerminos + array(prom)
Next
promedio = Convert.ToDecimal(sumaTerminos / nTerminos)
Console.WriteLine()
Console.WriteLine()
Console.WriteLine()
Console.Write(" ")
'// Se muestra el promedio de todos los datos...
Console.Write("Promedio: {0}", promedio.ToString("f3"))
Console.WriteLine()
Console.WriteLine()
Console.WriteLine()
Console.Write(" ")
Console.WriteLine("Frecuencias: Absolutas, Relativas,")
Console.Write(" ")
Console.WriteLine("Absolutas acumuladas y Relativas Acumuladas: ")
Console.WriteLine()
'/* Se muestran los elementos del array sin duplicados "arraySR()"
' * y las respectivas frecuencias absolutas frecuencias relativas,
' * guardadas en los arrays "frecuenciaAbsoluta()", "frecuenciaRelativa()",
' * además "FrecuenciaAbsolutaAcumulada() y frecuenciaRelativaAcumulada() */
Console.Write(" ")
Console.WriteLine("Xi fi Fi ni Ni")
Console.Write(" ")
Console.WriteLine("────────────────────────────")
For f As Integer = 0 To tTerminosSinDupl - 2
Console.Write(" ")
Console.Write("{0} ", arraySR(f).ToString("00"))
Console.Write("{0} ", frecuenciaAbsoluta(f).ToString("00"))
Console.Write("{0} ", frecuenciaAbsolutaAcumulada(f).ToString("00"))
Console.Write("{0} ", frecuenciaRelativa(f).ToString("f3"))
Console.WriteLine("{0}", frecuenciaRelativaAcumulada(f).ToString("f3"))
Console.WriteLine(" ────────────────────────────")
Next
Console.ReadKey()
End Sub
Originalmente lo diseñé en C#, lo 'traduje' a nuestro queridísimo VB (versiones 2013, pero por el código utilizado, también lo pueden transcribir a versión 2010...)
Espero de verdad que aunque poco 'ortodoxo', le pueda servir de alguna utilidad a alguien.
Y si lo pueden mejorar (que yo pienso que sí) por favor háganlo y eso sí... No olviden subirlo !!!
Saludos !!!
Manuel F. Borrego Sterling

Barcelona, Edo. Anzoátegui. Venezuela.
[Mientras nos permitan seguir comunicándonos...]