Автоматизированное рабочее место для исследования и проектирования систем передачи информации

Программная реализация автоматизированного рабочего места для исследования и проектирования дискретных систем передачи информации с использованием устройств преобразования сигналов. Описание интерфейса программного комплекса и основные этапы работы с ним.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 13.11.2018
Размер файла 957,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

КРАТНОСТЬ; 0 ; 1 ; 2 ; 3 ; 4

0 ; 0.2940000; 0.3800000; 0.2390000; 0.0620000; 0.0220000

5 ; 0.0030000; 0.0000000; 0.0000000; 0.0000000; 0.0000000

РАСПРЕДЕЛЕНИЕ КРАТНОСТЕЙ ОШИБОК ПОСЛЕ ДЕКОДИРОВАНИЯ: k=12;

КРАТНОСТЬ; 0 ; 1 ; 2 ; 3 ; 4

0 ; 0.9750000; 0.0010000; 0.0000000; 0.0060000; 0.0120000

5 ; 0.0050000; 0.0010000; 0.0000000; 0.0000000; 0.0000000

Эквивалентная вер-ть ошибки Рвх=0.049869565-+0.001865902;

Эквивалентная вер-ть ошибки Рвых=0.008166667-+0.001068057;

Пропускная способность канала без УЗО: Ск/Смах=0.713603;

Пропускная способность канала c УЗО: Сs/Смах=0.486064.

3. Листинг программного комплекса*

3.1 Листинг головного модуля

program arm1; {головной модуль программного комплекса

uses

Forms,

Unit1 in 'Unit1.pas' {ARM},

Inform in 'Inform.pas' {About},

Model_DC in 'Model_DC.pas' {DC_Canal,RU_Canal},

Unit5 in 'Unit2.pas' {Signal},

Unit6 in 'Unit3.pas' {N_Canal1},

Unit7 in 'Unit4.pas' {D_Canal1},

Unit9 in 'Unit5.pas' {PRM},

Unit12 in 'Unit6.pas' {Help},

Unit13 in 'Unit7.pas' {N_Canal2},

Unit14 in 'Unit8.pas' {RU_Form},

Unit16 in 'Unit9.pas' {Results},

Unit17 in 'Unit10.pas' {Count},

Vartype in 'Vartype.pas',

Statpro1 in 'Statpro1.pas',

Sgncan1 in 'Sgncan1.pas',

Splash in 'Splash.pas' {Splash_Form},

dcanal1 in 'Dcanal1.pas',

UZO in 'UZO.pas' {UZO1},

Codec_RS in 'Codec_RS.pas',

Codec_BM in 'Codec_BM.pas',

Codec_SV in 'Codec_SV.pas',

Dec_Lebel in 'Dec_Lebel.pas',

Viterbi in 'Viterbi.pas',

Vi2_Code in 'Vi2_Code.pas',

Vi3_code in 'Vi3_code.pas',

SV_Cod in 'SV_Cod.pas',

Cyclcod in 'CyclCod.pas',

Diagram in 'Diagram.pas' {Picture},

Stat_UZO in 'Stat_UZO.pas' {Stat2},

Stat_DC in 'Stat_DC.pas' {Stat1};

*Примечание: Приводится листинг только 50 страниц программного комплекса согласно «Правила составления, подачи и рассмотрения заявок на официальную регистрацию ……», приказ РасАПО от 5 марта 1993г.

{$R *.RES}

begin

Splash_Form := TSplash_Form.Create(Application);

Application.Initialize;

Application.Title := 'АРМ';

Application.HelpFile := 'Help.hlp';

Application.CreateForm(TARM, ARM);

Application.CreateForm(TAbout, About);

Application.CreateForm(TSignal, Signal);

Application.CreateForm(TN_Canal1, N_Canal1);

Application.CreateForm(TD_Canal1, D_Canal1);

Application.CreateForm(TStat1, Stat1);

Application.CreateForm(TPRM, PRM);

Application.CreateForm(TUZO1, UZO1);

Application.CreateForm(TStat2, Stat2);

Application.CreateForm(TN_Canal2, N_Canal2);

Application.CreateForm(TRU_Form, RU_Form);

Application.CreateForm(TResults, Results);

Application.CreateForm(TCount, Count);

Application.CreateForm(TPicture, Picture);

Application.CreateForm(TStat2, Stat2);

Application.CreateForm(TStat1, Stat1);

Application.Run;

end.

3.2 Листинг модуля главного меню и главной формы

unit Unit1; { Модуль главного меню и главной формы}

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Menus, StdCtrls, ExtCtrls, Buttons, ComCtrls;

type

TARM = class(TForm)

MainMenu1: TMainMenu;

File1: TMenuItem;

Exit1: TMenuItem;

N1: TMenuItem;

PrintSetup1: TMenuItem;

Print1: TMenuItem;

N2: TMenuItem;

Save1: TMenuItem;

Open1: TMenuItem;

Help1: TMenuItem;

About1: TMenuItem;

Help2: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

PrintDialog1: TPrintDialog;

PrinterSetupDialog1: TPrinterSetupDialog;

options1: TMenuItem;

Color1: TMenuItem;

ColorDialog1: TColorDialog;

FontDialog1: TFontDialog;

Panel1: TPanel;

Panel2: TPanel;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

SpeedButton5: TSpeedButton;

SpeedButton6: TSpeedButton;

SpeedButton4: TSpeedButton;

Save1_1: TMenuItem;

Save1_2: TMenuItem;

SpeedButton1: TSpeedButton;

SpeedButton7: TSpeedButton;

N3: TMenuItem;

DC1: TMenuItem;

RU1: TMenuItem;

RichEdit1: TRichEdit;

procedure Button1Click(Sender: TObject);

procedure Exit1Click(Sender: TObject);

procedure Open1Click(Sender: TObject);

procedure Print1Click(Sender: TObject);

procedure PrintSetup1Click(Sender: TObject);

procedure Color1Click(Sender: TObject);

procedure Font1Click(Sender: TObject);

procedure About1Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure Help2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Save1_1Click(Sender: TObject);

procedure Save1_2Click(Sender: TObject);

procedure SpeedButton7Click(Sender: TObject);

procedure RU1Click(Sender: TObject);

procedure FormClick(Sender: TObject);

procedure DC1Click(Sender: TObject);

procedure options1Click(Sender: TObject);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

private

{ Private declarations }

public

{ Public declarations }

procedure Save(FileName:String;par:byte);

end;

var

ARM: TARM;

Menu_Color,Item_Color:TColor;

implementation

uses Model_DC, Unit2, Unit5, Unit6,VarType, Inform, UZO,Codec_RS;

{$R *.DFM}

procedure TARM.Button1Click(Sender: TObject);

begin

close;

end;

procedure TARM.Exit1Click(Sender: TObject);

begin

close;

end;

procedure TARM.Open1Click(Sender: TObject);

var

fil: file of rec9;

i:integer;

dat: rec9;

begin

if ARM.MDIChildCount>0 then

if OpenDialog1.Execute then

begin

AssignFile(fil,OpenDialog1.FileName);

Reset (fil);

Read (fil,dat);

if dat.Qualifier=123123 then

with dat do begin

with Uzo1 do begin

RadioButton1.Checked:=False; RadioButton3.Checked:=False;

RadioButton4.Checked:=False; RadioButton5.Checked:=False;

RadioButton6.Checked:=False; RadioButton13.Checked:=False;

RadioButton14.Checked:=False;RadioButton17.Checked:=False;

RadioButton18.Checked:=False;RadioButton19.Checked:=False;

RadioButton2.Checked:=False; RadioButton7.Checked:=False;

RadioButton8.Checked:=False; RadioButton9.Checked:=False;

RadioButton10.Checked:=False; RadioButton11.Checked:=False;

RadioButton12.Checked:=False; RadioButton15.Checked:=False;

RadioButton16.Checked:=False; end;

DSignal:=Signal;Dncan:=Ncan;

Ddcan:=Dcan;Dbrk:=Brk;DRust:=Rust;

Duzo1.codec_num:=Uzo.codec_num;

Duzo1.num:=Uzo.num;

if (Duzo1.codec_num=13)or (Duzo1.codec_num=17)

or (Duzo1.codec_num=18)or (Duzo1.codec_num=19)

then Npole;{процедура из Codec_RS}

Duzo1.n:=Uzo.n;

Duzo1.k:=Uzo.k;

Duzo1.n0:=Uzo.n0;

Duzo1.k0:=Uzo.k0;

Duzo1.sum_pro:=Uzo.sum_pro;

Duzo1.cm:=Uzo.cm;

Dprm:=Prm;

Duzo1.gKodSt:=Uzo.gKodSt;

Duzo1.gkodStr:='';

for i:=1 to 200 do

if Uzo.gkodCh[i]<>'~'

then Duzo1.gkodStr:=Duzo1.gkodStr+Uzo.gkodCh[i]

else break;

MessageDlg('Чтение завершено успешно.',mtWarning,[mbOk],0);

DC_Menu.BitBtn5.Enabled:=True;

DC_Menu.BitBtn8.Enabled:=False;

DoRefl:=1;

end

else

MessageDlg('Файл не принадлежит программе АРМ.',mtWarning,[mbOk],0);

CloseFile (fil);

end;

end;

procedure TARM.Print1Click(Sender: TObject);

begin

ARM.Save ('impfile.txt',0);

RichEdit1.Lines.LoadFromFile('impfile.txt');

RichEdit1.Print('');

DeleteFile ('impfile.txt');

end;

procedure TARM.PrintSetup1Click(Sender: TObject);

begin

PrinterSetupDialog1.Execute;

end;

procedure TARM.Color1Click(Sender: TObject);

begin

if ActiveMDIChild=DC_Menu then

begin

DC_Menu.ColorDialog1.Execute;

Menu_Color:=DC_Menu.ColorDialog1.Color;

DC_Menu.Color:=Menu_Color

end;

end;

procedure TARM.Font1Click(Sender: TObject);

begin

FontDialog1.Execute;

ARM.Panel1.Font:=FontDialog1.Font;

end;

procedure TARM.About1Click(Sender: TObject);

begin

About.showModal;

end;

procedure TARM.N3Click(Sender: TObject);

begin

DC_Menu.Color:=Menu_Color;

ARM.Visible:=False;

DC_Menu.ShowModal;

ARM.Visible:=True;

end;

procedure TARM.Help2Click(Sender: TObject);

begin

Application.HelpCommand(HELP_CONTENTS, 0);

end;

procedure TARM.FormCreate(Sender: TObject);

begin

Menu_Color:=$00C43C42;

Item_Color:=clAqua;

end;

procedure TARM.Save1_1Click(Sender: TObject);

var

fil: file of rec9;

i,j:integer;

dat: rec9;

begin

SaveDialog1.FileName:='var1';

SaveDialog1.FilterIndex:=1;

j:=0;

if SaveDialog1.Execute then

begin

for i:=1 to length (SaveDialog1.FileName)-4 do

if copy (SaveDialog1.FileName,i+1,4)='.dat' then j:=1;

if j=0 then SaveDialog1.FileName:=SaveDialog1.FileName+'.dat';

AssignFile(fil,SaveDialog1.FileName);

Rewrite (fil);

with dat do begin

Signal:=DSignal;

Ncan:=Dncan;

Dcan:=Ddcan;

Brk:=Dbrk;

Rust:=DRust;

Uzo.codec_num:=Duzo1.codec_num;

Uzo.n:=Duzo1.n;

Uzo.k:=Duzo1.k;

Uzo.n0:=Duzo1.n0;

Uzo.k0:=Duzo1.k0;

Uzo.sum_pro:=Duzo1.sum_pro;

Uzo.cm:=Duzo1.cm;

Uzo.num:=Duzo1.num;

Uzo.gKodSt:=Duzo1.gKodSt;

Prm:=Dprm;

for i:=1 to length(Duzo1.gkodStr)+1 do

if i<=length(Duzo1.gkodStr)

then Uzo.gkodCh[i]:=Duzo1.gkodStr[i]

else Uzo.gkodCh[i]:='~';

Qualifier:=123123;

end;

write(fil,dat);

{ MessageDlg('Запись завершена успешно.',mtWarning,[mbOk],0);}

end;

end;

procedure TARM.Save (FileName:string;par:byte);

var i,j:integer;

r:double;

fil:TextFile;

procedure Table(j:integer;q:byte);

var i:integer;

rk:double;

begin

if par=1 then

begin

Writeln(fil,

Writeln(fil,

' ¦ КРАТНОСТЬ¦ 0 ¦ 1 ¦ 2 ¦ 3 ¦ 4 ¦');

Writeln(fil,

' ¦--------------------+--------------------+--------------------+--------------------+--------------------+--------------------¦');

for i:=0 to j do begin

if q=1 then rk:=rk1[i] else rk:=rk2[i];

if (i mod 5)=0 then Write(fil,' ¦ ',i:3,' ¦ ');

Write(fil,rk:8:7,'¦ ');

if ((i+1) mod 5 = 0) and (i<>j) then Writeln(fil);

end;

for i:=1 to 4-j mod 5 do Write(fil,'0.0000000¦ ');

Writeln(fil);

Writeln(fil,

' +--------------------+--------------------+--------------------+--------------------+--------------------+--------------------+');

end

else

begin

Writeln(fil,

' КРАТНОСТЬ; 0 ; 1 ; 2 ; 3 ; 4 ');

for i:=0 to j do begin

if q=1 then rk:=rk1[i] else rk:=rk2[i];

if (i mod 5)=0 then Write(fil,' ',i:3,' ; ');

if ((i+1) mod 5=0) then Write(fil,rk:8:7,' ')

else Write(fil,rk:8:7,'; ');

if ((i+1) mod 5 = 0) and (i<>j) then Writeln(fil);

end;

for i:=1 to (4-j mod 5) do

if i<(4-j mod 5) then Write(fil,'0.0000000; ')

else Write(fil,'0.0000000 ');

Writeln(fil);

end;

end;

begin

AssignFile(fil,FileName);

Rewrite (fil);

with Ddcan do with Dbrk do with Duzo1 do with Dncan do begin

Writeln(fil,' РЕЗУЛЬТАТЫ ИСПЫТАНИЙ');

Writeln(fil,#10' Исходные данные:');

Writeln(fil,' СИГНАЛ двоичный: p(1) =',Dsignal.p1sign:8:7,'.');

Writeln(fil,#10' НЕПРЕРЫВНЫЙ КАНАЛ: Hp =',Hp:5:1,'; Hc =',Hc:5:1,';');

Writeln(fil,' m =',m:3,'; Q = ',q:8:7,';');

Writeln(fil,' Модулятор: md =',md:3:1,'; Демодулятор: dm =',dm,';');

if DRust.Rule=0 then

Writeln(fil,' Критерий качества: МП ;') else

Writeln(fil,' Критерий качества: МАВ.');

Writeln(fil,#10' ДИСКРЕТНЫЙ КАНАЛ:' );

if model=1 then begin

Writeln(fil,' Пороговые уровни: H1 =',H1:5:1,'; H2 =',H2:5:1,';');

Writeln(fil,' Вероятности состояний: P0 =',p0:8:7,';');

Writeln(fil,' P1 =',p1:8:7,';');

Writeln(fil,' P2 =',p2:8:7,';');

Writeln(fil,' Вероятности ошибок: E0 =',e0:8:7,';');

Writeln(fil,' E1 =',e1:8:7,';');

Writeln(fil,' E2 =',e2:8:7,';');

Writeln(fil,' Матрица переходных вероятностей:');

Writeln(fil,' ',p00:8:7,' ',p01:8:7,' ',0.0:8:7);

Writeln(fil,' ',p10:8:7,' ',p11:8:7,' ',p12:8:7);

Writeln(fil,' ',0.0:8:7,' ',p21:8:7,' ',p22:8:7);

Writeln(fil,' Средняя вероятность ошибки: Pcp=',Pcp:8:7,';');

end;

if PP>0 then begin

Writeln(fil,' Параметры перерывов:');

Writeln(fil,' PP=',pp:8:7,'; PI=',pi:8:7,'; E4=',e4:8:7,';');

Writeln(fil,' P4=',p4:8:7,'; P5=',p5:8:7,'; B1=',b1:8:7,';');

Writeln(fil,' B2=',b2:8:7,'; TM=',tm:8:1,';');end;

Write(fil,' Параметры перемежителя:');

Writeln(fil,' A=',Dprm.Aprm,'; C=',Dprm.cprm,'; L=',Dprm.Lprm,'.');

r:=0;

for i:=0 to rk2_Count-1 do r:=r+rk2[i];

if r=0 then begin

Writeln(fil,#10' УЗО НЕ ИСПОЛЬЗУЕТСЯ.');

Writeln(fil,#10' ОБЪЕМ ИСПЫТАНИЙ NB=',Dstat.col_blok,'.');

Writeln(fil,#10' РАСПРЕДЕЛЕНИЕ КРАТНОСТЕЙ ОШИБОК n=',Dstat.n);

for j:= rk1_Count-1 downto 0 do

if rk1[j]<>0 then break;

Table(j,1);

end else

begin

case codec_num of

0,2,3,4,5,14:begin

Writeln(fil,#10' ИСПОЛЬЗУЕТСЯ ЦИКЛИЧЕСКИЙ КОД: n=',n,' k=',k,';');

Writeln(fil,' Производящий многочлен (8-ичная запись):');

Writeln(fil,' g(x)=',gkodStr,';');

Writeln(fil,' МАКС.кратность исправл.ошибок t=',cm,';');

if codec_num=0 then

Writeln(fil,' Декодер синдромно-матричный.');

if codec_num=14 then

Writeln(fil,' Декодер АБМВ.');

end;

13,18: begin

Writeln(fil,#10' ИСПОЛЬЗУЕТСЯ КОД Рида-Соломона: n=',n,' k=',k,';');

Writeln(fil,' Производящий многочлен g(x)=',gkodStr,';');

Writeln(fil,' МАКС.кратность исправл.ошибок t=',cm,';');

if codec_num=13 then Writeln(fil,' Декодер АБМВ.');

if codec_num=18 then Writeln(fil,' Декодер АБМЧ.');

end;

1,6,7,8,9,10:begin

Writeln(fil,#10' ИСПОЛЬЗУЕТСЯ СВЕРТОЧНЫЙ КОД: n=',n,'; k=',k,';');

Writeln(fil,' Производящий(е) многочлен(ы): g(x)=',gkodStr,';');

if codec_num=6 then writeln(fil,' (8-ричная запись)')

else begin

if codec_num=8 then writeln(fil,' g1=1+x; g2=1+x+x2; R=1/2, Декодер Витерби.');

if codec_num=9 then

begin

writeln(fil,' g(ij)=1+x,1+x,1');

writeln(fil,' 0, x, 1+x; R=2/3,Декодер Витерби.');

end;

if codec_num=10 then

begin

writeln(fil,' g(ij)=1+x,1+x,1');

writeln(fil,' 0, x, 1+x; R=3/4,Декодер Витерби.');

end;

if (codec_num=1) or (codec_num=7) then

begin

writeln(fil,' (степени мн-на(ов))');

write(fil,' Декодер итерационный пороговый,');

Writeln(fil,' МАКС.число итераций:',cm:3,'.');

end;

end;

end;

12,15,16,17,19:begin

Write(fil,#10' ИСПОЛЬЗУЕТСЯ КАСКАДНЫЙ КОД.' );

Writeln(fil,#10' Внутренний код свёрточный: ');

Writeln(fil,' Производящий(е) многочлен(ы):');

if (codec_num=12) or (codec_num=17) then

write(fil,' g1=1+x; g2=1+x+x2; R=1/2, Декодер Витерби.');

if codec_num=15 then

begin

writeln(fil,' g1=1+x; g2=1+x+x2; выколотый R=1/3,');

Write(fil,' Декодер Витерби.' );

end;

if (codec_num=16) or (codec_num=19) then

begin

Writeln(fil,' Номер многочлена g(x)=',UZO1.Edit7.Text,';');

Write(fil,' Декодер итерационный пороговый.');

end;

if (codec_num=12) or (codec_num=15) or (codec_num=16) then

begin

Writeln(fil,#10' Внешний код свёрточный: n=',n,'; k=',k,';');

Writeln(fil,' Производящий(е) многочлен(ы): g(x)=',gkodStr,';');

Writeln(fil,' Декодер итерационный пороговый.');

end;

if (codec_num=17) or (codec_num=19) then

begin

Writeln(fil,#10' Внешний код РС: n=',n,'; k=',k,';');

Write(fil,' Производящий многочлен g(x)=',gkodStr,';');

Writeln(fil,' МАКС.кратность исправл.ошибок t=',cm,';');

Writeln(fil,' Декодер АБМЧ.');

end;

end;

end;

Writeln(fil,#10' ОБЪЕМ ИСПЫТАНИЙ NB=',Dstat.col_blok,'.');

Writeln(fil,#10' РАСПРЕДЕЛЕНИЕ КРАТНОСТЕЙ ОШИБОК ДО ДЕКОДИРОВАНИЯ: n=',n,';');

for j:= rk1_Count-1 downto 0 do

if rk1[j]<>0 then break;

Table(j,1);

Writeln(fil,

#10' РАСПРЕДЕЛЕНИЕ КРАТНОСТЕЙ ОШИБОК ПОСЛЕ ДЕКОДИРОВАНИЯ: k=',k,';');

for j:= rk2_Count-1 downto 0 do

if rk2[j]<>0 then break;

Table(j,2);

if codec_num=0 then

Writeln(fil,#10' Вероятность обнаружения Робн=',Pob:8:7,';');

end;

Writeln(fil,#10' Эквивалентная вер-ть ошибки Рвх=',PE1:10:9,'-+',D1:10:9,';');

Writeln(fil,' Эквивалентная вер-ть ошибки Рвых=',PE2:10:9,'-+',D2:10:9,';');

Writeln(fil,' Пропускная способность канала без УЗО: Ск/Смах=',Ck:7:6,';');

Writeln(fil,' Пропускная способность канала c УЗО: Сs/Смах=',Cs:7:6,'.');

end;

CloseFile(fil);

end;

procedure TARM.Save1_2Click(Sender: TObject);

var

i,j:integer;

begin

if ARM.MDIChildCount>0 then

begin

j:=0;

SaveDialog1.FileName:='rezult1';

SaveDialog1.FilterIndex:=2;

if SaveDialog1.Execute then

begin

for i:=1 to length (SaveDialog1.FileName)-4 do

if copy (SaveDialog1.FileName,i+1,4)='.rez' then j:=1;

if j=0 then SaveDialog1.FileName:=SaveDialog1.FileName+'.rez';

ARM.Save(SaveDialog1.FileName,1);

end;

end;

end;

procedure TARM.SpeedButton7Click(Sender: TObject);

begin

if ActiveMDIChild=nil then

if SpeedButton7.Down then ARM.Cursor:=crHelp

else ARM.Cursor:=crDefault

else

begin

if SpeedButton7.Down then

begin

ARM.Cursor:=crHelp;

if model=1 then

begin

SpeedButton7.Cursor:=crHelp;

DC_Menu.Cursor:=crHelp;

DC_Menu.BitBtn2.Cursor:=crHelp;

DC_Menu.BitBtn3.Cursor:=crHelp;

DC_Menu.BitBtn4.Cursor:=crHelp;

DC_Menu.BitBtn5.Cursor:=crHelp;

DC_Menu.BitBtn6.Cursor:=crHelp;

DC_Menu.BitBtn7.Cursor:=crHelp;

DC_Menu.BitBtn8.Cursor:=crHelp;

end;

if model=2 then

begin

SpeedButton7.Cursor:=crHelp;

DC_Menu.Cursor:=crHelp;

DC_Menu.BitBtn2.Cursor:=crHelp;

DC_Menu.BitBtn9.Cursor:=crHelp;

DC_Menu.BitBtn10.Cursor:=crHelp;

DC_Menu.BitBtn5.Cursor:=crHelp;

DC_Menu.BitBtn6.Cursor:=crHelp;

DC_Menu.BitBtn7.Cursor:=crHelp;

DC_Menu.BitBtn8.Cursor:=crHelp;

end;

end

else

begin

ARM.Cursor:=crDefault;

if model=1 then

begin

SpeedButton7.Cursor:=crDefault;

DC_Menu.Cursor:=crDefault;

DC_Menu.BitBtn2.Cursor:=crDefault;

DC_Menu.BitBtn3.Cursor:=crDefault;

DC_Menu.BitBtn4.Cursor:=crDefault;

DC_Menu.BitBtn5.Cursor:=crDefault;

DC_Menu.BitBtn6.Cursor:=crDefault;

DC_Menu.BitBtn7.Cursor:=crDefault;

DC_Menu.BitBtn8.Cursor:=crDefault;

end;

if model=2 then

begin

SpeedButton7.Cursor:=crDefault;

DC_Menu.Cursor:=crDefault;

DC_Menu.BitBtn2.Cursor:=crDefault;

DC_Menu.BitBtn9.Cursor:=crDefault;

DC_Menu.BitBtn10.Cursor:=crDefault;

DC_Menu.BitBtn5.Cursor:=crDefault;

DC_Menu.BitBtn6.Cursor:=crDefault;

DC_Menu.BitBtn7.Cursor:=crDefault;

DC_Menu.BitBtn8.Cursor:=crDefault;

end;

end;

end;

end;

procedure TARM.RU1Click(Sender: TObject);

begin

ARM.SpeedButton1.Enabled:=True;

ARM.SpeedButton2.Enabled:=True;

ARM.SpeedButton3.Enabled:=True;

ARM.SpeedButton4.Enabled:=True;

ARM.Open1.Enabled:=True;

ARM.Save1.Enabled:=True;

ARM.Print1.Enabled:=True;

ARM.Color1.Enabled:=True;

model:=2;

if ARM.MDIChildCount=0 then

DC_Menu:=TDC_Menu.Create(Application);

DC_Menu.Show;

DC_Menu.BitBtn9.Visible:=true;

DC_Menu.BitBtn10.Visible:=true;

DC_Menu.BitBtn3.Visible:=false;

DC_Menu.BitBtn4.Visible:=false;

end;

procedure TARM.FormClick(Sender: TObject);

begin

if ARM.Cursor=crHelp

then Application.HelpCommand(HELP_CONTEXT,1);

end;

procedure TARM.DC1Click(Sender: TObject);

begin

ARM.SpeedButton1.Enabled:=True;

ARM.SpeedButton2.Enabled:=True;

ARM.SpeedButton3.Enabled:=True;

ARM.SpeedButton4.Enabled:=True;

ARM.Open1.Enabled:=True;

ARM.Save1.Enabled:=True;

ARM.Print1.Enabled:=True;

ARM.Color1.Enabled:=True;

model:=1;

if ARM.MDIChildCount=0 then

DC_Menu:=TDC_Menu.Create(Application);

DC_Menu.Show;

DC_Menu.BitBtn9.Visible:=false;

DC_Menu.BitBtn10.Visible:=false;

DC_Menu.BitBtn3.Visible:=true;

DC_Menu.BitBtn4.Visible:=true;

end;

procedure TARM.Options1Click(Sender: TObject);

begin

if ARM.MDIChildCount>0 then Color1.Enabled:=True

else Color1.Enabled:=False;

end;

procedure TARM.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

if Application.MessageBox(

'Результаты ввода данных и испытаний возможно не сохранены! ВЫ ДЕЙСТВИТЕЛЬНО ХОТИТЕ ВЫЙТИ?',

' ВНИМАНИЕ!!', MB_YESNO+MB_ICONQUESTION)= IDYES

then CanClose:=true else CanClose:=false;

end;

{Конец программы «unit Unit1»}end.

3.3 Листинг модуля моделей СПИ

unit Model_DC; {Модуль формирования модели СПИ}

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Buttons, Menus, ExtCtrls;

type

TDC_Menu = class(TForm)

BitBtn1: TBitBtn;

PopupMenu1: TPopupMenu;

color1: TMenuItem;

ColorDialog1: TColorDialog;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

BitBtn5: TBitBtn;

BitBtn6: TBitBtn;

BitBtn7: TBitBtn;

BitBtn8: TBitBtn;

BitBtn9: TBitBtn;

BitBtn10: TBitBtn;

procedure Button1Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure color1Click(Sender: TObject);

procedure FormMouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn2MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn3MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn4Click(Sender: TObject);

procedure BitBtn4MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn5Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

procedure BitBtn6MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn7Click(Sender: TObject);

procedure BitBtn7MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn8Click(Sender: TObject);

procedure BitBtn8MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn5MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure BitBtn2Exit(Sender: TObject);

procedure BitBtn3Exit(Sender: TObject);

procedure BitBtn4Exit(Sender: TObject);

procedure BitBtn5Exit(Sender: TObject);

procedure BitBtn6Exit(Sender: TObject);

procedure BitBtn7Exit(Sender: TObject);

procedure BitBtn8Exit(Sender: TObject);

procedure BitBtn2Enter(Sender: TObject);

procedure BitBtn3Enter(Sender: TObject);

procedure BitBtn4Enter(Sender: TObject);

procedure BitBtn5Enter(Sender: TObject);

procedure BitBtn6Enter(Sender: TObject);

procedure BitBtn7Enter(Sender: TObject);

procedure BitBtn8Enter(Sender: TObject);

procedure BitBtn1Enter(Sender: TObject);

procedure BitBtn1Exit(Sender: TObject);

procedure BitBtn1MouseMove(Sender: TObject;

Shift: TShiftState; X,Y: Integer);

procedure FormClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure BitBtn9Click(Sender: TObject);

procedure BitBtn10Click(Sender: TObject);

private

{ Private declarations }

public

procedure ReadPolynom;

procedure RandPosl;

{ Public declarations }

end;

var

DC_Menu: TDC_Menu;

code,i,jj:integer;

cancel:boolean;

implementation

uses Unit1, Unit2, Unit3, Unit4, Stat_DC, Unit5, Stat_UZO,

Unit7, Unit8, Unit9, Unit10, VarType,

Cyclcod,Viterbi, CodecSV05,Dec_Lebel,Codec_SV,

Codec_RS,Codec_BM,Dcanal1,SgnCan1,StatPro1, RUunit, UZO;

var s,s1:string;

{$R *.DFM}

procedure TDC_Menu.Button1Click(Sender: TObject);

begin

close;

end;

procedure TDC_Menu.ReadPolynom;{чтение производящего мн-на}

var i,j,ll,code:integer;

begin

code:=0;

ll:=0;

with Duzo1 do

begin

if gkodStr='' then

MessageDlg('Ошибка ввода g(x).',mtWarning,[mbOk],0)

else

begin

for i:=0 to 300 do gkod[i]:=0;

if (Codec_Num<>8) and (Codec_Num<>9) and (Codec_Num<>10)

then

if Pos(',',gkodStr)<>0

then

begin

j:=1;

repeat

for i:=j to Length(gkodStr){+1} do

if (gkodStr[i]=',') then break;

Val(Copy(gkodStr,j,i-j),gkod[ll],code);

inc (ll);

j:=i+1;

until i>=Length(gkodStr){+1;}

end

else

if Odd(byte(gkodStr[Length(gkodStr)])) and (Pos('8',gkodStr)=0)

and (Pos('9',gkodStr)=0)

then

begin

for i:=Length(gkodStr) downto 1 do

for j:=0 to 2 do

if Odd(byte(gkodStr[i]) shr j) then

begin

gkod[ll]:=3*(Length(gkodStr)-i)+j;

inc (ll);

end;

end

else MessageDlg('Ошибка ввода g(x).',mtError,[mbOk],0);

end;

sum_pro:=ll;

if (Codec_Num=7) or (Codec_Num=12)

or (Codec_Num=15) or (Codec_Num=16)

then

begin {Проверка набора многочленов}

for i:=1 to Sum_pro-1 do

for j:=i+1 to Sum_pro do

if (gkod[i]<>0) and (gkod[i]=gkod[j])then

MessageDlg('В наборе g(x) имеются одинаковые степени',mtError,[mbOk],0);

j:=0;

for i:=1 to Sum_pro do

if gkod[i]=0 then j:=j+1;

if (Sum_pro mod j) <> 0

then

MessageDlg('В наборе g(x) многочлены разной длины ',mtError,[mbOk],0);

end;

end;

end;

procedure TDC_Menu.RandPosl;

var i,j,Ap:integer;

begin

with Dprm do with Duzo1 do

begin

Ap:=0;

for i:=0 to (n*Lprm-1) do

begin

PsP[i]:=Aprm*Ap+Cprm;

while PsP[i]>=(n*Lprm-1) do PsP[i]:=PsP[i]-(n*Lprm-1);

Ap:=PsP[i];

if (i>1) and (i<n*Lprm-1) then

for j:=0 to i-1 do

if PsP[i]=PsP[j] then

begin

MessageDlg(

'Допустимы А=1,L<=10,n/2<C<n*L; Повторите ввод A,L,C в перемежителе!'

,mtWarning,[mbOk],0);

Dstat.col_blok:=0;

exit;

end;

end;

PsP[n*Lprm-1]:=n*Lprm-1;

end;

end;

procedure TDC_Menu.BitBtn1Click(Sender: TObject);

begin

close;

end;

procedure TDC_Menu.color1Click(Sender: TObject);

begin

ColorDialog1.Execute;

Menu_Color:=ColorDialog1.Color;

DC_Menu.Color:=Menu_Color;

end;

procedure TDC_Menu.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn1.Font.Color:=clWindowText;

BitBtn2.Font.Color:=clWindowText;

BitBtn3.Font.Color:=clWindowText;

BitBtn4.Font.Color:=clWindowText;

BitBtn5.Font.Color:=clWindowText;

BitBtn6.Font.Color:=clWindowText;

BitBtn7.Font.Color:=clWindowText;

BitBtn8.Font.Color:=clWindowText;

end;

procedure TDC_Menu.BitBtn2Click(Sender: TObject);

begin

if DC_Menu.Cursor=crHelp

then

Application.HelpCommand(HELP_CONTEXT,14)

else

begin

Signal.Color:=Item_Color;

str (Dsignal.p1sign:6:4,s); Signal.Edit1.Text:=s;

Signal.showModal;

if Cancel=true then Cancel:=false

else val(Signal.Edit1.Text,Dsignal.p1sign,code);

end;

end;

procedure TDC_Menu.BitBtn2MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn2.Font.Color:=clBlue;

end;

procedure TDC_Menu.BitBtn3Click(Sender: TObject);

var Xp,Xc:double;

Xm:integer;

begin

if DC_Menu.Cursor=crHelp

then

Application.HelpCommand(HELP_CONTEXT,18)

else

begin

N_Canal1.Color:=Item_Color;

with Dncan do begin

str(Hp:6:4,s); N_Canal1.Edit1.Text:=s;

str(Hc:6:4,s); N_Canal1.Edit2.Text:=s;

str(H1:6:4,s); N_Canal1.Edit3.Text:=s;

str(H2:6:4,s); N_Canal1.Edit4.Text:=s;

str(m:2,s); N_Canal1.Edit5.Text:=s;

str(Q:6:4,s); N_Canal1.Edit6.Text:=s;

case trunc (md*10) of

5 :N_Canal1.RadioGroup1.ItemIndex:=0;

10:N_Canal1.RadioGroup1.ItemIndex:=1;

20:N_Canal1.RadioGroup1.ItemIndex:=2;

end;

N_Canal1.RadioGroup2.ItemIndex:=1-dm;

N_Canal1.showModal;

if Cancel=true then Cancel:=false else

begin

DoRefl:=0;

BitBtn5.Enabled:=False;

BitBtn8.Enabled:=False;

val(N_Canal1.Edit1.Text,Xp,code);

val(N_Canal1.Edit2.Text,Xc,code);

val(N_Canal1.Edit5.Text,Xm,code);

{ Формирование порогов H1 и H2 "по умолчанию"

при изменении Hp,Hc или m}

if (Xp<>Hp) or (Xc<>Hc) or (Xm<>m)

then begin

if Xm>1 then begin H1:=Xm*Xc;H2:=0.2*H1;end

else begin H1:=Xp+Xc;H2:=0.2*H1;end;

str(H1:6:4,s); N_Canal1.Edit3.Text:=s;

str(H2:6:4,s); N_Canal1.Edit4.Text:=s;

end;

val(N_Canal1.Edit3.Text,H1,code);

val(N_Canal1.Edit4.Text,H2,code);

val(N_Canal1.Edit1.Text,Hp,code);

val(N_Canal1.Edit2.Text,Hc,code);

val(N_Canal1.Edit5.Text,m,code);

val(N_Canal1.Edit6.Text,Q,code);

case N_Canal1.RadioGroup1.ItemIndex of

0:md:=0.5;

1:md:=1;

2:md:=2;

end;

dm:=1-N_Canal1.RadioGroup2.ItemIndex;

end;

end;

end;

end;

procedure TDC_Menu.BitBtn3MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn3.Font.Color:=clBlue;

end;

procedure TDC_Menu.BitBtn4Click(Sender: TObject); { Дискретный канал }

var h0,h1,h2:double;

begin

if DC_Menu.Cursor=crHelp

then

Application.HelpCommand(HELP_CONTEXT,13)

else

begin

D_Canal1.Color:=Item_Color;

if DoRefl=0 then Dcan;

if Ddcan.Pcp<>0 then

begin

DoRefl:=1;

with Ddcan do

begin

str (p0:9:7,s); D_Canal1.Edit1.Text:=s;

str(p1:9:7,s); D_Canal1.Edit2.Text:=s;

str(e0:10:8,s); D_Canal1.Edit3.Text:=s;

str(e1:10:8,s); D_Canal1.Edit4.Text:=s;

str(e2:10:8,s); D_Canal1.Edit5.Text:=s;

str(p01:9:7,s); D_Canal1.Edit6.Text:=s;

str(p21:9:7,s); D_Canal1.Edit7.Text:=s;

str(Pcp:10:8,s); D_Canal1.Label10.Caption:=' '+s;

str(Dbrk.pp:9:7,s); D_Canal1.Edit8.Text:=' '+s;

D_Canal1.showModal;

if Cancel=true then Cancel:=false else

begin

val(D_Canal1.Edit1.Text,p0,code);

val(D_Canal1.Edit2.Text,p1,code);

val(D_Canal1.Edit3.Text,e0,code);

val(D_Canal1.Edit4.Text,e1,code);

val(D_Canal1.Edit5.Text,e2,code);

val(D_Canal1.Edit6.Text,p01,code);

val(D_Canal1.Edit7.Text,p21,code);

val(D_Canal1.Edit8.Text,Dbrk.pp,code);

p2:=1-(p0+p1); p00:=1-p01; p10:=p01*p0/p1; p12:=p21*p2/p1;

p11:=1-p10-p12; p22:=1-p21;Pcp:=e0*p0+e1*p1+e2*p2;

if e0=0 then h0:=p0 else

h0:=-(E0*ln(E0)+(1-E0)*ln(1-E0))*P0;

if e1=0 then h1:=p1 else

h1:=-(E1*ln(E1)+(1-E1)*ln(1-E1))*P1;

if e2=0 then h2:=p2 else

h2:=-(E2*ln(E2)+(1-E2)*ln(1-E2))*P2;

Ck:=1-((h0+h1+h2)/ln(2.0));

end;

if Dbrk.pp<>0 then

begin

MessageDlg('В данном варианте АРМ перерывы не моделируются.',mtWarning,[mbOk],0);

Dbrk.pp:=0

end;

BitBtn5.Enabled:=True;

end;

end;

end;

end;

procedure TDC_Menu.BitBtn4MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn4.Font.Color:=clBlue;

end;

procedure TDC_Menu.BitBtn5Click(Sender: TObject); { Стат 1 }

var count_dec,count_Bar,i:integer;

begin

if DC_Menu.Cursor=crHelp then

Application.HelpCommand(HELP_CONTEXT,12)

else

begin

Stat1.Color:=Item_Color;

with Dstat do

begin

Stat1.Edit1.Text:=IntToStr (n);

Stat1.Edit2.Text:=IntToStr (col_blok);

Stat1.ShowModal;

if Cancel=true then Cancel:=false else

begin

n:=StrToInt(Stat1.Edit1.Text);

col_blok:=StrToInt(Stat1.Edit2.Text);

InitStat(n,n,1,1,1,1);

Count.Show;

DC_Menu.Cursor:=crHourGlass;

count_Bar:=0;

count_dec:=trunc(col_blok/100);

for i:=1 to col_blok do {цикл статистики}

begin

if i mod count_dec=0 then

begin

count_Bar:=count_Bar+1;

Count.ProgressBar1.Position:=count_Bar;

end;

if i mod 100=0 then

begin

Count.Edit1.Text:=IntToStr(i);

Count.Repaint;

end;

case model of {Установка модели канала}

1: Canal(n,UZOoff);

2: Can0(n,i);

end;

GetStat(UZOoff,n,i,col_blok); {Стат.обработка}

end;

DC_Menu.Cursor:=crDefault;

Count.Close;

for i:=n-1 downto 0 do

if (rk1[i]<>0) or (rk2[i]<>0) then begin jj:=i; break; end;

if i>=0 then

begin

Results.BitBtn1.Enabled:=False;

Results.StringGrid1.Cells [1,0]:=' До декодирования n= '+IntToStr(n);

Results.StringGrid1.Cells [2,0]:=' После декодирования k= '+IntToStr(0);

Results.StringGrid1.RowCount:=jj+2;

for i:=0 to jj do

begin

Results.StringGrid1.Cells[0,i+1]:=' '+IntToStr(i);

str (rk1[i]:12:10,s);

Results.StringGrid1.Cells[1,i+1]:=' '+s;

s:='0.00';

Results.StringGrid1.Cells[2,i+1]:=' '+s;

end;

Results.Label4.Caption:=' '+IntToStr (Dstat.col_blok);

str (Ck:9:7,s); Results.Label10.Caption:=' '+s;

str (Pob:9:7,s); Results.Label3.Caption:=' '+s;

str (PE1:12:10,s); Results.Label7.Caption:=' '+s;

s:='0.00';

Results.Label8.Caption:=' '+s;

Results.ShowModal;

Results.BitBtn1.Enabled:=True;

end;

end;

end;

end;

end;

procedure TDC_Menu.BitBtn6Click(Sender: TObject);{ Перемежитель }

begin

if DC_Menu.Cursor=crHelp

then Application.HelpCommand(HELP_CONTEXT,7)

else

begin

PRM.Color:=Item_Color;

with Dprm do

begin

PRM.Edit1.Text:=IntToStr(Aprm);

PRM.Edit2.Text:=IntToStr(Cprm);

PRM.Edit3.Text:=IntToStr(Lprm);

PRM.showModal;

if Cancel=true then Cancel:=false else

begin

Aprm:=StrToInt(PRM.Edit1.Text);

Cprm:=StrToInt(PRM.Edit2.Text);

Lprm:=StrToInt(PRM.Edit3.Text);

end;

end;

end;

end;

procedure TDC_Menu.BitBtn6MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn6.Font.Color:=clBlue;

end;

procedure TDC_Menu.BitBtn7Click(Sender: TObject);{ УЗО }

begin

if DC_Menu.Cursor=crHelp

then Application.HelpCommand(HELP_CONTEXT,8)

else

begin

UZO1.Color:=Item_Color;

with DUZO1 do

begin

case Codec_Num of

0: UZO1.RadioButton1.Checked:=true;

1: UZO1.RadioButton2.Checked:=true;

2: UZO1.RadioButton3.Checked:=true;

3: UZO1.RadioButton4.Checked:=true;

4: UZO1.RadioButton5.Checked:=true;

5: UZO1.RadioButton6.Checked:=true;

6: UZO1.RadioButton7.Checked:=true;

7: UZO1.RadioButton8.Checked:=true;

8: UZO1.RadioButton9.Checked:=true;

9: UZO1.RadioButton10.Checked:=true;

10: UZO1.RadioButton11.Checked:=true;

12: UZO1.RadioButton12.Checked:=true;

13: UZO1.RadioButton13.Checked:=true;

14: UZO1.RadioButton14.Checked:=true;

15: UZO1.RadioButton15.Checked:=true;

16: UZO1.RadioButton16.Checked:=true;

17: UZO1.RadioButton17.Checked:=true;

18: UZO1.RadioButton18.Checked:=true;

19: UZO1.RadioButton19.Checked:=true;

end;

UZO1.Edit2.Text:=IntToStr (n);

UZO1.Edit3.Text:=IntToStr (k);

UZO1.Edit4.Text:=IntToStr (cm);

UZO1.Edit1.Text:=gKodStr;

UZO1.Edit7.Text:= Duzo1.gKodSt;

UZO1.ShowModal;

if Cancel=true then Cancel:=false else

begin {установка номера кодека}

if UZO1.RadioButton1.Checked=true then Codec_Num:=0;

if UZO1.RadioButton2.Checked=true then Codec_Num:=1;

if UZO1.RadioButton3.Checked=true then Codec_Num:=2;

if UZO1.RadioButton4.Checked=true then Codec_Num:=3;

if UZO1.RadioButton5.Checked=true then Codec_Num:=4;

if UZO1.RadioButton6.Checked=true then Codec_Num:=5;

if UZO1.RadioButton7.Checked=true then Codec_Num:=6;

if UZO1.RadioButton8.Checked=true then Codec_Num:=7;

if UZO1.RadioButton9.Checked=true then Codec_Num:=8;

if UZO1.RadioButton10.Checked=true then Codec_Num:=9;

if UZO1.RadioButton11.Checked=true then Codec_Num:=10;

if UZO1.RadioButton12.Checked=true then Codec_Num:=12;

if UZO1.RadioButton13.Checked=true then Codec_Num:=13;

if UZO1.RadioButton14.Checked=true then Codec_Num:=14;

if UZO1.RadioButton15.Checked=true then Codec_Num:=15;

if UZO1.RadioButton16.Checked=true then Codec_Num:=16;

if UZO1.RadioButton17.Checked=true then Codec_Num:=17;

if UZO1.RadioButton18.Checked=true then Codec_Num:=18;

if UZO1.RadioButton19.Checked=true then Codec_Num:=19;

gKodStr:=UZO1.Edit1.Text;

n:=StrToInt (UZO1.Edit2.Text);

k:=StrToInt (UZO1.Edit3.Text);

Cm:=StrToInt (UZO1.Edit4.Text);

end;

end;

if (DUZO1.Codec_Num<>13) and (DUZO1.Codec_Num<>17) and

(DUZO1.Codec_Num<>18) and (DUZO1.Codec_Num<>19)

then DC_Menu.ReadPolynom;

end;

end;

procedure TDC_Menu.BitBtn7MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn7.Font.Color:=clBlue;

end;

procedure TDC_Menu.BitBtn8Click(Sender: TObject);{ Стат 2 }

var count_Bar,count_dec:integer;

c,i,j,q:longint;

begin

if DC_Menu.Cursor=crHelp

then Application.HelpCommand(HELP_CONTEXT,11)

else

begin

Stat2.Color:=Item_Color;

Stat2.Edit1.Text:=IntToStr (Dstat.col_blok);

Stat2.ShowModal;

if Cancel=true then Cancel:=false else

begin

with Dstat do with Duzo1 do with Dprm do

begin

col_blok:=StrToInt (Stat2.Edit1.Text);

if (n>0) and (col_blok>0) then

begin

Count.Show;

DC_Menu.Cursor:=crHourGlass;

InitStat(n,k,n0,k0,Lprm,codec_num);

RandPosl;

count_Bar:=0;

count_dec:=trunc((col_blok div Lprm)/100);

if count_dec=0 then count_dec:=1;

for i:=1 to col_blok div Lprm do

begin

if i mod count_dec=0 then

begin

count_Bar:=count_Bar+1;

Count.ProgressBar1.Position:=count_Bar;

end;

if i mod 10=0 then

begin

Count.Edit1.Text:=IntToStr(i*Lprm);

Count.Repaint;

end;

for c:=1 to Lprm do

begin

Signal1(k,c);

case codec_num of {Установка кодера}

0,2,3,4,5: CyclCoder;

1,6: SvertCoder;

7,12,15,16: SverCoder;

8,9,10: K_vtrby;

13,17,18,19:BpCoder;

14:CyCoder;

end;

for j:=1 to n do

inf_prm[j+n*(c-1)]:=inf_kod[j];

for j:=1 to k do

inf_Sprm[j+k*(c-1)]:=inf_S[j];

end;

for j:=1 to n*Lprm do b[j]:=inf_prm[PsP[j-1]+1];

case model of {Установка модели канала}

1:Canal(n*Lprm,UZOon);

2:Can0(n*Lprm,i)

end;

if Dstat.col_blok=0 then exit;

for j:=1 to n*Lprm do inf_prm[PsP[j-1]+1]:=b[j] xor inf_err[j];

for c:=1 to Lprm do

begin

q:=c+(i-1)*Lprm;

for j:=1 to n do

begin

inf_dek[j]:=inf_prm[j+n*(c-1)];

inf_err[j]:=inf_err[j+n*(c-1)];

end;

for j:=1 to k do

case codec_num of {Установка задержки сравнения}

0,2,3,4,5,13,14,17,18,19: inf_in[j]:=inf_Sprm[j+k*(c-1)];

1,6,7,8,9,10,12,15,16: if c=1 then

inf_in[j]:=inf_Spred[j]

else

inf_in[j]:=inf_Sprm[j+k*(c-2)];

end;

GetStat(UZOoff,n,q,(Dstat.col_blok div Lprm)*Lprm);

case codec_num of {Установка декодера}

0:CyclDecoder(q);

1:SvertDecoder;

2:Kasami;

3:Meggit;

4:mPorog;

5:SEMTRI;

6:DecLabel;

7,12,15,16:SverDecoder;

8,9,10:D_vtrby(q);

13:BpDecoder;

14:CyDecoder;

17,18,19:ChDecoder;

end;

GetStat(UZOon,k,q,(Dstat.col_blok div Lprm)*Lprm);

end;

end;

if codec_num<>0 then Pob:=1-rk2[0];

DC_Menu.Cursor:=crDefault;

Count.Close;

for i:=n-1 downto 0 do

if (rk1[i]<>0) or (rk2[i]<>0) then begin jj:=i; break; end;

if i>0 then

begin

Results.StringGrid1.Cells [1,0]:=

' До декодирования n= '+IntToStr(n);

Results.StringGrid1.Cells [2,0]:=

' После декодирования k= '+IntToStr(k);

Results.StringGrid1.RowCount:=jj+2;

for i:=0 to jj do

begin

Results.StringGrid1.Cells[0,i+1]:=' '+IntToStr(i);

str (rk1[i]:12:10,s);

Results.StringGrid1.Cells[1,i+1]:=' '+s;

str (rk2[i]:12:10,s);

Results.StringGrid1.Cells[2,i+1]:=' '+s;

end;

Results.Label4.Caption:=' '+IntToStr (Dstat.col_blok);

str (Pob:9:7,s); Results.Label3.Caption:=' '+s;

str (Cs:9:7,s); Results.Label10.Caption:=' '+s;

str (PE1:12:10,s); str (D1:12:10,s1);

Results.Label7.Caption:=' '+concat(s,' +- ',s1);

str (PE2:12:10,s); str (D2:12:10,s1);

Results.Label8.Caption:=' '+concat(s,' +- ',s1);

Results.ShowModal;

end;

end;

end;

end;

end;

end;

procedure TDC_Menu.BitBtn8MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn8.Font.Color:=clBlue;

end;

procedure TDC_Menu.BitBtn5MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

BitBtn5.Font.Color:=clBlue;

end;

procedure TDC_Menu.BitBtn2Exit(Sender: TObject);

begin

BitBtn2.Font.Color:=clWindowText;

end;

procedure TDC_Menu.BitBtn3Exit(Sender: TObject);

begin

BitBtn3.Font.Color:=clWindowText;

end;

procedure TDC_Menu.BitBtn4Exit(Sender: TObject);

begin

BitBtn4.Font.Color:=clWindowText;

end;

procedure TDC_Menu.BitBtn5Exit(Sender: TObject);

begin

BitBtn5.Font.Color:=clWindowText;

end;

procedure TDC_Menu.BitBtn6Exit(Sender: TObject);

begin

BitBtn6.Font.Color:=clWindowText;

end;

procedure TDC_Menu.BitBtn7Exit(Sender: TObject);

begin BitBtn7.Font.Color:=clWindowText;end;

procedure TDC_Menu.BitBtn8Exit(Sender: TObject);

begin BitBtn8.Font.Color:=clWindowText;end;

procedure TDC_Menu.BitBtn2Enter(Sender: TObject);

begin BitBtn2.Font.Color:=clBlue;end;

procedure TDC_Menu.BitBtn3Enter(Sender: TObject);

begin BitBtn3.Font.Color:=clBlue;end;

procedure TDC_Menu.BitBtn4Enter(Sender: TObject);

begin BitBtn4.Font.Color:=clBlue;end;

procedure TDC_Menu.BitBtn5Enter(Sender: TObject);

begin BitBtn5.Fon.Color:=clBlue;end;

procedure TDC_Menu.BitBtn6Enter(Sender: TObject);

begin BitBtn6.Font.Color:=clBlue;end;

procedure TDC_Menu.BitBtn7Enter(Sender: TObject);

begin BitBtn7.Font.Color:=clBlue;end;

procedure TDC_Menu.BitBtn8Enter(Sender: TObject);

begin BitBtn8.Font.Color:=clBlue;end;

procedure TDC_Menu.BitBtn1Enter(Sender: TObject);

begin BitBtn1.Font.Color:=clBlue;end;

procedure TDC_Menu.BitBtn1Exit(Sender: TObject);

begin BitBtn1.Font.Color:=clWindowText;end;

procedure TDC_Menu.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin BitBtn1.Font.Color:=clBlue;end;

procedure TDC_Menu.FormClick(Sender: TObject);

begin

if DC_Menu.Cursor=crHelp

then if model=2 then Application.HelpCommand(HELP_CONTEXT,15)

else Application.HelpCommand(HELP_CONTEXT,2);

end;

procedure TDC_Menu.FormClose(Sender: TObject; var Action: TCloseAction);

begin

if ARM.MDIChildCount=1 then

begin

ARM.SpeedButton1.Enabled:=False;

ARM.SpeedButton2.Enabled:=False;

ARM.SpeedButton3.Enabled:=False;

ARM.SpeedButton4.Enabled:=False;

ARM.Open1.Enabled:=False;

ARM.Save1.Enabled:=False;

ARM.Print1.Enabled:=False;

ARM.Color1.Enabled:=False;

end;

Action:=caFree;

end;

procedure TDC_Menu.BitBtn9Click(Sender: TObject);

begin

if DC_Menu.Cursor=crHelp

then Application.HelpCommand(HELP_CONTEXT,17)

else

begin

N_Canal2.Color:=Item_Color;

with Dncan do

begin

str(Hp:6:3,s); N_Canal2.Edit1.Text:=s;

str(Hc:6:4,s); N_Canal2.Edit3.Text:=s;

str(m,s); N_Canal2.Edit2.Text:=s;

str(Q:6:4,s); N_Canal2.Edit4.Text:=s;

case trunc (md*10) of

5 :N_Canal2.RadioGroup1.ItemIndex:=0;

10:N_Canal2.RadioGroup1.ItemIndex:=1;

20:N_Canal2.RadioGroup1.ItemIndex:=2;

end;

N_Canal2.RadioGroup2.ItemIndex:=1-dm;

N_Canal2.showModal;

if Cancel=true then Cancel:=false else

begin

DoRefl:=0;

val(N_Canal2.Edit1.Text,Hp,code);

val(N_Canal2.Edit2.Text,m,code);

val(N_Canal2.Edit3.Text,Hc,code);

val(N_Canal2.Edit4.Text,Q,code);

case N_Canal2.RadioGroup1.ItemIndex of

0:md:=0.5;

1:md:=1;

2:md:=2;

end;

dm:=1-N_Canal2.RadioGroup2.ItemIndex;

end;

end;

end;

end;

procedure TDC_Menu.BitBtn10Click(Sender: TObject);

begin

if DC_Menu.Cursor=crHelp

then Application.HelpCommand(HELP_CONTEXT,16)

else

begin

if DoRefl=0 then Dcan;

if Ddcan.Pcp<>0 then

begin

DoRefl:=1;

RU_Form.Color:=Item_Color;

RU_Form.RadioGroup1.ItemIndex:=DRust.Rule;

str(Ddcan.Pcp:10:8,s); RU_Form.Edit1.Text:=s;

RU_Form.ShowModal;

end;

if Cancel=true then Cancel:=false

else DRust.Rule:=RU_Form.RadioGroup1.ItemIndex;

BitBtn5.Enabled:=True;

end;

end;

{ Конец программы «unit Model_DC »}

end.

3.4 Листинг модуля кодека кодов БЧХ

unit Codec_BM; {Программа кодека двоичных кодов БЧХ с декодером по алгоритму Берликемпа-Месси во временном пространстве}

{$F+,O+}

interface

uses vartype;

var aa,a: array[0..255] of byte;

i,j,nk,jj,m:integer;

procedure Cycoder;

procedure Cydecoder;

implementation

{n= : длина кодового слова}

{ m=: расширение двоичного поля}

{sum_pro=: число ненулевых элементов произв. многочлена}

{sum_p=: число ненулевых элементов примитивного многочлена}

{gkod[i]: степени производящего многочлена}

{pkod[i]: степени примитивного многочлена}

function Pole(i,j:byte):byte; {умножение по mod n}

var p:integer;

begin

if (i=0) or (j=0) then Pole:=0 else begin

P:= (aa[i]+aa[j]) mod nk;

P:=a[p];

Pole:=p;end;

end;

function Sum(i,j:byte):byte; {сложение по mod n}

var z,s:integer;

x:array[0..10] of byte;

begin

for z:=0 to m-1 do

if odd(i shr z)=odd(j shr z) then x[z]:=0 else x[z]:=1;

s:=0;z:=1; {преобразование в десятичное число}

for i:=0 to m-1 do begin

s:= s+z*x[i];

z:=2*z; end;

sum:=s;

end;

procedure Npole;

var kod: array[0..255] of byte;

j,i,jj:integer;

begin

{вычисление элементов поля q^m:

a[0] .. a[n] -- значения элементов поля:a^0,a^1 .. a^n;

aa[1] ..aa[n] -- степени элементов: 0,1,2 и т.д.

Например, элементы поля GF(16):

a[i]:=(1,2,4,8,3,6,12,11,5,10,7,14,15,13,9,1);

aa[i]:=(0,1,4,2,8,5,10,3,14,9,7,6,13,11,12); }

With Duzo1 do

begin {определение примитивного многочлена}

for i:=1 to 5 do pkod[i]:=0;

if num[0]<3 then begin pkod[2]:=2;pkod[3]:=3;sum_p:=3 end

else if num[0]<7 then begin pkod[2]:=3;pkod[3]:=4;sum_p:=3 end

else if num[0]<13 then begin pkod[2]:=3;pkod[3]:=5;sum_p:=3 end

else if num[0]<25 then begin pkod[2]:=5;pkod[3]:=6;sum_p:=3 end

else if num[0]<43 then begin pkod[2]:=4;pkod[3]:=7;sum_p:=3 end

else if num[0]<77 then begin pkod[2]:=4;pkod[3]:=5;

pkod[4]:=6;pkod[5]:=8;sum_p:=5 end;

end;

m:=pkod[sum_p]; {расширение кода}

j:=1;{вычисление номинальной длины слова при укорочении кода}

for i:=0 to m-1 do j:=2*j;

nk:=j-1;

jj:=0;

repeat

jj:=jj+1;

for i:=1 to nk do kod[i]:=0;

kod[jj]:=1;

FOR i:=1 TO nk-m DO {деление на примитивный многочлен}

IF kod[i]=1 THEN

FOR j:=1 TO sum_p DO

kod[i+pkod[j]]:= 1-kod[i+pkod[j]];

a[nk-jj]:=0;

j:=1; {преобразование в десятичное число}

for i:=0 to m-1 do begin

a[nk-jj]:= a[nk-jj]+j*kod[nk-i];

j:=2*j; end;

until jj=nk-m;

for jj:=nk-m+1 to nk do

begin j:=1;{оставшиеся (nk-m) элементов}

for i:=1 to nk-jj do j:=2*j;

a[nk-jj]:=j;

end;

a[nk]:=1;

for jj:=0 to nk do begin j:=a[jj]; aa[j]:=jj; end; {степени элементов}

end;

procedure Cycoder; {кодер }

var i,j:integer;

begin with Duzo1 do

begin {ввод сигнала }

for i:=1 to k do inf_kod[i]:=inf_S[i];

for i:=k+1 to n do inf_kod[i]:=0;

for i:=1 to k do

if inf_kod[i]=1 then {деление на производящий мн-лен}

for j:=1 to sum_pro do begin

inf_kod[i+gkod[j-1]]:= 1-inf_kod[i+gkod[j-1]];

end;

for i:=1 to k do inf_kod[i]:=inf_S[i];

end;

end;{конец кодера}

procedure Cydecoder; {декодер }

var V,T,B,C: array[0..255] of byte;

r,dr,L,i:integer;

begin with Duzo1 do

begin

if Pro<>1e10 then begin Pro:=1e10;Npole; end;

if nk-n>0 then {укорочение кода,ввод данных }

for i:=0 to nk-n-1 do C[i]:=0;

for i:=nk-n to nk-1 do C[i]:=inf_dek[i+1-(nk-n)];

for i:=0 to nk-1 do begin V[i]:=1;B[i]:=1;end;

r:=0;L:=0;

repeat {декодирование}

r:=r+1;

dr:=0; {вычисление ошибки воспроизведения компоненты синдрома}

if odd(r) then

for i:=0 to nk-1 do

dr:=sum(dr,Pole(a[(i*r) mod nk],Pole(V[i],C[i])));

if dr=0 then {многочлен связей не изменять }

for i:=0 to nk-1 do B[i]:=Pole(a[nk-i],B[i])

else {вычислить новый многочлен связей}

begin

for i:=0 to nk-1 do

T[i]:= Sum(pole(dr,Pole(a[nk-i],B[i])),V[i]);

if 2*L<=r-1 then { увеличить длину регистра L}

begin L:=r-L;

for i:=0 to nk-1 do begin

B[i]:=pole(a[nk-aa[dr]],V[i]);

V[i]:=T[i]; end;

end

else {длину регистра V[i] оставить прежней}

for i:=0 to nk-1 do begin

V[i]:=T[i];

B[i]:=Pole(a[nk-i],B[i]);

end;

end;

until r>=2*Cm;

{исправление ошибок}

for i:=nk-n to k-1+(nk-n) do

if v[i]=0 then inf_out[i+1-(nk-n)]:=1- inf_dek[i+1-(nk-n)]

else inf_out[i+1-(nk-n)]:= inf_dek[i+1-(nk-n)];

end;

end;{конец декодера }

{Конец программы «unit Codec_BM»}

end.

3.5 Листинг модуля переменных и констант

unit VarType; {Модуль переменных и констант}

interface

const UZOon=True;UZOoff=False;

type

mass=array [0..7] of byte;

rec1=record p1sign:double;

end;

rec2=record md,Q,Hp,Hc,H1,H2:double; m,dm:integer;

end;

rec3=record p0,p1,p2,e0,e1,e2,p00,p01,p10,p11,

p12,p21,p22,Pcp,Ck:double;

end;

rec4=record pp,pi,e4,p4,p5,b1,b2,tm:double;

end;

rec5=record n,n0,k0:integer; col_blok:longint;

end;

rec6=record gkodStr:string; gKodSt:string[30]; codec_num:word;

n,k,n0,k0,sum_pro,cm:integer; num: mass;

end;

rec6_1=record gkodCh:array [0..200] of char;

gKodSt:string[30];

codec_num:word;

n,k,n0,k0,sum_pro,cm:integer;

num:mass;

end;

rec7=record Aprm,Cprm,Lprm:integer;

end;

rec8=record Rule:word;

end;

rec9=record{Для файла исходных данных}

Signal:rec1;

Ncan:rec2;

Dcan:rec3;

Brk:rec4;

Uzo:rec6_1;

Prm:rec7;

Rust:rec8;

Qualifier:double;

end;

rec10=record codec_num:word; d,k:integer;

end;

rec11=record Par1:integer;

end;

rec12=record dt,dn,dk: integer; poly:string[90];

end;

rec13=record dj,na:integer; poly:string[100];

end;

DataFile=rec9;

var

gkod: array [0..300] of Integer;

inf_in: array [0..2100] of Byte;

inf_Sprm: array [0..4000] of Byte;

inf_Spred: array [0..2100] of Byte;

inf_S: array [0..2100] of Byte;

inf_kod: array [0..5000] of Byte;

inf_dek: array [0..2100] of Byte;

inf_out: array [0..2100] of Byte;

inf_err,b: array [0..5000] of Byte;

inf_prm: array [0..5000] of Byte;

pro_kod: array [0..2100] of Byte;

ip,pr,sindr: array [0..2100] of Byte;

mm: array [0..10000] of Byte;

rk1: array [0..2100] of double;

rk2: array [0..2100] of double;

PsP: array [0..5000] of Integer;

pkod: array [1..10] of Byte;

Pob,Cs,Ck,Proo,Pro,StrtKackad:double;

PE1,PE2,pe, D1,D2,d:double;

DSignal:rec1;

Dncan:rec2;

Ddcan:rec3;

Dbrk:rec4;

Dstat:rec5;

Duzo1:rec6;

Dprm:rec7;

DRust:rec8;

Par:rec11;

cycle:array[1..87] of rec12;

svert:array[1..170] of rec13;

model,DoRefl,sum_p,n0_sv:byte;

rk_count,rk1_count,rk2_count,blok_sv:integer;

gk1,gk2,gk3,gk4,gk5,gk6,gk7:string;

implementation

var i:integer;

begin {Значения переменных по умолчанию, таблицы кодов БЧХ и

свёрточных кодов}

for i:=0 to 300 do gkod[i]:=0;

with Dncan do

begin

Hp:=3; Hc:=0;Q:=0.01;m:=1;md:=0.5;H1:=Hp+Hc;H2:=0.2*H1;dm:=1;

end;

with Dbrk do

begin

pp:=0;e4:=1;p4:=0.7;p5:=0.3;b1:=5;b2:=0.2e+4;tm:=0.36e+3;

end;

with Dsignal do p1sign:=0.5;

with Dstat do

begin n:=36; n0:=2;k0:=1; col_blok:=1000

end;

with Dprm do

begin Aprm:=1;Cprm:=1;Lprm:=1

end;

with Duzo1 do

begin codec_num:=5; n:=7; k:=3;cm:=1

end;

with DUZO1 do gKodStr:='35';

DRust.Rule:=0;

DoRefl:=0;

{Таблицы Кодов БЧХ и свёрточных кодов}

cycle[1].dt:=1; cycle[1].dn:=7; cycle[1].dk:=4; cycle[1].poly:='13';

cycle[2].dt:=3; cycle[2].dn:=7; cycle[2].dk:=1; cycle[2].poly:='177';

cycle[3].dt:=1; cycle[3].dn:=15; cycle[3].dk:=11; cycle[3].poly:='23';

cycle[4].dt:=2; cycle[4].dn:=15; cycle[4].dk:=7; cycle[4].poly:='721';

cycle[5].dt:=3; cycle[5].dn:=15; cycle[5].dk:=5; cycle[5].poly:='2467';

cycle[6].dt:=7; cycle[6].dn:=15; cycle[6].dk:=1; cycle[6].poly:='77777';

cycle[7].dt:=1; cycle[7].dn:=31; cycle[7].dk:=26; cycle[7].poly:='45';

cycle[8].dt:=2; cycle[8].dn:=31; cycle[8].dk:=21; cycle[8].poly:='3551';

cycle[9].dt:=3; cycle[9].dn:=31; cycle[9].dk:=16; cycle[9].poly:='107657';

cycle[10].dt:=5; cycle[10].dn:=31; cycle[10].dk:=11; cycle[10].poly:='5423325';

cycle[11].dt:=7; cycle[11].dn:=31; cycle[11].dk:=6; cycle[11].poly:='313365047';

cycle[12].dt:=15;cycle[12].dn:=31;cycle[12].dk:=1; cycle[12].poly:='17777777777';

cycle[13].dt:=1; cycle[13].dn:=63; cycle[13].dk:=57; cycle[13].poly:='103';

cycle[14].dt:=2; cycle[14].dn:=63; cycle[14].dk:=51; cycle[14].poly:='12471';

cycle[15].dt:=3; cycle[15].dn:=63; cycle[15].dk:=45; cycle[15].poly:='1701317';

cycle[16].dt:=4; cycle[16].dn:=63; cycle[16].dk:=39; cycle[16].poly:='166623567';

cycle[17].dt:=5;cycle[17].dn:=63; cycle[17].dk:=36; cycle[17].poly:='1033500423';

cycle[18].dt:=6;cycle[18].dn:=63;cycle[18].dk:=30;cycle[18].poly:='157464165547';

cycle[19].dt:=7;cycle[19].dn:=63;cycle[19].dk:=24;cycle[19].poly:='17323260404441';

cycle[20].dt:=10;cycle[20].dn:=63;cycle[20].dk:=18;cycle[20].poly:='1363026512351725';

cycle[21].dt:=11;cycle[21].dn:=63;cycle[21].dk:=16;cycle[21].poly:='6331141367235453';

cycle[22].dt:=13;cycle[22].dn:=63;cycle[22].dk:=10;cycle[22].poly:='472622305527250155';

cycle[23].dt:=15;cycle[23].dn:=63;cycle[23].dk:=7;cycle[23].poly:='5231045543503271737';

cycle[24].dt:=31;cycle[24].dn:=63;cycle[24].dk:=1;cycle[24].poly:='777777777777777777777';

cycle[25].dt:=1; cycle[25].dn:=127; cycle[25].dk:=120; cycle[25].poly:='211';

cycle[26].dt:=2; cycle[26].dn:=127; cycle[26].dk:=113; cycle[26].poly:='41567';

cycle[27].dt:=3; cycle[27].dn:=127; cycle[27].dk:=106; cycle[27].poly:='11554743';

cycle[28].dt:=4;cycle[28].dn:=127;cycle[28].dk:=99; cycle[28].poly:='3447023271';

cycle[29].dt:=5;cycle[29].dn:=127;cycle[29].dk:=92;cycle[29].poly:='624730022327';

cycle[30].dt:=6;cycle[30].dn:=127;cycle[30].dk:=85;cycle[30].poly:='130704476322273';

cycle[31].dt:=7;cycle[31].dn:=127;cycle[31].dk:=78;cycle[31].poly:='26230002166130115';

cycle[32].dt:=9;cycle[32].dn:=127;cycle[32].dk:=71;cycle[32].poly:='6255010713253127753';

cycle[33].dt:=10;cycle[33].dn:=127;cycle[33].dk:=64;cycle[33].poly:='1206534025570773100045';

cycle[34].dt:=11;cycle[34].dn:=127;cycle[34].dk:=57;cycle[34].poly:='335265252505705053517721';

cycle[35].dt:=13;cycle[35].dn:=127;cycle[35].dk:=50;cycle[35].poly:='54446512523314012421501421';

cycle[36].dt:=14;cycle[36].dn:=127;cycle[36].dk:=43;cycle[36].poly:='17721772213651227521220574343';

cycle[37].dt:=15; cycle[37].dn:=127; cycle[37].dk:=36; cycle[37].poly:='3146074666522075044764574721735';

cycle[38].dt:=21; cycle[38].dn:=127; cycle[38].dk:=29; cycle[38].poly:='403114461367670603667530141176155';

cycle[39].dt:=23; cycle[39].dn:=127; cycle[39].dk:=22; cycle[39].poly:='12337607040472252243544562...


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.