Міністерство освіти і науки України
Новороздільський політехнічний коледж
Програма для підрахунку висоти бінарного длрува
5.091504 КР 4.9 13 ПЗ
Керівник роботи
____________Гладій В.Я.
“_____”____________2009 р.
Розробив ст. гр. ОКІСМ-36
Олійник Т.
“_____”___________2009 р.
2009
Вступ
Важливим способом боротьби з завадами в системах передачі та обробки інформації є застосування кодів, що виявляють і виправляють помилки. Відомі два взаємодоповнювальних методи боротьби з завадами:
кодування з виправленням помилок (корегуючі коди) - приймач виявляє і виправляє помилки;
кодування з виявленням помилок - приймач розпізнає помилки і, у разі потреби, проводить запит на повторну передачу помилкового блока.
Корегуючі коди формуються шляхом введення значної надлишковості в дані, що передаються, цифрові потоки можуть зростати в два і більше раз. Крім того, вони працюють з блоками обмеженої довжини і при певних конфігураціях помилок або не виявляють їх зовсім, або невірно інтерпретують характер помилок. Це робить їх майже непридатними для перевірок цілісності даних в умовах одночасної дії завад та можливого несанкціонованого порушення цілісності даних.
Другий метод припускає наявність каналу зворотного зв'язку і знаходить своє застосування в каналах з достатньо малою імовірністю помилки у випадку, якщо цю імовірність помилки необхідно ще знизити. Крім того, такі коди використовують не тільки для виявлення наявності помилок які вносять природними факторами, але і для перевірки цілісності файлів, яка може бути порушена в результаті дій зловмисника, оскільки задача виявлення помилок ідентична цій задачі. Найчастіше при цьому використовуються методи, що ґрунтуються на підрахунку контрольних сум. Контрольна сума - деяке значення, розраховане з послідовності даних шляхом застосування певного алгоритму, яке використовується для перевірки правильності передачі даних. Популярність використання контрольних сум для перевірки цілісності даних обумовлена тим, що подібна перевірка просто реалізовується і добре підходить для виявлення загальних помилок, викликаних наявністю шуму в каналах передачі даних або спробами несанкціонованої зміни даних. Слід зазначити, що застосування контрольних сум вносить мінімальну надлишковість в дані, що передаються, тому навіть у випадку повторної передачі цифрові потоки можуть бути значно меншими у порівнянні з корегуючими кодами.
Хоча циклічні коди можуть використовуватись для кодування з виправленням помилок, але найчастіше їх використовують саме для формування контрольних сум. Циклічні надлишкові CRC (Cyclic redundancy code) коди вже стали основою багатьох стандартів, де застосовуються контрольні суми. Важливим способом боротьби з завадами в системах передачі та обробки інформації є застосування кодів, що виявляють і виправляють помилки. Теорія завадостійкого кодування для кожного конкретного каналу дозволяє вибрати найбільш ефективний метод виявлення і виправлення помилок.
Типове значення імовірності помилки на біт без кодування в обчислювальних мережах складає 10-6. Використання простих кодів з невеликою надмірністю дозволяє досягти вірогідності 10-9 і нижче.
Найчастіше при цьому використовуються методи, що ґрунтуються на підрахунку контрольних сум. Контрольна сума - деяке значення, розраховане з послідовності даних шляхом застосування певного алгоритму, яке використовується для перевірки правильності передачі даних. Популярність використання контрольних сум для перевірки цілісності даних обумовлена тим, що подібна перевірка просто реалізовується і добре підходить для виявлення загальних помилок, викликаних наявністю шуму в каналах передачі даних або спробами несанкціонованої зміни даних. Слід зазначити, що застосування контрольних сум вносить мінімальну надлишковість в дані, що передаються, тому навіть у випадку повторної передачі цифрові потоки можуть бути значно меншими у порівнянні з корегуючими кодами.
Контрольні суми можуть використовуватись і для перевірки цілісності файлів, яка може бути порушена в результаті дій зловмисника, оскільки задача виявлення помилок в каналі передачі ідентична задачі перевірки цілісності файлів на диску комп’ютера.
2. Характеристика коду
2.1. Опис коду
Завадостійке кодування –це таке кодування, яке формується на основі інформаційної послідовності символів послідовність перевіряючи символів в кодері. За рахунок введеної надлишковості декодер має можливість від вибраного коду і алгоритму декодування вияляти чи виправляти помилково прийняті інформаційні символи, які створені в результаті різного роду перешкод в каналі звязку.
Спосiб з використанням кодів парності заснований на припущеннi, що в двiйковому числi найчастiше виникають одиничнi помилки - втрата або поява зайвої одиницi. У обох випадках число одиниць змiниться на одну. Якщо двiйкове число мало непарне число одиниць, то пiсля одиничної помилки воно виявиться парним і навпаки.
На практицi контроль парностi здiйснюється таким чином. Для пiдвищення ефективностi контролю двiйкове слово розбивається на частини, як правило, байти. До кожного байта додається додатковий контрольний розряд. Вмiст контрольного розряду залежить вiд вибраного способу контролю (за парнiстю або непарнiстю). При контролi за парнiстю значення контрольного розряду вибирається таким, щоб загальне число одиниць у байтi й контрольному бiтi було парним. У цьому випадку значення контрольного (паритетного) бiта визначається додаванням за модулем два значень розрядiв байта.
Внаслiдок операцiї додавання за модулем два значень розрядiв байта з парним числом одиниць одержуємо значення контрольного байта FK.П = 0. При додаваннi за модулем два значень розрядiв байта з непарним числом одиниць значення контрольного байта FK.П = 1.
Рис. 1 - Контроль байта: а - за парнiстю; б - за непарнiстю
Операція контролю парності двійкових чисел дозволяє підвищити надійність передачі і опрацювання інформації. Мінімальна відстань коду dmin = 1, тому код із перевіркою парності виявляє всі одиничні помилки, а крім того, всі випадки непарного числа помилок (3, 5 і т. д.). При одночасній появі двох або будь-якого іншого парного числа помилок код із перевіркою парності не виявляє помилок. При контролi за непарнiстю значення контрольного бiта вибирається з умови, що кiлькiсть одиниць у байтi з урахуванням вмiсту контрольного розряду була непарною.
На практицi контроль непарностi використовується частiше, оскiльки фiксує повне пропадання iнформацiї. Контроль парностi передбачає формування значень контрольних розрядiв до виконання операцiї та перевiрку байта пiсля виконання операцiї з урахуванням контрольних розрядiв. Наприклад, при записуваннi байта в пам'ять комп'ютера одночасно автоматично формується значення його контрольного розряду. При зчитуваннi байта, що зберiгається, здiйснюється додавання за модулем два значень його розрядiв спiльно з контрольним бiтом згiдно з визначеним способом контролю парностi або непарностi. Таким чином, контроль за паритетом вимагає використання додаткових розрядiв. Схеми, що забезпечують отримання значення контрольного розряду i перевiрку двійкового числа за ознакою парності чи непарності називаються схемами контролю парності.
Їх часто називають схемами згортки, схемами контролю за модулем два, схемами контролю за паритетом. Операція згортання – це операція отримання остачі від ділення числа або суми його цифр на модуль контролю. Операція згортання по модулю 2 виконується сумуванням цифр розрядів двійкового числа по модулю 2.
Цей код широко використовується в обчислювальних машинах при передачі інформації між регістрами і при контролі інформації при читанні з памяті.
Функціональні вузли, що виконують операцію згортання по модулю 2 називаються вузлами згортання по парності або вузлами контролю по непарності і використовуються на передаючій стороні для формування значення контрольного розряду, а на приймаючій стороні для перевірки результату операції. Функція називається функцією парності, а функція - функцією непарності, де - знак суми по модулю 2, - p-й розряд слова даних, - кількість розрядів слова.
Функції парності і непарності рівні 1 при парному і непарному числі одиниць у розрядах слова відповідно. Значення контрольного розряду при контролі по непарності рівне і формується на передаючій стороні лінії зв’язку. Після передачі або зчитування із пам’яті кодове слово знову згортається по модулю 2. Якщо функція непарності , то це значення згортання є виявом помилки. Якщо , то передача слова правильна.
2.2 Основні характеристики та параметри коду
Так як приблизно 90% усіх нерегулярних помилок виникають саме із одиничним розрядом, перевірки парності буває достатньою для більшості ситуацій. Нажаль необхідність у додаткових обрахунках паритетного біту вимагає деяких затрат процесорного часу, що зменшує швидкість роботи всієї системи.
Перевагами контролю на парність є мінімальне значення коефіцієнта надлишковості (для п’ятиелементного коду він дорівнює 0.17) і простота його технічної реалізації, а недоліком є те, що виявляються помилки які мають непарну кратність.
Однак така методика перевірки не може виявити помилки у випадку подвійного перекидування (наприклад, дві одиниці перекинулись у нуль), що може призвести до високого рівня помилок у деяких передачах. Багаторівнева модуляція (коли перевірка сигналу виконується по двох або трьох бітах) вимагає складнішої техніки. Перевірка на парність/непарність по одному біту також є неприйнятною і для багатьох аналогових ліній через групування помилок, яке зазвичай виконується у лініях зв’язку такого типу. Подвійна перевірка на парність/непарність є вдосконаленням одиничної перевірки. В цьому методі замість біта парності у кожному символі визначається парність або непарність цілого блоку символів. Перевірка блоку дозволяє виявляти помилки як всередині символу так і між символами. Ця перевірка також називається двохвимірним кодом перевірки на парність. Вона має значну перевагу у порівнянні із одиничною. За допомогою такої перехресної перевірки можна суттєво покращити надійність роботи звичайної телефонної лінії. Але як одинична так і подвійна перевірка на парність означають збільшення витрат і відносне зменшення виходу інформації для користувача.
Така операція особливо актуальна для запам’ятовуючих пристроїв з невисокою надійностю (дискові накопичувачі). Сучасні технологічні досягнення в області напівпровідникової пам’яті позволяють в ряді випадків обходитись без контролю парності. Деякі материнські плати хоч і допускають використання пам’яті із контролем парності, але саму перевірку можуть не підтримувати. Контроль по методу парності/непарності широко використовується в ЕОМ для контролю запису, зчитування інформації у запам’ятовуючих пристроях на магнітних носіях.
Структура схеми перевірки парності є багатоступеневою, тобто слово ділиться на декілька груп розрядів, в кожному з яких перевірка парності виконується прямим способом (перша ступінь), дальше виконується перевірка для груп другого ступеня, створених із груп першого ступеня, парності яких в цьому випадку розглядаються як звичайні двійкові розряди, і так далі до кінцевої перевірки парності суми 1 всього слова. В останній ступені парність байта порівнюється із значенням контрольного розряду КР.
2.3. Порядок використання коду при виявленні несправностей
Принципи завадостійкого кодування широко використовуються виробниками комп’ютерних комплектуючих для підвищення надійності своїх виробів. Особливо це стосується дискових пристроїв (жорсткі диски, приводи CDROM тощо). Вони передбачають зберігання контрольних бітів (контрольних сум) для кожного блоку даних (кластера). Ці біти обчислюються як доповнення до парності. Усі ці біти можуть зберігатись у спеціальній мікросхемі ПЗП, яка входить до складу друкованої плати накопичувача. Таким чином, якщо один із бітів кластера неможливо зчитати, то його значення можна визначити за допомогою корегуючого біта.
Коди парності часто зустрічаються при використанні RАID-масивів.
RАID-3. Дані розбивають на смуги завдовжки в 1 біт і розподіляють по дисках масиву таким чином, що повне машинне слово представляється поясом, тобто число дисків рівне довжині машинного слова в бітах, а один з дисків масиву відводиться для зберігання інформації про парність. У разі відмови одного з дисків, відновлення інформації, що зберігалася на ньому, можливе шляхом виконання операції виключного АБО за інформацією на працездатних дисках. Кожен запис, зазвичай, розподілений по всіх дисках, і тому цей тип масиву дисків є ефективним для роботи в додатках з інтенсивним обміном із дисковою підсистемою. Оскільки кожна операція введення-виведення звертається до всіх дисків масиву, RАID-3 не може одночасно виконувати декілька операцій. Тому RАID-3 хороший для однозадачного оточення з довгими записами. Для роботи з короткими записами потрібна синхронізація обертання дисків, оскільки інакше зменшується швидкість обміну.
RАID-4. Ідентичний RАID-3 за винятком того, що тут розмір поясів є набагато більшим одного сектора. В цьому випадку зчитування можна здійснювати з одного диска (не рахуючи диска, що зберігає інформацію про парність), тому можливе одночасне виконання декількох операцій зчитування. Проте, оскільки кожна операція запису повинна відновити вміст диска парності, одночасне виконання декількох операцій запису неможливе.
RАID-5. Тут немає окремого диску для зберігання бітів парності. Тому тут немає недоліку, властивого RАID-4, який заключається у неможливості одночасного виконання декількох операцій запису. У цьому масиві, як і в RАID-4, використовуються пояси великого розміру, але, на відміну від RАID-4, інформація про парність зберігається не на одному диску, а на всіх дисках по черзі. Операції запису звертаються до одного диска з даними і до іншого диска з інформацією про парність. Оскільки біти парності для різних поясів зберігаються на різних дисках, виконання декількох одночасних операцій запису є неможливим, тільки в тих окремих випадках, коли або пояси з даними, або пояси з бітами парності знаходяться на тому ж диску. Чим більше дисків у масиві, тим рідше співпадає місцеположення поясу і біта парності. Область застосування цього типу дискових масивів - надійне зберігання масивів даних великого об'єму.
RАID-6. Як і RАID-5 в RАID-6 дані розбиваються на смуги розміром в один блок і розподіляються по всіх дисках. Доступ до смуг незалежний та асинхронний. Різниця в тому, що на кожному диску зберігається не одна, а дві смуги паритету. Перша з них, як і в RАID-5, містить контрольну інформацію для смуг, розміщених на горизонтальному зрізі масиву (за виключенням диска, де смуга паритету зберігається). В додаток формується і записується друга смуга паритету, контролююча всі смуги якогось одного диску масиву, (вертикальний зріз масиву), але не того, де зберігається смуга паритету. Така схема масиву дозволяє відновити інформацію при відмові відразу двох дисків. З іншої сторони, збільшується час на обчислення і запис розрядів парності та вимагається додатковий дисковий простір. Крім того, реалізація даної схеми пов'язана з ускладненням контролера дискового масиву. Тому, даний тип RАID зустрічається рідко.
RАID-7. Не входить до складу основних типів дискових масивів. До складу масиву дисків RАID-7, крім самого масиву асинхронно працюючих дисків, входять кеш-пам'ять та контролер, які керуються вбудованою в контролер операційною системою реального часу. Дані розбиті на смуги розміром у блок і розділені по дисках масиву. Смуги бітів парності зберігаються на спеціально виділених для даної цілі одному або кількох дисках. Даний тип RАID при роботі з великими файлами не поступається за продуктивністю RАID-3.
3. Утворення коду
3.1. Апаратні методи утворення коду
Функціонування двох- і трьох вхідного логічних елементів додавання по модулю 2 визначається таблицею 1 і логічними виразами:
0
0
0
0
1
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
0
таб. 1 - Функціонування двох- і трьох вхідного логічних елементів додавання по модулю 2
В таблиці пунктиром виділена частина, що пояснює роботу двохвхідного елемента додавання по модулю 2. Функції і можуть бути реалізовані логічними елементами І-АБО-НЕ із інверторами (рис. 2):
Рис. 2 – Реалізація функцій і за допомогою логічних елементів І-АБО-НЕ
Функції і не піддаються мінімізації і реалізуються за допомогою елементів додавання по модулю 2 із двома, рідше із трьома або чотирма входами. Базові елементи додавання по модулю 2 з’єднюють по пірамідальній схемі, так як пірамідальна структура має мінімальну затримку.
Пірамідальна схема згортання байта інформації приведена на рис. 3,а. і містить 7 двовхідних елементів додавання по модулю 2, що утворюють каскади.
В загальному випадку для згортання n-розрядного слова потрібно n-1 двовхідних елементів, а число каскадів схеми рівне , якщо n рівне цілій степені двійки. Затримка розповсюдження схеми рівна: , де - середня затримка розповсюдження елемента додавання по модулю 2.
Використання трьовхідних елементів додавання по модулю 2 дозволяє зменшити число каскадів вузла згортання і, відповідно, зменшити загальний час затримки розповсюдження (рис. 3,б.).
Всі входи вузла контролю по парності логічно рівнозначні. Один із входів зазвичай використовується для нарощування розрядності вузла контролю, для керування парністю/непарністю шляхом подачі на цей вхід сигналу дозволу ОЕ або як окремий вхід вузла згортання по модулю 2.
а.) б.)
Рис. 3 - Пірамідальна схема згортання байта інформації
На рис. 3 вхід ОЕ і вихідний елемент додавання по модулю 2 показані пунктиром. Функція виходу РО рівна .
Якщо ОЕ=0, то РО – функція непарності, якщо ОЕ=1, то РО – функція парності.
Розглянемо деякі мікросхеми вузлів контролю серії ІМС загального призначення.
ІМС К555ІП5, КР1533ІП5, SN74LS280 ТТЛШ, КР1554ІП5, 74AC280 (фірма National, USA) КМОП–логіки – дев’ятирозрядна схема контролю парності, що має виходи функцій непарності РО і парності РЕ (непарний і парний паритет). При парній кількості одиниць у вхідному слові на виходах маємо РЕ=1, РО=0, при непарній кількості одиниць – РЕ=0, РО=1.
Вузол контролю формує функції парності і непарності:
Якщо ОЕ=0, то РО – функція непарності, а РЕ – функція парності. Якщо ОЕ=1, то РО – функція парності, а РЕ – функція непарності, тобто виконується інвертування функції паритету. Умовне графічне позначення мікросхеми приведено на рис. 4 (ODD – непарність, EVEN – парність). ІМС побудована на трьохвхідних логічних елементах додавання по модулю 2 і інверторах.
Рис. 4 - ІМС К555ІП5
На рис. 5 показана схема контролю по непарності передачі байта інформації по лінії зв’язку на основі ІМС К555ІП5. На передаючій стороні ІМС DD1 є формувачем контрольного байту, який виробляється на виході при (індекс 1 відноситься до ІМС DD1): . В лінію зв’язку поступають інформаційні сигнали і контрольний біт . На приймаючій стороні сигнал подається на вхід ОЕ ІМС DD2, а інформаційні сигнали D0-D7 поступають на її входи , тоді . При відсутності помилок в лінії зв’язку для всіх р і . Тоді матимемо:
Значення сигналів і змінюються на інверсні при виникненні помилок в непарному числі розрядів лінії зв’язку. ІМС DD2 виконує контроль передачі даних по непарності. Парне число помилок у розрядах, що виникли знову при передачі по лінії зв’язку, не виявляються. Тому схема контролю по парності використовується для виявлення одиничних помилок.
Рис. 5 - Схема контролю по непарності передачі байта інформації по лінії зв’язку на основі ІМС К555ІП5
3.2. Програмні методи утворення коду
Для перевірки правильності 32-розрядних даних можна створити спеціальну програму. Задача, яка поставлена перед мною не вимагає використання чітко визначеного програмного забезпечення. Отже, я мав вільний вибір щодо методів створення даної програми. По своїй суті реалізація даної програми є нескладною. Тому я міг використовувати найрізноманітніші мови програмування: Fortran, Cobol, Basic, Pascal, C++, Delphi та інші. Для мене найзручніше програмувати на Delphi. Я зробив такий вибір через зручність застосовування, зрозумілий інтерфейс і нескладність програмування на даній мові програмування.
Коротко про інструменти середовища Delphi. Основними інструментами є:
- головне меню – містить усі команди які можна виконати (рис. 6);
Рис. 6 – Головне меню
- панелі інструментів – містять піктографічне відображення для швидкої реалізації команд(рис. 7);
Рис. 7 – Панелі інструментів
- вікно форми – вікно Windows, яке утворюється в одному з можливих для вікон стилів. Увесь внутрішній простір є робочою областю, яка має сітку вирівнювання для зручного розташування компонентів на формі(рис. 8);
Рис. 8 – Вікно форми
- палітра компонентів (Component Palette) – розташована у головному вікні і має вигляд багато сторінкового блокнота. Кожній сторінці відповідає свій набір компонент які можна розміщувати у вікні форми(рис 9);
Рис. 9 – Палітра компонентів
- інспектор об’єктів (Object Inspector) – з його допомогою можна задавати початкові значення властивостей об’єкта та їхню реакцію на стандартні події(рис. 10);
Рис. 10 – Інспектор об'єктів
- редактор коду програми (Code Editor) – організоване як багатосторінковий блокнот відкритих у даний момент файлів(рис 11);
Рис. 11 – Редактор коду
Для будь-якої програми буде завжди доречним скласти блок-схему. Оскільки я створив дві програми, то і блок-схем довелось зробити також дві. Перша є максимально простою бо є лінійною і не містить ніяких розгалужень (рис. 12). У ній я описав введення вхідних даних, формування потрібних результатів і описав їх запис у файл. Друга описує перевірку і декодування даних. Вона має виявити помилку (якщо така є) і декодувати число до первісного вигляду. Блок-схема показує, що йде перевірка на помилку, а потім визначається в якому саме блоці вона виникла (рис. 13).
Рис. 12 – Блок-схема першої програми
Рис. 13 – Блок-схема другої програми
4. Ознаки достовірності коду, виявлення та корекція помилок в кодах.
4.1.Ознаки за якими визначається наявність в коді помилок.
4.2.Виявлення помилок та корекція інформації.
Припустимо, що виконується контроль по парності повідомлення
10101000101011001101011011011011. Розіб’ємо це число на 4 блоки по 8 біт.
Контрольному розряду надається значення при якому сума цифр кодового слова парна.
1+0+1+0+1+0+0+0=3
1+0+1+0+1+1+0+0=4
1+1+0+1+0+1+1+0=5
1+1+0+1+1+0+1+1=6
Звідси: КР1=1
КР2=0
КР3=1
КР4=0
Таким чином, кодова комбінація буде мати вигляд:
110101000010101100111010110011011011
На приймальній стороні лінії зв’язку або після зчитування із пам’яті кодове слово знову перевіряється на парність суми цифр. Якщо сума цифр кодового слова парна, то помилки нема, а якщо сума цифр непарна, то це означає, що при передачі або збереженні в кодовому слові виникла помилка.
Нехай після передачі даних по каналі зв’язку виникла помилка у чотирнадцятому розряді розряді. Тоді на вході приймача ми отримаємо код:
110101000010111100111010110111011011
Тепер враховуючи контрольні розряди знову перевіряємо на парність:
1+1+0+1+0+1+0+0+0=4
0+1+0+1+1+1+1+0+0=5
1+1+1+0+1+0+1+1+0=6
0+1+1+0+1+1+0+1+1=6
Звідси: П1=0
П2=1
П3=0
П4=0
Ми можемо бачити, що у другому блоці виникла помилка.
Якщо б помилки не було, то для декодування повідомлення ми б викинули контролюючі символи.
5. Індивідуально-пошукова робота
5.1 розробка програми для перевірки правильності 32-розрядних даних за допомогою коду парності.
Програма 1
Перша програма призначена для введення 32-розрядного двійкового числа і його подальшого кодування, що виявляється у знаходженні контрольних символів, які будуть додані до даного числа. Графічний інтерфейс програми зображено на рис. 14. Для введення числа у програмі передбачено спеціальне поле Edit1 (1). Туди користувач може вводити будь-які двійкові дані. У разі якщо туди буде введено недозволений символ або кількість символів буде меншою 32, то на екрані з’явиться повідомлення про помилку (рис. 15). Також у програмі реалізована можливість перегляду закодованого числа, що виводиться у поле Edit2 (2). Для початку кодування користувачу досить натиснути кнопку “Закодувати” (3) створену елементом Button1. Для зручності контрольні розряди також виводитимуться з допомогою елементів типу Label (5). Після кодування, при потребі, закодоване число можна записати у текстовий файл використавши кнопку “У файл” (4) створену елементом Button2. При її використанні відривається вікно показане на рис. 16, у якому потрібно ввести ім’я файлу у якому буде зберігатися число та шлях до самого файлу.
Рис. 14 – Вікно Програми 1
Рис. 15 – Вікно повідомлення про помилку при введені
Рис. 16 – Вікно збереження закодованого числа
Текст програми:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit3: TEdit;
Image1: TImage;
Label1: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label5: TLabel;
Label14: TLabel;
SaveDialog1: TSaveDialog;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
vhid_mas: array [1..32] of boolean;
vyhid_mas: array [1..36] of boolean;
vyvid_mas: array [1..36] of char;
vvid_mas:string[32];
k1,k2,k3,k4:boolean;
i:integer;
begin
Label14.Visible:=False;
vvid_mas:=Edit1.Text;
for i:=1 to 32 do
begin
Edit3.Text:='';
if vvid_mas[i]='1' then vhid_mas[i]:=true
else
if vvid_mas[i]='0' then vhid_mas[i]:=false
else
Application.MessageBox('Некоректний символ. Вводьте 0 або 1', 'Помилка',MB_OK );
if vvid_mas[i]='1' then vhid_mas[i]:=true
else
if vvid_mas[i]='0' then vhid_mas[i]:=false
else Label14.Visible:=True;
end;
k1:=(vhid_mas[1] xor vhid_mas[2] xor vhid_mas[3] xor vhid_mas[4]
xor vhid_mas[5] xor vhid_mas[6] xor vhid_mas[7] xor vhid_mas[8])
xor false;
k2:=(vhid_mas[9] xor vhid_mas[10] xor vhid_mas[11] xor vhid_mas[12]
xor vhid_mas[13] xor vhid_mas[14] xor vhid_mas[15] xor vhid_mas[16])
xor false;
k3:=(vhid_mas[17] xor vhid_mas[18] xor vhid_mas[19] xor vhid_mas[20]
xor vhid_mas[21] xor vhid_mas[22] xor vhid_mas[23] xor vhid_mas[24])
xor false;
k4:=(vhid_mas[25] xor vhid_mas[26] xor vhid_mas[27] xor vhid_mas[28]
xor vhid_mas[29] xor vhid_mas[30] xor vhid_mas[31] xor vhid_mas[32])
xor false;
if k1=false then label2.Caption:='0'
else label2.Caption:='1';
if k2=false then label3.Caption:='0'
else label3.Caption:='1';
if k3=false then label4.Caption:='0'
else label4.Caption:='1';
if k4=false then label5.Caption:='0'
else label5.Caption:='1';
vyhid_mas[1]:=k1;
vyhid_mas[2]:=vhid_mas[1];
vyhid_mas[3]:=vhid_mas[2];
vyhid_mas[4]:=vhid_mas[3];
vyhid_mas[5]:=vhid_mas[4];
vyhid_mas[6]:=vhid_mas[5];
vyhid_mas[7]:=vhid_mas[6];
vyhid_mas[8]:=vhid_mas[7];
vyhid_mas[9]:=vhid_mas[8];
vyhid_mas[10]:=k2;
vyhid_mas[11]:=vhid_mas[9];
vyhid_mas[12]:=vhid_mas[10];
vyhid_mas[13]:=vhid_mas[11];
vyhid_mas[14]:=vhid_mas[12];
vyhid_mas[15]:=vhid_mas[13];
vyhid_mas[16]:=vhid_mas[14];
vyhid_mas[17]:=vhid_mas[15];
vyhid_mas[18]:=vhid_mas[16];
vyhid_mas[19]:=k3;
vyhid_mas[20]:=vhid_mas[17];
vyhid_mas[21]:=vhid_mas[18];
vyhid_mas[22]:=vhid_mas[19];
vyhid_mas[23]:=vhid_mas[20];
vyhid_mas[24]:=vhid_mas[21];
vyhid_mas[25]:=vhid_mas[22];
vyhid_mas[26]:=vhid_mas[23];
vyhid_mas[27]:=vhid_mas[24];
vyhid_mas[28]:=k4;
vyhid_mas[29]:=vhid_mas[25];
vyhid_mas[30]:=vhid_mas[26];
vyhid_mas[31]:=vhid_mas[27];
vyhid_mas[32]:=vhid_mas[28];
vyhid_mas[33]:=vhid_mas[29];
vyhid_mas[34]:=vhid_mas[30];
vyhid_mas[35]:=vhid_mas[31];
vyhid_mas[36]:=vhid_mas[32];
for i:=1 to 36 do
begin
if vyhid_mas[i]=true then vyvid_mas[i]:='1'
else vyvid_mas[i]:='0';
Edit3.Text:=Edit3.Text+vyvid_mas[i];
end;
Label6.Visible:=True;
Label7.Visible:=True;
Label8.Visible:=True;
Label9.Visible:=True;
Label13.Visible:=True;
Label11.caption:= 'Дані закодовано';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Label6.Visible:=False;
Label7.Visible:=False;
Label8.Visible:=False;
Label9.Visible:=False;
Label13.Visible:=False;
Label14.Visible:=False;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
Memo1.Lines.Add(Edit3.Text);
Memo1.Lines.SaveToFile(SaveDialog1.FileName+'.txt');
end;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Label11.Caption:='';
end;
end.
Програма 2
Програма 2 призначена для перевірки закодованого Програмою 1 числа на появу у ньому помилок та виведення декодованого, тобто початкового, числа. Графічний інтерфейс програми 2 зображено на рис. 17. Для зчитування числа із файлу, користувач має натиснути кнопку “Із файлу” (1) створеного елементом Button2, знайти потрібний файл за допомогою такого ж вікна як на рис. 16 і відкрити його. Після цього число копіюється у поле Edit1 (2). За допомогою кнопки “Перевірка” (4) створеного елементом Button1, можна декодувати повідомлення і