![]() | Ім'я файлу: Київський національний університет будівництва і архітектури.doc Розширення: docx Розмір: 64кб. Дата: 21.04.2020 скачати Пов'язані файли: Київський національний університет будівництва і архітектури.doc Київський національний університет будівництва і архітектури Кафедра інформаційних технологій проектування та прикладної математики КУРСОВА РОБОТА з дисципліни «Дискретна математика» на тему: «Функціонування парламенту» Студента II курсу групи ІТП-21 напряму підготовки Комп’ютерні науки спеціальності ІТП Пасічника Б.М. Керівник проф. Федоренко Н. Д. Національна шкала __________________ Кількість балів: ____ Оцінка: ECTS ____ Члени комісії ________________ ___________________________ (підпис) (прізвище та ініціали) ________________ ___________________________ (підпис) (прізвище та ініціали) ________________ ___________________________ (підпис) (прізвище та ініціали) м. Київ – 2017 рік Київський національний університет будівництва i архітектури Кафедра інформаційних технологій проектування та прикладної математики Спеціальність: Комп'ютерні науки. ІТП Курс 2 Група ІТП-21 Семестр 3 ЗАВДАННЯна курсову роботу студентові Пасічнику Борису Максимовичу 1.Тема курсової роботи: Функціонування парламенту. Парламент складається з n-депутатів, які повинні розділитися на фракції. Число депутатів в кожній фракції різне. Кожний день кожна фракція відправляє одного представника в президію. Парламент починає роботу лише тоді, коли склад президії відмінний від складу його у попередні дні. Скласти алгоритм та написати програму, яка б визначила оптимальне число фракцій так, щоб парламент працював як можна довше. 2.Термiн здачі студентом закінченої роботи___________________________ 3.Вхiднi дані до (роботи): Число, яке позначає кількість депутатів у Верховній Раді. 4.Змiст пояснювальної записки (перелік питань, які належить розробити)_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ 5.Перелiк графічного матеріалу (з точним зазначенням обов`язкових креслень) _______________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ 6. Дата видачі завдання “______”______________________2017 р Пояснювальна записка до курсової роботи Зміст пояснювальної записки Вступ Основна частина Опис функцій Блок схема програми Блок схема алгоритму функції Результати роботи та висновки Знімок екрану програми Код програми Приклад Вступ Комбінаторний аналіз Комбінаторика або комбінаторний аналіз – розділ дискретної математики, яка вивчає комбінації і перестановку предметів, взаємне розташування частин скінченних множин предметів довільного походження, а також нескінченних множин, які задовольняють умови підпорядкованості, дослідження дискретних скінченних математичних структур. Виділяють такі проблеми комбінаторного аналізу: 1) Задачі про вибір. Задачі такого типу досліджують умови, за яких можна здійснити вибір підмножини або деякої сукупності частин множини так, щоб задовольнити певні умови. Для розв’язання таких задач окрім комбінаторних методів використовується алгебраїчний апарат. 2) Задачі на перелічення, в яких визначається кількість елементів скінченної множини, що задовольняють певні умови. Для розв’язання таких задач розроблено безліч методів (метод продуктивних функцій, метод перелічення Лойя і т.д. ). 3) Задачі про існування та побудову, в яких розглядають питання про те, чи має місце визначена конфігурація скінченної множини з визначеними властивостями, якщо так, то як її побудувати. Окрім комбінаторних методів для розв’язання задач такого типу використовують чисельні та алгебраїчні методи. Правило суми і правило добутку Багато комбінаторних задач можуть бути розв’язані за допомогою двох важливих правил, які називають відповідно правило суми і правило добутку. Спочатку розглянемо правило суми: якщо деякий елемент А можна вибрати m способами, а елемент В — r способами (причому будь-який вибір елемента А відрізняється від вибору елемента В), то вибрати А або В можна m + r способами. Сформулюємо правило добутку: якщо деякий елемент А можна вибрати m способами, а після кожного такого вибору інший елемент В можна вибрати (незалежно від вибору елемента А) — r способами, то пару об’єктів А і В можна вибрати mr способами. Основна частина Завдання Функціонування парламенту. Парламент складається з n-депутатів, які повинні розділитися на фракції. Число депутатів в кожній фракції різне. Кожний день кожна фракція відправляє одного представника в президію. Парламент починає роботу лише тоді, коли склад президії відмінний від складу його у попередні дні. Скласти алгоритм та написати програму, яка б визначила оптимальне число фракцій так, щоб парламент працював як можна довше. Код програми #include "stdafx.h" #include "iostream" #include "stdio.h" #include "math.h" #include #include "windows.h" #include using namespace std; int mas[100]; bool prov(int j, int i)//находит в массиве два одиноковыхх чимлса если есть { bool j1 = false, j2 = false; int m = 0; while (mas[m] != 0) { if (mas[m] == j) j1 = true; if (mas[m] == i) j2 = true; m++; } if (j1 == true || j2 == true) { return true; } else { return false; } } void kol2(int c, int count) { int k, k1, c1 = c; bool pr = false, sup = false; int count1 = count; for (int i = 0; i { if (mas[i] != 1000) { if (mas[i] % 2 == 0) { k = mas[i] / 2 - 3; k1 = mas[i] / 2 + 3; } else { k = mas[i] / 2 -2; k1 = mas[i] / 2 + 3; } if (k > 1 && k1 > 1) { pr = prov(k, k1); } if (k < 2 || k1 < 2) sup = true; if (pr == false && (k > 1 && k1 > 1)) { mas[i] = 1000; mas[c1] = k1; mas[c1 + 1] = k; c1 += 2; count++; } } } if (sup == false) kol2(c1, count); } void kol1(int c, int count) { int k, k1, c1 = c; bool pr = false, sup = false; int count1 = count; for (int i = 0; i { if (mas[i] != 1000) { if (mas[i] % 2 == 0) { k = mas[i] / 2 - 2; k1 = mas[i] / 2 + 2; } else { k = mas[i] / 2-1; k1 = mas[i] / 2 + 2; } if (k > 1 && k1 > 1) { pr = prov(k, k1); } if (k < 2 || k1 < 2) sup = true; if (pr == false && (k > 1 && k1 > 1)) { mas[i] = 1000; mas[c1] = k1; mas[c1 + 1] = k; c1 += 2; count++; } } } if (sup == false) kol1(c1, count); else { kol2(c1, count); } } void kol(int c, int count) { int k, k1, c1 = c; bool pr = false, sup = false; int count1 = count; for (int i = c - 1; i > -1; i--)//-1+count1 { if (mas[i] != 1000) { if (mas[i] % 2 == 0) { k = mas[i] / 2 - 1; k1 = mas[i] / 2 + 1; } else { k = mas[i] / 2; k1 = mas[i] / 2 + 1; } if (k > 1 && k1 > 1) { pr = prov(k, k1); } if (k < 2 || k1 < 2) sup = true; if (pr == false && (k > 1 && k1 > 1)) { mas[i] = 1000; mas[c1] = k1; mas[c1 + 1] = k; c1 += 2; count++; } } } if (sup == false) kol(c1, count); else { kol1(c1, count); } } int main() { setlocale(LC_ALL, "Russian"); HANDLE hOUTPUT = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hOUTPUT, FOREGROUND_GREEN | FOREGROUND_INTENSITY); int n, k, k1, c = 2, count = 0, kolich=0; long long int dob = 1; cout << "Введите количество депутатов" << endl; cin >> n; for (int i = 0; i < 100; i++) { mas[i] = 0; } if (n % 2 == 0) { k = n / 2 - 1; k1 = n / 2 + 1; } else { k = n / 2; k1 = n / 2 + 1; } mas[0] = k; mas[1] = k1; kol(c, count); cout << endl; int i = 0; while (mas[i] != 0) { if (mas[i] != 1000) { cout << mas[i] << " "; dob *= mas[i]; kolich++; } i++; } cout << endl; c = dob / 365; count = dob - c * 365; cout << "Число фракций =" << kolich++ << endl; cout << endl << "Количество робочего времени парламента = " << c<<" г. и "< getchar(); getchar(); return 0; } Знімок екрану програми ![]() ![]() КАЛЕНДАРНИЙ ПЛАН
Студент Пасічник Б. М. (підпис) Керівник ________________________ (підпис) |