Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Кодовые комбінації з урахуванням циклічних кодов

РефератДопомога в написанніДізнатися вартістьмоєї роботи

У циклічних кодах кодові комбінації видаються як багаточленів, що дозволяє дозволяє звести дії над кодовими комбінаціями до дією над многочленами (використовуючи апарат полиномиальной алгебры). У разі виняткових ситуаций, когда інформаційне слово по будь-яким причин розкодувати не вдається, програма повторює запит на пересилку даних, як це робиться у реальних ситуаціях такого роду. Інформаційного… Читати ще >

Кодовые комбінації з урахуванням циклічних кодов (реферат, курсова, диплом, контрольна)

АННОТАЦИЯ.

Документ містить опис програми, будуючи кодові комбінації з урахуванням циклічних кодів. Програма кодує і деко-дирует інформаційні слова. Иммитируется робота джерела, переда-ющего інформаційне слово, кодувальника, що кодує дане слово, каналу зв’язку й декодировщика, обнаруживающего і исправляющего помилки у інформаційному полиноме. Програма працює за принципом приймач — джерело, так, як це реалізовано в пристроях, передавальних інформацію чи звичайних приводах для зовнішніх носіїв в PC.

1. Запровадження.

2. Постановка завдання.

3. Операції над циклічними кодами.

4. Принцип побудови циклічних кодів.

4.1. Одержання кодовою комбінації додаванням залишку R (x).

4.2. Одержання кодовою комбінації множенням на утворює.

поліном.

5. Розробка схеми алгоритму.

6. Розробка тексту программы.

7. Результати роботи програми.

Література.

Додаток № 1.

Додаток № 2.

§ 1 Введение.

Код, у якому кодова комбінація, отримана шляхом циклічного зсуву дозволеної кодовою комбінації є й дозволеної кодовою комбінацією називається циклічним (полиномиальным, кодом з циклічними надмірними проверками-ЦИП).

Зрушення здійснюється справа-наліво, у своїй крайній лівий символ переноситься кінець комбинации.

Циклічний код належить до лінійним, блоковим, коригувальним, рівномірним кодам.

У циклічних кодах кодові комбінації видаються як багаточленів, що дозволяє дозволяє звести дії над кодовими комбінаціями до дією над многочленами (використовуючи апарат полиномиальной алгебры).

Циклічні коди є різновидом систематичних кодов.

і тому мають усіма їх властивостями. Спочатку вони було створено спрощення схем кодування і декодування. Їх эффек;

тивность для виявлення і виправленні помилок забезпечила їм широеое застосування практично.

Циклічні коди використовують у ЕОМ при послідовної передачі даних .

(2 Постановка задачи.

Побудувати циклічний код передачі 31 розрядної кодовою комбінації з виправленням однократної помилки (n=31, s=1) двумя.

способами.

Показати процес виявлення й виправлення однократної помилки у переданої кодовою комбінації. Скласти програму, реалізуючу алгоритм кодування, декодування і виправлення помилки під час передачі даних із використанням циклічного коду.

(3 Операції над циклічними кодами.

1. Зрушення справа-наліво здійснюється шляхом множення полинома на x:

G (x)=x4+x2+1? 10 101;

G (x)?x=x5+x3+x? 101 010.

2. Операції складання і вирахування виконуються по модулю 2 .

Вони є эквивалентними і асоціативними :

G1(x)+G2(x)=>G3(x);

G1(x) -G2(x)=>G3(x);

G2(x)+G1(x)=>G3(x);

Пример:

G1(x)= x5 +x3+x;

G2(x)=x4 +x3 +1;

G3(x)=G1(x)? G2(x) = x5 +x4+x+1.

3. Операція розподілу є звичним розподілом багаточленів, лише замість вирахування використовується сложеное по модулю 2 :

G1(x)=x6+x4+x3 ;

G2(x)=x3+x2+1 .

x6+x4+x3 x3+x2+1.

? x6+x5+x3 x3 +x2.

x5 + x4.

? x5 + x4 +x2.

x2.

те в двоичном коде:

1 011 000 1101.

?1101 1100.

? 1101.

Усі операції легко реалізуються апаратно на регістрах зсуву з зворотними связям.

(4 Принцип побудови циклічних кодов.

Ідея побудови циклічних кодів виходить з використанні неприводимых багаточленів. Неприводимым називається много-член, который неспроможна бять подано у вигляді твори багаточленів нижчих ступенів, тобто. такий багаточлен ділитися лише на себе" чи на одиницю і ділитися жодній інший багаточлен. На такий багаточлен ділитися на всі сто двочлен xn+1.Неприводимые багаточлени теоретично циклічних кодів грають роль їхнім виокремленням полиномов.

Щоб осягнути принцип побудови циклічного кода, умножаем комбінацію простого k-значного коду Q (x) на одночлен xr, та був делина утворює поліном P (x), ступінь якого дорівнює r. Через війну множення Q (x) на xr ступінь кожного одночлена, входить у Q (x), повы-шается на r. При розподілі твори xrQ (x) на утворює поліном виходить приватне C (x) такої ж міри, як і Q (x).Результат можна в вид.

Q (x) xr R (x).

??? = C (x) + ???, (1).

P (x) P (x).

де R (x) — залишок від розподілу Q (x) xr на P (x).

Приватне C (x) має ті ж самі ступінь, як і кодова комбінація Q (x) простого коду, тому C (x) є кодовою комбінацією цього ж.

постого k-значного коду. Слід заметить, что ступінь залишку може бути більше ступеня утворить полинома, тобто. його найвища ступінь може дорівнювати (r-1). Отже, найбільше розрядів залишку R (x) вбирається у числа r.

Примножуючи обидві частини рівності (1) на P (x) і провівши деякі перестановки отримуємо :

F (x) = C (x) P (x) = Q (x) xr + R (x) (2).

Отже, кодова комбінація циклічного n-значного коду может.

бути отримана двома способами:

1) множення кодовою комбінації Q (x) простого коду на одночлен xr.

і додавання до цього твору залишку R (x), отриманого внаслідок розподілу твори Q (x) xr на утворюючий поліном P (x);

2) множення кодовою комбінації C (x) простого k-значного на утворює поліном P (x).

При побудові циклічних кодів першим способом расроложение інформаційних символів переважають у всіх комбінаціях суворо упорядковано ;

вони займають k старших розрядів комбінації, інші ж (n-k) разрядов.

відводяться під контрольные.

При другому способі освіти циклічних кодів информа;

ционные і контрольні символи в комбінаціях циклічного коду не від'єднані одне від друга, що перешкоджає процес декодирования.

(4.1 Одержання кодовою комбінації додаванням залишку R (x).

Побудувати циклічний код передачі 31 розрядної кодовою.

комбінації з виправленням однократної помилки (n=31, s=1).

Решение.

1. Визначимо число контрольних розрядів — m :

m = log2 (n+1) = log2 (31+1) = 5.

2. Визначимо кількість інформаційних розрядів k :

k = n-m = 26,.

тобто отримали (31, 26) — код .

3. Будуємо інформаційний полином, сответствующий інформаційному слову довжиною k-бит:

G (x)=101= x2 +1.

4. Осуществлям зрушення коду вліво на m=n-k=5 розрядів тобто поліном G (x) збільшується на xm :

xm G (x)= (x2+1) x5= x7+ x5 =10 100 000.

5. Вибирається утворює многочлен-P (x) за таблицею неприводимых багаточленів. Для виправлення одиночній помилки (d0=3) утворює поліном P (x) може бути ступеня m=n-k=5 і пишатися кількістю ненульових членів незгірш від мінімального кодового відстані d0 =3. Виходячи из.

цього образуюший поліном P (x) дорівнює :

P (x)= x5 + x4 +x3 +x 2 +1 = 111 101.

6. Визначимо залишок R (x) від розподілу G (x)?x m на утворюючий по;

лином P (x).

x7+ x5 x5 + x4 +x3 +x 2 +1 10 100 000 111 101.

x7 + x6 +x5 +x 4 +x2 x2 +x +1 111 101 111.

x6 + x4 +x2 101 010.

x6 + x5 +x4 +x 3 +x 111 101.

x5 + x3 +x2 +x 101 110.

x5 + x4 +x3 +x 2 +1 111 101.

x4 +x +1 10 011.

Залишок R (x)= x4+x+1 =10 011.

7. Будуємо рухаючись кодовий пролином F (x) :

F (x)=xm G (x)?R (x)= x7+ x5+ x4+x+1 =10 110 011.

8. нехай у прийнятому повідомленні відбулася помилка в тридцять першому разряде, при зтом прийняте кодове повідомлення має вигляд :

F?(x)=F (x)? E (x)= 1 000 000 000 000 000 019 884 624 838 656.

9. Розділимо багаточлен F1(x) соотвествующий отриманої кодовою ком-бинации на утворюючий поліном, у своїй вагу залишку (кількість одиниць на коді залишку) може бути менше, або дорівнює кількості помилок W? P.S.

1 000 000 000 000 000 019 884 624 838 656 111 101.

Порівнюємо вагу отриманого залишку w із кількістю исправляемых помилок.

w>s .

10. Виконуємо циклічний зрушення прийнятої кодовою комбінації на один.

розряд вліво і повторюємо п. 9 поки w? p.s.

a) 101 100 111 111 101.

1 ==> w=s .

Складаємо по модулю 2 останнє подільне з остатком:

? 1.

Здійснюємо зворотний зрушення на 1 розряд отриманої комбинации.

Відкинувши контрольні розряди, отримуємо передане информацинное слово.

§ 4.2 Побудова кодовою комбінації шляхом множення.

на утворює полином.

Побудувати циклічний код передачі 31 розрядної кодовою.

комбінації з виправленням однократної помилки (n=31, s=1) шляхом множення утворить багаточлена на багаточлен повного 31 разрядного кода.

Решение.

1. Будуємо інформаційний полином, сответствующий інформаційному слову довжиною k-бит:

G (x)=101= x2 +2.

2. Будуємо рухаючись кодовий полином.

3. Процес виправлення однократної помилки аналогічний описаного.

в § 4.1.

(5. Розробка схеми алгоритма.

Ciclic code.

немає.

так.

немає.

так.

Кінець.

(6. Розробка тексту программы.

Для уявлення інформаційного слова у пам’яті используется.

масив. До складу програми входить основна програму і два модуля,.

реалізують алгоритм кодування і декодування інформаційних слів і діалог із користувачем відповідно.

Program Cyclic_Code;

Uses.

Crt,_CC31,_Serv;

Var.

m, mm: Move_code;

p:Polinom;

r:Rest;

i, Mainflag, From, Error: integer;

Switch:byte;

Key:boolean;

begin.

Repeat.

Key:=true;

TextColor (11);

TextBackGround (7);

Clrscr;

SetWindow (24,10,45,14,2, «Головне меню »);

Switch:=GetMainMenuChoice;

case Switch of.

1:begin.

About;

Readln;

Key:=False;

end;

2: begin.

TextColor (0);

ClrScr;

SetWindow (25,10,40,13,1, «Утворити »);

Switch:=GetSubMenuChoice;

case Switch of.

1:begin.

TextBackGround (0);

TextColor (15);

ClrScr;

SetWindow (1,1,79,24,2, «Демонстрація »);

TextColor (14);

GotoXY (2,2);

Init (m, p, r, MainFlag);

Write (‘Информационный поліном ");

TextColor (2);

for i:=n downto 0 do.

begin.

if (i.

Write (m[i]);

end;

TextColor (14);

GotoXY (2,3);

Write («Утворюючий поліном »);

TextColor (13);

for i:=n1 downto 0 do.

Write (p[i]);

TextColor (14);

GotoXY (2,4);

Write («Складання по модулю 2 (F (x)+P (x)): »);

FxPx (m);

TextColor (9);

for i:=n downto 0 do.

begin.

if (i.

Write (m[i]);

end;

TextColor (14);

GotoXY (2,5);

Write («Залишок: »);

Divizion (m, r, p, Mainflag);

TextColor (11);

for i:=n1 downto Mainflag do.

Write (r[i]);

GotoXY (2,6);

TextColor (14);

Write («Рухаючись поліном: »);

BildMoveCode (m, r, Mainflag);

TextColor (9);

for i:=n downto 0 do.

begin.

if (i.

Write (m[i]);

end;

GotoXY (2,7);

TextColor (14);

Write («Відбулася помилка… »);

MakeError (m, Error);

TextColor (9);

for i:=n downto 0 do.

begin.

if (i=Error)then.

TextColor (12).

else.

TextColor (9);

write (m[i]);

end;

GotoXY (2,8);

TextColor (14);

Write («Помилка виправлено! »);

TextColor (9);

Correction (m, p, r);

for i:=n downto 0 do.

begin.

if (i=Error)then.

TextColor (10).

else.

TextColor (9);

write (m[i]);

end;

TextColor (14);

GotoXY (2,9);

Write («Вихідний поліном: »);

Decoder (m);

TextColor (2);

for i:=n downto 0 do.

begin.

if (i.

Write (m[i]);

end;

Key:=false;

end;

2:begin.

TextBackGround (0);

TextColor (15);

ClrScr;

SetWindow (1,1,79,24,2, «Демонстрація »);

TextColor (14);

GotoXY (2,2);

Init (m, p, r, MainFlag);

Write («Інформаційний поліном: »);

TextColor (2);

for i:=n downto 0 do.

begin.

if (i.

Write (m[i]);

end;

TextColor (14);

GotoXY (2,3);

Write («Утворюючий поліном: »);

TextColor (13);

for i:=n1 downto 0 do.

Write (p[i]);

TextColor (14);

GotoXY (2,4);

Write («Результат множення: »);

BildMoveCodeMultiplication (m);

TextColor (9);

for i:=n downto 0 do.

Write (m[i]);

GotoXY (2,5);

TextColor (14);

Write («Відбулася помилка … »);

MakeError (m, Error);

TextColor (9);

for i:=n downto 0 do.

begin.

if (i=Error)then.

TextColor (12).

else.

TextColor (9);

write (m[i]);

end;

GotoXY (2,6);

TextColor (14);

Write («Помилка виправлено ! »);

TextColor (9);

Correction (m, p, r);

for i:=n downto 0 do.

begin.

if (i=Error)then.

TextColor (10).

else.

TextColor (9);

write (m[i]);

end;

Key:=false;

end;

end;

TextColor (14);

GotoXY (2,22);

Write («Натиснімо будь-яку клавішу… »);

Readln;

end;

3:begin.

ClrScr;

GotoXY (1,24);

TextColor (14);

Writeln («Робота програми завершено … »);

Readln;

TextBackGround (0);

TextColor (15);

ClrScr;

Key:=true;

end;

end;

Until Key;

end.

(7 .Результати роботи программы.

Результат роботи програми при освіті коду додаванням залишку.

Демонстрация.

Інформаційний поліном: 11 010 111 110 011 111 098 810 368.

Утворюючий поліном: 111 101.

Cложениe по модулю 2 (F (x)+P (x)): 1 101 011 111 001 111 073 047 397 269 504.

Залишок: 10 101.

Рухаючись поліном: 1 101 011 111 001 111 073 047 397 269 504.

Відбулася помилка… 1 101 011 111 001 109 947 147 490 426 880.

Помилка виправлено! 1 101 011 111 001 111 073 047 397 269 504.

Вихідний поліном: 11 010 111 110 011 111 098 810 368.

Натиснімо будь-яку клавішу…

Результат роботи за освіті коду умножением.

Демонстрация.

Інформаційний поліном: 1 010 110 000 011 111 076 724 736.

Утворює поліном: 111 101.

Результат множення: 110 000 011 111 009 999 431 906 885 632.

Відбулася помилка… 110 000 011 111 009 999 431 906 885 632.

Помилка виправлено! 110 000 011 111 009 999 431 906 885 632.

Натиснімо будь-яку клавишу…

Выводы:

Ця програма кодує повідомлення використовуючи циклічний код.

У цьому вона иммитирует роботу каналу передачі информации.

У разі виняткових ситуаций, когда інформаційне слово по будь-яким причин розкодувати не вдається, програма повторює запит на пересилку даних, як це робиться у реальних ситуаціях такого роду.

Крім цього, програма випадково, «під час проходження.

інформаційного слова через канал «допускає у слові однократную ошбку, потім виправляє її, декодує інформаційне словом, і передає результат користувачеві.

1. «Кодування інформації (двоичные коды)».Березюк Н. Т.,.

Андрущенко О.Г., Мощицкий С. С. та інших. Харьков, издательское объеди;

нение «Вища школа», 1978. 252 с.

2. «Програмування серед Turbo Pascal ». Марченко А.І., Марченко.

Л.А. Москва,"Бином Универсал".Киев,"Юниор", 1997.495 з.

Додаток № 1.

Процедури і функції модуля _сс31.

Unit _CC31;

Interface.

Uses.

Crt;

Const.

n=30; { Информация+код }.

n1=5; { Розмір контрольних розрядів }.

Type.

Move_code=array[0.n] of byte; { Рухаючись поліном F (x) }.

Rest=array[0.n1] of byte; { Залишок }.

Polinom=array[0.n1] of byte; { Утворюючий поліном P (x) }.

Procedure Init (var m1: Move_code;var p1: Polinom;

var r1: Rest;var flag: integer);

Procedure FxPx (var m6: Move_Code);

Procedure Divizion (var m2: Move_code;var r2: Rest;

p2:Polinom;var flag: integer);

Procedure BildMoveCode (var m3: Move_code;r3:Rest;var flag: integer);

Procedure Decoder (var m6: Move_Code);

Procedure MakeError (var m4: Move_code;var err: integer);

Procedure BildMoveCodeMultiplication (var m7: Move_Code);

Procedure Correction (var m5: Move_code;p5:Polinom;var r5: Rest);

Implementation.

Procedure Init;

var.

i:integer;

begin.

p1[5]: =1;

p1[4]: =1;

p1[3]: =1;

p1[2]: =1;

p1[1]: =0;

p1[0]: =1;

flag:=0;

for i:=n1 downto 0 do.

r1[i]: =0;

Randomize;

for i:=n-n1 downto 0 do.

m1[i]: =random (2);

end;

Procedure FxPx (var m6: Move_Code);

var.

i:integer;

k:byte;

begin.

k:=5;

while (k>0) do.

begin.

for i:=n downto 1 do.

m6[i]: =m6[i-1];

dec (k);

end;

for i:=n1−1 downto 0 do.

m6[i]: =0;

end;

Procedure Divizion (var m2: Move_code;var r2: Rest;

p2:Polinom;var flag: integer);

label.

RETURN;

var.

i, j, i1,kol, Countzero: integer;

begin.

j:=n;

RETURN:while ((j>=0)and (m2[j]=0))do dec (j);

if (j>n1).

then begin.

for i:=n1 downto 0 do.

begin.

r2[i]: =m2[j];

dec (j);

end;

while (j>=0)do.

begin.

for i:=n1 downto 0 do.

r2[i]: =r2[i] xor p2[i];

i1:=n1;

while ((i1>=0)and (r2[i1]=0))do dec (i1);

if (i1=-1)then goto RETURN;

Kol:=n1-i1;

while (Kol>0)do.

begin.

for i:=n1 downto 1 do.

r2[i]: =r2[i-1];

dec (Kol);

end;

Kol:=n1-i1;

while ((Kol>0)and (j>=0))do.

begin.

r2[Kol-1]: =m2[j];

dec (Kol);

dec (j);

end;

if ((j=-1)and (Kol=0)).

then begin.

for i:=n1 downto 0 do.

r2[i]: =r2[i] xor p2[i];

end.

else flag:=Kol;

end;

end.

else if (n1=j).

then begin.

for i:=n1 downto 0 do.

begin.

r2[i]: =m2[j];

dec (j);

end;

for i:=n1 downto 0 do.

r2[i]: =r2[i] xor p2[i].

end.

else if (j.

then begin.

for i:=j downto 0 do.

r2[i]: =m2[i].

end;

end;

Procedure BildMoveCode (var m3: Move_code;r3:Rest;var flag: integer);

var.

i, k: integer;

begin.

if (flag>0)then.

begin.

k:=n1-flag;

for i:=n1 downto flag do.

begin.

m3[k]: =r3[i];

dec (k);

end;

end.

else begin.

for i:=n1−1 downto 0 do.

m3[i]: =r3[i];

end;

end;

Procedure MakeError (var m4: Move_code;var err: integer);

begin.

Randomize;

err:=Random (n);

m4[err]: =m4[err] xor 1;

end;

Procedure Decoder (var m6: Move_Code);

var.

i:integer;

k:byte;

begin.

k:=5;

while (k>0) do.

begin.

for i:=0 to n-1 do.

m6[i]: =m6[i+1];

dec (k);

end;

for i:=n downto n-n1+1 do.

m6[i]: =0;

end;

Procedure BildMoveCodeMultiplication (var m7: Move_Code);

var.

m1,m2,m3,m4,mm:Move_Code;

i, j: integer;

begin.

mm:=m7;

m1:=m7;

for j:=0 to 1 do.

begin.

for i:=n downto 1 do.

m1[i]: =m1[i-1];

m1[j]: =0;

end;

m2:=m7;

for j:=0 to 2 do.

begin.

for i:=n downto 1 do.

m2[i]: =m2[i-1];

m2[j]: =0;

end;

m3:=m7;

for j:=0 to 3 do.

begin.

for i:=n downto 1 do.

m3[i]: =m3[i-1];

m3[j]: =0;

end;

m4:=m7;

for j:=0 to 4 do.

begin.

for i:=n downto 1 do.

m4[i]: =m4[i-1];

m4[j]: =0;

end;

for i:=n downto 0 do.

m7[i]: =mm[i] xor m1[i]xor m2[i]xor m3[i] xor m4[i];

end;

Procedure Correction (var m5: Move_code;p5:Polinom;var r5: Rest);

var.

i, Correctflag, i1: integer;

Count, Countcarry, Carryflag: byte;

begin.

Correctflag:=0;

Countcarry:=0;

repeat.

for i:=n1 downto 0 do.

r5[i]: =0;

Count:=0;

Divizion (m5,r5,p5,Correctflag);

i1:=n1;

while ((i1>=Correctflag)and (r5[i1]=0))do dec (i1);

if ({(i1=Correctflag-1) or.

(}(i1=Correctflag)and (r5[Correctflag]=1)){)}.

then m5[0]: =m5[0] xor r5[Correctflag].

else begin.

Carryflag:=m5[n];

for i:=n downto 1 do.

m5[i]: =m5[i-1];

m5[0]: =Carryflag;

inc (Countcarry);

end;

until ({(i1=Correctflag-1) or.

(}(i1=Correctflag)and (r5[Correctflag]=1));{);}.

while (Countcarry>0) do.

begin.

Carryflag:=m5[0];

for i:=0 to n-1 do.

m5[i]: =m5[i+1];

m5[n]: =Carryflag;

dec (Countcarry);

end;

end;

end.

Додаток № 2.

Процедури і функції модуля _Serv.

Unit _SERV;

Interface.

Uses.

Crt, Dos;

Const.

EmptyBorder =0;

SingleBorder =1;

DoubleBorder =2;

BorderChar:array[0.2,1.6] of Char=.

((#32,#32,#32,#32,#32,#32),.

(#218,#196,#191,#179,#192,#217),.

(#201,#205,#187,#186,#200,#188));

MaxChar =80;

MaxLine =25;

MenuTop =3;

SubMenuTop =2;

MenuLine :array[1.MenuTop]of string[20]=.

(«Про торішню програму… », «Демонстрація «‘Вихід »);

SubMenuLine :array[1.SubMenuTop]of string[20]=.

(«Складанням », «Множенням »);

Procedure SetWindow (x1,y1,x2,y2,Bord:byte;Header:string);

Procedure CursorOff;

Function GetMainMenuChoice: byte;

Function GetSubMenuChoice: byte;

Procedure About;

Implementation.

Procedure SetWindow (x1,y1,x2,y2,Bord:byte;Header:string);

var.

i:integer;

begin.

if not ((x1MaxLine) or (Bord>2)) then.

begin.

GotoXY (x1,y1);

Write (BorderChar[Bord, 1]);

for i:=1 to x2-x1−1 do.

begin.

GotoXY (x1+i, y1);

Write (BorderChar[Bord, 2]);

end;

GotoXY (x2,y1);

Write (BorderChar[Bord, 3]);

for i:=1 to y2-y1−1 do.

begin.

GotoXY (x1,y1+i);

Write (BorderChar[Bord, 4]);

GotoXY (x2,y1+i);

Write (BorderChar[Bord, 4]);

end;

GotoXY (x1,y2);

Write (BorderChar[Bord, 5]);

for i:=1 to x2-x1−1 do.

begin.

GotoXY (x1+i, y2);

Write (BorderChar[Bord, 2]);

end;

GotoXY (x2,y2);

Write (BorderChar[Bord, 6]);

end;

GotoXY ((x2-x1-ord (Header[0])) divx 2+x1,y1);

Write (Header).

end;

Procedure CursorOff;

begin.

asm.

mov ah, 1.

mov ch, 20h.

int 10h.

end;

end;

Function GetMainMenuChoice: byte;

var.

Count:byte;

i:integer;

ch, ch1: char;

begin.

Count:=1;

while KeyPressed do.

ch:=Readkey;

repeat.

for i:=1 to MenuTop do.

begin.

if (i=Count)then.

begin.

HighVideo;

TextColor (0);

end.

else.

begin.

LowVideo;

TextColor (8);

end;

GotoXY (25,10+i);

Writeln (MenuLine[i]);

CursorOff;

end;

if KeyPressed.

then begin.

ch:=Readkey;

if (ch=#0).

then begin.

ch1:=Readkey;

case ch1 of.

#72: if (Count>1).

then dec (Count);

#80: if (Count.

then inc (Count);

end;

end;

end;

until (ch=#13);

GetMainMenuChoice:=Count;

end;

Function GetSubMenuChoice: byte;

var.

Count:byte;

i:integer;

ch, ch1: char;

begin.

Count:=1;

while KeyPressed do.

ch:=Readkey;

repeat.

for i:=1 to SubMenuTop do.

begin.

if (i=Count)then.

begin.

HighVideo;

TextColor (9);

end.

else.

begin.

LowVideo;

TextColor (1);

end;

GotoXY (26,10+i);

Writeln (SubMenuLine[i]);

CursorOff;

end;

if KeyPressed.

then begin.

ch:=Readkey;

if (ch=#0).

then begin.

ch1:=Readkey;

case ch1 of.

#72: if (Count>1).

then dec (Count);

#80: if (Count.

then inc (Count);

end;

end;

end;

until (ch=#13);

GetSubMenuChoice:=Count;

end;

Procedure About;

begin.

TextColor (15);

SetWindow (5,1,75,3,1, «Про торішню програму »);

TextColor (10);

GotoXY (6,2);

TextColor (10+128);

Write («Токар Олексію Юрійовичу АП-57.Курсовой проект.

«Циклічний код» «);

end;

end.

Показати весь текст
Заповнити форму поточною роботою