unit pict9; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Math, Mask; type TfmExample = class(TForm) Panel1: TPanel; Panel2: TPanel; bbRun: TBitBtn; bbClose: TBitBtn; PaintBox1: TPaintBox; RGr1: TRadioGroup; Image1: TImage; Panel3: TPanel; MEdit1: TMaskEdit; RGr2: TRadioGroup; StText1: TStaticText; bbAnsw: TBitBtn; RB1: TRadioButton; RB2: TRadioButton; Bevel1: TBevel; ChBox1: TCheckBox; ChBox2: TCheckBox; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Memo1: TMemo; Bevel2: TBevel; procedure bbRunClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure Quests; procedure bbAnswClick(Sender: TObject); procedure ChBox1Click(Sender: TObject); procedure RGr1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var fmExample: TfmExample; e:extended; j1,no,item,num:integer; lin:boolean; quest:array[1..12] of string; answ:array[1..12] of tStrings; numer:array[1..12] of integer; retry:array[1..6] of integer; implementation {$R *.DFM} procedure TfmExample.bbRunClick(Sender: TObject); function f(t:extended):extended; var q,f1,sum,PI:extended; k,n,j:integer; a:array [1..8] of extended; check:boolean; text:string[8]; begin f1:=34368; PI:=ArcCos(-1); if RB2.Checked=false then j:=StrToInt(FloatToStrF((t-1/(2*f1))*f1,ffFixed,1,0)); if j>7 then j:=7; text:=MEdit1.Text; if RB1.Checked=false then for k:=1 to 8 do a[k]:=1 else for k:=1 to 8 do begin a[k]:=StrToFloat(text[k]); if a[k]>0 then a[k]:=1; end; case RGr1.ItemIndex of 0: begin if RB2.Checked=false then if t-j/f1<1/(2*f1) then Result:=e*a[j+1] else Result:=0 else begin f1:=2*f1; Result:=(e*e/f1)*sqr(sin(PI*t/f1))/sqr(PI*t/f1); end; end; 1: begin if RB2.Checked=false then begin check:=true; for k:=1 to 8 do begin if a[k]=1 then check:=not check; if (a[k]=1) and (check) then a[k]:=0 end; if t-j/f1<1/(2*f1) then Result:=e*a[j+1] else Result:=0; end else begin f1:=2*f1; Result:=(e*e/f1)*sqr(sin(PI*t/f1))/sqr(PI*t/f1); end; end; 2: begin if RB2.Checked=false then begin check:=false; for k:=1 to 8 do begin if a[k]=1 then check:=not check; if (a[k]=1) and (check) then a[k]:=0 end; if t-j/f1<1/(2*f1) then Result:=e*a[j+1] else Result:=0; end else begin f1:=f1*2; Result:=(e*e/f1)*sqr(sin(PI*t/f1))/sqr(PI*t/f1); end; end; 3: begin if RB2.Checked=false then begin check:=false; for k:=1 to 8 do begin if a[k]=1 then check:=not check; if (a[k]=1) and (check) then a[k]:=0 end; if t-j/f1<1/(2*f1) then Result:=-e*a[j+1] else Result:=0; end else begin f1:=2*f1; Result:=(e*e/f1)*sqr(sin(PI*t/f1))/sqr(PI*t/f1); end; end; 4: begin if ChBox1.Checked=false then begin if RB2.Checked=false then begin check:=true; for k:=1 to 8 do begin if a[k]=1 then check:=not check; if (a[k]=1) and (check) then a[k]:=-1 end; if t-j/f1<1/(2*f1) then Result:=e*a[j+1] else Result:=0; end else begin if t1/(2*f1)) then result:=result/(random(7)+2); if ChBox2.Checked=false then Result:=e*a[j+1]*sqrt(sqrt(abs(sin(15.1*PI*t/2.2e-4-PI/24)))) end else begin Result:=(e*random(1001)/5000)*sin(128*PI*t*random(1001)/2.2e-1); if ChBox2.Checked=false then Result:=0 end end; end; end; var fn,t:extended; i,xt,ft:integer; x1,x2,mx,mn,l,h:extended; sxt,sft:string; begin with Paintbox1, Canvas do begin e:=8e-1; x1:=0; if RB2.Checked=false then x2:=2.2e-4 else x2:=3*34368; Pen.Color:=clWhite; Pen.Width:=1; Brush.Color:=clWhite; Rectangle(0,0,640,240); Pen.Color:=clPurple; Pen.Width:=2; Brush.Color:=clWhite; FloodFill(1,1,clWhite,fsBorder); Font.Color:=clTeal; Font.Size:=12; Font.Name:='Times New Roman Cyr'; Font.Style:=[fsBold,fsItalic]; MoveTo(19,10); lineTo(24,5); lineTo(29,10); MoveTo(24,5); lineTo(24,220); if RB2.Checked=false then begin MoveTo(599,117); lineTo(614,120); lineTo(599,123); MoveTo(24,120); lineTo(614,120); TextOut(0,0,'U'); TextOut(605,123,'t'); end else begin MoveTo(599,217); lineTo(614,220); lineTo(599,223); MoveTo(24,220); lineTo(614,220); TextOut(30,0,'G(f)'); TextOut(600,180,'f'); end; Pen.Width:=1; Pen.Color:=clBlue; i:=0; t:=x1; while t<=x2+(x2-x1)/560 do begin t:=t+(x2-x1)/560; i:=i+1; fn:=f(t); if i=1 then begin mn:=fn; mx:=fn; end; if fn>mx then mx:=fn; if fnabs(mn) then h:=2*mx else h:=-2*mn; if h=0 then h:=2*e; if RB2.Checked=true then if (RGr1.ItemIndex=0) or (RGr1.ItemIndex>=4) then h:=h/2; t:=x1; xt:=0; ft:=0; while t<=x2+(x2-x1)/560 do begin t:=t+(x2-x1)/560; fn:=f(t); sxt:=FloatToStr(int(t*580/l)); sft:=FloatToStr(int(-fn*210/h)); if RB2.Checked=false then begin MoveTo(xt+24,ft+120); lineTo(StrToInt(sxt)+24,StrToInt(sft)+120); end else begin MoveTo(xt+24,ft+220); lineTo(StrToInt(sxt)+24,StrToInt(sft)+220); end; xt:=StrToInt(sxt); ft:=StrToInt(sft); end; end; end; procedure TfmExample.Quests; begin StText1.Hide; bbAnsw.Hide; RGr2.Hide; Memo1.Hide; label8.Hide; label9.Hide; label10.Hide; label11.Hide; label12.Hide; Bevel2.Hide; fmExample.Color:=clWhite; RB1.Show; RB2.Show; Bevel1.Show; MEdit1.Show; RGr1.Show; PaintBox1.Show; Panel2.Show; Panel3.Show; Image1.Show; image1.Canvas.Pen.Color:=clBlack; image1.Canvas.Brush.Color:=clRed; image1.Canvas.Ellipse(68,91,78,101); bbRun.Show; bbClose.Left:=392; end; procedure TfmExample.FormActivate(Sender: TObject); begin ShowMessage('Для начала вам придётся ответить на шесть вопросов'); RGr2.Show; bbAnsw.Show; fmExample.Image1.Picture.LoadFromFile('pict1.bmp'); for num:=1 to 12 do answ[num]:=TStringList.Create; quest[1]:='Как проявляются линейные искажения 1-го рода ?'; quest[2]:='Как проявляются линейные искажения 2-го рода ?'; quest[3]:='Линейные коды предназначены для'; quest[4]:='Энергетический спектр кода ЧПИ содержит'; quest[5]:='Межсимвольные искажения в линейном тракте ЦСП определяются'; quest[6]:='К снижению тактовой частоты линейного цифрового сигнала приводят'; quest[7]:='Какие из нижеперечисленных кодов позволяют просто выделить тактовую частоту?'; quest[8]:='Кодовым расстоянием между кодовыми комбинациями называется'; quest[9]:='Под диспаретентностью понимается'; quest[10]:='Под устойчивостью признака тактовой частоты понимается'; quest[11]:='Под избыточностью линейного кода понимается'; quest[12]:='Под коэффициентом изменения тактовой частоты понимается'; numer[1]:=5; numer[2]:=2; numer[3]:=5; numer[4]:=4; numer[5]:=4; numer[6]:=2; numer[7]:=5; numer[8]:=3; numer[9]:=1; numer[10]:=1; numer[11]:=3; numer[12]:=2; answ[1].Add('1:Увеличивается длительность импульса'); answ[1].Add('2:Возникает длительное последействие'); answ[1].Add('3:Уменьшается амплитуда импульса'); answ[1].Add('4:Происходит короткое замыкание'); answ[1].Add('5:Ответы 1 и 3'); answ[2]:=answ[1]; answ[3]:=TStringList.Create; answ[3].Add('1:повышения достоверности передачи линейного цифрового сигнала'); answ[3].Add('2:согласования энергетического спектра линейного цифрового сигнала c параметрами передачи линии связи; симметричного, коаксиального или волоконно-оптического кабеля'); answ[3].Add('3:повышения числа уровней кода'); answ[3].Add('4:снижения нелинейных искажений'); answ[3].Add('5:Ответы 1 и 4'); answ[4].Add('1:высокочастотные составляющие'); answ[4].Add('2:постоянную составляющую'); answ[4].Add('3:гармоники тактовой частоты исходной двоичной последовтельности'); answ[4].Add('4:полосу частот с максимумом энергии на полутактовой частоте'); answ[4].Add('5:Ответы 3 и 4'); answ[5].Add('1:ограничением полосы частот снизу'); answ[5].Add('2:ограничением полосы частот сверху'); answ[5].Add('3:нелинейностью амплитудной характеристики линейного усилителя в линейном регенераторе'); answ[5].Add('4:Ответы 1 и 2'); answ[5].Add('5:Ответы 1 и 3'); answ[6].Add('1:Блочные коды типа nBkB'); answ[6].Add('2:Блочные коды типа nBkM'); answ[6].Add('3:Линейные коды на основе биимпульсных сигналов'); answ[6].Add('4:Линейные коды, полученные на основе скремблирования исходной двоичной последовательности'); answ[6].Add('5:Ответы 2 и 4'); answ[7].Add('1:Код ЧПИ'); answ[7].Add('2:Парно-избирательный троичный код (ПИТ)'); answ[7].Add('3:Линейные коды, полученные на основе скремблирования исходной двоичной последовательности'); answ[7].Add('4:Блочные коды'); answ[7].Add('5:Ответы 2 и 3'); answ[8].Add('1:Превышение числа единиц над числом нулей'); answ[8].Add('2:Число уровней кода'); answ[8].Add('3:Число разрядов в которых кодовые комбинации отличаются друг от друга'); answ[8].Add('4:Отношение вида Kм=n/k, где n-число символов в исходной двоичной последовательности,а k-число символов в групповом линейном коде'); answ[8].Add('5:Минимальное расстояние между двумя разрешенными уровнями кода'); answ[9]:=answ[8]; answ[10].Add('1:Отношение вида Кт=Ртmax/Ртmin, где Ртmax и Ртmin - соответственно максимальная и минимальная вероятности появления "1" в двоичной последовательности'); answ[10].Add('2:Отношение вида Кт=n/k, где n-число символов в исходной двоичной последовательности,а k-число символов в групповом линейном коде'); answ[10].Add('3:Отношение вида Кт=((k/n)*logM-1)*100%, где logM - двоичный логарифм от кодового основания счисления для линейного кода'); answ[10].Add('4:Превышение числа единиц над числом нулей'); answ[10].Add('5:Ответы 3 и 4'); answ[11].Add('1:Отношение вида r=Ртmax/Ртmin, где Ртmax и Ртmin - соответственно максимальная и минимальная вероятности появления "1" в двоичной последовательности'); answ[11].Add('2:Отношение вида r=n/k, где n-число символов в исходной двоичной последовательности,а k-число символов в групповом линейном коде'); answ[11].Add('3:Отношение вида r=((k/n)*logM-1)*100%, где logM - двоичный логарифм от кодового основания счисления для линейного кода'); answ[11].Add('4:Превышение числа единиц над числом нулей'); answ[11].Add('5:Ответы 2 и 4'); answ[12].Add('1:Отношение вида Км=Ртmax/Ртmin, где Ртmax и Ртmin - соответственно максимальная и минимальная вероятности появления "1" в двоичной последовательности'); answ[12].Add('2:Отношение вида Км=n/k, где n-число символов в исходной двоичной последовательности,а k-число символов в групповом линейном коде'); answ[12].Add('3:Отношение вида Км=((k/n)*logM-1)*100%, где logM - двоичный логарифм от кодового основания счисления для линейного кода'); answ[12].Add('4:Превышение числа единиц над числом нулей'); answ[12].Add('5:Ответы 1 и 4'); randomize; num:=random(12)+1; j1:=0; no:=0; StText1.Caption:=quest[num]; label8.Caption:=answ[num].Strings[0]; label9.Caption:=answ[num].Strings[1]; label10.Caption:=answ[num].Strings[2]; label11.Caption:=answ[num].Strings[3]; label12.Caption:=answ[num].Strings[4]; end; procedure TfmExample.bbAnswClick(Sender: TObject); var i:integer; b:boolean; begin randomize; if RGr2.ItemIndex=numer[num]-1 then Memo1.Lines.Add('Вопрос'+IntToStr(j1+1)+':Точно!!!') else begin no:=no+1; Memo1.Lines.Add('Вопрос'+IntToStr(j1+1)+':Ошибка!!!') end; retry[j1+1]:=num; b:=false; while b=false do begin b:=true; num:=random(12)+1; for i:=1 to 6 do if retry[i]=num then b:=false; end; label8.Caption:=answ[num].Strings[0]; label9.Caption:=answ[num].Strings[1]; label10.Caption:=answ[num].Strings[2]; label11.Caption:=answ[num].Strings[3]; label12.Caption:=answ[num].Strings[4]; j1:=j1+1; if no>1then begin ShowMessage('У вас вторая ошибка. Пока!!!'); bbClose.Click; end; if j1=6 then if no=1 then ShowMessage('Вы правильно ответили на пять вопросов из шести, что позволяет вам приступить к работе.') else ShowMessage('Вы правильно ответили на все шесть вопросов. Теперь вы можете приступить к работе.'); if j1=6 then Quests; StText1.Caption:=quest[num]; end; procedure TfmExample.ChBox1Click(Sender: TObject); begin if lin=false then begin image1.Canvas.Pen.Color:=clBlack; image1.Canvas.Pen.Width:=1; image1.Canvas.MoveTo(488,130); image1.Canvas.LineTo(517,148); image1.Canvas.Pen.Color:=clWhite; image1.Canvas.Pen.Width:=2; image1.Canvas.MoveTo(484,133); image1.Canvas.LineTo(467,145); end else begin image1.Canvas.Pen.Color:=clWhite; image1.Canvas.Pen.Width:=2; image1.Canvas.MoveTo(492,133); image1.Canvas.LineTo(513,145); image1.Canvas.Pen.Color:=clBlack; image1.Canvas.Pen.Width:=1; image1.Canvas.MoveTo(488,130); image1.Canvas.LineTo(463,148); end; lin:=not lin; end; procedure TfmExample.RGr1Click(Sender: TObject); begin image1.Canvas.Pen.Color:=clBlack; image1.Canvas.Brush.Color:=clWhite; image1.Canvas.Pen.Width:=1; case item of 0: image1.Canvas.Ellipse(68,91,78,101); 1: image1.Canvas.Ellipse(276,80,286,90); 2: image1.Canvas.Ellipse(276,100,286,110); 3: begin image1.Canvas.Ellipse(370,100,380,110); image1.Canvas.MoveTo(375,98); image1.Canvas.LineTo(375,112); image1.Canvas.MoveTo(365,104); image1.Canvas.LineTo(375,104); end; 4: image1.Canvas.Ellipse(483,91,493,101); 5: image1.Canvas.Ellipse(604,91,614,101); end; image1.Canvas.Brush.Color:=clRed; case RGr1.ItemIndex of 0: image1.Canvas.Ellipse(68,91,78,101); 1: image1.Canvas.Ellipse(276,80,286,90); 2: image1.Canvas.Ellipse(276,100,286,110); 3: begin image1.Canvas.Ellipse(370,100,380,110); image1.Canvas.MoveTo(375,98); image1.Canvas.LineTo(375,112); image1.Canvas.MoveTo(365,104); image1.Canvas.LineTo(375,104); end; 4: image1.Canvas.Ellipse(483,91,493,101); 5: image1.Canvas.Ellipse(604,91,614,101); end; item:=RGr1.ItemIndex; end; end.