Форма N Н-6.01
_________________Вінницький національний технічний університет_________________(повне найменування вищого навчального закладу)
____________________________Кафедра комп’ютерних наук__________________________(повна назва кафедри, циклової комісії)
КУРСОВА РОБОТА
_______________________з Алгоритмізації та програмування________________________ (назва дисципліни) на тему: Знаходження простих чисел методом Ератосфена ___________
Студента __І__ курсу __2КН-15б__ групи напряму підготовки 6.050101 Комп’ютерні науки________________Григоришена К. Р._______________ (прізвище та ініціали) Керівник __доцент Арапов. С. М.__ (посада, вчене звання, науковий ступінь, прізвище та ініціали)
Національна шкала ___________________________Кількість балів: __________ Оцінка: ECTS _______
Члени комісії
________________(підпис)
___________________________(прізвище та ініціали)
________________(підпис)
___________________________(прізвище та ініціали)
________________(підпис)
___________________________(прізвище та ініціали)
Вінниця 2016
Міністерство освіти і науки України
Вінницький національний технічний університет
Факультет інформаційних технологій та комп’ютерної інженерії
Кафедра комп’ютерних наук
ЗАТВЕРДЖУЮ
Зав. каф. КН, д.т.н., проф.
____________ С. І. Перевозніков
«__» _____________ 20__ р.
ІНДИВІДУАЛЬНЕ ЗАВДАННЯ
на курсову роботу з дисципліни « Алгоритмізація та програмування »
студента групи __2КН-15б__Григоришена К.В..__
1. Тема курсової роботи_ Знаходження простих чисел затверджена на засіданні кафедри комп’ютерних наук, протокол №___від «__» 20 р.
2. Термін здачі студентом зазначеної роботи: «__» 20 р.
3. Вхідні дані до роботи: Програмне середовище, засоби проектування системи
4. Зміст пояснювальної записки: Вступ; Постановка задачі; Схема алгоритму функціонування програмного забезпечення; Опис алгоритму; Характеристика даних; Опис роботи програми; Аналіз результатів; Висновки; Список використаних джерел; Додатки.
5. Дата видачі завдання: «__» 20 р.
Завдання видав _____ Арапов. С. М._____ ____________
(ПІП керівника курсової роботи) (підпис)
Завдання прийняла до виконання __Григоришена .К.Р.__ ____________
(ПІП студента) (підпис)
АНОТАЦІЯ
В даній роботі було розроблено програму для перевірки заданого числа на простоту. Було проаналізовано основні алгоритми знаходження простих чисел та проведено їхнє порівняння. Детально описано весь хід аналізу, створення алгоритму, реалізація та тестування програми. Для тестування програми використано методологію Agile. Для реалізації було використано програмне середовище Visual Studio 2015. Також було показано перевагу даної програми завдяки певним факторам.
АННОТАЦИЯ
В данной работе было разработано программу для проверки заданного числа на простоту . Было проанализировано основные алгоритмы нахождения простых чисел и приведено их сравнения. Подробно описано весь ход анализа, создание алгоритма, реализация и тестирование программы. Для тестирования программы использовано методологию Agile. Для реализации было использовано программную среду Visual Studio 2015. Также было показано преимущество данной программы благодаря определенным факторам.
ANNOTATION
In this project had developed a program to check the given number for simplicity. It analyzes the main algorithms for finding prime numbers and made their comparison. Described in detail the entire course of the analysis, algorithm creation, implementation and testing program. To test the program using the methodology of Agile. To implement the software environment used Visual Studio 2015. It was also shown the advantage of this program due to certain factors.
ЗМІСТ
ПЕРЕЛІК СКОРОЧЕНЬ 7
ВСТУП 8
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ «ЗНАХОДЖЕННЯ ПРОСТИХ ЧИСЕЛ МЕТОДОМ РЕШЕТА ЕРАТОСФЕНА» 9
1.1 Теорія предметної області Знаходження простих чисел методом решета Ератосфена 9
1.2 Постановка задачі... 9
2 ПРОЕКТУВАННЯ СИСТЕМИ ЗНАХОДЖЕННЯ ПРОСТИХ ЧИСЕЛ МЕТОДОМ РЕШЕТА ЕРАТОСФЕНА 10
2.1 Обґрунтування вибору мови програмування 10
2.2 Розробка структури системи Знаходження простих чисел методом решета Ератосфена 10
2.3 Розробка алгоритму функціонування системи Знаходження простих чисел методом решета Ератосфена 10
2.4 Розробка алгоритму пошуку простих чисел методом решета Ератосфена 10
3 ПРОГРАМНА РЕАЛІЗАЦІЯ СИСТЕМИ ЗНАХОДЖЕННЯ ПРОСТИХ ЧИСЕЛ МЕТОДОМ РЕШЕТА ЕРАТОСФЕНА 11
3.1. Основні оператори мови програмування С# 11
3.2. Особливості середовища в якому буде розроблятися система 11
3.3. Реалізація системи Знаходження простих чисел методом решета Ератосфена 11
3.4. Тестування розробленої системи Знаходження простих чисел методом решета Ератосфена 11
ВИСНОВКИ 12
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 13
ДОДАТКИ 14
ДОДАТОК А Лістинг програмної реалізації основних модулів системи Знаходження простих чисел методом решета Ератосфена 15
ДОДАТОК Б Інструкція користувача системи Знаходження простих чисел методом решета Ератосфена 16
ПЕРЕЛІК СКОРОЧЕНЬ
ПК
–
Персональний комп’ютер
Тест
–
Сценарій тестування
ПЗ
–
Програмне забезпечення
ОК
–
Успішне виконання
ВСТУП
Головною метою даної роботи є отримання нових знань для професійної реалізації в житті. Головним чином, основною задачею цієї роботи є створення технічного додатку та набуття навичок програмування для подальшої навчальної роботи і професійної діяльності.
Основними критеріями вибору даної теми є вузька спеціалізація даної теми в основних математичних постулатах та можливість використання усіх навичок програмування, серед яких швидке програмування, тестове програмування. Також однією з головних причин є програмний запис математичного алгоритму пошуку, що потребує аналізу методу та його складових, а також цілковите розуміння системи в цілому.
Даний алгоритм широковідомий у світі завдяки його оптимізації та простоті розуміння. Серед усіх подібних алгоритмів він є одним із найшвидших. Програмні реалізації даного алгоритму також широко розповсюджені, але незважаючи на це, інтерфейси даних додатків обмежуються світовими мовами. Зважаючи на це, інтерфейс користувача міститиме українську мову, що значно розширює функціональні можливості системи.
Зважаючи на це, дана розробка має чимало переваг над подібними екземплярами, що робить її більш конкурентною та підвищує можливість подальшої реалізації, як комерційного продукту або додатку.
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ «ЗНАХОДЖЕННЯ ПРОСТИХ ЧИСЕЛ»
1.1 Теорія предметної області Знаходження простих чисел методом решета Ератосфена
Просте число — це натуральне число, яке має рівно два різних натуральних дільники (лише 1 і саме число). Решту чисел, окрім одиниці, називають складеними. Таким чином, всі натуральні числа, більші від одиниці, розбивають на прості і складені. Теорія чисел вивчає властивості простих чисел. В теорії кілець простим числам відповідно використовуються незвідні елементи [1].
Основна теорема арифметики стверджує, що кожне натуральне число більше одиниці, можна представити як добуток простих чисел, причому, в єдиний спосіб з точністю до порядку множників. Таким чином, прості числа — це елементарні «будівельні блоки» натуральних чисел. Представлення натурального числа у вигляді добутку простих називають розкладом на прості або факторизацією числа.
Алгоритмічно перевірити число на простоту можливо за допомогою досить великої кількості різних тестів простоти, найвідомішими з яких є: Решето Ератосфена [2], решето Сундарама та решето Аткіна.
Алгоритм Решета Ератосфена
Якщо потрібно знайти всі прості числа менші за певне число N, виписуються всі числа від 1 до N.
Перше просте число - два. Викреслимо всі числа більші двох, які діляться на два (4, 6, 8 …).
Наступне число, яке залишилося не закресленим (три), є простим. Викреслюємо всі числа більші трьох та кратні трьом (6, 9 …).
Наступне не закреслене число (п'ять) є простим. Викреслимо всі числа більші п'яти та кратні п'яти (10, 15, 20, 25 …).
Повторюємо операцію поки не буде досягнуто число N:
Наступне не закреслене число є простим. Викреслимо всі числа більші нього та кратні йому.
Числа, які залишилися не закресленими після цієї процедури – прості, що показано на рисунку 1.1.
Рисунок 1.1 – Алгоритм Ератосфена
Решето Сундарама
Принцип роботи алгоритму Сундарама зводиться, як і в його знаменитому попередникові, до послідовного відсіювання всіх непотрібних чисел [3]. Але у нього є одна невелика особливість: результатом роботи алгоритму буде послідовність простих чисел з діапазону від 2 до подвоєного значення граничного числа. Припустимо необхідно отримати всі прості числа до деякого N, тоді вихідними даними будуть всі прості числа від 2 до 2N + 1.
Решето Сундарама з ряду натуральних чисел, що не перевищують N, виключає числа виду 2ij + i + j. Результат цього виразу, ні при яких значеннях вхідних в нього змінних, не перевищує N (2ij + i + j≤N). Дотримуючись цієї умови, а також те, що i завжди менше або дорівнює j, змінні i та j проходять всі натуральні значення з множин:
Рисунок 1.2 – Множини чисел Сундарама
Решето Аткіна
Основна ідея алгоритму полягає у використанні невизначених квадратичних форм ( подання чисел у вигляді ax² + by²). У спрощеному вигляді алгоритм може бути представлений таким чином:
Всі числа, рівні (по модулю 60) 0, 2, 4, 6, 8, …, 56 або 58, діляться на два і свідомо не прості. Всі числа, рівні (по модулю 60) 3, 9, 15, 21, 27, 33, 39, 45, 51 або 57, діляться на три і теж не є простими. Всі числа, рівні (по модулю 60) 5, 25, 35 або 55, діляться на п'ять і також не прості. Всі ці залишки (по модулю 60) ігноруються.
Всі числа, рівні (по модулю 60) 1, 13, 17, 29, 37, 41, 49 або 53, мають залишок від ділення на 4, рівний 1. Ці числа є простими тоді і тільки тоді, коли кількість рішень рівняння 4x² + y² = n непарній і саме число не кратне ніякому квадрату простого числа.
Числа, рівні (по модулю 60) 7, 19, 31, або 43, мають залишок від ділення на 6, рівний 1. Ці числа є простими тоді і тільки тоді, коли кількість рішень рівняння 3x² + y² = n непарній і саме число не кратне ніякому квадрату простого.
Числа, рівні (по модулю 60) 11, 23, 47, або 59, мають залишок від ділення на 12, рівний 11. Ці числа є простими тоді і тільки тоді, коли кількість рішень рівняння 3x² - y² = n (для x> y ) непарній і саме число n не кратне ніякому квадрату простого.
Окремий крок алгоритму викреслює числа, кратні квадратах простих чисел. Так як жодне з розглянутих чисел не ділиться на 2, 3, або 5, то, відповідно, вони не діляться і на їх квадрати. Тому перевірка, що число не кратне квадрату простого числа, не включає 2², 3², і 5² [4].
1.2 Постановка задачі розробки
Постановка задачі складається з чотирьох етапів, що уособлюють в собі створення інтерфейсу користувача, запис програмного коду методу, компонування системи шляхом поєднання усіх модулів системи та приведення програмного додатку до релізу. Чотири етапи постановки задачі:
Створення інтерфейсу користувача. Створення україномовного, англомовного та російськомовного інтерфейсу з можливістю повторного запуску системи без операції повторного використання додатку. Воно міститиме пояснення до основних операцій системи та буде повідомляти інструкції щодо використання програмного додатку.
Створення тіла програми шляхом запису коду в середовищі програмування. Зважаючи на це код повинен бути оптимізований, унікальний, повинен містити повну реалізацію методу решета Ератосфена, та задовольняти інші пункти постановки задачі в повному обсязі.
Компонування системи полягає у виконанні збірки усіх модулів системи в одне ціле шляхом виконання компіляції системи та першочерговий запуск усієї системи загалом.
Приведення програмного додатку до релізу уособлює в собі коригування системи на предмет помилок системи та оптимізацію програмного додатку загалом.
2 ПРОЕКТУВАННЯ СИСТЕМИ ЗНАХОДЖЕННЯ ПРОСТИХ ЧИСЕЛ МЕТОДОМ РЕШЕТА ЕРАТОСФЕНА
2.1 Обґрунтування вибору мови програмування
Основними критеріями відбору мови програмування, що буде використовуватись в процесі реалізації є наявність інструментів математичної логіки, можливість створення імперативних додатків, що міститимуть в собі логічний запис алгоритму та взаємодію модулів системи, включаючи підтримку об’єктно-орієнтованої парадигми програмування. Серед відомих мов програмування дані критерії містять в собі імперативні та функціональні мови програмування. Але зважаючи на логічність запису коду, функціональні мови не забезпечують даний критерій в повному обсязі. Серед основних функціональних мов програмування було виділено такі як, F# та Haskell.
Серед імперативних мов програмування широко використовуються Java, C++, C#, Visual Basic. Основною перевагою мови програмування Java є мультиплатформність, що компенсує недостачу компонентів математичної логіки. Visual Basic уособлює в собі виключно імперативну мову програмування з малою кількістю функціональних бібліотек та не великою популярністю серед розробників ПЗ. С++ виділяє в собі велику функціональність, але можливість виконання закріплена за платформою .NET, що є вагомим недоліком даної мови. Наостанок C# є повнофункціональною, імперативною, мультипарадигмальною мовою з повною підтримкою об’єктно-орієнтованого програмування [5]. Дана мова є однією з найбільш популярних у світі завдяки її широкому спектру застосування та використання у великих функціональних додатках. Зважаючи на це було обрано мову програмування C#, адже вона в повному обсязі задовольняє усі вимоги,які були висунуті.
Додатком до даного аналізу мов програмування є таблиця 2.1, що доводить переваги C# над іншими мовами програмування.
Таблиця 2.1 – Порівняльна характеристика мов програмування
C++
C#
Java
Haskell
F#
Basic
Функціональна
-
-
-
+
+
-
Процедурна
+
+
+
+
+
+
Імперативна
+
+
+
-
+
+
ООП
+
+
+
+
+
+/-
Математична логіка
+
+
+/-
+
+
+
Популярність
+
+
+
+/-
+/-
+/-
Логічність
+
+
+
+
+
+
Отже, для реалізації програми знаходження простих чисел методом решета Ератосфена було обрано мову програмування C#. В якості прикладу використання наведено рисунок 2.1.
Рисунок 2.1 – Приклад коду C#
2.2 Розробка структури системи Знаходження простих чисел методом решета Ератосфена
Структура програми складається з двох основних модулів та одного додаткового, що показано на рисунку 2.2. Основні модулі включають в себе запис методу решета Ератосфена, виконання операцій математичної логіки та систему контролю вхідних даних. Додатковий модуль складається з інтерфейсу користувача та системи інструкцій щодо виконання дій у програмному додатку за допомогою консольних повідомлень.
Перший основний модуль містить в собі систему отримання та виведення даних, яка складається з операторів введення та виведення інформації, а також систему перетворення отриманих від користувача даних у аргументи функції, яка використовується другим основним модулем.
Другий основний модуль містить в собі основний функціонал програми, що складається з основного тіла програми та методу решета Ератосфена, яка буде описана у вигляді методу класу, що є можливим за допомогою об’єктно-орієнтованого програмування.
Рисунок 2.2 – Модулі системи
2.3 Розробка алгоритму функціонування системи Знаходження простих чисел методом решета Ератосфена
Алгоритм функціонування складається з трьох складових. Спочатку потрібно взяти всі числа від одиниці (1) до потрібного числа і занести їх у масив даних. Потім беремо наступне після одиниці число два (2), і викреслюємо усі числа, що більше двох і кратне йому. Наступна складова уособлює в собі перехід до наступного числа, що залишилось, воно є простим. Потім повторюється попередня частина та знову береться наступне число.
Таким чином, дійшовши до заданого числа, серед усіх взятих чисел залишаться лише прості. Остання складова алгоритму є виведення простих чисел у вигляді переліку, що показано на рисунку 2.3.
Рисунок 2.3 – Схема алгоритму програми
2.4 Розробка алгоритму пошуку простих чисел методом решета Ератосфена
Алгоритм пошуку простих чисел є досить логічним та складається з циклічного проходження по набору натуральних чисел, що постійно зменшується з кожною ітерацією. Також використовується перевірка вхідних даних, для уникнення критичних помилок системи. Алгоритм методу решетом Ератосфена зображено на рисунку 2.4.
Рисунок 2.4 – решето Ератосфена
3 ПРОГРАМНА РЕАЛІЗАЦІЯ СИСТЕМИ ЗНАХОДЖЕННЯ ПРОСТИХ ЧИСЕЛ МЕТОДОМ РЕШЕТА ЕРАТОСФЕНА
3.1. Основні оператори мови програмування С#
С# – є багатофункціональною мовою програмування, що включає в себе велику кількість операторів, вкладених функцій та методів, що використовуються для спрощення запису алгоритму [6]. Оператори поділяються на різні категорії, що відрізняються своїм призначенням. На відміну від функціонального програмування, де немає змінних, а є лише функції у вигляді їхніх аргументів, у імперативних мов програмування змінні відіграють чи не основну роль, адже вони використовуються для опису стану об’єктів, характеристик та інших показників, що можна визначити математичним шляхом. Серед них в даній програмі використані такі оператори, як:
For(i=0; i<n; i++){тіло циклу} – оператор циклу із скінченною кількістю ітерацій. Даний оператор створений для циклічного ітераційного виконання блоку програми, що в ньому написана, та є скінченним завдяки ітераційному лічильнику,що рахує кожний новий виток циклу, починаючи з першого. Цикл описується в округлих дужках у вигляді ітераційного лічильника та його початкового значення, умови створення нового витка циклу і ітераційного оператора, який змінює ітераційний лічильник, а у фігурних описується вже сам блок, що буде щоразу виконуватись циклом [7].
If(умова){block 1}else{block 2} – оператор умови. Даний оператор виконує перевірку заданої умови після чого виконує блок операцій у разі підтвердження перевірки, або інший блок у разі хибності умови (рисунок 3.1). Синтаксично умова пишеться в округлих дужках, після чого у фігурних дужках описується блок коду, що виконається в разі виконання умови оператора, після чого, якщо нам необхідно щось виконати для хибної умови пишеться else та знову у фігурних дужках описується блок коду [8].
Switch(умова)case1:{block 1}default{block 2} – оператор умови. Даний оператор виконує перевірку заданої умови після чого виконує блок операцій у разі конкретного результату, або блок у разі не отримання жодного з необхідних значень умови. Синтаксично умова пишеться в округлих дужках, після чого у фігурних дужках описується блок коду, що виконається в разі певного виконання умови оператора, після чого, якщо нам необхідно щось виконати для хибної умови пишеться default та знову у фігурних дужках описується блок коду [9].
Рисунок 3.1 – Приклад використання операторів на C#
3.2. Особливості середовища в якому буде розроблятися система
Visual Studio 2015
Наступна версія Visual Studio, під кодовим ім'ям Dev14 була представлена 20 червня 2015 року. Суттєвою зміною стала підтримка багатьох цільових платформ: окрім базової Windows з'явилась можливість будувати проекти для IOS та Andriod. Версія включає в собі .NET Framework 4.6 та підтримку універсальної платформи Windows 10. Останнім оновленням на даний момент є Update 2 від 30 березня 2016-го року, у якому багато уваги приділено стабільності, та продовжено роботу у напрямку підтримки нових стандартів мови С++ [10].
Sublime Text 3 — швидкий кросплатформлений редактор початкових текстів програм. Підтримує плагіни, розроблені за допомогою мови програмування Python. Sublime Text не є вільним чи відкритим програмним забезпеченням, але його плагіни розповсюджуються з вільною ліцензією, розробляються і підтримуються спільнотою розробників. Починаючи з другої версії, Sublime Text став кросплатформенним ПЗ.
Таблиця 3.1 – Порівняльна характеристика середовищ
ST3
VS 2015
NotPade
Автодописування
+
+
-
Підтримка авто запуску
+
+
+/-
Контроль помилок
+
+
-
Інструменти обробки
+
+
+
Автозберігання
-
+
+
Інтеграція з платформами
+
+/-
+
Отже, серед описаних середовищ було обрано Visual Studio 2015, завдяки її повній домінації над іншими середовищами (таблиця 3.1).
3.3. Реалізація системи Знаходження простих чисел методом решета Ератосфена.
Програма по знаходженню простих чисел складається з трьох модулів, що забезпечують повноцінне функціонування системи, яка складається з інтерфейсу користувача, методу решета Ератосфена, як основного механізму виконання програми та системи введення та виведення даних.
Зважаючи на це, представлено опис основних функцій програми, як системи загалом, так і її складових:
Інтерфейс користувача – складається з набору інструкцій, що вкладені в в тіло програми та дають чітку інформацію щодо введення вхідних даних. У зв’язку з тим, що дана програма містить інформацію на трьох мовах, то повідомлення також існують на трьох мовах. Зважаючи на це, було використано початкове введення вибору інтерфейсу, після чого інформація буде надходити виключно обраною користувачем мовою.
Метод решета Ератосфена – складається з трьох циклів, що уособлюють в собі алгоритм закреслення складних чисел за допомогою подвійного циклу, та систему виведення простих чисел шляхом циклічного проходження по усім вершинам діапазону. Та обрання необхідних не закреслених чисел, що є простими та їх виведенням.
На випадок відсутності простих чисел у діапазоні програма виводить повідомлення про відсутність простих чисел у заданому діапазоні. Якщо введений діапазон містить хибні границі, то програма повторно надішле запит користувачу про введення діапазону ще раз, і якщо хибні значення повторяться, система автоматично сприйме це за механічну помилку введення та використає їх за модулем, що автоматично продовжить виконання основної складової системи.
й3.4. Тестування розробленої системи Знаходження простих чисел методом решета Ератосфена
Опис процесу тестування розробленого програмного забезпечення та опис його результатів.
ВИСНОВКИ
В даній роботі було розроблено програму для знаходження простих чисел методом решета Ератосфена. При проектуванні системи було впроваджено алгоритм решета Ератосфена. Було оптимізовано метод шляхом покращення циклів обробки чисел. При проектуванні було використано основи алгоритму решета Ератосфена. Було створено трьох-мовний інтерфейс. Розроблено систему інструкцій у вигляді повідомлень про подальші дії користувача. Використано методологію тестування Agile, що дало змогу позбутись критичних помилок компіляції та ходу виконання системи в цілому. В цілому було створено першу програму знаходження простих чисел в заданому діапазоні на трьох мовах.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
Wikipedia Ukrainian [Електронний ресурс]: [Веб-сайт] – Електронні дані. – Режим доступу: https://uk.wikipedia.org/wiki/Просте_число – Назва з екрану
Лабаратория юного линуксоида [Електронний ресурс]: [Веб-сайт] – Електронні дані. – Режим доступу: http://younglinux.info/algorithm/sieve – Назва з екрану
Искусственный разум [ Електронний ресурс]: [Веб-сайт] – Електронні дані. – Режим доступуhttp: //b.my-city.com.ua/news/4392/23/resheto-sundarama/– Назва з екрану
Академик [Електронний ресурс]: [Веб-сайт] – Електронні дані. – Режим доступу http://dic.academic.ru/dic.nsf/ruwiki/209722– Назва з екрану
С# для начинающих / Мартынов Н.Н. [Текстовий ресурс]: Книга з програмування - 272с
Библия С#/Михаил Фленов [Текстовий ресурс]: Книга з програмування 560с
Уроки програмування з нуля [Електронний ресурс]: [Веб-сайт] – Електронні дані. – Режим доступу: http://mycsharp.ru/post/9/2013_04_17_uslovnye_operatory_v_si-sharp_ternarnyj_operator.html – Назва з екрану
СppStudiohttp Академик [Електронний ресурс]: [Веб-сайт] – Електронні дані. – Режим доступу://cppstudio.com/post/348/ html – Назва з екрану
MSDN Microsoft [Електронний ресурс]: [Веб-сайт] – Електронні дані. − Режим доступу: https://msdn.microsoft.com/uk-ua/library/06tc147t.aspx− Назва з екрану
MSDN Microsoft [Електронний ресурс]: [Веб-сайт] – Електронні дані. − Режим доступу: https://msdn.microsoft.com/ru-ru/library/dd831853.aspx− Назва з екрану
ДОДАТКИ
ДОДАТОК АЛІСТИНГ ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ОСНОВНИХ МОДУЛІВ СИСТЕМИ НАЗВА СИСТЕМИ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using static System.Console;
namespace ConsoleApplication3
{
class Eratosphen
{
static void Main(string[] args)
{
WriteLine("Choose interface language (write 'UKR' for Ukrainian, 'ENG' for English, 'RUS' for Russian)");
WriteLine("Виберiть мову iнтерфейсу (введiть 'UKR' для української, 'ENG' для англiйської, 'RUS' для росiйської)");
WriteLine("Введите язык интерфейса (введите 'UKR' для украинского, 'ENG' для английского, 'RUS' для русского)");
string language = ReadLine();
int count = 0;
if (language.Equals("UKR"))
{
count++;
WriteLine("Введіть діапазон пошуку простих чисел.");
WriteLine("Примітка:введенi данi повиннi бути додатнiми числами!");
WriteLine("Введiть лiву границю дiапазону...");
}
if(language.Equals("ENG"))
{
count++;
WriteLine("Write range of search simply numbers.");
WriteLine("Note:input data need to be positive!");
WriteLine("Enter the left limit of range...");
}
if(language.Equals("RUS"))
{
count++;
WriteLine("Введите диапазон поиска простых чисел.");
WriteLine("Заметка:введенные данные должны быть положительными!");
WriteLine("Введите левую границу диапазона...");
}
switch (count)
{
case 0:
WriteLine("You enter wrong language! Re-input please...");
language = ReadLine();
if (language.Equals("UKR"))
{
count++;
WriteLine("Введiть дiапазон пошуку простих чисел.");
WriteLine("Примiтка:введенi данi повиннi бути додатнiми числами!");
WriteLine("Введiть лiву границю дiапазону...");
}
if (language.Equals("ENG"))
{
count++;
WriteLine("Write range of search simply numbers.");
WriteLine("Note:input data need to be positive!");
WriteLine("Enter the left limit of range...");
}
if (language.Equals("RUS"))
{
count++;
WriteLine("Введите диапазон поиска простых чисел.");
WriteLine("Заметка:введенные данные должны быть положительными!");
WriteLine("Введите левую границу диапазона...");
}
if(count==0)
{
WriteLine("End of session! Go to school and learn English, child!");
ReadKey();
}
break;
default:
var number1 = int.Parse(ReadLine());
if (language.Equals("UKR"))
WriteLine("Введiть праву границю дiапазону...");
if (language.Equals("ENG"))
WriteLine("Enter the right limit of range...");
if (language.Equals("RUS"))
WriteLine("Введите правую границу диапазона...");
var number2 = int.Parse(ReadLine());
if (number1 <= 0 || number2 <= 0)
{
if (language.Equals("UKR"))
{
WriteLine("Ви ввели дiапазон з не додатнiми числами, введiть ще раз...");
WriteLine("Введiть лiву границю дiапазону...");
}
if (language.Equals("ENG"))
{
WriteLine("You enter range with not positive numbers, re-input please...");
WriteLine("Enter the left limit of range...");
}
if (language.Equals("RUS"))
{
WriteLine("Вы ввели диапазон с не положительными числами, повторите ввод еще раз...");
WriteLine("Введите левую границу диапазона...");
}
number1 = int.Parse(ReadLine());
if (language.Equals("UKR"))
WriteLine("Введiть праву границю дiапазону...");
if (language.Equals("ENG"))
WriteLine("Enter the right limit of range...");
if (language.Equals("RUS"))
WriteLine("Введите правую границу диапазона...");
number2 = int.Parse(ReadLine());
if (number1 <= 0 || number2 <= 0)
{
if (language.Equals("UKR"))
WriteLine("Ви повторно ввели невiрний дiапазон! Введенi данi будуть використанi з модулем.");
if (language.Equals("ENG"))
WriteLine("You enter again range with not positive numbers! Input data will using with module.");
if (language.Equals("RUS"))
WriteLine("Вы снова ввели диапазон с неверным значением. Входные данные будут использованы по модулю.");
int reset = number1;
number1 = Math.Min(Math.Abs(number1), Math.Abs(number2));
number2 = Math.Max(Math.Abs(reset), Math.Abs(number2));
}
}
bool[] arr = new bool[number2];
for (int i = 0; i < number2; i++)
arr[i] = true;
for (int i = 2; i < Math.Sqrt(number2) + 1; i++)
if (arr[i])
for (int j = i*i; j < number2; j += i)
arr[j] = false;
WriteLine();
for (int i = 2; i < number2; i++)
if (arr[i] && i >= number1)
{
count++;
Write(i + " ");
}
WriteLine();
if (count == 0)
{
if (language.Equals("UKR"))
WriteLine("В даному дiапазонi прості числа вiдсутнi.");
if (language.Equals("ENG"))
WriteLine("In this range of numbers, no simply numbers.");
if (language.Equals("RUS"))
WriteLine("В етом диапазоне простые числа отсутствуют.");
}
if (language.Equals("UKR"))
WriteLine("Усi права захищенi. Григоришена Катерина 2016");
if (language.Equals("ENG"))
WriteLine("All rights are reserved. Grygoryshena Katya 2016");
if (language.Equals("RUS"))
WriteLine("Все права защищены. Григоришена Катерина 2016");
ReadKey();
break;
}
}
}
}ДОДАТОК БІНСТРУКЦІЯ КОРИСТУВАЧА СИСТЕМИ НАЗВА СИСТЕМИ
Інструкція користувача.