Tdistribution clase
en Este artículo se proporciona el código fuente para un agradable, limpio implementación de una clase para compilar la discreta, la función de distribución acumulativa de un conjunto de datos de muestra. La CDF constituye la base para las estadísticas descriptivas básicas.
(Este artículo apareció originalmente en El Boletín informativo no oficial de Delphi
Usuarios)
TDistribution de Clase
en Este artículo se proporciona el código fuente para un agradable, limpio implementación de una clase para compilar la discreta, la función de distribución acumulativa de un conjunto de datos de muestra. La CDF constituye la base para las estadísticas descriptivas básicas.
TDistribution agregará automáticamente 'contenedores' para el cdf como los elementos de datos son acumulados, o usted puede pre-definir el reciclaje de los límites antes de analizar un conjunto de datos. Esta auto-expansión de la cdf contenedores funciona mejor con conjuntos de datos ordenados (pero para enfriar la clasificación de los componentes ver http://www.connix.com/'btober/sorting.htm). En la mayoría de los casos funcionan razonablemente bien, sin pre-ordenar sus datos.
La clase desciende de TStringList, así que usted puede utilizar las Cadenas de la propiedad para definir una cadena de texto que describe cada uno de los 'bin', por ejemplo,
& nbsp & nbsp Cadena[0]:='Jan'
& nbsp & nbsp Cadena[1]:='Feb'
& nbsp & nbsp .
& nbsp & nbsp .
& nbsp & nbsp .
& nbsp Cadena[11]:='Dec'
por Lo tanto la clase de forma flexible admite su aplicación dentro de una variedad de interfaces de usuario (tenga en cuenta que esto no es un componente de interfaz de usuario - es 'simplemente' una clase que proporciona una estadística funcionalidad...es hasta usted para implementar la interfaz de usuario apropiado para su aplicación particular).
La clase proporciona propiedades para la estimación de los datos de la muestra total y la media (basado en el cdf).
un ejemplo de Un proyecto incluido en el programa.
{ ****************************************************************** }
{ Clase para el desarrollo de la discreta, la función de distribución acumulativa }
{ Copyright © 2000, Berend M. Tober. Todos los derechos reservados. }
{ Autor del E-mail - mailto:[email protected] }
{ Otros componentes en }
{ http://www.connix.com/'btober/delphi.htm}
{ ****************************************************************** }
unidad Cdf
{
& nbsp & nbsp de La función de distribución acumulativa (cdf) de continua, real
& nbsp & nbsp variable aleatoria X se define como una función F(x) donde
& nbsp & nbsp & nbsp & nbsp F(x) = P(X <= x), es decir, la probabilidad de que X <= x.
& nbsp & nbsp El caso discreto se define de forma similar.
& nbsp & nbsp La TDistribution clase se utiliza para generar un CDF empírica para un
& nbsp & nbsp conjunto de datos dado por contar el número de valores de la muestra
& nbsp & nbsp conjunto de datos que caen dentro de un conjunto discreto de 'papeleras'.
& nbsp & nbsp de Esta manera usted puede obtener rápidamente una imagen cuantitativa de un conjunto de datos.
& nbsp & nbsp de La clase desciende de TStringList, así que usted puede utilizar las Cadenas de
& nbsp & nbsp propiedad para definir una cadena de texto que describe cada uno de los 'bin', por ejemplo,
& nbsp & nbsp & nbsp & nbsp Cadena[0]:='Jan'
& nbsp & nbsp & nbsp & nbsp Cadena[1]:='Feb'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp .
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp .
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp .
& nbsp & nbsp & nbsp & nbsp Cadena[11]:='Dec'
}
interfaz
usa clases
tipo
& nbsp & nbsp TDistributionItem = clase(TObject)
& nbsp & nbsp & nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FBin: Doble {límite Superior de bin}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FCount: LongInt
& nbsp & nbsp & nbsp & nbsp público
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp constructor Crear(Valor: Doble Conteo:LongInt)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp función se Acumulan(Valor: Double):LongInt
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Bin: Doble Leer FBin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Conteo: LongInt Leer FCount
& nbsp & nbsp fin
& nbsp & nbsp TDistribution = clase(TStringList)
& nbsp & nbsp & nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp función GetMean: doble
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp función GetTotal: Doble
& nbsp & nbsp & nbsp & nbsp público
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp constructor Crear
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp destructor Destruir reemplazar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp procedimiento Borrar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp función se Acumulan(Valor: Double):LongInt
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp función AddObject(const: cadena AObject: TObject):Integer reemplazar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp procedimiento FreeObjects
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp procedimiento Put(Index:Integer const Valor:TDistributionItem)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp función FreeObject(Index:Integer):Integer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp función Get(Index:Integer):TDistributionItem
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Significa: Doble Leer GetMean
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Objetos[Index:Integer]:TDistributionItem leer escribe Puesto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Total: Doble Leer GetTotal
& nbsp & nbsp fin
aplicación
constructor TDistributionItem.Crear(Valor: Doble Conteo:LongInt)
begin
& nbsp & nbsp heredado Crear
& nbsp & nbsp FBin := Valor
& nbsp & nbsp FCount:=Count
fin
función TDistributionItem.Se acumulan(Valor: Double):LongInt
begin
& nbsp & nbsp Resultado:=-1
& nbsp & nbsp si Valor<=FBin entonces {Incremento del recuento de bin cuando el Valor<=x}
& nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp inc(FCount)
& nbsp & nbsp & nbsp & nbsp Resultado:=FCount
& nbsp & nbsp & nbsp & nbsp fin
fin
constructor TDistribution.Crear
begin
& nbsp & nbsp heredado Crear
fin
destructor TDistribution.Destruir
begin
& nbsp & nbsp Claro
& nbsp & nbsp heredado Destruir
fin
función TDistribution.AddObject(const: cadena AObject:TObject):Integer
{Agregar un ' bin ' a la CDF, en el orden correcto}
var i:Integer
begin
& nbsp & nbsp {
& nbsp & nbsp & nbsp & nbsp Encontrar dónde insertar nuevo 'bin'. Esto es justo antes de que el más pequeño 'bin'
& nbsp & nbsp & nbsp & nbsp lo que excede el tamaño de la nueva 'bin'.
& nbsp & nbsp }
& nbsp & nbsp Resultado:=Count
& nbsp & nbsp si Count>0 entonces
& nbsp & nbsp & nbsp & nbsp para i:=pred(Recuento) downto 0 hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si TDistributionItem(AObject).Binentonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado:=i
& nbsp & nbsp si Resultado<0 entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=heredado AddObject(S,AObject) {Si no hay tales 'bin', anexar uno nuevo}
& nbsp & nbsp persona
& nbsp & nbsp & nbsp & nbsp InsertObject(Resultado,S,AObject) {Insertar el nuevo bin antes de la próxima grande}
fin
función TDistribution.Se acumulan(Valor:Double):LongInt
{Count este valor de datos en el cdf}
var
& nbsp & nbsp i: LongInt
begin
& nbsp & nbsp si Count=0 entonces
& nbsp & nbsp & nbsp & nbsp AddObject(',TDistributionItem.Crear(Valor 0)) {Debe tener al menos un 'bin'}
& nbsp & nbsp persona si Valor>Objetos[pred(Recuento)].Bin entonces
& nbsp & nbsp & nbsp & nbsp {Si el Valor sobrepasa el más grande 'bin', a continuación, añadir uno nuevo que ES lo suficientemente grande}
& nbsp & nbsp & nbsp & nbsp AddObject(',TDistributionItem.Crear(Valor,Objetos[pred(Recuento)].Count))
& nbsp & nbsp para i:=0 para pred(Recuento) de hacer
& nbsp & nbsp & nbsp & nbsp Resultado:=Objetos[i].Se acumulan(Valor)
fin
función TDistribution.Get(Index:Integer):TDistributionItem
begin
& nbsp & nbsp Resultado:=TDistributionItem(heredado Objetos[Index])
fin
función TDistribution.FreeObject(Index:Integer):Integer
begin
& nbsp & nbsp Resultado:=-1
& nbsp & nbsp si Índice >= Count entonces Salir
& nbsp & nbsp si Objetos[Índice] <> nil
& nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp Objetos[Índice].Libre
& nbsp & nbsp & nbsp & nbsp Objetos[Índice]:=nil
& nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp Eliminar(Índice)
& nbsp & nbsp si Índice>=Count entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=pred(Recuento)
& nbsp & nbsp persona si Count=0 entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=-1
& nbsp & nbsp persona
& nbsp & nbsp & nbsp & nbsp Resultado:=Índice
fin
procedimiento TDistribution.FreeObjects
var i:Integer
begin
& nbsp & nbsp si Count > 0 entonces
& nbsp & nbsp & nbsp & nbsp para i:=pred(Recuento) downto 0 hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FreeObject(i)
fin
procedimiento TDistribution.Poner(Index:Integer const Valor:TDistributionItem)
begin
& nbsp & nbsp heredado Objetos[Índice]:=Valor
fin
procedimiento TDistribution.Claro
begin
& nbsp & nbsp FreeObjects
& nbsp & nbsp heredado Borrar
fin
función TDistribution.GetTotal:Doble
{Esta es una ESTIMACIÓN de la muestra efectiva total}
var i: integer
begin
& nbsp & nbsp Resultado:=0
& nbsp & nbsp si Count = 0 entonces Salir
& nbsp & nbsp Resultado:=Objetos[0].Bin*Los Objetos[0].Cuenta
& nbsp & nbsp para i:=1 de para pred(Recuento) de hacer
& nbsp & nbsp & nbsp & nbsp Resultado:=Resultado (Objetos[i].Bin*(Objetos[i].Recuento de Objetos[pred(i)].Count))
& nbsp & nbsp {
*** Esta es una forma alternativa de calcular el total de ***
& nbsp & nbsp Resultado:=Objetos[0].Bin*Los Objetos[0].Cuenta
& nbsp & nbsp for i:=1 to pred(Recuento)
& nbsp & nbsp & nbsp & nbsp Resultado:=Resultado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp (Objetos[i].Bin Objetos[pred(i)].Bin)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp *(Objetos[i].Recuento de Objetos[pred(i)].Count)
& nbsp & nbsp Resultado:=Resultado/2.0
& nbsp & nbsp }
fin
función TDistribution.GetMean: doble
{Este es un ESTIMADO de la media de la muestra}
begin
& nbsp & nbsp Resultado:=0.0
& nbsp & nbsp si Count>0 entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=GetTotal/Objetos[pred(Recuento)].Cuenta
fin
final.
Ejemplo de aplicación
programa Ejemplo
usa
& nbsp & nbsp WinCRT,cdf
const
& nbsp & nbsp Data1:Array[1..10] de Real=(66,73,73,81,81,81,81,85,85,89)
& nbsp & nbsp {
& nbsp & nbsp & nbsp & nbsp Nota: Este conjunto de datos es pre-ordenados. TDistribution todavía
& nbsp & nbsp & nbsp & nbsp trabajar con datos sin ordenar, pero puede que no consiga un buen cdf
& nbsp & nbsp & nbsp & nbsp menos que predefina el cdf papeleras. Esto es especialmente cierto
& nbsp & nbsp & nbsp & nbsp si el primer elemento del conjunto de datos pasa a ser el más grande de
& nbsp & nbsp & nbsp & nbsp (pruébalo por la re-organización de los datos anteriores!) porque automático
& nbsp & nbsp & nbsp & nbsp adición de contenedores agregar una sola bandeja en la que TODOS los datos
& nbsp & nbsp & nbsp & nbsp serán tenidas en cuenta.
& nbsp & nbsp }
var
& nbsp & nbsp i,j:Word
begin
& nbsp & nbsp por TDistribution.Crear hacer
& nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp para i:=1 de para 10 hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Acumular(Data1[i])
& nbsp & nbsp & nbsp & nbsp writeln (' = ' , Significa:6:4)
& nbsp & nbsp & nbsp & nbsp writeln('Total = ', Total:6:4)
{Print cuantitativo resumen}
& nbsp & nbsp & nbsp & nbsp para i := 0 para pred(Recuento) de hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp writeln(Objetos[i].Bin:6:2,#44,Objetos[i].Conde,#44,Objetos[i].Conteo de Objetos/[pred(Recuento)].Conde:6:3)
{Imprimir crudos 'histograma'}
& nbsp & nbsp & nbsp & nbsp para i := 0 para pred(Recuento) ¿
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp para j:=1 de para trunc(40*los Objetos[i].Conteo de Objetos/[pred(Recuento)].El recuento) de hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp write('*')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp writeln
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp & nbsp Libre
& nbsp & nbsp & nbsp & nbsp fin
final.
Tdistribution clase
Tdistribution clase : Multi-millones de consejos para hacer su vida mas facil.
en Este articulo se proporciona el codigo fuente para un agradable, limpio implementacion de una clase para compilar la discreta, la funcion de distribucion acumulativa de un conjunto de datos de muestra. La CDF constituye la base para las estadisticas descriptivas basicas.
(Este articulo aparecio originalmente en El Boletin informativo no oficial de Delphi
Usuarios)
TDistribution de Clase
en Este articulo se proporciona el codigo fuente para un agradable, limpio implementacion de una clase para compilar la discreta, la funcion de distribucion acumulativa de un conjunto de datos de muestra. La CDF constituye la base para las estadisticas descriptivas basicas.
TDistribution agregara automaticamente 'contenedores' para el cdf como los elementos de datos son acumulados, o usted puede pre-definir el reciclaje de los limites antes de analizar un conjunto de datos. Esta auto-expansion de la cdf contenedores funciona mejor con conjuntos de datos ordenados (pero para enfriar la clasificacion de los componentes ver http://www.connix.com/'btober/sorting.htm). En la mayoria de los casos funcionan razonablemente bien, sin pre-ordenar sus datos.
La clase desciende de TStringList, asi que usted puede utilizar las Cadenas de la propiedad para definir una cadena de texto que describe cada uno de los 'bin', por ejemplo,
& nbsp & nbsp Cadena[0]:='Jan'
& nbsp & nbsp Cadena[1]:='Feb'
& nbsp & nbsp .
& nbsp & nbsp .
& nbsp & nbsp .
& nbsp Cadena[11]:='Dec'
por Lo tanto la clase de forma flexible admite su aplicacion dentro de una variedad de interfaces de usuario (tenga en cuenta que esto no es un componente de interfaz de usuario - es 'simplemente' una clase que proporciona una estadistica funcionalidad...es hasta usted para implementar la interfaz de usuario apropiado para su aplicacion particular).
La clase proporciona propiedades para la estimacion de los datos de la muestra total y la media (basado en el cdf).
un ejemplo de Un proyecto incluido en el programa.
{ ****************************************************************** }
{ Clase para el desarrollo de la discreta, la funcion de distribucion acumulativa }
{ Copyright © 2000, Berend M. Tober. Todos los derechos reservados. }
{ Autor del E-mail - mailto:[email protected] }
{ Otros componentes en }
{ http://www.connix.com/'btober/delphi.htm}
{ ****************************************************************** }
unidad Cdf
{
& nbsp & nbsp de La funcion de distribucion acumulativa (cdf) de continua, real
& nbsp & nbsp variable aleatoria X se define como una funcion F(x) donde
& nbsp & nbsp & nbsp & nbsp F(x) = P(X <= x), es decir, la probabilidad de que X <= x.
& nbsp & nbsp El caso discreto se define de forma similar.
& nbsp & nbsp La TDistribution clase se utiliza para generar un CDF empirica para un
& nbsp & nbsp conjunto de datos dado por contar el numero de valores de la muestra
& nbsp & nbsp conjunto de datos que caen dentro de un conjunto discreto de 'papeleras'.
& nbsp & nbsp de Esta manera usted puede obtener rapidamente una imagen cuantitativa de un conjunto de datos.
& nbsp & nbsp de La clase desciende de TStringList, asi que usted puede utilizar las Cadenas de
& nbsp & nbsp propiedad para definir una cadena de texto que describe cada uno de los 'bin', por ejemplo,
& nbsp & nbsp & nbsp & nbsp Cadena[0]:='Jan'
& nbsp & nbsp & nbsp & nbsp Cadena[1]:='Feb'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp .
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp .
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp .
& nbsp & nbsp & nbsp & nbsp Cadena[11]:='Dec'
}
interfaz
usa clases
tipo
& nbsp & nbsp TDistributionItem = clase(TObject)
& nbsp & nbsp & nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FBin: Doble {limite Superior de bin}
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FCount: LongInt
& nbsp & nbsp & nbsp & nbsp publico
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp constructor Crear(Valor: Doble Conteo:LongInt)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp funcion se Acumulan(Valor: Double):LongInt
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Bin: Doble Leer FBin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Conteo: LongInt Leer FCount
& nbsp & nbsp fin
& nbsp & nbsp TDistribution = clase(TStringList)
& nbsp & nbsp & nbsp & nbsp privada
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp funcion GetMean: doble
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp funcion GetTotal: Doble
& nbsp & nbsp & nbsp & nbsp publico
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp constructor Crear
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp destructor Destruir reemplazar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp procedimiento Borrar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp funcion se Acumulan(Valor: Double):LongInt
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp funcion AddObject(const: cadena AObject: TObject):Integer reemplazar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp procedimiento FreeObjects
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp procedimiento Put(Index:Integer const Valor:TDistributionItem)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp funcion FreeObject(Index:Integer):Integer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp funcion Get(Index:Integer):TDistributionItem
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Significa: Doble Leer GetMean
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Objetos[Index:Integer]:TDistributionItem leer escribe Puesto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp propiedad Total: Doble Leer GetTotal
& nbsp & nbsp fin
aplicacion
constructor TDistributionItem.Crear(Valor: Doble Conteo:LongInt)
begin
& nbsp & nbsp heredado Crear
& nbsp & nbsp FBin := Valor
& nbsp & nbsp FCount:=Count
fin
funcion TDistributionItem.Se acumulan(Valor: Double):LongInt
begin
& nbsp & nbsp Resultado:=-1
& nbsp & nbsp si Valor<=FBin entonces {Incremento del recuento de bin cuando el Valor<=x}
& nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp inc(FCount)
& nbsp & nbsp & nbsp & nbsp Resultado:=FCount
& nbsp & nbsp & nbsp & nbsp fin
fin
constructor TDistribution.Crear
begin
& nbsp & nbsp heredado Crear
fin
destructor TDistribution.Destruir
begin
& nbsp & nbsp Claro
& nbsp & nbsp heredado Destruir
fin
funcion TDistribution.AddObject(const: cadena AObject:TObject):Integer
{Agregar un ' bin ' a la CDF, en el orden correcto}
var i:Integer
begin
& nbsp & nbsp {
& nbsp & nbsp & nbsp & nbsp Encontrar donde insertar nuevo 'bin'. Esto es justo antes de que el mas pequeño 'bin'
& nbsp & nbsp & nbsp & nbsp lo que excede el tamaño de la nueva 'bin'.
& nbsp & nbsp }
& nbsp & nbsp Resultado:=Count
& nbsp & nbsp si Count>0 entonces
& nbsp & nbsp & nbsp & nbsp para i:=pred(Recuento) downto 0 hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si TDistributionItem(AObject).Binentonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Resultado:=i
& nbsp & nbsp si Resultado<0 entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=heredado AddObject(S,AObject) {Si no hay tales 'bin', anexar uno nuevo}
& nbsp & nbsp persona
& nbsp & nbsp & nbsp & nbsp InsertObject(Resultado,S,AObject) {Insertar el nuevo bin antes de la proxima grande}
fin
funcion TDistribution.Se acumulan(Valor:Double):LongInt
{Count este valor de datos en el cdf}
var
& nbsp & nbsp i: LongInt
begin
& nbsp & nbsp si Count=0 entonces
& nbsp & nbsp & nbsp & nbsp AddObject(',TDistributionItem.Crear(Valor 0)) {Debe tener al menos un 'bin'}
& nbsp & nbsp persona si Valor>Objetos[pred(Recuento)].Bin entonces
& nbsp & nbsp & nbsp & nbsp {Si el Valor sobrepasa el mas grande 'bin', a continuacion, añadir uno nuevo que ES lo suficientemente grande}
& nbsp & nbsp & nbsp & nbsp AddObject(',TDistributionItem.Crear(Valor,Objetos[pred(Recuento)].Count))
& nbsp & nbsp para i:=0 para pred(Recuento) de hacer
& nbsp & nbsp & nbsp & nbsp Resultado:=Objetos[i].Se acumulan(Valor)
fin
funcion TDistribution.Get(Index:Integer):TDistributionItem
begin
& nbsp & nbsp Resultado:=TDistributionItem(heredado Objetos[Index])
fin
funcion TDistribution.FreeObject(Index:Integer):Integer
begin
& nbsp & nbsp Resultado:=-1
& nbsp & nbsp si Indice >= Count entonces Salir
& nbsp & nbsp si Objetos[Indice] <> nil
& nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp Objetos[Indice].Libre
& nbsp & nbsp & nbsp & nbsp Objetos[Indice]:=nil
& nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp Eliminar(Indice)
& nbsp & nbsp si Indice>=Count entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=pred(Recuento)
& nbsp & nbsp persona si Count=0 entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=-1
& nbsp & nbsp persona
& nbsp & nbsp & nbsp & nbsp Resultado:=Indice
fin
procedimiento TDistribution.FreeObjects
var i:Integer
begin
& nbsp & nbsp si Count > 0 entonces
& nbsp & nbsp & nbsp & nbsp para i:=pred(Recuento) downto 0 hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FreeObject(i)
fin
procedimiento TDistribution.Poner(Index:Integer const Valor:TDistributionItem)
begin
& nbsp & nbsp heredado Objetos[Indice]:=Valor
fin
procedimiento TDistribution.Claro
begin
& nbsp & nbsp FreeObjects
& nbsp & nbsp heredado Borrar
fin
funcion TDistribution.GetTotal:Doble
{Esta es una ESTIMACION de la muestra efectiva total}
var i: integer
begin
& nbsp & nbsp Resultado:=0
& nbsp & nbsp si Count = 0 entonces Salir
& nbsp & nbsp Resultado:=Objetos[0].Bin*Los Objetos[0].Cuenta
& nbsp & nbsp para i:=1 de para pred(Recuento) de hacer
& nbsp & nbsp & nbsp & nbsp Resultado:=Resultado (Objetos[i].Bin*(Objetos[i].Recuento de Objetos[pred(i)].Count))
& nbsp & nbsp {
*** Esta es una forma alternativa de calcular el total de ***
& nbsp & nbsp Resultado:=Objetos[0].Bin*Los Objetos[0].Cuenta
& nbsp & nbsp for i:=1 to pred(Recuento)
& nbsp & nbsp & nbsp & nbsp Resultado:=Resultado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp (Objetos[i].Bin Objetos[pred(i)].Bin)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp *(Objetos[i].Recuento de Objetos[pred(i)].Count)
& nbsp & nbsp Resultado:=Resultado/2.0
& nbsp & nbsp }
fin
funcion TDistribution.GetMean: doble
{Este es un ESTIMADO de la media de la muestra}
begin
& nbsp & nbsp Resultado:=0.0
& nbsp & nbsp si Count>0 entonces
& nbsp & nbsp & nbsp & nbsp Resultado:=GetTotal/Objetos[pred(Recuento)].Cuenta
fin
final.
Ejemplo de aplicacion
programa Ejemplo
usa
& nbsp & nbsp WinCRT,cdf
const
& nbsp & nbsp Data1:Array[1..10] de Real=(66,73,73,81,81,81,81,85,85,89)
& nbsp & nbsp {
& nbsp & nbsp & nbsp & nbsp Nota: Este conjunto de datos es pre-ordenados. TDistribution todavia
& nbsp & nbsp & nbsp & nbsp trabajar con datos sin ordenar, pero puede que no consiga un buen cdf
& nbsp & nbsp & nbsp & nbsp menos que predefina el cdf papeleras. Esto es especialmente cierto
& nbsp & nbsp & nbsp & nbsp si el primer elemento del conjunto de datos pasa a ser el mas grande de
& nbsp & nbsp & nbsp & nbsp (pruebalo por la re-organizacion de los datos anteriores!) porque automatico
& nbsp & nbsp & nbsp & nbsp adicion de contenedores agregar una sola bandeja en la que TODOS los datos
& nbsp & nbsp & nbsp & nbsp seran tenidas en cuenta.
& nbsp & nbsp }
var
& nbsp & nbsp i,j:Word
begin
& nbsp & nbsp por TDistribution.Crear hacer
& nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp para i:=1 de para 10 hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Acumular(Data1[i])
& nbsp & nbsp & nbsp & nbsp writeln (' = ' , Significa:6:4)
& nbsp & nbsp & nbsp & nbsp writeln('Total = ', Total:6:4)
{Print cuantitativo resumen}
& nbsp & nbsp & nbsp & nbsp para i := 0 para pred(Recuento) de hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp writeln(Objetos[i].Bin:6:2,#44,Objetos[i].Conde,#44,Objetos[i].Conteo de Objetos/[pred(Recuento)].Conde:6:3)
{Imprimir crudos 'histograma'}
& nbsp & nbsp & nbsp & nbsp para i := 0 para pred(Recuento) ¿
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp begin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp para j:=1 de para trunc(40*los Objetos[i].Conteo de Objetos/[pred(Recuento)].El recuento) de hacer
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp write('*')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp writeln
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp fin
& nbsp & nbsp & nbsp & nbsp Libre
& nbsp & nbsp & nbsp & nbsp fin
final.
Tdistribution clase
By Consejos Y Trucos
Tdistribution clase : Multi-millones de consejos para hacer su vida más fácil.