ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Кодові комбінації на основі циклічних кодів
         

     

    Інформатика, програмування
    АНОТАЦІЯ
    Документ містить опис програми, яка будує кодові комбінації на основі циклічних кодів. Програма кодує і деко-дірует інформаційні слова. Іммітіруется робота джерела, переда-ющего інформаційне слово, кодувальника, що кодує дане слово, каналу зв'язку і декодувальник, виявляти і виправляти помилки в інформаційному полінома. Програма працює за принципом приймач - джерело, так, як це реалізовано в пристроях, що передають інформацію або звичайних приводах для зовнішніх носіїв в 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? 0010101;
    G (x)? X = x5 + x3 + x? 0101010.
    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
    те ж у двійковому коді:

     1011000 1101
     ? 1101 1100
    1100
     ? 1101
    100
    Всі операції легко реалізуються апаратно на регістрах зсуву зі зворотними зв'язками.
    (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 старших розрядів комбінації, а решта (nk) розрядів
    відводяться під контрольні.
    При другому способі освіти циклічних кодів інфор-
    ційних і контрольні символи в комбінаціях циклічного коду не відокремлені один від одного, що ускладнює процес декодування.


    (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) = 00000000000000000000000101 = x2 +1.
    4. Здійснюючи зсув коду вліво на m = nk = 5 розрядів тобто поліном G (x) множиться на xm:
    xm G (x) = (x2 +1) x5 = x7 + x5 = 0000000000000000000000010100000.
    5. Вибирається створюючий многочлен-P (x) за таблицею непріводімих многочленів. Для виправлення одиночної помилки (d0 = 3) утворює полином P (x) повинен бути ступеня m = nk = 5 і кількістю ненульових членів не менше мінімального кодового відстані d0 = 3. Виходячи з
    цього образуюшій полином P (x) дорівнює:
    P (x) = x5 + x4 + x3 + x 2 +1 = 111101.
    6. Визначимо залишок R (x) від ділення G (x)? Xm на який утворює по-
    Ліном P (x)
     x7 + x5 x5 + x4 + x3 + x 2 +1 10100000 111101
     x7 + x6 + x5 + x 4 + x2 x2 + x +1 111101 111
     x6 + x4 + x2 101010
     x6 + x5 + x4 + x 3 + x 111101
    x5 + x3 + x2 + x 101110
     x5 + x4 + x3 + x 2 +1 111101
    x4 + x +1 10011
    Залишок R (x) = x4 + x +1 = 10011.
    7. Будуємо передається кодовий проліну F (x):
    F (x) = xm G (x)? R (x) = x7 + x5 + x4 + x +1 = 0000000000000000000000010110011.
    8. Нехай у прийнятому повідомленні сталася помилка в тридцять першому розряді, при зтом прийняте кодове повідомлення має вигляд:
    F? (X) = F (x)? E (x) = 1000000000000000000000010110011.
    9. Розділемо многочлен F1 (x) соотвествующий отриманої кодової ком-комбінації на який утворює поліном, при цьому вага залишку (кількість одиниць в коді залишку) повинен бути менше або дорівнює кількості помилок W? S
     1000000000000000000000010110011 111101
     111101
    111010
     111101
    111000
     111101
    101000
    111101
     101010
     111101
    101110
     111101
    100110
     111101
    110110
     111101
    101100
    111101
     100010
     111101
    111110
    111101
     110010
     111101
    111111
    111101
     100011
     111101
    11110
    Порівнюємо вага отриманого залишку w з числом виправляємо помилок
    w> s.
    10. Виробляємо циклічний зсув прийнятої кодової комбінації на один
    розряд вліво і повторюємо п.9 поки w? s.
    a) 0000000000000000000000101100111 111101
     111101
    100011
     111101
    111101
    111101
     1 ==> w = s.
    Складаємо по модулю 2 останнє ділене з останнім залишком:
    0000000000000000000000101100111
    ? 1
    0000000000000000000000101100110
    Здійснюємо зворотний зсув на 1 розряд отриманої комбінації
    0000000000000000000000010110011
    Відкинувши контрольні розряди, отримуємо передане інформаційної слово.
    § 4.2 Побудова кодової комбінації шляхом множення
    на який утворює поліном
    Побудувати циклічний код для передачі 31 розрядної кодової
    комбінації з виправленням одноразової помилки (n = 31, s = 1) шляхом множення утворює многочлена на многочлен повного 31 розрядного коду.
    Рішення.
    1. Будуємо інформаційний поліном, сответствующій інформаційному речі довжиною k-біт:
    G (x) = 00000000000000000000000101 = x2 2.
    2. Будуємо передається кодовий поліном
    00000000000000000000000101
    111101
     00000000000000000000000101
    00000000000000000000000101
    00000000000000000000000101
    00000000000000000000000101
     00000000000000000000000101
    0000000000000000000000011001001
    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 ( 'Натисніть будь-яку клавішу ...');< br /> Readln;
    end;
    3: begin
    ClrScr;
    GotoXY (1,24);
    TextColor (14);
    Writeln ( 'Робота програми завершено ...');< br /> Readln;
    TextBackGround (0);
    TextColor (15);
    ClrScr;
    Key: = true;
    end;
    end;
    Until Key;
    end.
    (7. Результати роботи програми
    Результат роботи програми при утворенні коду додаванням залишку
    Демонстрація
    Інформаційний поліном: 0000011010111110011110110110110
    Створюючий поліном: 111101
    Cложеніe по модулю 2 (F (x) + P (x)): 1101011111001111011011011000000
    Залишок: 010101
    Надсилаєте поліном: 1101011111001111011011011010101
    Помилка ... 1101011111001110011011011010101
    Помилку виправлено! 1101011111001111011011011010101
    Оригінальний поліном: 0000011010111110011110110110110
    Натисніть будь-яку клавішу ...

    Результат роботи при утворенні коду множенням
    Демонстрація
    Інформаційний поліном: 0000001010110000011111010001011
    Створюючий поліном: 111101
    Результат множення: 0110000011111010000100100101111
    Помилка ... 0110000011111010000100100101101
    Помилку виправлено! 0110000011111010000100100101111
    Натисніть будь-яку клавішу ...
    Висновки:
    Дана програма кодує повідомлення використовуючи циклічний код.
    При цьому вона іммітірует роботу каналу для передачі інформації.
    При виникненні виняткових ситуацій, коли інформаційне слово з яких-небудь причин розкодувати не вдається, програма повторює запит на пересилання даних, як це робиться в реальних ситуаціях такого роду.
    Крім цього, програма випадковим чином, "при проходженні
    інформаційного слова через канал "допускає у слові одноразову ошбку, потім виправляє її, декодує інформаційне слово і передає результат користувачу.
    Література
    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 )){)}< br /> 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 ));{);}< br /> 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])) div 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.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status