па могао си да залепиш један снимак екрана и да покажеш формулу како рачунаш. Моћда ће неко моћи да помогне.
Ево функцийе найвишега реда:
void CSTROznaka::OdradiProracun(CArray<CSTROznaka, CSTROznaka> &nizOznaka, const int nKoraka, CArray<long double, long double> &nizVerovPrelaska,
CArray<long double, long double> &nizSregjenihVerov, CArray<long double, long double> &nizZbirSregjenihVerov, long double &dNajmanji)
{
const int nOznak = (int)nizOznaka.GetSize();
nizVerovPrelaska.RemoveAll();
for (int iOzn=0; iOzn<nOznak; ++iOzn)
{
nizOznaka[iOzn].PrviKorak();
} // for iOzn
long double dNajvecaRazlika = 0.; // Samo za kushanje.
int nKorakNajveceRazlike = 0;
for (int iKorak=1; iKorak<=nKoraka; ++iKorak)
{
long double dVerov = 1.L;
for (int iOzn=0; iOzn<nOznak; ++iOzn)
{
const int nOdred = (int)nizOznaka[iOzn].m_nizOdredistnihVrednostij.GetSize();
long double dVerOznake = 1.L;
for (int iOdr=0; iOdr<nOdred; ++iOdr)
{
long double dVer;
BOOL b = nizOznaka[iOzn].m_nVerovKorakN.DajVerovatnocu(nizOznaka[iOzn].m_nIzvoristnaVrednost,
nizOznaka[iOzn].m_nizOdredistnihVrednostij[iOdr], dVer);
dVerOznake *= dVer;
/*const int nVred = (int)nizOznaka[iOzn].m_nizDozvoljenihVrednostij.GetSize();
long double dZbir = 0.L;
for (int i=0; i<nVred; ++i)
{
BOOL b = nizOznaka[iOzn].m_nVerovKorakN.DajVerovatnocu(nizOznaka[iOzn].m_nizDozvoljenihVrednostij
,
nizOznaka[iOzn].m_nizOdredistnihVrednostij[iOdr], dVer);
dZbir += dVer;
} // for i
dVerOznake *= dZbir/nVred;*/
} // for iOdr
dVerov *= dVerOznake;
long double dRazl = nizOznaka[iOzn].RacunanjeVerovatnoceSledecegaKoraka();
if (nKorakNajveceRazlike == 0 || dRazl > dNajvecaRazlika)
{
nKorakNajveceRazlike = iKorak;
dNajvecaRazlika = dRazl;
}
} // for iOzn
nizVerovPrelaska.Add(dVerov);
} // for iKorak
// Prvo odregjujem najmanju vrednost verovatnoce prelaska.
int nNajmanji = 0;
for (int i=1; i<nKoraka; ++i)
{
if (nizVerovPrelaska < nizVerovPrelaska[nNajmanji])
nNajmanji = i;
} // for i
if (nNajmanji != nKoraka-1)
{
int ty = 5;
ty++;
}
dNajmanji = nizVerovPrelaska[nNajmanji];
nizSregjenihVerov.SetSize(nKoraka);
nizZbirSregjenihVerov.SetSize(nKoraka);
long double dZbir = 0.L;
for (int i=0; i<nKoraka; ++i)
{
dZbir += (nizVerovPrelaska-dNajmanji);
} // for i
if (dZbir == 0.)
{
return;
}
double dZbirVerov = 0.;
for (int i=0; i<nKoraka; ++i)
{
nizSregjenihVerov = (nizVerovPrelaska-dNajmanji)/dZbir;
dZbirVerov += nizSregjenihVerov;
nizZbirSregjenihVerov = dZbirVerov;
} // for i
} // kraj: static CSTROznaka::OdradiProracun
Не бих умѣо обяснити цѣо поступак у неколико рѣченица, али замисао йе проста и поступак не захтѣва много памети. Найсложения рачунска радња йе дѣљење. Нема никакве више математике.