Расчет параметров текстового источника сообщения. Вариант 10, страница 2

 end do:

end do:

nC:='nC':

nS:='nS':

toLow:='toLow':

toEqu:='toEqu':

indX:='indX':

incS:='incS':

nLines:='nLines':

scStr:='scStr':

FileTools[Text][Close](fIn):

for nS1 in ABC do

 if (not type(ABCC[nS1],integer)) then ABCC[nS1]:=0: end if:

 for nS2 in ABC do

  if (not type(ABCS[cat(nS1,nS2)],integer)) then ABCS[cat(nS1,nS2)]:=0: end if: 

 end do:

end do:

sTabl:=Spread[CreateSpreadsheet](Table1):

nS2:=2:

for nS1 in ABC do

 Spread[SetCellFormula](sTabl,nS2,1,value(nS1)):

 Spread[SetCellFormula](sTabl,1,nS2,value(nS1)):

 nS2:=eval(nS2+1):

end do:

for nS1 from 1 by 1 to 26 do

 for nS2 from 1 by 1 to 26 do

  Spread[SetCellFormula](sTabl,nS1+1,nS2+1,value(ABCS[cat(ABC[nS1],ABC[nS2])])): 

 end do:

end do:

Spread[SetCellFormula](sTabl,AB1,'L[k]'):

for nS1 from 1 by 1 to 26 do

 Spread[SetCellFormula](sTabl,nS1+1,28,value(ABCC[ABC[nS1]])):

end do:

Spread[SetCellFormula](sTabl,A29,"Всего символов в массиве:"):

LkSum:=eval(sum(ABCC[ABC[i]],i=1..26)):

Spread[SetCellFormula](sTabl,B29,value(LkSum)):

Spread[SetCellFormula](sTabl,A30,"Всего слогов в массиве:"):

LksSum:=0:

for nS1 in ABC do

 incSum:=eval(sum(value(ABCS[cat(value(nS1),value(ABC[j]))]),j=1..26)):

 LksSum:=eval(LksSum+incSum):

end do:

Spread[SetCellFormula](sTabl,B30,value(LksSum)):

sTablP:=Spread[CreateSpreadsheet](Table2):

nS2:=2:

for nS1 in ABC do

 Spread[SetCellFormula](sTablP,nS2,1,value(nS1)):

 Spread[SetCellFormula](sTablP,1,nS2,value(nS1)):

 nS2:=eval(nS2+1):

end do:

Spread[SetCellFormula](sTablP,AB1,'P[k]'):

PksSum:=0:

PkSum:=0:

for nS1 from 1 by 1 to 26 do

 Pk[value(ABC[nS1])]:=evalf(ABCC[value(ABC[nS1])]/LkSum):

 outStr:=sprintf("%5.3f",value(Pk[value(ABC[nS1])]));

 Spread[SetCellFormula](sTablP,nS1+1,28,eval(outStr)):

 PkSum:=evalf(PkSum+Pk[value(ABC[nS1])]):

 for nS2 from 1 by 1 to 26 do 

  Pks[cat(value(ABC[nS1]),value(ABC[nS2]))]:=evalf(ABCS[cat(value(ABC[nS1]),value(ABC[nS2]))]/LksSum):

  outStr:=sprintf("%5.4f",value(Pks[cat(value(ABC[nS1]),value(ABC[nS2]))]));

  Spread[SetCellFormula](sTablP,nS1+1,nS2+1,eval(outStr)):

  PksSum:=evalf(PksSum+Pks[cat(value(ABC[nS1]),value(ABC[nS2]))]): 

 end do:

end do:

Spread[SetCellFormula](sTablP,AC1,"Энтропия"):

Spread[SetCellFormula](sTablP,AD1,"Марковская\nэнтропия"):

for nS1 from 1 by 1 to 26 do

 H[value(ABC[nS1])]:=0:

 for nS2 from 1 by 1 to 26 do

  indX:=cat(value(ABC[nS1]),value(ABC[nS2])):

  if (Pks[indX]<>0.) then

   H[value(ABC[nS1])]:=evalf(H[value(ABC[nS1])]-Pks[indX]*log[2](Pks[indX])):  

  end if:

 end do:

 outStr:=sprintf("%5.3f",value(H[value(ABC[nS1])]));

 Spread[SetCellFormula](sTablP,nS1+1,29,eval(outStr)):

 Hm[value(ABC[nS1])]:=evalf(H[value(ABC[nS1])]*Pk[value(ABC[nS1])]):

 outStr:=sprintf("%5.3f",value(Hm[value(ABC[nS1])]));

 Spread[SetCellFormula](sTablP,nS1+1,30,eval(outStr)):

end do:

Spread[SetCellFormula](sTablP,AC28,"Энтропия марковского 26-символьного источника:"):

Hmo:=evalf(sum(Hm[value(ABC[i])],i=1..26)):

outStr:=sprintf("%5.3f",value(Hmo));

Spread[SetCellFormula](sTablP,AD28,outStr):

Spread[SetCellFormula](sTablP,A29,"Суммарная вероятность символов:"):

Spread[SetCellFormula](sTablP,B29,value(PkSum)):

Spread[SetCellFormula](sTablP,A30,"Суммарная вероятность слогов:"):

Spread[SetCellFormula](sTablP,B30,value(PksSum)):

>

>

Количество информации в сообщении:

> Jc:=evalf(Hmo*LkSum):

print('J'=Jc);

Рассчёт максимальной энтропии 26-символьного источника.

> print('H[max]=log[2](26)');

Hmax:=evalf(log[2](26)):

print('H[max]'=Hmax);

Рассчёт избыточности сообщения.

> Dc:=evalf((Hmax-Hmo)/Hmax):

print('D'=Dc);

Рассчёт коэффициента сжатия сообщения.

> Kc:=evalf(Hmo/Hmax):

print('Kc'=Kc);

>