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);
>
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.