Навчальна програма з інформатики

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст

Введення

Глава 1. Дослідницька частина

1.1 Доцільність вибору мови програмування

1.2. Основні структури мови програмування C #

1.3. Кодування за методом парності / непарності

1.4. Кодування за методом Хеммінга

1.5. Машина Поста

Глава 2. Інструкція програміста

Глава 3. Інструкція користувача

3.1 Використання програми StudyProgram для засвоєння навчального матеріалу з кодування інформації методом парності і методом Хеммінга

3.2 Використання навчальної програми StudyProgram для оволодіння навичками складання програм для машини Посту

Висновок

Список літератури

Додаток

Введення

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

Мета роботи: поліпшити і розширити навички роботи на мові програмування C #.

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

Для створення курсового проекту використовувався C # - нова мова програмування компанії Microsoft, що входить в Visual Studio. Net (v .7).

Глава 1. Дослідницька частина

1.1 Доцільність вибору мови програмування

У курсовому проекті була поставлена ​​задача, реалізація якої може бути зроблена за допомогою різних мов програмування. Але ми вибрали мову С #, що входить в Visual Studio. Net (v .7), так як він має ряд переваг, які спрощують процес створення додатків. Важливу роль у виборі мови відіграло те, що C # - найкращий. NET-мова, так як він був спеціально спроектований для. NET Framework.

C # створювався Microsoft, як основна мова для. NET Framework. Microsoft спроектувала C # таким чином, що б С, С + + і Java-програмісти змогли легко перейти на нього. C # має коріння в мовах С, С + + і Java, тому такий перехід не повинен викликати труднощів.

Синтаксис у C # не такий складний як у С + +, тому його вивчення набагато легше. Більшість операцій, які ви можете робити на С + +, можна зробити і на C #, за винятком операцій доступу до низькорівневих функцій (це все-таки можна зробити за допомогою некерованого коду).

С # - перша мова, підтримуваний версіями. NET Framework для інших платформ.

Мова, яку використовує бібліотеку класів. NET Framework (FCL) і управляється загальномовних середовищем виконання (CLR) є. NET-сумісним мовою (мова, яку підтримує платформа. NET). Серед таких мов: Microsoft Visual Basic. NET (VB. NET), Microsoft Visual C + +. NET, а також COBOL, Eiffel, Jscript, RPG і інші. Як ми говорили раніше, C # був спроектований спеціально для. NET Framework і містить деяку функціональність, яку ви не знайдете в інших мовах.

Програміст, звиклий до платформи Microsoft, може уявити собі C # як проміжний варіант між C + + і Visual Basic, якщо розглядати складність мовних конструкцій і можливості мови.

C # має C стиль синтаксису (для керуючих конструкцій, блоків коду, опису сигнатури методів та ін), багато спільного з Java (відсутність множинного успадкування та шаблонів, наявність збирача сміття) і Дельфі (орієнтованість на створення компонент), в той же час має і свій колорит.

При створенні мови в основу дизайну лягла легкість використання, домінуюча над потужністю мови та швидкістю виконання. [7] Звідси і збирач сміття з керованими об'єктними посиланнями, який автоматично звільняє за Вас пам'ять, відбираючи при цьому процесорний час. Ви також отримуєте безпеку роботи з типами, а це, на думку багатьох, є другим важливим фактором уникнення помилок.
C # об'єктно-орієнтована мова, як і вся платформа. NET [7].

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

У C # представлена ​​концепція просторів імен, аналогічна пакетів в Java. Це дозволяє ієрархічно структурувати Вашу систему типів, роблячи код набагато більш зрозумілим і дозволяючи уникнути проблем з ім'ям. Ви можете розглядати простору імен як директорії, а мовні типи як файли в цих директоріях.

Реалізація структур як типів, робота з якими йде за значенням, разом з можливістю використовувати не тільки вкладені масиви (як в Java), але і багатовимірні дозволяє оптимізувати продуктивність додатків.

Через дуже зручного об'єктно-орієнтованого дизайну, C # є гарним вибором для швидкого конструювання різних компонентів - від високорівневої бізнес логіки до системних додатків, що використовують низькорівневий код [6]. Також слід зазначити, що C # є і Web орієнтованим - використовуючи прості вбудовані конструкції мови ваші компоненти можуть бути легко перетворені в Web сервіси, до яких можна буде звертатися з Internet за допомогою будь-якої мови на будь-якій операційній системі. Додаткові можливості та переваги перед іншими мовами приносить в C # використання передових Web технологій, таких як: XML (Extensible Markup Language) і SOAP (Simple Object Access Protocol). Середовище розробки Web сервісів дозволяє програмісту дивитися на існуючі сьогодні Web додатки, як на рідні C # об'єкти, що дає можливість розробникам співвіднести наявні Web сервіси з їх знаннями в об'єктно-орієнтованому програмуванні [6].

Як було показано вище, обрана мова програмування найбільш зручний для виконання поставленого завдання.

1.2. Основні структури мови програмування C #

Класи

Класи - серце кожного об'єктно-орієнтованої мови. Як ви пам'ятаєте, клас є інкапсуляцією даних і методів їх обробки. Це справедливо для будь-якого об'єктно-орієнтованої мови і відрізняються вони в цьому плані лише типами тих даних, які можна зберігати у вигляді членів, а також можливостями класів. У тому, що стосується класів та багатьох функцій мови, С # дещо запозичує з C + + і Java, і привносить трохи винахідливості, що допомагає знайти елегантні вирішення старих проблем.

Синтаксис визначення класів на С #, простий, особливо якщо ви програмуєте на C + + або Java. Помістивши перед ім'ям вашого класу ключове слово class, ви вставляєте члени класу, укладені у фігурні дужки, наприклад:

class Employee

{

private long employeeld;

}

Як бачите, цей найпростіший клас з ім'ям Employee містить єдиний член - employeeld. Зауважте: імені члена передує ключове слово private - це модифікатор доступу (access modifier).

Члени класу

Типи, визначені в CIS (Common Type System) підтримуються як члени класів С # і бувають наступних видів.

  • Поле. Так називається член-змінна, що містить деяке значення. У ООП поля іноді називають даними об'єкту. До полю можна застосовувати кілька модифікаторів в залежності від того, як ви збираєтеся це поле використовувати. У число модифікаторів входять static, readonly і const.

  • Метод. Це реальний код, що впливає на дані об'єкта (або поля).

  • Властивості. Їх іноді називають "розумними" полями (smart fields), так як вони насправді є методами, які клієнти класу сприймають як поля. Це забезпечує клієнтам велику ступінь абстрагування за рахунок того, що їм не потрібно знати, звертаються вони до поля безпосередньо або через виклик методу-аксессора.

  • Константи. Як можна припустити, виходячи з імені, константа - це поле, значення якого змінити не можна.

  • Індексатори. Якщо властивості - це "розумні" поля, то індексатори - це "розумні" масиви, так як вони дозволяють індексувати об'єкти методами-аксессорамі get і set. За допомогою індексатора легко проіндексувати об'єкт для установки або отримання значень.

  • Події. Подія викликає виконання деякого фрагмента коду. Події - невід'ємна частина програмування для Microsoft Windows. Наприклад, події виникають при русі миші, клацнути або зміну розмірів вікна. Події З # використовують ту ж стандартну модель публікації / підписки (publish / subscribe), що і в MSMQ (Microsoft Message Queuing) і асинхронної моделі подій СОМ +, яка дає додатком кошти асинхронної обробки подій. Але в С # це базова концепція, вбудована в мову.

  • Оператори. Використовуючи перевантаження операторів С #, можна додавати до класу стандартні математичні оператори, які дозволяють писати більш інтуїтивно зрозумілий код.

Масиви

Масиви в C # дуже прості і схожі на масиви в C + +. У C # є три основних типи масивів: одномірні, багатомірні і нерівні (jagged):
З одновимірними масивами все як завжди:

Ініціалізація.

Ініціалізуть вони також як в C + +:

int [] array = new int [10];

int [] array = {1, 2, 3, 4, 5};

Доступ

Доступ до елементів проводиться за допомогою оператора []:

int element = array [0];

Елементи нумеруються індексами від 0 до N - 1, де N - розмір масиву.
Багатовимірні масиви являють собою багатовимірні куби значень. Елементи таких масивів ідентифікуються набором індексів - "координат" у багатовимірному просторі. Кожен вимір має свою розмірність, не залежну від інших. Відзначимо, що багатовимірні масиви є важливою відмінністю від інших подібних мов (Java), бо в порівнянні з нерівними масивами, забезпечують значно більшу продуктивність.

Ініціалізація

При ініціалізації розмірності вимірювань вказуються через кому:

int [,] array = new int [10, 20];

int [,] array = {{1, 2}, {3, 4}};

Доступ

Доступ до елементів проводиться за допомогою оператора [], в якому індекси також вказуються через кому:

int element = array [0, 2];

Елементи нумеруються наборами індексів, кожний з яких може приймати значення від 0 до N - 1, де N - розмір відповідного розмірності масиву.

Керуючі конструкції

Керуючі конструкції - це той засіб, який дозволяє вам створювати алгоритми. Стандартними керуючими конструкціями є if, for, while goto. До того ж в C # є багато додаткових конструкцій: switch, do і foreach.

if .. else

Блок if .. else, як випливає з назви, дозволяє виконувати код при виконанні певної умови.

if (a> b)

{

Console.WriteLine ("a> b");

}

else

{

Console.WriteLine ("a <= b");

}

Логічний вираз в дужках повинно мати тип bool (на відміну від C / C + +, де вираз був цілим). Якщо воно істинне, виконається перший блок команд, якщо помилково - другий. При цьому якщо якийсь блок команд складається лише з однієї команди, що обрамляють фігурні дужки можна опустити [8]:

if (serverObject! = null)

serverObject.Initialize ();

Покажемо кілька прикладів:

/ / Йде перевірка, щоб уникнути поділу на 0

if (x! = 0)

{

d / = x;

}

else

return;

/ / Перевіряємо, повернула процедура значення і, якщо немає, повертаємо null

if (command.Parameters ["RETURN_VALUE"]. Value! = Convert.DBNull)

return command.Parameters ["RETURN_VALUE"]. Value;

else

return null;

Цикл for

Цикл for представляє цикл з ініціалізація командою, умовою закінчення і командою переходу.

ArrayList items = new ArrayList (); / / Ініціалізіруем список деяким чином

CreateArray (items); / / Виводимо всі його елементи по черзі

for (int i = 0; i <items.Count; i + +)

{

Console.WriteLine ("i [{0}] = {1}", i, items [i]);

}

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

У найпростішому випадку цикл for оформлений наступним чином:

/ / Складаємо всі елементи масиву

for (int i = 0; i <10; i + +)

sum + = array [i];

Така форма циклу використовується, якщо вам потрібно проітеріроваться з цілим параметром із зазначенням номера ітерації або якщо просто потрібно виконати дію певна кількість (у нашому прикладі 10) разів.

while

Цикл while є циклом з передумовою: спочатку перевіряється певну умову переходу, а потім виконується ітерація циклу. Синтаксис циклу while в загальному випадку наступний:

/ / Задаємо число

int num = 678;

/ / Число розрядів - 0

int len = 0;

/ / Вважаємо скільки розрядів у числі

while (num> 0)

{

len + +;

num / = 10;

}

Console.WriteLine (len);

Семантика дуже проста: перевіряємо умову переходу. Якщо воно істинне, то переходимо до тіла циклу і потім знову до перевірки умови, інакше - припиняємо виконання циклу.

switch

Оператор switch є розширеним оператором розгалуження, який дозволяє в залежності від значення виразу перейти до виконання певного коду. По суті, він еквівалентний набору блоків if, але набагато більш оптимальний.

Найбільш поширеним синтаксисом switch є наступний:

int a = 1;

switch (a)

{

case 0:

/ / Оператори, що виконуються якщо a = 0

Console.WriteLine ("A = 0");

break;

case 1:

/ / Оператори, що виконуються якщо a = 1

Console.WriteLine ("A = 1");

break;

default:

/ / Оператори, що виконуються, якщо жоден з явних випадків не підійшов

Console.WriteLine ("A <> 0 і A <> 1");

break;

}

Блок case x виконується, якщо вираз, вказане в дужках після switch одно x. Блок default - якщо жодна з case-виразів не виповнилося. Зручно switch використовувати для обробки виразів перелічуваних типів.

Для переходів між блоками можна використовувати команди goto case і goto default.

do

Оператор do реалізує цикл з постусловіем. Суть цього циклу аналогічна while, але умова виходу перевіряється не до ітерації, а після. Це іноді буває зручним.

string s = "A, B, C, D";

do

{

s = s.Substring (s.IndexOf (",") + 1);

} While (s.Length> 0);

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

Поля і методи

Оголошення полів аналогічна декларації змінних і має вигляд:

<Модіфікатор_доступності> <тип> <ідент_поля>;

Існує кілька різних модифікаторів доступу. Ми будемо використовувати тільки один - public. В якості типу може використовуватися будь-який із стандартних або користувачів. Ідентифікатор прийнято починати з літери f із зазначенням, яке властивість реального об'єкта відображає це поле, наприклад, fSpeed.

Якщо ім'я поля складається з декількох слів, то використовується верблюжа нотація fMaxFloor. Наприклад, оголошення полів класів може мати вигляд:

public int fLevel;

public int fPassenger;

public float fSpeed;

При оголошенні методів використовується конструкція виду:

<Модіф_дост> <тіп_возвр_знач> <ідент_метода> (<формальн_парам> opt)

{

<Тело_метода>

}

Метод в процесі своєї роботи може не тільки змінювати поля об'єкту, але й обчислювати деякі додаткові значення. Тип повертається методом значення і вказується замість <тіп_возвр_знач>.

Якщо повертати значення не потрібно, то як типу значення вказується void.

Параметри методів бувають формальні і реальні. Формальні параметри використовуються при оголошенні методу в круглих дужках, що йдуть за ідентифікатором методу. Реальні параметри передаються в метод при зверненні до нього в круглих дужках. У разі якщо у методу є параметри, його оголошення буде мати вигляд:

<Модіф_дост> <тіп_возвр_знач> <ідент_перем> (<спісок_форм_пар>)

{

<Тело_цікла>

}

<Список_формальных_параметров >::=< тип> <ідент>, <тип> <ідент> opt ..

Наприклад, public void Move (byte level)

Як реальний параметра в метод може передаватися константа, змінна, результат виконання операції, значення повертається функції й т.д. Єдине обмеження - тип реального параметра повинен збігатися з типом формального параметра [9].

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

У випадку, коли методом потрібно повернути більше 1 значення, для 2, 3 і т.д. значення, що повертається перед типом формального параметра, що використовується для повернення значення, ставиться ключове слово ref. У разі виклику такого методу перед реальним параметром також вказується ключове слово ref, і реальний параметр в цьому випадку може бути тільки змінної.

1.3. Кодування за методом парності / непарності

Для контролю правильності передачі інформації, а також як засіб шифрування інформації використовуються різні коди. Коди, що використовують для передачі інформації два різних елементарних сигналу, називаються двійковими. Ці сигнали зручно позначати символами 0 і 1. Тоді кодове слово буде складатися з послідовності нулів та одиниць.

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

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

При цьому абсолютна надмірність буде виражатися кількістю контрольних розрядів - k, а відносна надмірність - , Де m - кількість інформаційних розрядів.

Поняття корегуючої здатності коду пов'язують з можливістю виявлення та виправлення помилки. Кількісно коригуюча здатність коду визначається імовірністю виявлення або виправлення помилки [4].

Однією з найпростіших форм перевірки помилок є контроль на парність. У чому ж полягає сенс кодування за методом парності / непарності? Його суть полягає в тому, що кожної кодової комбінації додається один розряд, в який записується одиниця, якщо число одиниць у кодовій комбінації непарне, або нуль, якщо парне. При декодуванні підраховується кількість одиниць в кодової комбінації. Якщо воно виявляється парних, то надійшла інформація вважається правильною, якщо немає, то помилковою.

Крім перевірки по горизонталі контроль на парність і непарність може проводитися і по вертикалі.

Переваги контролю на парність полягає в мінімальному значенні коефіцієнта надмірності (для пятіелементного коду К = 0,17) і в простоті його технічної реалізації, а недолік - в тому, що виявляються помилки, що мають тільки непарну кратність.

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

Перевірка на парність / непарність по одному біту також є неприйнятною і для багатьох аналогових ліній мовного діапазону через групування помилок, який зазвичай відбувається в лініях зв'язку такого типу.

Подвійна перевірка на парність / непарність є удосконаленням одинарної перевірки. У цій методиці замість біта парності в кожному символі визначається парність або непарність цілого блоку символів. Перевірка блоку дозволяє виявляти помилки як усередині символу, так і між символами. Ця перевірка називається також двовимірним кодом перевірки на парність. Вона має значну перевагу в порівнянні з одинарною. За допомогою такої перехресної перевірки може бути істотно поліпшена надійність роботи звичайної телефонної лінії, ймовірність появи помилки в якій становить 10. Однак, як ординарна, так і подвійна перевірка на парність означають збільшення накладних витрат і відносне зменшення виходу інформації для користувача.

Розглянемо докладно спосіб знаходження однієї помилки. Якщо в математичному коді виділений один контрольний розряд, то до кожного бінарного числа додається один надлишковий розряд. До цього розряду записується 1 або 0 з такою умовою, щоб сума цифр за модулем 2 була дорівнює 0 для випадку парності або 1 для випадку непарності. Поява помилки в кодуванні виявляється з порушення парності / непарності. При такому кодуванні допускається, що може виникнути тільки одна помилка.

Приклад реалізації методу парності:

Число

Контрольний розряд

Перевірка

10101011

1

0

11001010

0

0

10010001

1

0

11001011

0

1 - помилка

Можна уявити і дещо видозмінений спосіб контролю за методом парності / непарності. Довге слово розбивається на групи, кожна з яких містить n розрядів. Контрольні розряди - k, виділяються всім групам по рядках і стовпцях згідно з наступною схемою:

Збільшення надмірності призводить до того, що з'являється можливість не тільки виявити помилку, але і виправити її.

Наприклад: число 1000111011010101110010101 представимо за згаданою вище схемою, отримаємо:

1

0

0

0

1

0

1

1

0

1

1

0

0

1

0

1

0

0

1

1

1

0

0

1

1

0

1

0

1

1

0

1

0

0

1


Тепер, якщо при передачі було отримано число:

1

0

0

0

1

0

1

1

0

1

1

0

0

1

0

0

0

0

1

1

1

0

0

1

1

0

1

0

1

1

0

1

0

0

1


Тоді перевірка показує, що помилка виникла в інформації третього рядка і четвертого стовпця. Отже, розряд, що містить помилкову інформацію, знаходиться на перетині третього рядка і четвертого стовпця. Помилку можна усунути, змінивши 0 на 1.

1.4. Кодування за методом Хеммінга

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

Запропоновані Хеммінга регулярні методи побудови кодів, що коректують помилки, мають фундаментальне значення. Вони демонструють інженерам практичну можливість досягнення меж, на яку вказували закони теорії інформації. Ці коди знайшли практичне застосування при створенні комп'ютерних систем. Робота Хеммінга привела до вирішення проблеми більш щільної упаковки для кінцевих полів. Він ввів у науковий обіг найважливіші поняття теорії кодування - відстань Хеммінга між кодовими комбінаціями в векторному просторі, що визначається для двійкових кодів як кількість позицій цих комбінацій з різними символами, і межі Хеммінга для виправляючої здібності блокових коригувальних кодів. Кордон Хеммінга для двійкових кодів розраховується за наступною формулою:

У цьому виразі число помилок e може бути виправлено коригуючих блоковим кодом довжиною N, що мають М кодових комбінацій (C j N - біноміальний коефіцієнт) [3].

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

Коди Хеммінга дозволяють не тільки виявити наявність помилки, а й місце її знаходження і, отже, дають можливість її виправити. Однак коди Хеммінга володіють меншою надмірністю (в порівнянні з кодуванням за методом парності-непарності), тобто кількістю додаткових контрольних розрядів.

При передачі коду може бути спотворений або не спотворений будь-який символ. Якщо довжина коду - n символів, то - Повна кількість комбінацій коду. За методикою Хеммінга можна визначити число інформаційних символів коду, що виявляє і коригуючого одиночну помилку наступним чином:

, Де

- Число інформаційних символів в коді;

- Число контрольних символів;

- Довжина коду Хеммінга.

Співвідношення n, і для коду Хеммінга можна представити у вигляді таблиці:

Таблиця 2.2. A

n

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

0

0

1

1

2

3

4

4

5

6

7

8

9

10

11

11

1

2

2

3

3

3

3

4

4

4

4

4

4

4

4

5

Припустимо, що є код, який містить m інформаційних і k контрольних розрядів. Всі розряди, включаючи контрольні, розбиваються на k груп за певними правилами, про які буде сказано нижче. Кожна група, що містить один контрольний розряд, перевіряється на парність. Нехай були проведені всі k перевірок. Якщо результат даної перевірки свідчить про відсутність помилки, то записується 0, якщо є помилка, то записується 1. У результаті виходить послідовність, що складається з k нулів та одиниць. При відсутності помилки в коді виходить послідовність нулів. Отримане k-розрядне двійкове число може містити 2k різних комбінацій нулів та одиниць. За допомогою цієї інформації потрібно визначити помилковий розряд в коді, що містить m + k розрядів. Для того щоб це було можливо повинно виконуватися нерівність:

2 k  (m + k +1)

Визначити максимальне значення m для даного k можна з наступної таблиці.

n

1,2,3,4 ...

8, ..., 15

16, ... 31

...

m

0,0,1,1 ...

4, ... 11

11, ... 26

...

k

1,2,2,3

4 ... 4

5 ... 5

...

З таблиці видно, для 16-ти розрядного числа потрібно 5 контрольних розрядів. Для порівняння, чоловіки в разі модифікованого методу парності знадобилося б 8 контрольних розрядів. Позиції контрольних розрядів у методі Хеммінга визначені заздалегідь, це розряди 1,2,4,8, ... Розряди, що входять в кожну групу перевірки представлені у наступній таблиці (1-й розряд в кожній групі є контрольним).

номер групи перевірки

перевіряються розряди

1

1,3,5,7,9,11,13,15, ...

2

2,3,6,7,10,11,14,15,18,19,22,23, ...

3

4,5,6,7,12,13,14,15,20,21,22,23, ...

4

8,9,10,11,12,13,14,15,24, ...

З таблиці видно, що якщо, наприклад код Хеммінга містить 9 розрядів, включаючи контрольні, то 1-я група перевірки містить 1,3,5,7,9 розряди. 2-я група перевірки містить 2,3,6,7 розряди. 3-група перевірки містить 4,5,6,7 розряди та 4-а група - 8,9 розряди. Кожній групі перевірки приписується 1, якщо перевірка на парність виявляє помилку і 0, якщо помилки немає. Отримане двійкове число дає номер помилкового розряду.

Код Хеммінга має істотний недолік: у разі виявлення будь-якого числа помилок він виправляє лише поодинокі помилки. Наприклад, надмірність семіелементного коду Хеммінга дорівнює 0,43. При збільшенні значности кодових комбінацій збільшується кількість перевірок, але зменшується надмірність коду. До того ж код Хеммінга не дозволяє виявити групові помилки. Довжина пакету помилок є збільшеною на одиницю різниця між іменами старшого і молодшого помилкових елементів.

Розглянемо як приклад 5-ти розрядне двійкове число 10011. У цьому випадку, як випливає з вищенаведеної таблиці, 1-а група перевірки складається з 1,3, і 5-го розрядів. 2-я група перевірки складається з 2 і 3-го розряду. 3-тя група перевірки складається з 4 і 5-го розрядів. Результат перевірки на парність 1-ї групи дає 0 (101), перевірка 2-ї групи дає 0 (00), перевірка 3-ї групи дає 0 (11).

k 1 = 1 + 0 + 1 = 0 - немає помилки;

k 2 = 0 + 0 = 0 - немає помилки;

k 3 = 1 + 1 = 0 - немає помилки.

Таким чином, дане число не містить помилки. Штучно введемо помилку, замінивши, наприклад, 4-й розряд на 0. У цьому випадку 1, 2 і 3-я перевірки дадуть відповідно 0, 0, 1.

k 1 = 1 + 0 + 1 = 0 - немає помилки;

k 2 = 0 + 0 = 0 - немає помилки;

k 3 = 0 + 1 = 1 - помилка.

Отримане двійкове число 100 дає номер помилкового розряду, тобто 4.

1.5. Машина Поста

«Зовнішній вигляд» машини Посту

Машина Посту не є реально існуюче, зроблене кимось пристрій; тому слова «зовнішній вигляд» і взяті в лапки. Машина Поста, як і її близький родич - машина Тьюрінга, - являє собою уявну конструкцію, існуючу лише в нашій уяві (Хоча її, в принципі і можна було б виготовити «в металі»). Саме це мають на увазі, коли говорять про машини Поста і Тьюрінга, що вони суть «абстрактні» обчислювальні машини. І подібно до того, як можна вивчитися вважати на рахунках або на логарифмічній лінійці, не маючи перед собою цих приладів, а, користуючись лише їх описами і представляючи їх собі подумки, так само і ми навчимося обчислювати на машині Посту.

Машина Поста складається з стрічки і каретки (званої також зчитує і записує голівкою).

Стрічка нескінченний і розділена на секції однакового розміру: для наочності стрічку будемо вважати розташованої горизонтально (рис. 13).

Нескінченність стрічки знаходиться в протиріччі зі зробленим вище твердженням, що машину Посту можна було б в принципі побудувати. Справа в тому, що ми оголосили стрічку нескінченної лише для простоти викладу. З тим же успіхом можна було б припустити, що стрічка не нескінченна, а лише необмежено росте в обидві сторони: наприклад, можна було б вважати, що стрічка нарощується на одну секцію, як тільки каретка доходить до кінця стрічки і повинна рухатися далі, або вважати , що за кожну одиницю часу ліворуч і праворуч наростає по одній секції. Однак буде зручніше вважати, що всі секції зліва і праворуч вже наросли, і тим самим, хоча і на шкоду реальності, вважати стрічку нескінченної в обидві сторони.

Порядок, в якому розташовані секції стрічки, подібний до порядку, в якому розташовані всі цілі числа. Тому природно ввести на стрічці «цілочисельну систему координат», занумеровані секції цілими числами ..., -3, -2, -1,0,1, 2,3, ... (Рис. 14).

Ми будемо вважати, що система координат жорстко зіставлена ​​зі стрічкою, і отримаємо, таким чином, можливість вказувати будь-яку секцію стрічки, називаючи її порядковий номер, або координату. (Іноді, втім, буває зручно поряд з основною, «постійної» системою координат, ввести ще допоміжну, «тимчасову», зрушену по відношенню до первісної)

У кожній секції стрічки може бути або нічого не записано (така секція називається порожній), або записана мітка V (тоді секція називається зазначеної) (рис. 15).

Інформація про те, які секції порожні, а які відзначені, утворює стан стрічки. Іншими словами, стан стрічки - це розподіл позначок за її секціях. Як ми далі побачимо, стан стрічки змінюється в процесі роботи машини.

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

Інформація про те, які секції порожні, а які відзначені і де варто каретка, утворює стан машини Посту.

Таким чином, стан машини складається зі стану стрічки і зазначення номера тієї секції, яку оглядає каретка. За одиницю часу (яку ми будемо називати кроком) каретка може зрушитися на одну секцію вліво або вправо. Крім того, каретка може поставити (надрукувати) або знищити (стерти) мітку на тій секції, проти якої вона стоїть, а також розпізнати, варто чи ні мітка в оглядає, нею секцією [2].

Програма машини Посту

Робота машини Посту полягає в тому, що каретка пересувається уздовж стрічки і друкує або стирає мітки. Ця робота відбувається за інструкцією певного виду, званою програмою. Для машини Посту можливе складання різних програм. Подивимося, як влаштована програма.

Кожна програма машини Посту складається з команд. Командою машини Посту будемо називати вираз, що має один з наступних шести видів (букви i, j, j 1, j 2 означають всюди натуральні числа 1, 2, 3, 4, 5, ...):

Перший вид. Команди руху праворуч.

Другий вид. Команди рухи вліво.

Третій вид. Команди друкування мітки.

Четвертий вид. Команди стирання мітки.

П'ятий вид. Команди передачі управління.

Шостий вид. Команди зупинки.

Наприклад,

є командою руху вправо,

- Командою передачі управління, а

-Командою зупинки.

Число i, що стоїть на початку команди, називається номером команди. Так, у які тільки що команд номери відповідно 137, 25 і 6386. Число j, що стоїть у кінці команди (а у команд передачі управління - кожне з чисел j 1, і j 2), будемо називати відсиланням (при цьому в команді передачі управління j 1-верхній, а j 2 - нижній відсиланням). У команд зупинки немає посилання. Так, у які тільки що команд відсиланнями служать числа 1, 32, 25, причому 32-верхня відсилання, а 25 - нижня відсилання.

Програмою машини Посту будемо називати кінцевий непорожній (тобто містить хоча б одну команду) список команд машини Посту, що володіє наступними двома властивостями:

1) На першому місці в цьому списку стоїть команда з номером 1, на другому місці (якщо воно є) - команда з номером 2 і т. д.; взагалі на k-му місці стоїть команда з номером k.

2) Перевести кожної з команд списку збігається з номером деякою (іншої чи тієї ж самої) команди списку (точніше: для кожної відсилання кожної команди списку знайдеться в.спіске така команда, номер якої дорівнює розглянутої відсилання).

Наприклад, наступний список буде програмою машини Посту:

А ці два списки не будуть програмами машини Посту, хоча і складені з команд машини Посту:

Для наочності програми машини Посту ми будемо записувати стовпчиком. Кількість команд програми називається довжиною програми [1].

Робота машини Посту

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

Як вже говорилося, програма є тією інструкцією, на підставі якої працює машина. Робота машини на підставі заданої програми (і при заданому початковому стані) відбувається наступним чином. Машина приводиться в початковий стан і приступає до виконання першої команди програми. Ця команда виконується за один крок, після чого машина приступає до виконання тієї команди, номер якої (назвемо його а) дорівнює відсилання (однією з відсилань, якщо їх дві) першої команди. Ця команда також виконується за один крок, після чого починається виконання команди, номер якої дорівнює відсилання команди з номером а. Взагалі кожна команда виконується за один крок, а перехід від виконання однієї команди до виконання іншої відбувається за наступним правилом: нехай на k-му кроці виконувалася команда з номером i, тоді, якщо ця команда має єдину відсилання j, то на k +1- м кроці виконується команда з номером j; якщо ця команда має дві відсилання j 1 і j 2, то на k +1- му кроці виконується одна з двох команд - з номером j 1 або за номером; якщо, нарешті, що виконується на k - м кроці команда зовсім не має відсилання, то на k + 1-му кроці і на всіх наступних кроках не виконується жодна команда: машина зупиняється. Залишилося пояснити, що означає виконати команду і яка з відсилань - при наявності двох - вибирається в якості номера наступної команди.

Виконання команди руху вправо полягає а тому, що каретка зсувається на одну секцію вправо. Виконання команди рухи вліво полягає в тому, що каретка зсувається на одну секцію вліво. Виконання команди друкування мітки полягає в тому, що каретка ставить позначку на оглядає, секції; виконання цієї команди можливо лише в тому випадку, якщо оглядається перед початком виконання команди секція порожня; якщо ж на оглядає, секції вже стоїть позначка, команда вважається невиконаною. Виконання команди стирання мітки полягає в тому, що каретка знищує мітку в оглядає, секції; виконання цієї команди можливо лише в тому випадку, якщо оглядається секція відзначена; якщо ж на оглядає, секції і так немає мітки, команда вважається невиконаною. Виконання команди передачі управління з верхньою відсиланням j 1 та нижньої відсиланням j 2 ніяк не змінює стану машини: жодна з міток не знищується і не ставиться, і каретка також залишається нерухомою (машина робить, так би мовити, «крок на місці»), а проте якщо секція, оглядається перед початком виконання цієї команди, була порожня, то наступною повинна виконуватися команда з номером j 1, якщо ж ця секція була відзначена, наступного повинна виконуватися команда з номером j 2 (роль команди передачі управління зводиться, отже, до того, що каретка під час виконання цієї команди як би «розпізнає», чи варто перед нею мітка). Виконання команди зупинки теж ніяк не змінює стану машини і полягає в тому, що машина зупиняється.

Якщо тепер, задавшись програмою і яким-небудь початковим станом, пустити машину в хід, то здійсниться один з наступних трьох варіантів:

1) У ході виконання програми машина дійде до виконання нездійсненним команди (друкування мітки в непорожній секції або стирання мітки в порожній секції), виконання програми тоді припиняється, машина зупиняється; відбувається так звана безрезультатна зупинка.

2) У ході виконання програми машина дійде до виконання команди зупинки; програма в цьому випадку вважається виконаною, машина зупиняється; відбувається так звана результативна зупинка.

3) У ході виконання програми машина не дійде до виконання ні однієї з команд, зазначених в перших двох варіантах; виконання програми при цьому ніколи не припиняється, машина ніколи не зупиняється; процес роботи машини відбувається нескінченно [5].

Глава 2. Інструкція програміста

Дана навчальна програма повинна запускатися на IBM та сумісних комп'ютерах. Мінімальні системні вимоги: процесор Pentium і вище, обсяг оперативної пам'яті 16 MB, відеокарта з розширенням 800 x 600, 256 кольорів, операційна система сімейства Windows 95 і вище, на комп'ютері також повинен бути встановлений. NET Framework.

Основну цінність представляють файли розширенням *. cs (у них міститься весь код програми).

Опишемо основні файли, що містяться в цій папці:

  • Even _ ueven. Cs - файл, в якому міститься код, що відповідає за роботу алгоритму «Кодування за методом парності \ непарності»;

  • Even _ ueven. Resx - файл, в якому міститься інформація про графічному поданні форми «Кодування за методом парності \ непарності»;

  • Hemming. Cs - файл, в якому міститься код, що відповідає за роботу алгоритму «Кодування за методом Хеммінга»;

  • Hemming. Resx - файл, в якому міститься інформація про графічному поданні форми «Кодування за методом Хеммінга»;

  • Post. Cs - файл, в якому міститься код, що відповідає за роботу алгоритму «Програмування машини Посту»;

  • Post. Resx - файл, в якому міститься інформація про графічному поданні форми «Програмування машини Посту»;

  • Error. Cs - файл, в якому міститься код, що відповідає за роботу форми Error;

  • Error. Resx - файл, в якому міститься інформація про графічному поданні форми Error;

  • Help. Cs - файл, в якому міститься код, що відповідає за роботу форми Довідка;

  • Help. Resx - файл, в якому міститься інформація про графічному поданні форми Довідка;

  • Start. Cs - файл, в якому міститься код, що відповідає за роботу форми Start;

  • Start. Resx - файл, в якому міститься інформація про графічному поданні форми Start;

  • AssemblyInfo.cs - файл, в якому міститься інформація про версію файлу, внутрішньому і вихідному імені файлу, виробника;

  • StudyProgram. Exe - закомпілірованний файл програми, що знаходиться в папці debug, яка знаходиться в папці bin.

Для зміни програми необхідно змінити її вихідний код. Це можна зробити, використовуючи будь-який текстовий редактор. Приклад коду представлений на Рис.2.

Зміна коду за допомогою текстового редактора не дуже зручно, для цього краще використовувати Visual Studio. Net, спеціально для цього розроблений.

На Рис.3 можна побачити зовнішній вигляд Visual Studio. Net. Для його запуску необхідно клікнути кнопку Пуск, вибрати в пункті Всі програми \ Microsoft Visual Studio. NET 2003 \ Microsoft Visual Studio. NET 2003. Далі в запустивши додаток клікнути кнопку Open Project і використовуючи провідник, вибрати файл Study _ Programs. Sln. Програма відкриє програму. Для зміни зовнішнього вигляду програми необхідно скористатися ярликом Design. Можна додати нові елементи форми, перетягнувши їх з виїжджає вікна Toolbox. Вихідний код програми див. у Додатку.

На самому початку програми задаються поля, так звані член-змінні, що містять деяке значення: int Prav; int ch; int ChVoprosov = 1 (в ООП поля іноді називають даними об'єкта). Де Prav-це кількість правильних відповідей, ch - це сума всіх розрядів генерується числа і контрольного розряду, а ChVoprosov-число питань заданих користувачу (нумерація починається з 1) Перед ідентифікаторами полів вказуються їх типи.

При запуску форми Even _ ueven під час роботи програми відразу спрацьовує метод Genera t ion ();. Суть даного методу полягає в тому, щоб згенерувати довільне семизначні двійкове число, яке з'явиться у вікні textBox1 і контрольний розряд (який також є двійковим числом), який з'явиться у вікні textBox2. Для цього створюється генератор випадкових чисел, який записує в змінну d або 0, або 1 (d = r. Next (0,2);), дана операція повторюється 7 разів за допомогою циклу з параметром for (for (int i = 0; i <7; i + +)). У результаті, послідовно додавши кожну з згенерованих цифр, ми отримуємо необхідну семизначні число. Контрольний розряд створюється також за допомогою генератора випадкових чисел (g = r. Next (0,2);). Також у цьому методі відразу підраховується сума всіх розрядів генерується числа і контрольного розряду ch: спочатку складаються розряди числа все в тому ж циклі for ( ch + = d; - 7 разів), а потім додається контрольний розряд g (ch + = g;).

При натисканні кнопки button 1 (Код числа правильний) спочатку запускається метод ChangeChVoposov (); який збільшує номер питання на одну одиницю у вікні textBox3. Потім у полі Prav (кількість правильних відповідей) зчитується значення з вікна textBox 4 (при першому запуску воно дорівнює 0), Далі з допомогою керуючої конструкції if (ch == 0 | | ch == 2 | | ch == 4 | | ch == 6) визначається правильно користувач відповів: ch - сума всіх розрядів генерується числа і контрольного розряду повинна бути парному або рівною 0. У випадку вірного вибору кількість правильних відповідей збільшується на 1 (Prav + +;). Потім запускається метод ChangePrav ();, який встановлює число правильних відповідей у вікні textBox4. Після чого ch обнуляється (ch = 0;), і запускається метод Generation ();.

При натисканні кнопки button 2 (Код числа неправильний) алгоритм програми є практично аналогічним за винятком того, що в керуючій конструкції if (ch == 1 | | ch == 3 | | ch == 5 | | ch == 7) правильність відповіді користувача полягає в тому, щоб сума ch була непарним числом.

Також слід звернути увагу на те, що при роботі з дизайном форми потрібно заблокувати вікна від користувача, щоб він не зміг передрукувати значення генеруються семіразрядного числа і контрольного розряду, а також кількість заданих питань і даних правильних відповідей. Вихідний код програми представлений в Додатку.

Кодування за методом Хеммінга

На самому початку програми задаються поля: int ChVoprosov = 1,

int X; int Nomer; int [] x = new int [10]. Де X - це змінна значення якої не дозволяє в певних випадках натисканням на одну й ту ж саму кнопку збільшувати число правильних відповідей, Nomer - це одержуваний номер розряду, який підлягає заміні на протилежний, int [] x = new int [10] - це масив, що складається зі значень, які є розрядами генерується двійкового числа, а ChVoprosov-число питань заданих користувачу (нумерація починається з 1). Перед ідентифікаторами полів вказуються їх типи.

При запуску форми Hemming під час роботи програми відразу спрацьовує метод Genera t ion (); і метод Number ();. Суть першого методу полягає в тому, щоб згенерувати довільне дев'ятизначну двійкове число, яке з'явиться у вікні textBox1. Суть другого методу полягає в тому, щоб підрахувати номер розряду, в якому є помилка (якщо звичайно така взагалі є). Слід врахувати, що номер підраховується в двійковому вигляді.

Для формування довільного дев'ятизначного двійкового числа створюється генератор випадкових чисел, який записує в змінну d або 0, або 1 (d = r. Next (0,2);), дана операція повторюється 9 разів за допомогою циклу з параметром for (for (int i = 1; i <10; i + +)). У результаті, послідовно додавши кожну з згенерованих цифр, ми отримуємо необхідну дев'ятизначну число. Також на кожному кроці циклу з параметром зчитуються значення в масив int [] x (x [i] = d;), тобто виходить, що кожен елемент масиву дорівнює відповідному за номером розряду згенерованого числа. У даному методі змінна X прирівнюється до 1, що означає, що число тільки що згенерований і користувач ще не пробував дати свою відповідь.

У методі Number () підраховуються суми контрольних розрядів сгенеріруемого по числа, що відповідають певним групам перевірки. У нашому випадку кількість груп перевірки для дев'ятизначного числа дорівнює 4, отже, ми отримуємо чотири суми x 1, x 2, x 3, x 4.

Потім підраховується номер помилкового розряду (Nomer = x4 * 1000 + x3 * 100 + x2 * 10 + x1;)

При натисканні кнопки button 1 (Помилки немає) на початку зникає все те, що користувач встиг ввести у вікно «Виправлений варіант» (textBox2.Text ="";), тому натиснувши цю кнопку користувач показує те, що він вже не знаходить помилок у числі. Потім з допомогою керуючої конструкції if перевіряється не записаний чи є вже відповідь у вікні «Правильна відповідь» (if (textBox1.Text.Length! = TextBox3.Text.Length) їли не записаний, то тоді X прирівнюється до одиниці: X = 1;) Потім з допомогою керуючої конструкції if перевіряється, чи дорівнює X одиниці (if (X == 1) - якщо це виконано, то значить, що користувач ще не пробував дати свою відповідь). Подальше виконання дій можливе тільки якщо X = 1. Потім, використовуючи знову if, Nomer порівнюється з нулем (if (Nomer == 0)). У разі виконання цієї умови (тобто номер помилкового розряду дорівнює нулю, що означає відсутність помилки) число правильних відповідей збільшується на одну одиницю (Prav + +;), і запускається метод Otvet ();. Даний метод записує у вікно textBox3 (Правильна відповідь) відповідь, що отримується шляхом запису всіх елементів масиву int [] x в порядку зростання:

textBox3.Text = x [1 ]+""+ x [2 ]+""+ x [3 ]+""+ x [4 ]+""+ x [5 ]+""+[ 6] + "" + x [7 ]+""+ x [8 ]+""+ x [9];

У даному випадку помилка відсутня і всі елементи запишуться без зміни, тобто у вікні textBox3 з'явиться число, аналогічне тому, яке знаходиться у вікні textBox1 (Число, можливо містить помилку).

Якщо Nomer не дорівнює нулю, то тоді запускається метод Sravnenie ();. Цей метод спочатку перевіряє не дали ви вже свій остаточний відповідь (не дорівнює чи вже X нулю) і тільки у випадку рівності X одиниці (if (X == 1)) виконується вся інша частина методу: змінну i прирівнюють т до нуля (int i = 0;). Потім відбувається порівняння числа Nomer з двійковими цифрами, які при перекладі в десяткову систему числення відповідають числам від 0 до 9 (наприклад: if (Nomer == 101) - число Nomer порівнюється з двійковим числом 101, яким в десятковій системі числення відповідає 5). Якщо Nomer дорівнює якомусь із запропонованих двійкових чисел, то тоді змінної i присвоюється значення відповідного десяткового числа (Наприклад у випадку рівності номери числа 101, змінної i присвоїти значення 5 (i = 5;)). Якщо змінна i змінює своє значення з нуля на якийсь від 1 до 9, то тоді виконується умова наступної за цим керуючої конструкції if (i! = 0) (i відмінно від нуля) і здійснюється наступні операції: x [i] порівнюється з 0, якщо це виконується, то тоді x [i] змінює своє значення на протилежне, тобто на 1, і потім запускається вже згаданий вище метод Otvet (); (тільки тепер у вікні textBox3 з'явиться число, аналогічне тому, яке знаходиться у вікні textBox1 (Число, можливо містить помилку), але вже з заміненим на протилежний розрядом, номер якого дорівнює i.). Якщо x [i] не дорівнює 0 (отже дорівнює 1), то тоді виконується гілка else з аналогічними діями, тільки для x [i] протилежним значенням буде 0.

Якщо в ході виконання методу Sravnenie (); не було проведене ніяких замін (не виконувався метод Otvet ();), то це означає, що числа Nomer відповідає якесь двійкове число, яке при перекладі в десяткову систему числення дає цифру більшу 9. Це означає, що в згенерованому девятіразрядном числі немає помилок. Тоді за допомогою порівняння довжини рядка у вікні textBox 3 з нулем (if (textBox3.Text.Length == 0)) ми отримуємо в разі виконання цієї умови, що помилки відсутні. Отже, ми можемо збільшити число правильних відповідей на 1 і запустити метод Otvet ();, який запише у вікно textBox 3 число, рівне тому, яке знаходиться у вікні textBox1 (Число, можливо містить помилку).

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

При натисканні кнопки button 2 (Помилка є) на початку запускається метод Proverka ();. Сенс цього методу полягає в тому, щоб перевірити ввів користувач достатню кількість розрядів у вікно «Виправлений варіант» і чи є вони двійковими числами (0 і 1). Спочатку з допомогою керуючої конструкції if перевіряється, записав чи користувач рядок у вікно «Виправлений варіант» необхідної довжини і чи немає вже з'явився відповіді у вікні textBox 3 (Правильна відповідь): if (textBox2.Text.Length! = TextBox 1. Text. Length & & textBox 1. Text. Length! = textBox 3. Text. Length)

Якщо ця умова виконується, то це означає, що користувач ввів у вікно «Виправлений варіант» рядок меншу за своєю довжиною 9 або те, що вже було отримано відповідь і, отже, виконується дія, укладену в фігурних дужках: запуск форми про помилку, що містить пояснення того, в чому полягає помилка вводу (A5 = new Error ("Виправлений варіант повинен містити 9-ти розрядне число"); A5.ShowDialog ();)

Якщо ця умова не виконується, то робота алгоритму програми триває по гілці else. Спочатку знову перевіряється відсутність відповіді if (textBox1.Text.Length! = TextBox3.Text.Length) і тільки коли ця умова виконана запускається цикл з параметром (for (int i = 0; i <textBox2.Text.Length; i + +)), який порівнює всі розряди введеного користувачем числа з 0 або 1.Для цього використовується закладений у мові C # метод роботи з рядками Substring (i, 1) (string d = textBox2.Text.Substring (i, 1); - до рядка d записується один символ введеного користувачем числа, починаючи з i-ої позиції (а i змінюється від 0 до довжини введеного рядка, тобто до 9)). У ході роботи циклу d 9 разів порівнюється з 0 або 1 (if (d! = b & & d! = a)), і при першому ж випадку, коли d не є 1 або 0 з'являється форма помилки, що містить пояснення того, у чому полягає помилка вводу (A5 = new Error ("Виправлений варіант повинен містити 9-ти розрядне двійкове число"); A5.ShowDialog ();), а цикл припиняється, оскільки змінної i присвоюється значення рівне textBox2.Text.Length. Також у разі появи помилки змінна X прирівнюється до 0. У разі відсутності помилки введення змінна X прирівнюється до 1.На цьому метод Proverka (); закінчується. Якщо X = 1, то можливі подальші операції укладені в фігурних дужках умови if (X == 1). Використовуючи умовну конструкцію if, Nomer порівнюється з нулем (if (Nomer == 0)). Якщо дана умова виконується (тобто номер помилкового розряду дорівнює нулю, що означає відсутність помилки), то користувач відповів неправильно, невірно припустивши, що є помилка. Потім запускається метод Otvet (), який виведе число у вікні textBox3, рівне згенероване число.

Після цього запускається метод Sravnenie (); (його запуск потрібно, якщо не виконується умова Nomer == 0). Якщо Nomer не дорівнює нулю і метод Sravnenie (); не дає правильної відповіді у вікні textBox3,, то, отже, Nomer при перекладі в десяткову систему числення дає число, більше, ніж 9. Це означає, що згенероване число не містить неправильних розрядів і у вікно textBox3 потрібно записати задане число без змін. Для цього використовується умовна конструкція, яка перевіряє, записаний чи відповідь у textBox3: if (textBox3.Text.Length == 0) Otvet ();. Потім в змінну Moe зчитується число, яке користувач ввів у вікно textBox2, а в змінну Pravilnoe зчитується відповідь з textBox3. Після чого ці дві змінні порівнюються між собою і в разі рівності кількість правильних відповідей збільшується на 1: if (Moe == Pravilnoe) Prav + +;. Потім змінна X прирівнюється до нуля, що означає, що користувач вже зробив свій остаточний вибір.

Кнопка button3 служить для того щоб згенерувати наступне число, коли робота з попереднім закінчена. При натисканні кнопки button3 (Наступне число) число питань збільшується на одиницю, а також запускаються методи: Generation () і Number ();

Машина Поста

Для того щоб краще зрозуміти, як змінити програму, докладніше розберемо її код (див. Додаток).

private void button2_Click (object sender, System.EventArgs e) - метод, що викликає при натисканні кнопки «Назад до вибору теми».

private void help _ Click (object sender, System. EventArgs e) - метод, що викликає при натисканні кнопки «Довідка».

private void button3_Click (object sender, System.EventArgs e) - метод, що викликаються при натисканні кнопки «GO».

public static byte first () - метод, який запускається при виконанні команди типу «Рух головки на одну клітку вправо і перехід до команди m 1».

public static byte second () - метод, який запускається при виконанні команди типу «Рух головки на одну клітку вліво і перехід до команди m 1».

public static byte third () - метод, який запускається при виконанні команди типу «Нанесення мітки в клітинку і перехід до команди m 1.».

public static byte fourth () - метод, який запускається при виконанні команди типу «Стирання мітки в осередку і перехід до команди m 1.».

public void fifth () - метод, який запускається при виконанні команди типу «Перевірка наявності мітки в клітці, над якою знаходиться голівка. Якщо мітка відсутня, то управління передається з номером m 1, якщо мітка є, то з номером m 2. ».

bool check _ string (string str) метод, що викликається для перевірки командного рядка.

Розберемо докладно роботу програми.

Задаються два масиви типу char input [] і command [][]. При натисканні кнопки «GO» формується масив з вхідного рядка і записується в input []. Далі цей масив перевіряється, якщо в ньому містяться символи, відмінні від 0 і 1, то видається помилка. Потім перевіряється список команд у методі check_string (string str), якщо він не відповідає заданим шаблоном, то видається помилка, в іншому випадку він записується в масив command [][]. Після цього запускається цикл з постусловіем, в якому перевіряється яка команда повинна виконуватися в даний момент і запускається відповідний метод. Під час виконання команди останову - цикл завершується і виводиться результат роботи програми.

Глава 3. Інструкція користувача

Програма StudyProgram повинна запускатися на IBM та сумісних комп'ютерах. Мінімальні системні вимоги: процесор Pentium і вище, обсяг оперативної пам'яті 16 MB, відеокарта з розширенням 800 x 600, 256 кольорів, операційна система сімейства Windows 95 і вище, на комп'ютері також повинен бути встановлений. NET Framework.

3.1 Використання програми StudyProgram для засвоєння навчального матеріалу з кодування інформації методом парності і методом Хеммінга

Програма StudyProgram надає можливість виконати вправи з кодування інформації методом парності і методом Хеммінга. Для запуску програми зробіть подвійне клацання по ярлику програми. Після запуску програми на екрані з'являється вікно «StudyProgram", представлене на Рис.4.:

Пункт меню StudyProgram містить наступні розділи:

«Програмування машини Посту»

«Кодування за методом парності \ непарності»

«Кодування за методом Хеммінга»

При виборі пункту меню «Кодування за методом парності \ непарності» з'являється діалогове вікно.

У даному діалоговому вікні пропонуються питання по темі «Кодування за методом парності \ непарності». Число питань необмежено. Після кожної відповіді показується номер задається питання і кількість правильних відповідей.

Діалогове вікно містить три кнопки: «Код числа правильний», «Код числа неправильний», «Довідка» і «Повернутися до вибору теми». Вгорі розташовано текстове поле «Цифрові розряди», в якому задано випадкове семизначні двійкове число. Трохи нижче розташовано текстове поле «Контрольного розряд», в якому заданий контрольний розряд, за допомогою якого відбувається кодування випадкового семизначного двійкового числа за методом парності. Потрібно визначити присутня чи не з'явилася помилка в записі числа. Якщо число записано правильно, потрібно клацнути по кнопці «Код числа правильний». Якщо число містить помилку, потрібно натиснути кнопку «Код числа неправильний». Якщо відповідь була правильною, лічильник правильних відповідей збільшується на одиницю. Перехід до наступного завдання відбувається автоматично при натисканні на будь-яку з двох кнопок: «Код числа правильний», «Код числа неправильний», при цьому лічильник заданих питань збільшується на одиницю. Число завдань необмежено. Щоб перервати роботу з діалоговим вікном, потрібно клацнути по кнопці «Повернутися до вибору теми» при цьому лічильник правильних відповідей обнуляється і при наступному запуску розділу «Кодування за методом парності \ непарності» кількість вірних відповідей знову дорівнює нулю. Якщо користувачеві потрібна допомога з теорії, то тоді можна клацнути по кнопці «Довідка», і тоді з'явиться діалогове вікно Help (див. Рис.6)

Діалогове вікно, яке з'являється при виборі пункту меню «Кодування за методом Хеммінга» має вигляд.

У цьому діалоговому вікні пропонується знайти і виправити одну помилку (якщо вона є) у 9-ти розрядному двійковому числі, закодованому за методом Хеммінга. У діалоговому вікні «Кодування за методом Хеммінга» є 5 кнопок: «Помилки немає», «Помилка є», «Наступне число», «Довідка», «Повернутися до вибору теми». Вгорі розташовані текстові поля: "Число, можливо містить помилку», «Виправлений варіант», «Правильна відповідь». Якщо користувач вважає, що число з'явилося в текстовому полі «Число, можливо містить помилку» не містить помилкових розрядів, то слід клацнути по кнопці «Помилки немає». Після чого в текстовому полі «Правильна відповідь» записується вірна відповідь. Якщо користувач відповідає правильно, то число правильних відповідей збільшується на 1. Якщо користувач вважає, що число з'явилося в текстовому полі «Число, можливо містить помилку» містить помилку в одному з розрядів числа, то тоді результат коригування потрібно записати в текстове поле «Виправлений варіант», після чого натиснути кнопку «Помилка є». Користувач повинен врахувати, що вводиться ним число в текстовому полі «Виправлений варіант» має бути двійковим і містити 9 розрядів. У разі неправильного введення на екран виведеться повідомлення про помилку, див. Рис.8:

Якщо відповідь правильна, лічильник правильних відповідей збільшується на одиницю, при цьому на екрані з'являється правильний варіант відповіді. Після того, як користувач дав свою відповідь потрібно натиснути кнопку «Наступне число», і тоді програма згенерує нове число, можливо містить помилку. Робота з діалоговим вікном завершується натисканням кнопки «Назад до вибору теми» при цьому лічильник правильних відповідей обнуляється. При роботі з даним розділом користувач може переглянути інформацію з кодування за методом Хеммінга, натиснувши кнопку «Довідка».

3.2 Використання навчальної програми StudyProgram для оволодіння навичками складання програм для машини Посту

Програма StudyProgram призначена для того, щоб допомогти в засвоєнні прийомів складання програм для машини Посту. Робота з програмою здійснюється наступним чином. Після запуску програми на екрані з'являється вікно «StudyProgram", представлене на Рис.4. У ньому є 3 розділи. Виберіть 1-й розділ «Програмування машини Посту».

При виборі даного пункту меню з'являється діалогове вікно.

Діалогове вікно містить три кнопки: «GO», «Довідка» і «Повернутися до вибору теми». Вгорі розташовано текстове поле «Вхідна рядок машини Посту». Сюди вводиться вхідні рядок машини Посту. Кожен символ рядка відповідає одній комірці стрічки, 0 - відсутність мітки, 1 - наявність мітки. Передбачається, що голівка стрічки знаходиться над 1-й зліва осередком. У вікно, розташоване під даним вікном вводиться набір команд, що виконує поставлене завдання. Кожна команда повинна складатися з 4-х цілих позитивних чисел. 1-е число - це порядковий номер команди, 2-е число - тип команди, 3-е число - номер наступної команди при безумовному переході і 4-е число - номер наступної команди при умовному переході. Якщо команда не є командою умовного переходу, то 4-е число може бути будь-яким. Числа в команді повинні відділятися один від одного комами, а кожна команда закінчуватися крапкою з комою.

Порядок запису та виконання програми наступний:

1) У вікно «Вхідна рядок машини Посту» введіть довільну рядок, що складається з нулів і одиниць, для якої поставлена ​​задача має сенс. Наприклад, якщо завдання полягає в стиранні 1-й мітки, то, щоб перевірити правильність роботи програми, у вхідній рядку повинна бути присутнім хоча б одна мітка, тобто одиниця.

2) У нижележащее вікно введіть у відповідності з вище перерахованими правилами набір команд, які вирішують поставлену задачу.

3) Натисніть кнопку «GO», після чого записані команди будуть виконані і в полі «Вихідна рядок» з'явиться результат роботи машини Посту у вигляді вихідний рядка символів, що складається з нулів та одиниць.

У загальному вигляді окрема команда машини Посту має наступний вигляд: n, K, m 1, m 2; де n - порядковий номер команди, К - тип команди, m 1, m 2 - порядкові номери наступних команд. Є шість типів команд машини Посту, яким для зручності можна дати номери від 1 до 6. Нижче подано опис команд машини Посту.

Тип команди

Дія команди

1

Рух головки на одну клітку вправо і перехід до команди m 1

2

Рух головки на одну клітку вліво і перехід до команди m 1

3

Нанесення мітки в клітинку і перехід до команди m 1

4

Стирання мітки в осередку і перехід до команди m 1

5

Перевірка наявності мітки в клітці, над якою знаходиться голівка. Якщо мітка відсутня, то управління передається команді з номером m 1, якщо мітка є, то з номером m 2

6

Зупинка машини


Приклад команди машини Посту: 1,1,2,0;. Ця команда має порядковий номер 1, тип команди - 1 (рух голівки на одну клітку праворуч). Після виконання команди управління передається команді, що має порядковий номер 2.

Розглянемо приклад простої програми, яка стирає першого мітку, записану на стрічці. Припустимо, що на початку роботи головка знаходиться над крайньою лівою осередком стрічки. Поставлена ​​задача може бути виконана за допомогою наступного набору команд.

  • 1, 5, 2, 4; 1-а команда

  • 2, 1, 3, 0, 2-я команда

  • 3, 5, 2, 4, 3-та команда

  • 4, 4, 5, 0; 4-а команда

  • 5, 6, 0, 0; 5-а команда

Розберемо роботу програми. 1-а команда - це команда типу 5, тобто умовний перехід. Якщо осередок порожня, то управління передається команді 2, в іншому випадку - 4-й команді. 2-а команда - це зсув голівки на одну комірку вправо і передача керування 3-ї команди. Третя команда - це знову умовний перехід. Якщо мітка відсутня, то повернення до другої команді і перехід на 4-ю в іншому випадку. 4-я команда стирає мітку (очевидно, вона там є, тому що ми потрапляємо на 4-у команду тільки за наявності мітки) і передає управління 5-ої команді, яка є командою зупинки машини.

При натисканні кнопки «Довідка» виводиться вікно з довідковим матеріалом з даної теми.

При натисканні кнопки «Назад до вибору теми» Ви повертаєтеся на стартове вікно програми.

Якщо вхідна рядок введена неправильно, то виведеться повідомлення про помилку Рис.11.

Якщо список команд не відповідає заданим шаблоном, то виведеться повідомлення про помилку.

Висновок

В ході курсової роботи була розроблена навчальна програма з інформатики, за допомогою якої студенти зможуть перевірити свої знання в таких розділах даної дисципліни як кодування за методом Хеммінга, кодування за методом парності-непарності та програмування машини Посту.

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

  • Дослідницька частина, яка містить розділи, присвячені доцільності вибору мови, основним структурам мови програмування C #, кодування за методом парності / непарності, кодування за методом Хеммінга, а також програмування машини Посту.

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

  • Інструкція користувача, що включає в себе підрозділи: використання програми StudyProgram для засвоєння навчального матеріалу з кодування інформації методом парності і методом Хеммінга; використання навчальної програми StudyProgram для оволодіння навичками складання програм для машини Посту.

Завдання курсової роботи виконано повністю відповідно до завдання.

Список літератури

  1. Акулов О.А., Медведєв М.В. «Інформатика базовий курс». Москва, Омега-Л, 2005

  2. Успенський В.А. «Машина Посту». Москва, Наука, 1988

  3. http://computer-museum.ru

  4. http://pascalstudy.narod.ru

  5. http://de.uspu.ru

  6. http://c-sharp.ru

  7. http://dotsite.spb.ru

  8. http://iu.ru

  9. http://mf.grsu.by

  10. Троелсен Е. «С # і платформа. NET. Бібліотека програміста »

Додаток

Start

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

namespace Study_Programs

{

public class Start: System.Windows.Forms.Form

{

private System.Windows.Forms.Label label1;

private System.Windows.Forms.GroupBox groupBox1;

private System.ComponentModel.Container components = null;

Post A1;

Even_uneven A2;

Hemming A3;

private System.Windows.Forms.Button even_uneven_button;

private System.Windows.Forms.Button hemming_button;

private System.Windows.Forms.Button exit_button;

private System.Windows.Forms.Button post_button;

public Start () {InitializeComponent ();}

protected override void Dispose (bool disposing)

{

if (disposing) if (components! = null) components.Dispose ();

base.Dispose (disposing);

}

# Region Windows Form Designer generated code

private void InitializeComponent ()

{

this.label1 = new System.Windows.Forms.Label ();

this.groupBox1 = new System.Windows.Forms.GroupBox ();

this.hemming_button = new System.Windows.Forms.Button ();

this.post_button = new System.Windows.Forms.Button ();

this.even_uneven_button = new System.Windows.Forms.Button ();

this.exit_button = new System.Windows.Forms.Button ();

this.groupBox1.SuspendLayout ();

this.SuspendLayout ();

/ /

/ / Label1

/ /

this.label1.Dock = System.Windows.Forms.DockStyle.Top;

this.label1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.label1.Location = new System.Drawing.Point (0, 0);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size (306, 48);

this.label1.TabIndex = 0;

this.label1.Text = "Вітаємо Вас в навчальній програмі з інформатики.";

this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

/ /

/ / GroupBox1

/ /

this.groupBox1.Controls.Add (this.hemming_button);

this.groupBox1.Controls.Add (this.post_button);

this.groupBox1.Controls.Add (this.even_uneven_button);

this.groupBox1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.groupBox1.Location = new System.Drawing.Point (8, 48);

this.groupBox1.Name = "groupBox1";

this.groupBox1.Size = new System.Drawing.Size (296, 120);

this.groupBox1.TabIndex = 1;

this.groupBox1.TabStop = false;

this.groupBox1.Text = "Виберіть розділ ";

/ /

/ / Hemming_button

/ /

this.hemming_button.Anchor = ((System.Windows.Forms.AnchorStyles )(((( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)

| System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.hemming_button.Cursor = System.Windows.Forms.Cursors.Hand;

this.hemming_button.Location = new System.Drawing.Point (8, 89);

this.hemming_button.Name = "hemming_button";

this.hemming_button.Size = new System.Drawing.Size (280, 22);

this.hemming_button.TabIndex = 2;

this.hemming_button.Text = "Кодування по методом Хеммінга ";

this.hemming_button.Click + = new System.EventHandler (this.hemming_button_Click);

/ /

/ / Post_button

/ /

this.post_button.Anchor = ((System.Windows.Forms.AnchorStyles )(((( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)

| System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.post_button.Cursor = System.Windows.Forms.Cursors.Hand;

this.post_button.Location = new System.Drawing.Point (8, 25);

this.post_button.Name = "post_button";

this.post_button.Size = new System.Drawing.Size (280, 22);

this.post_button.TabIndex = 0;

this.post_button.Text = "Програмування машини Посту ";

this.post_button.Click + = new System.EventHandler (this.post_button_Click);

/ /

/ / Even_uneven_button

/ /

this.even_uneven_button.Anchor = ((System.Windows.Forms.AnchorStyles )(((( System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)

| System.Windows.Forms.AnchorStyles.Left)

| System.Windows.Forms.AnchorStyles.Right)));

this.even_uneven_button.Cursor = System.Windows.Forms.Cursors.Hand;

this.even_uneven_button.Location = new System.Drawing.Point (8, 56);

this.even_uneven_button.Name = "even_uneven_button";

this.even_uneven_button.Size = new System.Drawing.Size (280, 22);

this.even_uneven_button.TabIndex = 1;

this.even_uneven_button.Text = "Кодування за методом парності \ \ непарності";

this.even_uneven_button.Click + = new System.EventHandler (this.even_uneven_button_Click);

/ /

/ / Exit_button

/ /

this.exit_button.Cursor = System.Windows.Forms.Cursors.Hand;

this.exit_button.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.exit_button.Location = new System.Drawing.Point (112, 176);

this.exit_button.Name = "exit_button";

this.exit_button.Size = new System.Drawing.Size (72, 24);

this.exit_button.TabIndex = 2;

this.exit_button.Text = "Вихід";

this.exit_button.Click + = new System.EventHandler (this.exit_button_Click);

/ /

/ / Start

/ /

this.AutoScale = false;

this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);

this.BackColor = System.Drawing.SystemColors.InactiveBorder;

this.ClientSize = new System.Drawing.Size (306, 206);

this.ControlBox = false;

this.Controls.Add (this.exit_button);

this.Controls.Add (this.groupBox1);

this.Controls.Add (this.label1);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;

this.MaximizeBox = false;

this.MinimizeBox = false;

this.Name = "Start";

this.ShowInTaskbar = false;

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "Study Programs";

this.TopMost = true;

this.groupBox1.ResumeLayout (false);

this.ResumeLayout (false);

}

# Endregion

[STAThread]

static void Main () {Application.Run (new Start ());}

private void exit_button_Click (object sender, System.EventArgs e) {this.Close ();}

private void post_button_Click (object sender, System.EventArgs e)

{

A1 = new Post ();

A1.ShowDialog ();

}

private void even_uneven_button_Click (object sender, System.EventArgs e)

{

A2 = new Even_uneven ();

A2.ShowDialog ();

}

private void hemming_button_Click (object sender, System.EventArgs e)

{

A3 = new Hemming ();

A3.ShowDialog ();

}

}

}

Post

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace Study_Programs

{

public class Post: System.Windows.Forms.Form

{

private System.Windows.Forms.Label label1;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.Label label2;

private System.Windows.Forms.TextBox textBox2;

private System.Windows.Forms.Label label3;

private System.Windows.Forms.TextBox textBox3;

private System.Windows.Forms.Button button2;

private System.Windows.Forms.Button button3;

private System.ComponentModel.Container components = null;

private System.Windows.Forms.Button help;

Help A4; Error A5;

static char [] input;

static char [] [] command;

static byte l, finish, k;

static sbyte position;

static bool chk = true;

public Post () {InitializeComponent ();}

protected override void Dispose (bool disposing)

{

if (disposing) if (components! = null) components.Dispose ();

base.Dispose (disposing);

}

# Region Windows Form Designer generated code

private void InitializeComponent ()

{

this.label1 = new System.Windows.Forms.Label ();

this.textBox1 = new System.Windows.Forms.TextBox ();

this.label2 = new System.Windows.Forms.Label ();

this.textBox2 = new System.Windows.Forms.TextBox ();

this.label3 = new System.Windows.Forms.Label ();

this.textBox3 = new System.Windows.Forms.TextBox ();

this.help = new System.Windows.Forms.Button ();

this.button2 = new System.Windows.Forms.Button ();

this.button3 = new System.Windows.Forms.Button ();

this.SuspendLayout ();

/ /

/ / Label1

/ /

this.label1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.label1.Location = new System.Drawing.Point (8, 8);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size (192, 16);

this.label1.TabIndex = 0;

this.label1.Text = "Вхідні рядок машини Посту ";

/ /

/ / TextBox1

/ /

this.textBox1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.textBox1.Location = new System.Drawing.Point (8, 24);

this.textBox1.Name = "textBox1";

this.textBox1.Size = new System.Drawing.Size (224, 21);

this.textBox1.TabIndex = 1;

this.textBox1.Text = "Введіть рядок, що складається з 0 і 1 ";

/ /

/ / Label2

/ /

this.label2.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.label2.Location = new System.Drawing.Point (8, 56);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size (216, 16);

this.label2.TabIndex = 2;

this.label2.Text = "Список команд ";

/ /

/ / TextBox2

/ /

this.textBox2.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.textBox2.Location = new System.Drawing.Point (8, 72);

this.textBox2.Name = "textBox2";

this.textBox2.Size = new System.Drawing.Size (224, 21);

this.textBox2.TabIndex = 3;

this.textBox2.Text = "Введіть список команд ";

/ /

/ / Label3

/ /

this.label3.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.label3.Location = new System.Drawing.Point (8, 104);

this.label3.Name = "label3";

this.label3.Size = new System.Drawing.Size (112, 16);

this.label3.TabIndex = 4;

this.label3.Text = "Вихідна рядок ";

/ /

/ / TextBox3

/ /

this.textBox3.BorderStyle = System.Windows.Forms.BorderStyle.None;

this.textBox3.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.textBox3.Location = new System.Drawing.Point (8, 120);

this.textBox3.Name = "textBox3";

this.textBox3.ReadOnly = true;

this.textBox3.Size = new System.Drawing.Size (224, 14);

this.textBox3.TabIndex = 5;

this.textBox3.Text = "";

/ /

/ / Help

/ /

this.help.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.help.Location = new System.Drawing.Point (136, 144);

this.help.Name = "help";

this.help.Size = new System.Drawing.Size (72, 24);

this.help.TabIndex = 8;

this.help.Text = "Довідка";

this.help.Click + = new System.EventHandler (this.help_Click);

/ /

/ / Button2

/ /

this.button2.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.button2.Location = new System.Drawing.Point (40, 176);

this.button2.Name = "button2";

this.button2.Size = new System.Drawing.Size (168, 24);

this.button2.TabIndex = 9;

this.button2.Text = "Повернутися до вибору теми ";

this.button2.Click + = new System.EventHandler (this.button2_Click);

/ /

/ / Button3

/ /

this.button3.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.button3.Location = new System.Drawing.Point (40, 144);

this.button3.Name = "button3";

this.button3.Size = new System.Drawing.Size (72, 24);

this.button3.TabIndex = 10;

this.button3.Text = "GO";

this.button3.Click + = new System.EventHandler (this.button3_Click);

/ /

/ / Post

/ /

this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);

this.BackColor = System.Drawing.SystemColors.InactiveBorder;

this.ClientSize = new System.Drawing.Size (242, 208);

this.ControlBox = false;

this.Controls.Add (this.button3);

this.Controls.Add (this.button2);

this.Controls.Add (this.help);

this.Controls.Add (this.textBox3);

this.Controls.Add (this.label3);

this.Controls.Add (this.textBox2);

this.Controls.Add (this.label2);

this.Controls.Add (this.textBox1);

this.Controls.Add (this.label1);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;

this.MaximizeBox = false;

this.Name = "Post";

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "Post";

this.TopMost = true;

this.ResumeLayout (false);

}

# Endregion

public static byte first ()

{

position + +;

return (k = Convert.ToByte (char.GetNumericValue (command [k] [2]) -1));

}

public static byte second ()

{

position -;

return (k = Convert.ToByte (char.GetNumericValue (command [k] [2]) -1));

}

public static byte third ()

{

input [position] = '1 ';

return (k = Convert.ToByte (char.GetNumericValue (command [k] [2]) -1));

}

public static byte fourth ()

{

input [position] = '0 ';

return (k = Convert.ToByte (char.GetNumericValue (command [k] [2]) -1));

}

public void fifth ()

{

if (position <input.Length)

{

if (input [position] == 0 ") k = Convert.ToByte (char.GetNumericValue (command [k] [2]) -1);

else k = Convert.ToByte (char.GetNumericValue (command [k] [3]) -1);

}

else

{

A5 = new Error ("Вихід за межі вхідного рядка");

A5.ShowDialog ();

finish = 1; chk = false;

}

}

bool check_string (string str)

{

int i, s = 0, cnt = 0;

for (i = 0; i <str.Length; i + +) if (str [i ]==';') cnt + +;

for (i = 0; i <cnt; i + +)

{

if (! char.IsDigit (str [s]) | | str [s] == 0 ") return (false);

s + +;

if (str [s ]!=',') return (false);

s + +;

if (char.GetNumericValue (str [s])> 6 | | char.GetNumericValue (str [s]) <1) return (false);

s + +;

if (str [s ]!=',') return (false);

s + +;

if (! char.IsDigit (str [s])) return (false);

s + +;

if (str [s ]!=',') return (false);

s + +;

if (! char.IsDigit (str [s])) return (false);

s + +;

if (str [s ]!=';') return (false);

s + +;

}

if (s! = str.Length) return (false);

return (true);

}

private void button2_Click (object sender, System.EventArgs e) {this.Close ();}

private void help_Click (object sender, System.EventArgs e)

{

A4 = new Help (0);

A4.ShowDialog ();

}

private void button3_Click (object sender, System.EventArgs e)

{

l = 1; k = 0; position = 0; finish = 0; textBox3.Text = ""; chk = true;

int i, j;

/ / Масив з вхідного рядка

input = new char [textBox1.Text.Length];

command = new char [textBox2.Text.Length / 8] [];

for (i = 0; i <textBox1.Text.Length; i + +)

{

if (textBox1.Text [i]! = 0 "& & textBox1.Text [i]! = 1")

{

A5 = new Error ("Неправильний формат вхідного рядка");

A5.ShowDialog ();

i = textBox1.Text.Length;

chk = false;

}

else input [i] = textBox1.Text [i];

}

/ / Масив з списку комманд

if (check_string (textBox2.Text))

{

for (i = 0; i <textBox2.Text.Length / 8; i + +)

{

command [i] = new char [4];

for (j = 0; j <4; j + +) command [i] [j] = textBox2.Text [i * 8 + j * 2];

}

}

else

{

A5 = new Error ("Некоректний формат команди ");

A5.ShowDialog ();

chk = false;

}

if (chk)

{

do

{

switch (command [k] [l])

{

case ("1"):

{

first ();

break;

}

case ('2 '):

{

second ();

break;

}

case ('3 '):

{

third ();

break;

}

case ('4 '):

{

fourth ();

break;

}

case ('5 '):

{

fifth ();

break;

}

case ('6 '):

{

finish = 1;

break;

}

}

} While (finish! = 1);

}

if (chk) for (i = 0; i <input.Length; i + +) textBox3.Text + = input [i];

}

}

}

Hemming

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace Study_Programs

{

public class Hemming: System.Windows.Forms.Form

{

int ChVoprosov = 1;

int X = 0;

int Nomer = 0;

int [] x = new int [10];

Help A4; Error A5;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.TextBox textBox2;

private System.Windows.Forms.TextBox textBox3;

private System.Windows.Forms.TextBox textBox4;

private System.Windows.Forms.TextBox textBox5;

private System.Windows.Forms.Button button1;

private System.Windows.Forms.Button button2;

private System.Windows.Forms.Button button3;

private System.Windows.Forms.Button button4;

private System.Windows.Forms.Button button5;

private System.Windows.Forms.Label label3;

private System.Windows.Forms.Label label4;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.Label label2;

private System.Windows.Forms.Label label5;

private System.Windows.Forms.GroupBox groupBox1;

private System.Windows.Forms.ToolTip toolTip1;

private System.ComponentModel.IContainer components;

public Hemming () {InitializeComponent ();}

protected override void Dispose (bool disposing)

{

if (disposing) if (components! = null) components.Dispose ();

base.Dispose (disposing);

}

public void Generation ()

{

X = 1;

textBox1.Text = "";

Random r = new System.Random ();

int d;

for (int i = 1; i <10; i + +)

{

d = r.Next (0,2);

textBox1.Text + = d;

x [i] = d;

}

}

public void Number ()

{

int x1 = 0; int x2 = 0; int x3 = 0; int x4 = 0;

x1 = x [1] + x [3] + x [5] + x [7] + x [9];

if (x1 == 0 | | x1 == 2 | | x1 == 4) x1 = 0; else x1 = 1;

x2 = x [2] + x [3] + x [6] + x [7];

if (x2 == 0 | | x2 == 2 | | x2 == 4) x2 = 0; else x2 = 1;

x3 = x [4] + x [5] + x [6] + x [7];

if (x3 == 0 | | x3 == 2 | | x3 == 4) x3 = 0; else x3 = 1;

x4 = x [8] + x [9];

if (x4 == 0 | | x4 == 2) x4 = 0; else x4 = 1;

Nomer = x4 * 1000 + x3 * 100 + x2 * 10 + x1;

}

public void Otvet () {textBox3.Text = x [1] + "" + x [2] + "" + x [3] + "" + x [4] + "" + x [5] + "" + x [6] + "" + x [7] + "" + x [8] + "" + x [9];}

public void Sravnenie ()

{

if (X == 1)

{

int i = 0;

if (Nomer == 1) i = 1;

if (Nomer == 10) i = 2;

if (Nomer == 11) i = 3;

if (Nomer == 100) i = 4;

if (Nomer == 101) i = 5;

if (Nomer == 110) i = 6;

if (Nomer == 111) i = 7;

if (Nomer == 1000) i = 8;

if (Nomer == 1001) i = 9;

if (i! = 0)

{

if (x [i] == 0)

{

x [i] = 1; Otvet ();

}

else

{

x [i] = 0; Otvet ();

}

}

}

}

public void Proverka ()

{

if (textBox2.Text.Length! = textBox1.Text.Length & & textBox1.Text.Length! = textBox3.Text.Length)

{

A5 = new Error ("Виправлений варіант повинен містити 9-ти розрядне двійкове число");

A5.ShowDialog ();

X = 0;

}

else

{

if (textBox1.Text.Length! = textBox3.Text.Length)

{

for (int i = 0; i <textBox2.Text.Length; i + +)

{

string a = "1";

string b = "0";

string d = textBox2.Text.Substring (i, 1);

if (d! = b & & d! = a)

{

A5 = new Error ("Виправлений варіант повинен містити 9-ти розрядне двійкове число");

A5.ShowDialog ();

X = 0;

i = textBox2.Text.Length;

}

else X = 1;

}

}

}

}

# Region Windows Form Designer generated code

private void InitializeComponent ()

{

this.components = new System.ComponentModel.Container ();

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager (typeof (Hemming));

this.textBox1 = new System.Windows.Forms.TextBox ();

this.textBox2 = new System.Windows.Forms.TextBox ();

this.textBox3 = new System.Windows.Forms.TextBox ();

this.textBox4 = new System.Windows.Forms.TextBox ();

this.textBox5 = new System.Windows.Forms.TextBox ();

this.button1 = new System.Windows.Forms.Button ();

this.button2 = new System.Windows.Forms.Button ();

this.button3 = new System.Windows.Forms.Button ();

this.button4 = new System.Windows.Forms.Button ();

this.button5 = new System.Windows.Forms.Button ();

this.label3 = new System.Windows.Forms.Label ();

this.label4 = new System.Windows.Forms.Label ();

this.label1 = new System.Windows.Forms.Label ();

this.label2 = new System.Windows.Forms.Label ();

this.label5 = new System.Windows.Forms.Label ();

this.groupBox1 = new System.Windows.Forms.GroupBox ();

this.toolTip1 = new System.Windows.Forms.ToolTip (this.components);

this.groupBox1.SuspendLayout ();

this.SuspendLayout ();

/ /

/ / TextBox1

/ /

this.textBox1.Location = new System.Drawing.Point (216, 16);

this.textBox1.Name = "textBox1";

this.textBox1.ReadOnly = true;

this.textBox1.Size = new System.Drawing.Size (88, 20);

this.textBox1.TabIndex = 0;

this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / TextBox2

/ /

this.textBox2.Location = new System.Drawing.Point (216, 40);

this.textBox2.MaxLength = 9;

this.textBox2.Name = "textBox2";

this.textBox2.Size = new System.Drawing.Size (88, 20);

this.textBox2.TabIndex = 1;

this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / TextBox3

/ /

this.textBox3.Location = new System.Drawing.Point (216, 64);

this.textBox3.Name = "textBox3";

this.textBox3.ReadOnly = true;

this.textBox3.Size = new System.Drawing.Size (88, 20);

this.textBox3.TabIndex = 2;

this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / TextBox4

/ /

this.textBox4.Location = new System.Drawing.Point (104, 136);

this.textBox4.Name = "textBox4";

this.textBox4.ReadOnly = true;

this.textBox4.Size = new System.Drawing.Size (40, 20);

this.textBox4.TabIndex = 3;

this.textBox4.Text = "1";

this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / TextBox5

/ /

this.textBox5.Location = new System.Drawing.Point (272, 136);

this.textBox5.Name = "textBox5";

this.textBox5.ReadOnly = true;

this.textBox5.Size = new System.Drawing.Size (40, 20);

this.textBox5.TabIndex = 4;

this.textBox5.Text = "0";

this.textBox5.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / Button1

/ /

this.button1.Location = new System.Drawing.Point (8, 102);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size (88, 24);

this.button1.TabIndex = 5;

this.button1.Text = "Помилки ні ";

this.button1.Click + = new System.EventHandler (this.button1_Click);

/ /

/ / Button2

/ /

this.button2.Location = new System.Drawing.Point (108, 102);

this.button2.Name = "button2";

this.button2.Size = new System.Drawing.Size (88, 24);

this.button2.TabIndex = 6;

this.button2.Text = "Помилка є ";

this.button2.Click + = new System.EventHandler (this.button2_Click);

/ /

/ / Button3

/ /

this.button3.Location = new System.Drawing.Point (206, 101);

this.button3.Name = "button3";

this.button3.Size = new System.Drawing.Size (112, 24);

this.button3.TabIndex = 7;

this.button3.Text = "Наступне число ";

this.button3.Click + = new System.EventHandler (this.button3_Click);

/ /

/ / Button4

/ /

this.button4.Font = new System.Drawing.Font ("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte) (204)));

this.button4.Location = new System.Drawing.Point (128, 160);

this.button4.Name = "button4";

this.button4.Size = new System.Drawing.Size (72, 24);

this.button4.TabIndex = 11;

this.button4.Text = "Довідка";

this.button4.Click + = new System.EventHandler (this.button4_Click);

/ /

/ / Button5

/ /

this.button5.Font = new System.Drawing.Font ("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte) (204)));

this.button5.Location = new System.Drawing.Point (80, 192);

this.button5.Name = "button5";

this.button5.Size = new System.Drawing.Size (168, 24);

this.button5.TabIndex = 12;

this.button5.Text = "Повернутися до вибору теми ";

this.button5.Click + = new System.EventHandler (this.button5_Click);

/ /

/ / Label3

/ /

this.label3.Location = new System.Drawing.Point (8, 136);

this.label3.Name = "label3";

this.label3.Size = new System.Drawing.Size (96, 24);

this.label3.TabIndex = 13;

this.label3.Text = "Номер питання: ";

/ /

/ / Label4

/ /

this.label4.Location = new System.Drawing.Point (152, 136);

this.label4.Name = "label4";

this.label4.Size = new System.Drawing.Size (120, 24);

this.label4.TabIndex = 14;

this.label4.Text = "Правильних відповідей: ";

/ /

/ / Label1

/ /

this.label1.Location = new System.Drawing.Point (8, 16);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size (216, 16);

this.label1.TabIndex = 15;

this.label1.Text = "Число, можливо містить помилку ";

/ /

/ / Label2

/ /

this.label2.Location = new System.Drawing.Point (8, 40);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size (128, 16);

this.label2.TabIndex = 16;

this.label2.Text = "Виправлений варіант ";

/ /

/ / Label5

/ /

this.label5.Location = new System.Drawing.Point (8, 64);

this.label5.Name = "label5";

this.label5.Size = new System.Drawing.Size (112, 16);

this.label5.TabIndex = 17;

this.label5.Text = "Правильний відповідь ";

/ /

/ / GroupBox1

/ /

this.groupBox1.Controls.Add (this.label2);

this.groupBox1.Controls.Add (this.textBox3);

this.groupBox1.Controls.Add (this.label5);

this.groupBox1.Controls.Add (this.textBox1);

this.groupBox1.Controls.Add (this.textBox2);

this.groupBox1.Controls.Add (this.label1);

this.groupBox1.Location = new System.Drawing.Point (6, -1);

this.groupBox1.Name = "groupBox1";

this.groupBox1.Size = new System.Drawing.Size (312, 96);

this.groupBox1.TabIndex = 19;

this.groupBox1.TabStop = false;

this.toolTip1.SetToolTip (this.groupBox1, @ "9 - ти розрядне двійкове число, закодованої по методом Хеммінга. В одному з розрядів "+" \ n "+" можливо присутня помилка. Якщо вона є, необхідно її виправити і записати правильний "+" \ n "+" варіант у відповідне вікно, після цього натисніть кнопку «Помилка є». Якщо помилка "+" \ n "+" відсутня, то в вікно Виправлений варіант нічого писати не потрібно і следуетнажать "+" \ n "+" кнопку «Помилки немає». Далі потрібно натиснути кнопку «Наступний число» ");

/ /

/ / ToolTip1

/ /

this.toolTip1.AutomaticDelay = 10;

this.toolTip1.AutoPopDelay = 100000;

this.toolTip1.InitialDelay = 10;

this.toolTip1.ReshowDelay = 2;

this.toolTip1.ShowAlways = true;

/ /

/ / Hemming

/ /

this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);

this.BackColor = System.Drawing.SystemColors.InactiveBorder;

this.ClientSize = new System.Drawing.Size (322, 224);

this.ControlBox = false;

this.Controls.Add (this.groupBox1);

this.Controls.Add (this.label4);

this.Controls.Add (this.label3);

this.Controls.Add (this.button5);

this.Controls.Add (this.button4);

this.Controls.Add (this.button3);

this.Controls.Add (this.button2);

this.Controls.Add (this.button1);

this.Controls.Add (this.textBox5);

this.Controls.Add (this.textBox4);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;

this.MaximizeBox = false;

this.Name = "Hemming";

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "Hemming";

this.TopMost = true;

this.Load + = new System.EventHandler (this.Hemming_Load);

this.groupBox1.ResumeLayout (false);

this.groupBox1.PerformLayout ();

this.ResumeLayout (false);

this.PerformLayout ();

}

# Endregion

private void Hemming_Load (object sender, System.EventArgs e)

{

Generation ();

Number ();

}

private void button1_Click (object sender, System.EventArgs e)

{

textBox2.Text = "";

if (textBox1.Text.Length! = textBox3.Text.Length) X = 1;

if (X == 1) textBox3.Text = "";

int Prav = Convert.ToInt32 (textBox5.Text);

if (X == 1)

{

if (Nomer == 0)

{

Prav + +; Otvet ();

}

Sravnenie ();

if (textBox3.Text.Length == 0)

{

Prav + +; Otvet ();

}

textBox5.Text = ""; textBox5.Text + = Prav;

}

X = 0;

}

private void button2_Click (object sender, System.EventArgs e)

{

Proverka ();

if (X == 1) textBox3.Text = "";

int Prav = Convert.ToInt32 (textBox5.Text);

if (X == 1)

{

if (Nomer == 0) Otvet ();

Sravnenie ();

if (textBox3.Text.Length == 0) Otvet ();

int Moe = Convert.ToInt32 (textBox2.Text);

int Pravilnoe = Convert.ToInt32 (textBox3.Text);

if (Moe == Pravilnoe) Prav + +;

textBox5.Text = "";

textBox5.Text + = Prav;

}

X = 0;

}

private void button4_Click (object sender, System.EventArgs e)

{

A4 = new Help (2);

A4.ShowDialog ();

}

private void button5_Click (object sender, System.EventArgs e) {this.Close ();}

private void button3_Click (object sender, System.EventArgs e)

{

ChVoprosov + +;

textBox2.Text = "";

textBox3.Text = "";

textBox4.Text = "";

textBox4.Text + = ChVoprosov;

Generation ();

Number ();

}

}

}

Even_ueven

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace Study_Programs

{

public class Even_uneven: System.Windows.Forms.Form

{

int Prav;

int ch;

int ChVoprosov = 1;

Help A4;

private System.Windows.Forms.TextBox textBox1;

private System.Windows.Forms.Button button1;

private System.Windows.Forms.TextBox textBox2;

private System.Windows.Forms.Button button2;

private System.Windows.Forms.TextBox textBox3;

private System.Windows.Forms.TextBox textBox4;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.Label label2;

private System.Windows.Forms.Label label3;

private System.Windows.Forms.Label label4;

private System.Windows.Forms.Button button3;

private System.Windows.Forms.Button button4;

private System.Windows.Forms.Label label6;

private System.Windows.Forms.GroupBox groupBox1;

private System.ComponentModel.Container components = null;

public Even_uneven () {InitializeComponent ();}

protected override void Dispose (bool disposing)

{

if (disposing) if (components! = null) components.Dispose ();

base.Dispose (disposing);

}

public void Generation ()

{

textBox1.Text = "";

Random r = new System.Random ();

int d;

for (int i = 0; i <7; i + +)

{

d = r.Next (0,2);

textBox1.Text + = d;

ch + = d;

}

textBox2.Text = "";

int g = r.Next (0,2);

textBox2.Text + = g;

ch + = g;

}

public void ChangeChVoprosov ()

{

ChVoprosov + +;

textBox3.Text = "";

textBox3.Text + = ChVoprosov;

}

public void ChangePrav ()

{

textBox4.Text = "";

textBox4.Text + = Prav;

}

# Region Windows Form Designer generated code

private void InitializeComponent ()

{

this.textBox1 = new System.Windows.Forms.TextBox ();

this.button1 = new System.Windows.Forms.Button ();

this.textBox2 = new System.Windows.Forms.TextBox ();

this.button2 = new System.Windows.Forms.Button ();

this.textBox3 = new System.Windows.Forms.TextBox ();

this.textBox4 = new System.Windows.Forms.TextBox ();

this.label1 = new System.Windows.Forms.Label ();

this.label2 = new System.Windows.Forms.Label ();

this.label3 = new System.Windows.Forms.Label ();

this.label4 = new System.Windows.Forms.Label ();

this.button3 = new System.Windows.Forms.Button ();

this.button4 = new System.Windows.Forms.Button ();

this.label6 = new System.Windows.Forms.Label ();

this.groupBox1 = new System.Windows.Forms.GroupBox ();

this.groupBox1.SuspendLayout ();

this.SuspendLayout ();

/ /

/ / TextBox1

/ /

this.textBox1.Location = new System.Drawing.Point (192, 15);

this.textBox1.Name = "textBox1";

this.textBox1.ReadOnly = true;

this.textBox1.Size = new System.Drawing.Size (88, 20);

this.textBox1.TabIndex = 0;

this.textBox1.Text = "";

this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / Button1

/ /

this.button1.Location = new System.Drawing.Point (7, 156);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size (140, 22);

this.button1.TabIndex = 1;

this.button1.Text = "Код числа правильний ";

this.button1.Click + = new System.EventHandler (this.button1_Click);

/ /

/ / TextBox2

/ /

this.textBox2.Location = new System.Drawing.Point (192, 45);

this.textBox2.Name = "textBox2";

this.textBox2.ReadOnly = true;

this.textBox2.Size = new System.Drawing.Size (88, 20);

this.textBox2.TabIndex = 2;

this.textBox2.Text = "0";

this.textBox2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / Button2

/ /

this.button2.Location = new System.Drawing.Point (153, 156);

this.button2.Name = "button2";

this.button2.Size = new System.Drawing.Size (140, 21);

this.button2.TabIndex = 3;

this.button2.Text = "Код числа неправильний ";

this.button2.Click + = new System.EventHandler (this.button2_Click);

/ /

/ / TextBox3

/ /

this.textBox3.Location = new System.Drawing.Point (103, 186);

this.textBox3.Name = "textBox3";

this.textBox3.ReadOnly = true;

this.textBox3.Size = new System.Drawing.Size (34, 20);

this.textBox3.TabIndex = 4;

this.textBox3.Text = "1";

this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / TextBox4

/ /

this.textBox4.Location = new System.Drawing.Point (260, 186);

this.textBox4.Name = "textBox4";

this.textBox4.ReadOnly = true;

this.textBox4.Size = new System.Drawing.Size (33, 20);

this.textBox4.TabIndex = 5;

this.textBox4.Text = "0";

this.textBox4.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;

/ /

/ / Label1

/ /

this.label1.Location = new System.Drawing.Point (7, 16);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size (113, 22);

this.label1.TabIndex = 6;

this.label1.Text = "Цифрові розряди: ";

/ /

/ / Label2

/ /

this.label2.Location = new System.Drawing.Point (7, 45);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size (120, 22);

this.label2.TabIndex = 7;

this.label2.Text = "Контрольний розряд: ";

/ /

/ / Label3

/ /

this.label3.Location = new System.Drawing.Point (12, 189);

this.label3.Name = "label3";

this.label3.Size = new System.Drawing.Size (86, 15);

this.label3.TabIndex = 8;

this.label3.Text = "Номер питання: ";

/ /

/ / Label4

/ /

this.label4.Location = new System.Drawing.Point (146, 186);

this.label4.Name = "label4";

this.label4.Size = new System.Drawing.Size (114, 14);

this.label4.TabIndex = 9;

this.label4.Text = "Правильних відповідей: ";

/ /

/ / Button3

/ /

this.button3.Font = new System.Drawing.Font ("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204)));

this.button3.Location = new System.Drawing.Point (120, 208);

this.button3.Name = "button3";

this.button3.Size = new System.Drawing.Size (60, 22);

this.button3.TabIndex = 10;

this.button3.Text = "Довідка";

this.button3.Click + = new System.EventHandler (this.button3_Click);

/ /

/ / Button4

/ /

this.button4.Font = new System.Drawing.Font ("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204)));

this.button4.Location = new System.Drawing.Point (80, 238);

this.button4.Name = "button4";

this.button4.Size = new System.Drawing.Size (140, 22);

this.button4.TabIndex = 11;

this.button4.Text = "Повернутися до вибору теми ";

this.button4.Click + = new System.EventHandler (this.button4_Click);

/ /

/ / Label6

/ /

this.label6.Location = new System.Drawing.Point (8, 88);

this.label6.Name = "label6";

this.label6.Size = new System.Drawing.Size (288, 64);

this.label6.TabIndex = 13;

this.label6.Text = "Потрібно визначити присутня чи не з'явилася помилка в записі чісла.Еслі числ" +

"Про записано правильно, потрібно клацнути по кнопці« Код числа правильний ». Якщо чис" +

"Ло містить помилку, потрібно натиснути кнопку« Код числа неправильний ».";

this.label6.TextAlign = System.Drawing.ContentAlignment.BottomLeft;

/ /

/ / GroupBox1

/ /

this.groupBox1.Controls.Add (this.label1);

this.groupBox1.Controls.Add (this.textBox1);

this.groupBox1.Controls.Add (this.label2);

this.groupBox1.Controls.Add (this.textBox2);

this.groupBox1.Location = new System.Drawing.Point (7, 7);

this.groupBox1.Name = "groupBox1";

this.groupBox1.Size = new System.Drawing.Size (286, 75);

this.groupBox1.TabIndex = 14;

this.groupBox1.TabStop = false;

this.groupBox1.Text = "Визнач випадкове число:";

/ /

/ / Even_uneven

/ /

this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);

this.BackColor = System.Drawing.SystemColors.InactiveBorder;

this.ClientSize = new System.Drawing.Size (301, 272);

this.ControlBox = false;

this.Controls.Add (this.groupBox1);

this.Controls.Add (this.label6);

this.Controls.Add (this.button4);

this.Controls.Add (this.button3);

this.Controls.Add (this.label4);

this.Controls.Add (this.label3);

this.Controls.Add (this.textBox4);

this.Controls.Add (this.textBox3);

this.Controls.Add (this.button2);

this.Controls.Add (this.button1);

this.Font = new System.Drawing.Font ("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204)));

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;

this.Name = "Even_uneven";

this.ShowInTaskbar = false;

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "Even_uneven";

this.TopMost = true;

this.Load + = new System.EventHandler (this.Form1_Load);

this.groupBox1.ResumeLayout (false);

this.ResumeLayout (false);

}

# Endregion

private void Form1_Load (object sender, System.EventArgs e)

{

Generation ();

}

private void button1_Click (object sender, System.EventArgs e)

{

ChangeChVoprosov ();

Prav = Convert.ToInt32 (textBox4.Text);

if (ch == 0 | | ch == 2 | | ch == 4 | | ch == 6) Prav + +;

ChangePrav ();

ch = 0;

Generation ();

}

private void button2_Click (object sender, System.EventArgs e)

{

ChangeChVoprosov ();

Prav = Convert.ToInt32 (textBox4.Text);

if (ch == 1 | | ch == 3 | | ch == 5 | | ch == 7) Prav + +;

ChangePrav ();

ch = 0;

Generation ();

}

private void button4_Click (object sender, System.EventArgs e) {this.Close ();}

private void button3_Click (object sender, System.EventArgs e)

{

A4 = new Help (1); A4.ShowDialog ();

}

}

}

Help

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace Study_Programs

{

public class Help: System.Windows.Forms.Form

{

private System.Windows.Forms.Label label1;

private System.Windows.Forms.ComboBox comboBox1;

private System.Windows.Forms.RichTextBox richTextBox1;

private System.Windows.Forms.Button button1;

private System.ComponentModel.Container components = null;

public Help (byte n)

{

InitializeComponent ();

comboBox1.SelectedIndex = n;

}

protected override void Dispose (bool disposing)

{

if (disposing) if (components! = null) components.Dispose ();

base.Dispose (disposing);

}

# Region Windows Form Designer generated code

private void InitializeComponent ()

{

this.label1 = new System.Windows.Forms.Label ();

this.comboBox1 = new System.Windows.Forms.ComboBox ();

this.richTextBox1 = new System.Windows.Forms.RichTextBox ();

this.button1 = new System.Windows.Forms.Button ();

this.SuspendLayout ();

/ /

/ / Label1

/ /

this.label1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.label1.Location = new System.Drawing.Point (56, 0);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size (280, 24);

this.label1.TabIndex = 0;

this.label1.Text = "Виберіть цікавить Вас розділ ";

this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

/ /

/ / ComboBox1

/ /

this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

this.comboBox1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.comboBox1.Items.AddRange (new object [] {

"Програмування машини Посту",

"Кодування за методом парності \ \ непарності",

"Кодування за методом Хеммінга"});

this.comboBox1.Location = new System.Drawing.Point (8, 24);

this.comboBox1.Name = "comboBox1";

this.comboBox1.Size = new System.Drawing.Size (376, 23);

this.comboBox1.TabIndex = 1;

this.comboBox1.SelectedIndexChanged + = new System.EventHandler (this.comboBox1_SelectedIndexChanged);

/ /

/ / RichTextBox1

/ /

this.richTextBox1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.richTextBox1.Location = new System.Drawing.Point (8, 56);

this.richTextBox1.Name = "richTextBox1";

this.richTextBox1.ReadOnly = true;

this.richTextBox1.Size = new System.Drawing.Size (376, 184);

this.richTextBox1.TabIndex = 2;

this.richTextBox1.Text = "";

/ /

/ / Button1

/ /

this.button1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.button1.Location = new System.Drawing.Point (160, 248);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size (80, 24);

this.button1.TabIndex = 3;

this.button1.Text = "Вихід";

this.button1.Click + = new System.EventHandler (this.button1_Click);

/ /

/ / Help

/ /

this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);

this.BackColor = System.Drawing.SystemColors.InactiveBorder;

this.ClientSize = new System.Drawing.Size (394, 280);

this.ControlBox = false;

this.Controls.Add (this.button1);

this.Controls.Add (this.richTextBox1);

this.Controls.Add (this.comboBox1);

this.Controls.Add (this.label1);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;

this.MaximizeBox = false;

this.Name = "Help";

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "Help";

this.TopMost = true;

this.ResumeLayout (false);

}

# Endregion

private void button1_Click (object sender, System.EventArgs e) {this.Close ();}

private void comboBox1_SelectedIndexChanged (object sender, System.EventArgs e)

{

string temp;

switch (comboBox1.SelectedIndex)

{

case (0):

{

richTextBox1.Text = "";

temp = "Машина Посту (як і машина Тьюрінга) є одним із способів формалізації поняття алгоритму. Машина Посту є абстрактною машиною, призначеної для доказу різних тверджень про властивості програм для них. Машина Посту є повністю детермінованою машиною, яка читає початкові дані і, після виконання програми, яка видає результат. На змістовному рівні машина Посту являє собою нескінченну стрічку, розділену на однакові клітини, кожна з яких може бути або порожньою або заповненої міткою, уздовж якої може переміщатися голівка. За один такт або за одну команду головка може переміститися на одну клітину вправо або вліво (чи залишитися на місці). Крім того голівка може записати в клітку, над якою вона знаходиться, мітку (якщо її там не було) або стерти мітку (якщо вона там була). У результаті роботи машина Посту переробляє вміст стрічки в відповідність із заданою программой.В загальному вигляді окрема команда машини Посту має наступний вигляд: n, K, m1, m2; де n - порядковий номер команди, К - тип команди, m1, m2 - порядкові номери наступних команди. Є шість типів команд машини Посту, яким для зручності можна дати номери від 1 до 6. Нижче подано опис команд машини Посту. \ n1 - Рух головки на одну клітку вправо і перехід до команди m1. \ n2 - Рух головки на одну клітку вліво і перехід до команди m1. \ n3 - Нанесення мітки в клітинку і перехід до команди m1. \ n4 - Стирання мітки в осередку і перехід до команди m1. \ n5 - Перевірка наявності мітки в клітці, над якою знаходиться голівка. Якщо мітка відсутня, то управління передається з номером m1 , якщо мітка є, то з номером m2. \ n6 - Зупинка машини. \ nПрімер команди машини Посту: 1,1,2,0;. Дана команда має порядковий номер 1, тип команди - 1 (рух голівки на одну клітку вправо) . Після виконання команди управління передається команді, що має порядковий номер 2. \ nРассмотрім приклад простої програми, яка стирає першу позначку, записану на стрічці. Припустимо, ";

richTextBox1.Text = temp + "що на початку роботи головка знаходиться над вкрай лівої осередком стрічки. Поставлена ​​задача може бути виконана за допомогою наступного набору команд. \ n • 1,5,2,4; 1-я команда. \ n • 2 , 1,3,0; 2-я команда. \ n • 3,5,2,4, 3-та команда. \ n • 4,4,5,0; 4-я команда. \ n • 5,6 , 0,0; 5-я команда. \ nРазберем роботу програми. \ n1-я команда - це команда типу 5, тобто умовний перехід. Якщо осередок порожня, то управління передається команді 2, в іншому випадку - 4-й команді. \ n2-я команда - це зсув голівки на одну комірку вправо і передача керування 3-ї команди. \ n3-я команда - це знову умовний перехід. Якщо мітка відсутня, то повернення до другої команді і перехід на 4-ю в противному випадку. \ n4-та команда стирає мітку (очевидно, вона там є, тому що ми потрапляємо на 4-у команду тільки за наявності мітки) і передає управління 5-ої команді, яка є командою зупинки машини. \ nПорядок запису та виконання програми наступний: \ n1.В вікно «Вхідна рядок машини Посту» введіть довільну рядок, що складається з нулів і одиниць, для якої поставлена ​​задача має сенс. Наприклад, якщо завдання полягає в стиранні 1-й мітки, то, щоб перевірити правильність роботи програми, у вхідній рядку повинна бути присутнім хоча б одна мітка, тобто одиниця. \ n2.В нижележащее вікно введіть у відповідності з вище перерахованими правилами набір команд, які вирішують поставлену задачу. \ n3.Нажміте кнопку «GO», після чого записані команди будуть виконані і у вікні «Вихідна рядок» з'явиться результат роботи машини Посту у вигляді вихідний рядка символів, що складається з нулів та одиниць. \ nВ як вправа задайте довільну вхідні рядок і введіть розглянуту вище програму, яка стирає 1-у позначку. Запустіть програму на виконання. Результат роботи програми покажіть викладачеві. ";

break;

}

case (1):

{

richTextBox1.Text = "";

temp = "Поняття двійкового коду. \ nДля контролю правильності передачі інформації, а також як засіб шифрування інформації використовуються різні коди. Коди, що використовують для передачі інформації два різних елементарних сигналу, називаються двійковими. Ці сигнали зручно позначати символами 0 і 1. Тоді кодове слово буде складатися з послідовності нулів та одиниць. \ nПрі виконанні арифметичних операцій в цифровому автоматі правильний результат буде отриманий тільки у випадку, якщо машина працює без порушень. При виникненні будь-якої помилки в двійковому коді результат операції буде невірним, проте користувач про це не дізнається , якщо не будуть передбачені заходи, що сигналізують про появу помилки. Тобто повинна бути розроблена певна система контролю роботи цифрового автомата. Для цієї мети і служать різні методи кодування двійкової інформації. Кодування за методом парності-непарності. У разі кодування за методом парності-непарності до кожного бінарного числа додається один надлишковий розряд і в нього записується 1 або 0 з такою умовою, щоб сума цифр в числі була за модулем 2 дорівнює 0 у разі кодування за методом парності і 1 - за методом непарності. Іншими словами число одиниць у двійковому числі (разом з контрольним розрядом) повинно бути парним числом в разі парності і непарних - у разі непарності. Поява помилки в двійковому коді виявиться щодо порушення цього правила. Наприклад, число 10011011 буде помилковим у разі кодування по парності, так як число одиниць у числі непарній і дорівнює 5. При такому кодуванні допускається, що може виникнути тільки одна помилка. Очевидно, що якщо число містить дві помилки (або взагалі парне число помилок) то його код за методом парності буде правильним. Те ж саме можна сказати і про кодування за методом непарності. Приклад реалізації методу парності: \ nI.Ціфровой розряд - 1011101 \ nКонтрольний розряд - 1 \ nПрізнак правильності числа - 0 \ n \ nII.Ціфровой розряд - 1110100 \ nКонтрольний розряд - 0 \ nПрізнак правильності числа - 0 \ n \ nIII. Ц ";

richTextBox1.Text = temp + "іфровой розряд - 1000011 \ nКонтрольний розряд - 0 \ nПрізнак правильності числа - 1 \ n \ nIV.Ціфровой розряд - 1110111 \ nКонтрольний розряд - 1 \ nПрізнак правильності числа - 1. \ nПрізнак правильності рівний 0 означає, що код числа правильний і 1 - неправильний. Таке кодування не дозволяє в разі появи помилки визначити який саме розряд є помилковим. Надмірність інформації при такому кодуванні мінімальна і дорівнює одному біту (один додатковий розряд). Можна уявити видозмінений метод контролю за методом парності. Цифрові розряди двійкового числа розбиваються на групи, кожна з яких містить однакову кількість розрядів. Контрольні розряди додаються до кожної групи по рядках і по стовпцях. Збільшення надмірності інформації (замість одного додаткового розряду для 9 розрядного числа ми маємо 6 додаткових розрядів) призводить до того, що з'являється можливість не тільки виявити наявність помилки, а й місце її виникнення. ";

break;

}

case (2):

{

richTextBox1.Text = "";

temp = "Як і в останньому варіанті методу парності, коди Хеммінга дозволяють не тільки виявити наявність помилки, а й місце її знаходження і отже дають можливість її виправити. Однак, на відміну від попереднього методи, коди Хеммінга володіють меншою надмірністю, тобто кількістю додаткових контрольних розрядів. Припустимо, що є код, який містить m інформаційних і k контрольних розрядів. Всі розряди, включаючи контрольні, розбиваються на k груп за певними правилами, про які буде сказано нижче. Кожна група, що містить один контрольний розряд, перевіряється на парність . Нехай були проведені всі k перевірок. Якщо результат даної перевірки свідчить про відсутність помилки, то записується 0, якщо є помилка, то записується 1. У результаті виходить послідовність, що складається з k нулів та одиниць. При відсутності помилки в коді виходить послідовність нулів. Отримане k-розрядне двійкове число може містити 2k різних комбінацій нулів та одиниць. За допомогою цієї інформації потрібно визначити помилковий розряд в коді, що містить m + k розрядів. Для того, щоб це було можливо повинно виконуватися нерівність: 2 ^ k => (m + k +1) \ nОпределіть максимальне значення m для даного k можна з наступної таблиці. \ nn | 1,2,3,4 ... | 8, ..., 15 | 16, ..., 31 | ... | \ nm | 0,0 , 1,1 ... | 4, ..., 11 | 11, ..., 26 | ... | \ nk | 1,2,2,3 | 4, ..., 4 | 5, ..., 5 | ... | \ nз таблиці видно, для 16-ти розрядного числа потрібно 5 контрольних розрядів. В якості порівняння, у разі модифікованого методу парності знадобилося б 8 контрольних розрядів. Позиції контрольних розрядів у методі Хеммінга визначені заздалегідь, це розряди 1,2,4,8, ... Розряди, що входять до кожну групу перевірки представлені у наступній таблиці (1-й розряд в кожній групі є контрольним). \ n \ nНомер групи перевірки - 1. \ nПроверяемие розряди - 1,3,5,7,9,11,13,15, ... \ n \ nНомер групи перевірки - 2. \ nПроверяемие розряди - 2,3,6,7,10,11,14,15,18,19,22,23, ... \ n \ nНомер групи перевірки - 3. \ nПроверяемие розряди - 4,5,6,7,12,13,14,15,20,21,22,23, ... \ n \ nНомер групи перевірки - 4. \ n ";

richTextBox1.Text = temp + "Перевіряються розряди - 8,9,10,11,12,13,14,15,24, ... \ nз таблиці видно, що якщо наприклад код Хеммінга містить 9 розрядів, включаючи контрольні, то 1-я група перевірки містить 1,3,5,7,9 розряди. 2-а група перевірки містить 2,3,6,7 розряди. 3-група перевірки містить 4,5,6,7 розряди та 4-а група - 8, 9 розряди. Кожній групі перевірки приписується 1, якщо перевірка на парність виявляє помилку і 0, якщо помилки немає. Отримане двійкове число дає номер помилкового розряду. Розглянемо як приклад 5-ти розрядне двійкове число 10011. У цьому випадку, як випливає з вищенаведеної таблиці, 1-а група перевірки складається з 1,3, і 5-го розрядів. 2-а група перевірки складається з 2 і 3-го розряду. 3-я група перевірки складається з 4 і 5-го розрядів. Результат перевірки на парність 1-ї групи дає 0 (101), перевірка 2-ї групи дає 0 (00), перевірка 3-ї групи дає 0 (11). Таким чином, дане число не містить помилки. Штучно введемо помилку, замінивши, наприклад, 4-й розряд на 0. У цьому випадку 1, 2 і 3-я перевірки дадуть відповідно 0, 0, 1. Отримане двійкове число 100 дає номер помилкового розряду, тобто 4. ";

break;

}

}

}

}

}

Error

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

namespace Study_Programs

{

public class Error: System.Windows.Forms.Form

{

private System.Windows.Forms.Button button1;

private System.Windows.Forms.Label label1;

private System.Windows.Forms.PictureBox pictureBox1;

private System.ComponentModel.Container components = null;

public Error (string error)

{

InitializeComponent ();

label1.Text = error;

}

protected override void Dispose (bool disposing)

{

if (disposing) if (components! = null) components.Dispose ();

base.Dispose (disposing);

}

# Region Windows Form Designer generated code

private void InitializeComponent ()

{

System.Resources.ResourceManager resources = new System.Resources.ResourceManager (typeof (Error));

this.button1 = new System.Windows.Forms.Button ();

this.label1 = new System.Windows.Forms.Label ();

this.pictureBox1 = new System.Windows.Forms.PictureBox ();

this.SuspendLayout ();

/ /

/ / Button1

/ /

this.button1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.button1.Location = new System.Drawing.Point (136, 56);

this.button1.Name = "button1";

this.button1.Size = new System.Drawing.Size (72, 24);

this.button1.TabIndex = 0;

this.button1.Text = "OK";

this.button1.Click + = new System.EventHandler (this.button1_Click);

/ /

/ / Label1

/ /

this.label1.Font = new System.Drawing.Font ("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte) (204))) ;

this.label1.Location = new System.Drawing.Point (48, 8);

this.label1.Name = "label1";

this.label1.Size = new System.Drawing.Size (272, 40);

this.label1.TabIndex = 1;

this.label1.Text = "label1";

this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

/ /

/ / PictureBox1

/ /

this.pictureBox1.Image = ((System.Drawing.Image) (resources.GetObject ("pictureBox1.Image ")));

this.pictureBox1.Location = new System.Drawing.Point (8, 16);

this.pictureBox1.Name = "pictureBox1";

this.pictureBox1.Size = new System.Drawing.Size (32, 32);

this.pictureBox1.TabIndex = 2;

this.pictureBox1.TabStop = false;

/ /

/ / Error

/ /

this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);

this.BackColor = System.Drawing.SystemColors.InactiveBorder;

this.ClientSize = new System.Drawing.Size (338, 88);

this.ControlBox = false;

this.Controls.Add (this.pictureBox1);

this.Controls.Add (this.label1);

this.Controls.Add (this.button1);

this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;

this.Name = "Error";

this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text = "Error";

this.TopMost = true;

this.ResumeLayout (false);

}

# Endregion

private void button1_Click (object sender, System.EventArgs e) {this.Close ();}

}

}

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
390.7кб. | скачати


Схожі роботи:
Навчальна програма перекладач тексту
Навчальна програма-перекладач тексту
Навчальна програма з математики для допоміжної школи
Навчальна програма для гуртка англійської мови Нappy English 2
Навчальна програма для гуртка англійської мови Нappy English
Навчальна програма з фізичної культури для загальноосвітніх навчальних закладів 1011 клас
Програма Txtprintcom - резидентна програма для швидкого і зручного друкування виборчого тексту
ОС Windows XP програма Провідник програма Total Commander
Навчальна мотивація студента
© Усі права захищені
написати до нас