Портал освітньо-інформаційних послуг «Студентська консультація»

  
Телефон +3 8(066) 185-39-18
Телефон +3 8(093) 202-63-01
 (066) 185-39-18
Вконтакте Студентська консультація
 portalstudcon@gmail.com
 facebook.com/studcons

<script>

  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){

  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),

  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)

  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

 

  ga('create', 'UA-53007750-1', 'auto');

  ga('send', 'pageview');

 

</script>

Задача Ейнштейна

Тип роботи: 
Курсова робота
К-сть сторінок: 
36
Мова: 
Українська
Оцінка: 
Курсова робота:
 
"Задача Ейнштейна"
 
Зміст
 
Реферат
Вступ
1. Постановка завдання
1.1. Актуальність теми
1.2. Обґрунтування вибору середовища програмування
1.3. Теоретичні відомості
2. Побудова програми
2.1. Структура алгоритму
2.2. Опис програми
2.3. Специфікації функції програми
2.4. Створення програми в середовищі Turbo Pascal 7.1
2.5. Результати роботи програми
Висновки
Список використаної літератури
 
Реферат
 
Курсова робота складається із вступу, двох розділів, висновків, списку використаних джерел (9 найменування) та 1 додатку. Робота містить 3 рисунки та 5 таблиць. Загальний обсяг роботи становить 32 сторінка, основний текст роботи викладено на 19 сторінках. Ключові слова: Задача Ейнштейна, логічні задачі, програма, Pascal.
В курсові роботі розглянуте створення програми, яка реалізує рішення задачі Ейнштейна.
 
Вступ
 
Впровадження електронно-обчислювальних машин, сучасних засобів переробки і передачі інформації послужило початком нового процесу, званим інформатизацією суспільства. Широке поширення набув науково-технічний прогрес. В даний час одним з напрямків науково-технічного прогресу є комп'ютеризація практично всіх сфер людської діяльності.
Зараз комп'ютер є невід'ємною частиною роботи людей. Комп'ютери використовуються в школах і університетах. Вони допомагають систематизації отримані даних, як в робочих цілях, так і в навчальних. Але, жоден комп'ютер не обходиться без програм і програмних забезпечень.
Метою даної курсової роботи є отримання навичок з розробки програмного забезпечення. Практичне застосування теоретичних навичок було випробувано в процесі написання програмного, яка реалізовує задачу Ейнштейна.
 
1. Постановка завдання
 
1.1. Актуальність теми
 
Однією з першочергових задач інформатизації є розвиток методів створення інтелектуальних систем різного призначення, за допомогою яких здійснюється автоматизація наукових досліджень і процесів виробництва. Тому питання розробки нових технологій, підкріплених якісно виконаним програмним забезпеченням персональних комп'ютерів, що дозволяють користувачам задовольняти свої інформаційні запити і вирішувати поставлені задачі будь-якого ступеня складності, є одним з найважливіших в області перспективних напрямів розвитку комп’ютерних наук.
Людині у своїй практичній діяльності часто доводиться вирішувати так звані завдання вибору.
Для задач вибору характерні наступні властивості:
- скінчена множина варіантів вибору (ходи у грі, маршрути руху, визначений набір цілих чисел і т.п.);
- Кожному варіанту зіставляється кількісна характеристика;
- Потрібно вибрати варіант, який володів би такою властивістю, що його числова характеристика задовольняє деякій заздалегідь сформульованому умові, або відповісти на питання про існування такого варіанту.
Проблема, що класифікується як головоломка (або логічна задача), має бути охарактеризована не тільки тим, що вона має гарантоване розв’язання. Повинні існувати також правила, що обмежують як природу прийнятних рішень, так і ті заходи, якими досягаються ці рішення. 
Найбільш очевидний метод вирішення таких задач - по черзі розглянути всі варіанти і вибрати необхідний. Тут застосування комп'ютера найбільш природнє і має сенс. З його допомогою можна обробити таку кількість варіантів, яке вручну розрахувати неможливо. 
Такі завдання вирішуються за допомогою логічних міркувань, і при цьому варіанти, як правило, не мають кількісних характеристик, хоча їх число може бути досить величезним. Для вирішення таких завдань потрібно перекласти логічні міркування на програмну мову, що дозволяє комп'ютеру відсівати непотрібні варіанти. 
Такого плану задачі виступають дослідницьким полігоном для розвитку методів штучного інтелекту. Вибір таких завдань обумовлюється простотою і ясністю проблемного середовища (середовища, у якому розвертається рішення задачі), їх відносно невеликим розміром, можливістю досить легкого підбору і навіть штучного конструювання "під метод". 
В дані роботі розглядається логічна задача Ейнштейна. Все вище сказане обмовляє актуальність розробки програми рішення даної задачі.
Зупинимось на характеристиці даної задачі.
Загадка Ейнштейна – відома логічна задача, за легендою створена Альбертом Ейнштейном в роки його дитинства [1]. Також існує думка, що вона використовувалася Ейнштейном для перевірки кандидатів в асистенти на здатність до логічного мислення. Іноді автором головоломки називають Льюїса Керролла [2]. Тим не менше, немає ніяких доказів того, що завдання придумав Ейнштейн чи Керролл. Більш того, в наведених нижче умовах задачі згадуються марки сигарет, наприклад Kool (англ.), які не існували за життя Керролла і за часів дитинства Ейнштейна.
Наведемо класичний варіант формулювання даної задачі, який був опублікований в журналі Life International в номері від 17 грудня 1962 [4]. Випуск від 25 березня 1963 містив відповідь і список з декількох сотень прізвищ читачів, які правильно розв'язали задачу.
Формулювання задачі Ейнштейна.
Є п’ять будинків: 
–кожен з них має свій власний колір – червоний, синій, бежевий, жовтий, зелений;
–в кожному будинку мешкає людина певної національності (англієць, іспанець, японець, норвежець та українець;
–всі мешканці п’ють різні напої – чай, каву, молоко, воду, апельсиновий сік;
–всі мешканці курять різні марки сигарет – Chesterfield, Old Gold, Kool, Lucky Strike, Parliament.
–всі мешканці володіють різними тваринами – конем, лисою, собакою, зеброю, равликом.
Задані такі умови.
Англієць живе в червоному будинку.
У іспанця є собака.
У зеленому будинку п'ють каву.
Українець п'є чай.
Зелений будинок стоїть відразу праворуч від білого дому.
Той, хто курить Old Gold, розводить равликів.
У жовтому будинку курять Kool.
У центральному будинку п'ють молоко.
Норвежець живе в першому будинку.
Сусід того, хто курить Chesterfield, тримає лисицю.
У будинку по сусідству з тим, в якому тримають коня, курять Kool.
Той, хто курить Lucky Strike, п'є апельсиновий сік.
Японець курить Parliament.
Норвежець живе поруч з синім будинком.
Потрібно знайти: хто п'є воду? Хто тримає зебру?
 
1.2. Обгрунтування вибору середовища програмування
 
Для розробки програмного забезпечення мною вибрано мову програмування Pascal, оскільки Pascal - володіє потужними системами, які полегшують роботу по вводу-виводу. Дана мова програмування підтримує сучасні методи проектування програм. 
Мова програмування Pascal була розроблена професором швейцарського університету Николаусом Віртом в технічному інституті в Цюріху і опублікована в 1971 р Мова названа на честь французького вченого Блеза Паскаля, який розробив один з перших сумуючих пристроїв. Pascal призначався для навчання студентів програмуванню і став першою мовою, в якій знайшли відображення концепції структурного програмування, визначені Дейкстрою і Хором. Міжнародний стандарт мови Pascal був затверджений в 1982 р. Наступні вдосконалення мови зробили її однією з найпоширеніших у світі професійних алгоритмічних мов, тому вона найбільш зручний як перша мова програмування для навчання. Найбільш популярним є версії Turbo Pascal 6.0, Turbo Pascal 7.0 і модифікація Turbo Pascal 7.1.
додаткові кошти. Однак, для швидкого ознайомлення з мовою можна вивчити, як реалізовані в мові елементи, і на їх основі будувати програми. Наведемо короткий опис кожного елемента мови Pascal, які використовуються для розробки програми.
Дані. Це константи, змінні і структури, що містять числа (цілі і речові), текст (символи і рядка) або адреси (змінних і структур).
Операції. Операції здійснюють присвоювання значень, їх комбінування (складання, розподіл і так далі) і порівняння значень (рівні, нерівні і так далі).
Введення. Це означає зчитування значень, що надходять з клавіатури, з диска або з порту введення / виводу.
Умовне виконання. Умовне виконання передбачає виконання набору команд у випадку, якщо виконується (є істинним) деякий умова (якщо ця умова не виконується, то ці команди пропускаються або ж виконується інший набір команд) або якщо деякий елемент даних має деяке спеціальне значення або значення з деякого спектру.
Цикли. Завдяки циклам деякий набір команд виконується повторно або фіксований число разів, або поки є істинним деякий умова, або поки деякий умова не стало дійсним.
За програмне середовище був обраний розроблений усередині 80-х років фірмою "Borland" варіант Turbo Pascal. У даному варіанті цієї мови програмування реалізовано наступні можливості:
а) інтегроване середовище користувача;
б) додаткові можливості компілятора і вмонтований асемблер;
в) об'єктно орієнтовану оболонку для створення прикладних програм.
Система програмування Turbo Pascalє однією з найпопулярніших систем програмування у світі. Цьому сприяє простота та потужність мови програмування Pascal, що є основою системи. Система програмування Turbo Pascal забезпечує ефективність створення і відлагоджування програм. Різноманітні сервісні послуги, які надає програмна оболонка, являються інтегрованим середовищем Turbo Pascal. Для створення великих програм у Turbo Pascal передбачені засоби структурування, тобто, механізм підпрограм. Процедури і функції, як різновиди підпрограм, дозволяють розробляти добре структуровані програми. В таких програмах легко прослідковується основний алгоритм, вони простіші у відлагоджуванні і менш чутливі до помилок програмування. Всі ці властивості дозволяють розробляти великі та надійні програмні комплекси, зокрема, інформаційно-пошукові системи для різних предметних областей.
 
1.3. Теоретичні відомості
 
Для розв’язання задачі використовується дедуктивний метод, який полягає в тому, що у відповідності з правилами заносяться співвідношення у таблицю, послідовно виключаючи неможливі варіанти.
Крок 1.
За умовою норвежець живе в першому будинку (10). Не має значення звідки – зліва чи справа - ведеться нумерація. Нас цікавить тільки порядок будинків, а не напрямок, в якому вони нумеруються. Однак для зменшення невизначеності будемо вважати, що він живе в першому будинку зліва.
З (10) і (15) випливає, що другий будинок синій. Якого кольору перший будинок? Не зелений і не білий, тому що вони повинні стояти поруч (це випливає з 6-ї посилки і того, що 2-й будинок синій). Не червоний, бо там живе англієць (2). Тому перший будинок жовтий.
З цього випливає, що в першому будинку курять Kool (8), а в другому будинку тримають коня (12).
Що п'є норвежець, який живе в першому, жовтому будинку і курить Kool? Це не чай, оскільки чай п'є українець (5). І не кава, бо каву п'ють в зеленому будинку (4). І не молоко, яке п'ють в третьому будинку (9). І не апельсиновий сік, тому що людина, яка п'є сік, курить Lucky Strike (13). Отже, норвежець п'є воду, і це відповідь на перше питання загадки.
будинок12345
коліржовтийсиній ? ? ?
національністьнорвежець ? ? ? ?
напійвода ?молоко ? ?
сигаретиKool ? ? ? ?
тварина ?кінь ? ? ?
Крок 2
Тоді що ж курять в другому, синьому будинку, де, як ми знаємо, тримають коня?
Це не Kool, який курять в першому будинку (8). І не Old Gold, оскільки той, хто їх курить, розводить равликів (7).
Припустимо, що в ньому курять Lucky Strike, це означає, що тут же п'ють апельсиновий сік (13). У такому випадку, хто може тут жити? Це не норвежець – він живе в першому будинку (10). Не англієць – його будинок червоний (2). Не іспанець, оскільки іспанець тримає собаку (3). Не українець, бо українець п'є чай (5). І не японець, який курить Parliament (14). Оскільки дана ситуація неможлива, то в другому будинку, палять не Lucky Strike.
Припустимо, що в другому будинку курять Parliament, з чого випливає, що тут живе японець (14). У такому випадку, що він п'є? Не чай, оскільки чай п'є українець (5). Не каву – каву п'ють в зеленому будинку (4). Не молоко – молоко п'ють в третьому будинку (9). І не сік, тому що сік п'є людина, яка курить Lucky Strike (13). Отже, дана ситуація також неможлива, і в другому будинку, палять не Parliament.
Отже, в другому будинку курять Chesterfield.
Якої національності людина, що живе в другому, синьому будинку, що віддає перевагу Chesterfield і тримає коня? Це не норвежець – він у першому будинку (10). Не англієць – він у червоному будинку (2). Не іспанець – у іспанця собака (3). Не японець – японець курить Parliament (14). Значить, у другому будинку живе українець і, як випливає з (5), п'є чай!
будинок12345
коліржовтийсиній ? ? ?
національністьнорвежецьУкраїнець ? ? ?
напійводаЧаймолоко ? ?
сигаретиKoolChesterfield ? ? ?
тварина ?кінь ? ? ?
Крок 3
Оскільки Chesterfield курять в другому будинку, то з (11) нам стає відомо, що лисицю тримають або в першому, або в третьому будинку.
Давайте спочатку припустимо, що лисиця в третьому будинку. У такому випадку, що п'є людина, яка палить Old Gold і розводить равликів (7)? Ми вже виключили воду і чай на попередніх кроках. Він також не може пити сік, оскільки сік п'є людина, яка палить Lucky Strike (13). Молоко теж не підходить – його п'ють в третьому будинку (9), де, як ми припустили, тримають лисицю. Залишається кава, яку, за умовою, п'ють в зеленому будинку (4).
Отже, якщо в третьому будинку тримають лисицю, то в зеленому будинку живе людина, яка палить Old Gold, розводить равликів і п'є каву. Хто ця людина? Він не норвежець – норвежець в першому будинку (10). Не українець – той п'є чай (5). Не англієць – той живе в червоному будинку (2). Не японець – він курить Parliament (14). І не іспанець - у іспанця собака (3).
Така ситуація неможлива. З чого випливає, що лисицю тримають в першому будинку, а не в третьому.
будинок12345
коліржовтийсиній ? ? ?
національністьнорвежецьУкраїнець ? ? ?
напійводаЧаймолоко ? ?
сигаретиKoolChesterfield ? ? ?
твариналисакінь ? ? ?
Крок 4
З усього вищевикладеного випливає, що каву і апельсиновий сік п'ють в четвертому та п'ятому будинку. Не має значення, який з напоїв – в якому будинку; будемо просто називати їх «будинок, де п'ють сік» і «будинок, де п'ють каву».
Отже, де живе людина, яка палить Old Gold і розводить равликів? Не в будинку, де п'ють сік, тому що там курять Lucky Strike (13).
Припустимо, що він живе в будинку, де п'ють каву. Тоді людина, яка палить Old Gold, розводить равликів і п'є каву, живе в зеленому (4) будинку. Знову ж таки, з тих же міркувань, що і в кроці 3, це неможливо.
Значить, людина, яка палить Old Gold і розводить равликів, живе в третьому будинку.
будинок12345
коліржовтийсиній ? ? ?
національністьнорвежецьУкраїнець ? ? ?
напійводаЧаймолоко ? ?
сигаретиKoolChesterfieldOld Gold ? ?
твариналисакіньравлик ? ?
Звідси випливає, що Parliament курять в зеленому будинку, де п'ють каву, а живе там японець (14). Це означає, що іспанець - той, хто п'є апельсиновий сік, курить Lucky Strike і тримає собаку. Продовжуючи ці міркування, приходимо до висновку, що англієць повинен жити в третьому будинку, і будинок цей – червоний. Методом виключення отримуємо, що будинок іспанця білий.
будинок12345
коліржовтийсинійчервонийбілийзелений
національністьнорвежецьУкраїнецьанглієцьіспанецьяпонець
напійводаЧаймолокосіккава
сигаретиKoolChesterfieldOld GoldLucky StrikeParliament
твариналисакіньравликисобака ?
Отже, ми заповнили всі поля, крім одного. Звідси випливає, що зебру тримає японець.
Відповідь
будинок12345
коліржовтийсинійчервонийбілийзелений
національністьнорвежецьУкраїнецьанглієцьіспанецьяпонець
напійводаЧаймолокосіккава
сигаретиKoolChesterfieldOld GoldLucky StrikeParliament
твариналисакіньравликисобака ?
 
2. Побудова програми
 
Для реалізації програми був використаний алгоритм перестановки, оскільки саме такий алгоритм є природним для реалізації на комп’ютері. Програма реалізована у вигляді консольного додатку.
 
2.1. Структура алгоритму
 
Рис. 1. Узагальнена схема роботи алгоритму.
 
2.2. Опис програми
 
Розробка програми здійснювалася методами структурного програмування. 
Програма організована у вигляді модулів, об’єднаних одним файлом.
Головний модель складається з вкладеного циклу, в якому виконується вибір окремого варіанту розташування ознак і відбувається перевірка виконання умов.
Для подання вхідної інформації була використана така структура даних як двовимірний масив. Масив має фіксований розмір 5х25 і має блочну структур. Кожний блок представляє собою одиничну матрицю розміром 5х5.
Елемент масиву Мas(i,j) дорівнює 0 або 1 в залежності від того, чи має і-й будинок j-у ознаку.
Перший блок масиву представляє ознаку національність: англієць, іспанець, японець, норвежець та українець.
Другий блок масиву представляє ознаку кольору: червоний, синій, білий, жовтий, зелений.
Третій блок масиву представляє ознаку напою: чай, кава, молоко, вода, апельсиновий сік.
Четвертий блок масиву представляє ознаку сигарет: Chesterfield, Old Gold, Kool, Lucky Strike, Parliament.
П’ятий блок масиву представляє ознаку тварини: кінь, лиса, собака, зебра, равлик.
В залежності від 
Всі умови виділені в окремі функції.
Кінцевий результат представляє собою матрицю перестановок, яка задовольняє всім умовам задачі.
Вивід рішення організований у вигляді окремої процедури, де відбувається розшифрування результуючого масиву.
Розробка такої структури програми дозволяє легко нарощувати її функціональність шляхом додавання нових станів і, відповідно, дій. 
 
2.3. Специфікації функції програми
 
Процедура perestanovka (fl : integer)
Дана процедура здійснює наступну перестановку в блоці fl+1. Результатом роботи даної процедури змінюється вказаний блок масиву Mas. 
Процедура table_out
Процедура здійснює оформлення рішення задачі на екрані. При формуванні рішення відбувається розшифрування результуючого масиву, замість 1 вказується значення ознаки, яка відповідає стовпцю, в якому знаходиться 1. Номер рядка вказує на номер будинку. 
Всі функції перевірки правил побудовані таким чином, якщо для даної перестановки правило виконується функція повертає значення 1, в протилежному випадку функція повертає 0.
Функція Rule01 : integer;
Функція здійснює перевірку умови, що англієць мешкає в червоному будинку.
Функція Rule02 : integer;
Функція здійснює перевірку умови, що іспанець має собаку.
Функція Rule03 : integer;
Функція здійснює перевірку умови, що українець п’є чай.
Функція Rule04 : integer;
Функція здійснює перевірку умови, що білий будинок знаходиться відразу праворуч від синього будинку (вектори елементів, які відповідають цим ознакам повинні знаходитись поруч в масиві).
Функція Rule05 : integer;
Функція здійснює перевірку умови, що у зеленому будинку п’ють каву.
Функція Rule06 : integer;
Функція здійснює перевірку умови, що той, хто курить Old Gold розводить равликів.
Функція Rule07 : integer;
Функція здійснює перевірку умови, що в центральному (тобто 3 будинку) п’ють молоко.
Функція Rule08 : integer;
Функція здійснює перевірку умови, що в першому будинку мешкає норвежець.
Функція Rule09 : integer;
Функція здійснює перевірку умови, що в жовтому будинку курять Kool.
Функція Rule10 : integer;
 Функція здійснює перевірку умови, що сусід того, хто курить Chesterfield, тримає лису.
Функція Rule11 : integer;
Функція здійснює перевірку, що сусід того, хто тримає коня, курить Kool.
Функція Rule12 : integer;
Функція здійснює перевірку, що японець курить Parlament.
Функція Rule13 : integer;
Функція здійснює перевірку, що норвежець мешкає по сусідству з синім будинком.
Функція Rule14 : integer;
Функція перевіряє умову, що той, хто курить Lucky Strike, п'є апельсиновий сік.
Функція Rule15 : integer;
Функція перевіряє умову, що норвежець живе поруч з синім будинком.
 
2.4. Створення програми в середовищі Turbo Pascal 7.1
 
Згідно вибору програмного середовища реалізацію алгоритму будемо здійснювати в середовищі Turbo Pascal 7.1
 
Рис. 2. Середовище Turbo Pascal 7.1
 
2.5. Результати роботи програми
 
Рис. 3.
 
Висновки
 
Програмний продукт використовується для розв’язання задачі ейнштейна. Тестування програми на заданих даних та правилах виводу показало, що програма працює вірно.
Одним з основних недоліків програми є відсутність графічного інтерфейсу. В той же час використання при розробці програми методів структурного програмування дає змогу нарощувати функціональні можливості програми, а також створити за потреби для неї графічний інтерфейс.
Програма виконує всі зазначені в завданні функції. ЇЇ можна використовувати в якості навчальної програми.
 
Список використаної літератури
  1. Алексеев Є.Р. Турбо Паскаль 7.0 - Москва. :НТ Пресс,2005. – 314,[6]с.
  2. Алгоритмы и структуры данных/.Вирт: Пер. с англ. –2-е изд. , испр.– сПб:. Невский Диалект, 2001. – 352 с..
  3. Арсенюк І.Р., Колодний В.В., Яровий А.А. Теорія алгоритмів. Навчальний посібник. – Вінниця: ВНТУ, 2006. – 150 с.
  4. Молодцова О. П. Прикладне програмне забезпечення: Навч.-метод. посібник для самост. вивч. дисц. — К.: КНЕУ, 2000. — 264 с.
  5. «Программирование на языке ПАСКАЛЬ», О. Н. Перминов, «Радио и связь», 1988.
  6. Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка. — М.: «Финансы и статистика», 1982.
  7. Моргун Александр Николаевич Программирование на языке Паскаль (Pascal). Основы обработки структур данных. — М.: «Диалектика», 2005. — С. 576.
Додаток А
 
Текст програми
program Einst;
uses Crt;
var
 mas : array [1..5,1..25] of integer;
 i, j, k, l : integer;
 flag1, flag2, flag3, flag4, flag5 : integer;
 k1, k2 : integer;
procedure output;
 var i, j : integer;
 begin
 for i:=1 to 5 do begin
 writeln;
 for j:=1 to 25 do
 write(mas[i,j]);
 end;
end;
procedure table_out;
begin
writeln;
 writeln(' Rishennya zadachi');
 writeln('|------------------------------------------------|');
 writeln('|house | nation | color | drink | cigar | animal |');
 write('| 1 |');
 if mas[1,1]=1 then write('angl ');
 if mas[1,2]=1 then write('esp ');
 if mas[1,3]=1 then write('jap ');
 if mas[1,4]=1 then write('norv ');
 if mas[1,5]=1 then write('ukr ');
 if mas[1,6]=1 then write('red ');
 if mas[1,7]=1 then write('blue ');
 if mas[1,8]=1 then write('beg ');
 if mas[1,9]=1 then write('yel ');
 if mas[1,10]=1 then write('green ');
 if mas[1,11]=1 then write('tea ');
 if mas[1,12]=1 then write('coffe ');
 if mas[1,13]=1 then write('milk ');
 if mas[1,14]=1 then write('water ');
 if mas[1,15]=1 then write('juice ');
 if mas[1,16]=1 then write('Old ');
 if mas[1,17]=1 then write('Cool ');
 if mas[1,18]=1 then write('Old ');
 if mas[1,19]=1 then write('Lucki ');
 if mas[1,20]=1 then write('Parl ');
 if mas[1,21]=1 then write('horse ');
 if mas[1,22]=1 then write('fox ');
 if mas[1,23]=1 then write('dog ');
 if mas[1,24]=1 then write('zebra ');
 if mas[1,25]=1 then write('ravl ');
 writeln;
 write('| 2 |');
 if mas[2,1]=1 then write('angl ');
 if mas[2,2]=1 then write('esp ');
 if mas[2,3]=1 then write('jap ');
 if mas[2,4]=1 then write('norv ');
 if mas[2,5]=1 then write('ukr ');
 if mas[2,6]=1 then write('red ');
 if mas[2,7]=1 then write('blue ');
 if mas[2,8]=1 then write('white ');
 if mas[2,9]=1 then write('yel ');
 if mas[2,10]=1 then write('green ');
 if mas[3,11]=1 then write('tea ');
 if mas[3,12]=1 then write('coffe ');
 if mas[3,13]=1 then write('milk ');
 if mas[3,14]=1 then write('water ');
 if mas[3,15]=1 then write('juice ');
 if mas[2,16]=1 then write('Old ');
 if mas[2,17]=1 then write('Cool ');
 if mas[2,18]=1 then write('Chest ');
 if mas[2,19]=1 then write('Lucki ');
 if mas[2,20]=1 then write('Parl ');
 if mas[2,21]=1 then write('horse ');
 if mas[2,22]=1 then write('fox ');
 if mas[2,23]=1 then write('dog ');
 if mas[2,24]=1 then write('zebra ');
 if mas[2,25]=1 then write('ravl ');
 writeln;
 write('| 3 |');
 if mas[3,1]=1 then write('angl ');
 if mas[3,2]=1 then write('esp ');
 if mas[3,3]=1 then write('jap ');
 if mas[3,4]=1 then write('norv ');
 if mas[3,5]=1 then write('ukr ');
 if mas[3,6]=1 then write('red ');
 if mas[3,7]=1 then write('blue ');
 if mas[3,8]=1 then write('white ');
 if mas[3,9]=1 then write('yel ');
 if mas[3,10]=1 then write('green ');
 if mas[3,11]=1 then write('tea ');
 if mas[3,12]=1 then write('coffe ');
 if mas[3,13]=1 then write('milk ');
 if mas[3,14]=1 then write('water ');
 if mas[3,15]=1 then write('juice ');
 if mas[3,16]=1 then write('Old ');
 if mas[3,17]=1 then write('Cool ');
 if mas[3,18]=1 then write('Chest ');
 if mas[3,19]=1 then write('Lucki ');
 if mas[3,20]=1 then write('Parl ');
 if mas[3,21]=1 then write('horse ');
 if mas[3,22]=1 then write('fox ');
 if mas[3,23]=1 then write('dog ');
 if mas[3,24]=1 then write('zebra ');
 if mas[3,25]=1 then write('ravl ');
 writeln;
 write('| 4 |');
 if mas[4,1]=1 then write('angl ');
 if mas[4,2]=1 then write('esp ');
 if mas[4,3]=1 then write('jap ');
 if mas[4,4]=1 then write('norv ');
 if mas[4,5]=1 then write('ukr ');
 if mas[4,6]=1 then write('red ');
 if mas[4,7]=1 then write('blue ');
 if mas[4,8]=1 then write('white ');
 if mas[4,9]=1 then write('yel ');
 if mas[4,10]=1 then write('green ');
 if mas[4,11]=1 then write('tea ');
 if mas[4,12]=1 then write('coffe ');
 if mas[4,13]=1 then write('milk ');
 if mas[4,14]=1 then write('water ');
 if mas[4,15]=1 then write('juice ');
 if mas[4,16]=1 then write('Old ');
 if mas[4,17]=1 then write('Cool ');
 if mas[4,18]=1 then write('Chest ');
 if mas[4,19]=1 then write('Lucki ');
 if mas[4,20]=1 then write('Parl ');
 if mas[4,21]=1 then write('horse ');
 if mas[4,22]=1 then write('fox ');
 if mas[4,23]=1 then write('dog ');
 if mas[4,24]=1 then write('zebra ');
 if mas[4,25]=1 then write('ravl ');
 writeln;
 write('| 5 |');
 if mas[5,1]=1 then write('angl ');
 if mas[5,2]=1 then write('esp ');
 if mas[5,3]=1 then write('jap ');
 if mas[5,4]=1 then write('norv ');
 if mas[5,5]=1 then write('ukr ');
 if mas[5,6]=1 then write('red ');
 if mas[5,7]=1 then write('blue ');
 if mas[5,8]=1 then write('white ');
 if mas[5,9]=1 then write('yel ');
 if mas[5,10]=1 then write('green ');
 if mas[5,11]=1 then write('tea ');
 if mas[5,12]=1 then write('coffe ');
 if mas[5,13]=1 then write('milk ');
 if mas[5,14]=1 then write('water ');
 if mas[5,15]=1 then write('juice ');
 if mas[5,16]=1 then write('Old ');
 if mas[5,17]=1 then write('Cool ');
 if mas[5,18]=1 then write('Chest ');
 if mas[5,19]=1 then write('Lucki ');
 if mas[5,20]=1 then write('Parl ');
 if mas[5,21]=1 then write('horse ');
 if mas[5,22]=1 then write('fox ');
 if mas[5,23]=1 then write('dog ');
 if mas[5,24]=1 then write('zebra ');
 if mas[5,25]=1 then write('ravl ');
end;
procedure perestanovka (fl : integer);
 var i, s : integer;
 var l1, l2 : integer;
 begin
 if (k1<>k2) then begin
 l1:=k1+5*fl;
 l2:=k2+5*fl;
 for i := 1 To 5 Do
 begin
 s:=mas [i,l1];
 mas [i,l1] := mas[i,l2];
 mas [i,l2] := s;
 end;
 end;
 k2:=k2+1;
 if (k2=6) then
 begin
 k1:=k1+1;
 k2:=1;
 end;
 end;
function Rule01 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,1]=1) and (mas[i,6]=1) then
 Rule01:=1
 else
 Rule01:=0;
 end;
function Rule02 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,2]=1) and (mas[i,23]=1) then
 Rule02:=1
 else
 Rule02:=0;
 end;
function Rule03 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,5]=1) and (mas[i,11]=1) then
 Rule03:=1
 else
 Rule03:=0;
 end;
function Rule04 : integer;
 var i: integer;
 begin
 for i:=2 to 5 do
 if (mas [i,10]=1)and (mas[i-1,8]=1) then
 Rule04:=1
 else
 Rule04:=0;
 end;
function Rule05 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,10]=1) and (mas[i,12]=1) then
 Rule05:=1
 else
 Rule05:=0;
 end;
function Rule06 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,16]=1) and (mas[i,25]=1) then
 Rule06:=1
 else
 Rule06:=0;
 end;
function Rule07 : integer;
 begin
 if mas [3,13]=1 then
 Rule07:=1
 else
 Rule07:=0;
 end;
function Rule08 : integer;
 begin
 if (mas[1,4]=1) then
 Rule08:=1
 else Rule08:=0;
 end;
function Rule09 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,17]=1) and (mas[i,9]=1) then
 Rule09:=1
 else
 Rule09:=0;
 end;
function Rule10 : integer;
 var i: integer;
 begin
 for i:=2 to 4 do
 if ((mas [i,18]=1) and (mas[i-1,22]=1)) or ((mas [i,18]=1) and (mas[i+1,22]=1)) then
 Rule10:=1
 else
 Rule10:=0;
 end;
function Rule11 : integer;
 var i: integer;
 begin
 for i:=2 to 4 do
 if ((mas [i,21]=1) and (mas[i-1,16]=1)) or ((mas [i,21]=1) and (mas[i+1,16]=1)) then
 Rule11:=1
 else
 Rule11:=0;
 end;
function Rule12 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,20]=1) and (mas[i,3]=1) then
 Rule12:=1
 else
 Rule12:=0;
 end;
function Rule13 : integer;
 var i: integer;
 begin
 for i:=2 to 4 do
 if ((mas [i,4]=1) and (mas[i-1,7]=1)) or ((mas [i,4]=1) and (mas[i+1,7]=1)) then
 Rule13:=1
 else
 Rule13:=0;
 end;
function Rule14 : integer;
 var i: integer;
 begin
 for i:=1 to 5 do
 if (mas [i,24]=1) and (mas[i,19]=1) then
 Rule14:=1
 else
 Rule14:=0;
 end;
function Rule15 : integer;
 var i: integer;
 begin
 for i:=2 to 4 do
 if ((mas [i,4]=1) and (mas[i-1,7]=1)) or ((mas [i,4]=1) and (mas[i+1,7]=1)) then
 Rule15:=1
 else
 Rule15:=0;
 end;
begin
 for i:=1 to 5 do begin
 for j:= 1 to 5 do begin
 if i = j then begin
 mas[i,j]:= 1;
 mas[i,j+5]:=1;
 mas[i,j+10]:=1;
 mas[i,j+15]:=1;
 mas[i,j+20]:=1;
 end
 else
 begin
 mas[i,j]:= 0;
 mas[i,j+5]:=0;
 mas[i,j+10]:=0;
 mas[i,j+15]:=0;
 mas[i,j+20]:=0;
 end;
 end;
 end;
 k1:=1;
 k2:=1;
 flag1:=0;
 while (flag1=0) and (k1<6) and (k2<6) do begin
 perestanovka(0);
 if Rule08=0 then continue;
 k1:=1;
 k2:=1;
 flag2:=0;
 while (flag2=0) and (k1<6) and (k2<6) do begin
 perestanovka(1);
 if (Rule04=0) or (Rule01=0) or (Rule13=0) then 
 continue;
  k1:=1;
 k2:=1;
 flag3:=0;
 while (flag3=0) and (k1<6) and (k2<6) do begin
 perestanovka(2);
 if (Rule07=0) or (Rule03=0) or (Rule05=0) then 
 continue;
  k1:=1;
 k2:=1;
 flag4:=0;
 while (flag4=0) and (k1<6) and (k2<6) do begin
 perestanovka(3);
 if (Rule09=0) or (Rule14=0) or (Rule12=0) or (Rule15=0) then 
 continue;
  k1:=1;
 k2:=1;
 flag5:=0;
 while (flag5=0) and (k1<6) and (k2<6) do begin
 perestanovka(4);
 if (Rule02=0) or (Rule06=0) or (Rule10=0) or (Rule11=0) then 
 continue
 else begin
 flag1:=1;
 flag2:=1;
 flag3:=1;
 flag4:=1;
 flag5:=1
 end;
 end;
 end;
 end;
 end;
 end;
 table_out;
 readln;
 end.
Фото Капча