Ім'я файлу: Київський національний університет будівництва і архітектури.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. Основна частина

  • Опис функцій

  • Блок схема програми

  • Блок схема алгоритму функції

  1. Результати роботи та висновки

  • Знімок екрану програми

  • Код програми

  • Приклад


Вступ

Комбінаторний аналіз

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

Виділяють такі проблеми комбінаторного аналізу:

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;

}


Знімок екрану програми




КАЛЕНДАРНИЙ ПЛАН







п/п

Назва етапів курсової роботи

Термін виконання етапів курсової роботи

Примiт-ки






























































































































































































































































Студент Пасічник Б. М. (підпис)

Керівник ________________________ (підпис)

скачати

© Усі права захищені
написати до нас