Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Курсова работа (проект) за моделиране на извеждане на простите и непрости числа в зададен интервал
- // Програма KR1_Simple numbers.cpp
- // Вариантът на програмата е модифициран и реализиран в програмна среда Dev-C++ 5.11 на 64 битова ОС
- // Автор: Илиян Стоянов, СИТ, 6а група , ф.номер: 17621763
- // Дата: 22.11.2017 год.
- /* ОПИСАНИЕ НА ПРОГРАМАТА
- Това е програма за извеждане на всички прости числа между 1 и n,
- като n е естествено число, въведено от потребителя.
- Програмата е реализирана с динамичен масив и в нея са
- използвани цветови ефекти, както и запитване за продължение.
- В програмата е създадено меню.
- Менюто се състои от 7 опции, има валидация - ако напишеш по малко
- или по голямо число от зададените ограничения. Създадени са 6 функции:
- в първата функция се извеждат простите числа + въведеното,
- в втората функция се извеждат простите числа след това
- простите числа повдигнати на втора степен и коренувани.
- в третата функция се извеждат непростите числа + въведеното,
- в четвъртата функция се извежда информация за програмата,
- в петата функция се извежда информация за автора,
- а в шестата функция се извежда какво представляват простите числа,
- Добавени са анимация на текста, фон в различни цветови гами, цвят на текста,
- както и функция за диалога с потребителя на програмата на кирилица.
- Във всяка функция има запитване дали да се продължи или да се върне към менюто.
- */
- #include <iostream>
- #include <iomanip>
- #include <locale> // За кирилица
- #include <windows.h>
- #include <iostream>
- #include <cmath>
- using namespace std;
- // Прототипи на функции
- int prosti_chisla(); // Функция за извеждане на простите числа в зададен интервал
- int neprosti(); // Функция за извеждане на непростите числа в зададен интервал
- int za_programata(); // Функция за екран с текст за програмата
- int avtor(); // Функция за екран с текст за автор
- int opisanie(); // Функция за екран с текст който обяснява какво е прости числа
- void slowmotion(string text); //ф-я за изписване бавно анимиран текст в/у екрана
- int vtora_stepen(); // // Функция за извеждане на простите числа в зададен интервал и след това показва стойността им повдигнати на втора степен
- int main()
- {
- system("mode 120,40"); //размер на прозореца с резултатите
- system("title Програма с меню за показване на всички прости или непрости числа в зададен интервал ");
- SetConsoleOutputCP(1251);
- setlocale(LC_ALL, "BGR"); //за използване на кирилица;
- system("Color 34"); //задаване на цвят на фона и текста
- cout << " ____ " << endl;
- cout << " +==========+ | | | * *| |===========| | |==========" << endl;
- cout << " + **** | * * | | | | | " << endl;
- cout << " + ____ | * * | | | | | " << endl;
- cout << " + | | | * * | | | | | " << endl;
- cout << " + | | | * * | | | | | " << endl;
- cout << " +==========+ | | | ** | |===========| | |==========" << endl;
- cout << " + | | | | | | | " << endl;
- cout << " + | | | | | | | " << endl;
- cout << " + | | | | | | | " << endl;
- cout << " + | | | | | | | " << endl;
- cout << " +==========+ **** | | | |=============| |==========" << endl << endl << endl;
- cout << "\t |* | | | |* *| |========| |======== |======| |=======| " << endl;
- cout << "\t | * | | | | * * | | | | | | | " << endl;
- cout << "\t | * | | | | * * | |========| | |======| | " << endl;
- cout << "\t | * | | | | ** | | |======== |* |=======| " << endl;
- cout << "\t | * | | | | | |=========| | | * | " << endl;
- cout << "\t | * | | | | | | | | | * | " << endl;
- cout << "\t | * | | | | | | | | | * | " << endl;
- cout << "\t | *| |____________| | | |=========| |========= | * |=======| " << endl;
- Sleep(3000); // Закъснение 3 секунди за прочитане на текста
- system("cls"); //изчистване на екрана
- int izbor;
- do {
- do {
- system("cls"); //изчистване на екрана
- cout << "\n\n\n\n\n\t\t\t\t\t*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*" << endl; //Менюто което се показва на екрана
- cout << "\t\t\t\t\t*-------------МЕНЮ----------------*" << endl;
- cout << "\t\t\t\t\t*=================================*" << endl;
- cout << "\t\t\t\t\t* *" << endl;
- cout << "\t\t\t\t\t* 1. Прости естествени числа *" << endl;
- cout << "\t\t\t\t\t*---------------------------------*" << endl;
- cout << "\t\t\t\t\t* 2. Аритметични операции върху *" << endl;
- cout << "\t\t\t\t\t* прости числа *" << endl;
- cout << "\t\t\t\t\t*---------------------------------*" << endl;
- cout << "\t\t\t\t\t* 3. Непрости естествени числа *" << endl;
- cout << "\t\t\t\t\t*---------------------------------*" << endl;
- cout << "\t\t\t\t\t* 4. За програмата *" << endl;
- cout << "\t\t\t\t\t*---------------------------------*" << endl;
- cout << "\t\t\t\t\t* 5. За автора *" << endl;
- cout << "\t\t\t\t\t*---------------------------------*" << endl;
- cout << "\t\t\t\t\t* 6. Какво е прости числа *" << endl;
- cout << "\t\t\t\t\t*---------------------------------*" << endl;
- cout << "\t\t\t\t\t* 7. Изход *" << endl;
- cout << "\t\t\t\t\t*=================================*" << endl;
- cout << "\t\t\t\t\t***********************************" << endl;
- cout << endl << "\t\t\t\t\t Въведете вашия избор: ";
- cin >> izbor;
- } while (izbor < 1 || izbor > 7);
- switch (izbor)
- {
- case 1:
- prosti_chisla();
- break;
- case 2:
- vtora_stepen();
- break;
- case 3:
- neprosti();
- break;
- case 4:
- za_programata();
- break;
- case 5:
- avtor();
- break;
- case 6:
- opisanie();
- break;
- case 7:
- cout << "\n\n\n\t\t\t***********************************************************" << endl;
- cout << "\t\t\t* *" << endl;
- cout << "\t\t\t* Благодаря за Вниманието !!! *" << endl;
- cout << "\t\t\t* *" << endl;
- cout << "\t\t\t***********************************************************" << endl;
- cout << "\t\t\t* *" << endl;
- cout << "\t\t\t* Дано бъде оценено с повечко точки :D *" << endl;
- cout << "\t\t\t* *" << endl;
- cout << "\t\t\t***********************************************************" << endl;
- cout << "\t\t\t* *" << endl;
- cout << "\t\t\t* Ще излезете от програмата след няколко секунди.... *" << endl;
- cout << "\t\t\t* *" << endl;
- cout << "\t\t\t***********************************************************" << endl;
- Sleep(2000); // Закъснение 2 секунди за прочитане текста на екрана
- exit(0);
- }
- } while (izbor != 7);
- cout << system("PAUSE") << endl;
- return 0;
- }
- // Функция за извеждане на простите числа в зададен интервал
- int prosti_chisla()
- {
- // Извеждане на заглавие на обработката в програмата
- system("title Извеждане на прости числа в зададен интервал");
- system("color F1"); // Цветови ефект
- system("cls");
- int n, i, j; // n - за задаване на най-голямо число
- char c; // За запитване за продължение с нова стойност на n
- do // Цикъл със запитване за продължение с нова стойност на n
- {
- // Запитване на потребителя за горна граница на интервала от прости числа
- do {
- char text[] = { "\n\t Моля, въведете число n за интервал от прости числа - до 10000: " };
- for (int i = 0; i < strlen(text); i++)
- {
- cout << text[i];
- Sleep(50);
- }
- cin >> n;
- } while (n < 0);
- int *a = new int[n]; // Създаване на динамичен масив с размер n
- if (a == NULL) // Проверка за евентуално препълване на паметта
- cout << " \n\t Недостатъчна памет!";
- else // Алгоритъм при нормално изпълнение на програмата
- {
- cout << "\n\t Простите числа от 1 до " << n << " са: \n"; // Подсказващ текст
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- for (i = 2; i <= n; i++) *(a + i) = 1; // Всички елементи приемат стойност 1 (естествени числа)
- for (i = 2; i <= n; i++)
- if (*(a + 1)) // Установяват се всички елементи от масива, чиито индекси
- for (j = i; i*j <= n; j++) // са кратни на вече намерените прости числа = 0 (1,2 и 3
- *(a + i*j) = 0; // са прости числа). По този начин се изключват тези
- // числа от множеството прости, които имат делители.
- int k = 0; // За извеждане по 15 прости числа в един ред
- for (i = 1; i <= n; i++) // Извеждане на простите числа
- if (*(a + i))
- {
- cout << setw(4) << "|" << i << "|"; // Извеждат се на екрана всички числа, които не са 0
- Sleep(100); // Закъснение 100 милисекунди - за анимация
- if (++k % 11 == 0)cout << endl; // Преминаване на нов ред след 15 числа
- }
- cout << endl;
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- int min = 10000, max = 0;
- for (i = 1; i <= n; i++) {
- if (*(a + i)) {
- if (min > i)
- min = i;
- if (max < i)
- max = i;
- }
- }
- cout << "Min element: " << min << " | Max element: " << max;
- }
- delete[] a; // Освобождаване (изтриване) на динамичния масив
- char text[] = { "\n\n\t Желаете ли да въведете друго число n? (Y/N) " };// Запитване за продължение
- for (int c1 = 0; c1<strlen(text); c1++) // Цикъл за анимация на текста
- {
- cout << text[c1];
- Sleep(50); // Закъснение - 50 милисекунди
- }
- cin >> c;
- } while (c == 'Y' || c == 'y'); // Условие за продължение
- if (c == 'n' || c == 'N')
- {
- cout << endl;
- return main();
- }
- }
- // Функция за извеждане на непростите числа в зададен интервал
- int neprosti()
- {
- // Извеждане на заглавие на обработката в програмата
- system("title Извеждане на непрости числа в зададен интервал");
- system("color B0"); // Цветови ефект
- system("cls");
- int n, i, j; // n - за задаване на най-голямо число
- char c; // За запитване за продължение с нова стойност на n
- do // Цикъл със запитване за продължение с нова стойност на n
- {
- // Запитване на потребителя за горна граница на интервала от непрости числа
- do {
- char text[] = { "\n\t Моля, въведете число n за интервал от непрости числа - до 10000: " };
- for (int i = 0; i < strlen(text); i++)
- {
- cout << text[i];
- Sleep(50);
- }
- cin >> n;
- } while (n < 0);
- int *a = new int[n]; // Създаване на динамичен масив с размер n
- if (a == NULL) // Проверка за евентуално препълване на паметта
- cout << " \n\t Недостатъчна памет!";
- else // Алгоритъм при нормално изпълнение на програмата
- {
- cout << "\n\t Непростите числа от 1 до " << n << " са: \n"; // Подсказващ текст
- cout << " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
- for (i = 2; i <= n; i++) *(a + i) = 1; // Всички елементи приемат стойност 1 (естествени числа)
- for (i = 2; i <= n; i++)
- if (*(a + 1)) // Установяват се всички елементи от масива, чиито индекси
- for (j = i; i*j <= n; j++) // са кратни на вече намерените прости числа = 0 (1,2 и 3
- *(a + i*j) = 0; // са прости числа). По този начин се изключват тези
- // числа от множеството прости, които имат делители.
- int k = 0; // За извеждане по 15 непрости числа в един ред
- for (i = 2; i <= n; i++) // Извеждане на непростите числа
- if (*(a + i) == 0)
- {
- cout << setw(5) << "|" << i << "|"; // Извеждат се на екрана всички числа, които не са прости
- Sleep(100); // Закъснение 100 милисекунди - за анимация
- if (++k % 10 == 0)cout << endl; // Преминаване на нов ред след 15 числа
- }
- cout << endl;
- cout << " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" << endl;
- int min = 10000, max = 0;
- for (i = 2; i <= n; i++) {
- if (*(a + i) == 0) {
- if (min > i)
- min = i;
- if (max < i)
- max = i;
- }
- }
- cout << "Min element: " << min << " | Max element: " << max;
- }
- delete[] a; // Освобождаване (изтриване) на динамичния масив
- char text[] = { "\n\n\t Желаете ли да въведете друго число n? (Y/N) " };// Запитване за продължение
- for (int c1 = 0; c1<strlen(text); c1++) // Цикъл за анимация на текста
- {
- cout << text[c1];
- Sleep(50); // Закъснение - 50 милисекунди
- }
- cin >> c;
- } while (c == 'Y' || c == 'y'); // Условие за продължение
- if (c == 'n' || c == 'N')
- {
- cout << endl;
- return main();
- }
- }
- // Функция за екран с текст за програмата
- int za_programata()
- {
- system("Color E5");
- system("cls");
- cout << "\n\n\n\n\t\t=========================================================================================";
- slowmotion("\n\t\t| В програмата е създадено меню. |");
- slowmotion("\n\t\t| Менюто се състои от 7 опции, има валидация - ако напишеш по малко |");
- slowmotion("\n\t\t| или по голямо число от зададените ограничения. Създадени са 6 функции: |");
- slowmotion("\n\t\t| в първата функция се извеждат простите числа + въведеното, |");
- slowmotion("\n\t\t| в втората функция се извеждат простите числа след това |");
- slowmotion("\n\t\t| простите числа повдигнати на втор степен и коренувани. |");
- slowmotion("\n\t\t| в следващата функция се извеждат непростите числа + въведеното, |");
- slowmotion("\n\t\t| в четвъртата функция се извежда информация за програмата, |");
- slowmotion("\n\t\t| в петата функция се извежда информация за автора, |");
- slowmotion("\n\t\t| а в шестата функция се извежда какво представляват простите числа, |");
- slowmotion("\n\t\t| Добавени са анимация на текста, фон в различни цветови гами, цвят на текста, |");
- slowmotion("\n\t\t| както и функция за диалога с потребителя на програмата на кирилица. |");
- slowmotion("\n\t\t| Във всяка функция има запитване дали да се продължи или да се върне към менюто. |");
- cout << "\n\t\t=========================================================================================";
- Sleep(3000);
- cout << endl << endl << endl;
- return main();
- }
- // Функция за екран с текст за автор
- int avtor()
- {
- system("Color F4"); //задаване на цвят на фона и текста
- char str[] = { "\n\n\n\t\t\t\t\t Автор на програмата: \n\n"
- "\t\t\t\t\t Име: Илиян \n"
- "\t\t\t\t\t Презиме: Владимиров \n"
- "\t\t\t\t\t Фамилия: Стоянов \n"
- "\t\t\t\t\t Специалност: СИТ \n"
- "\t\t\t\t\t Група: 6а \n"
- "\t\t\t\t\t Факултетен №: 17621763 \n"
- };
- for (int i = 0; i < strlen(str); i++)
- {
- cout << str[i]; // Извеждане информация на екрана за автора
- Sleep(20);
- }
- Sleep(2000); // Закъснение 3 секунди за прочитане на текста
- return main();
- }
- int opisanie() // Функция за екран с текст който обяснява какво е прости числа
- {
- system("Color 84");
- system("cls");
- cout << "\n\n\n\n\t=================================================================================================";
- slowmotion("\n\t| В математиката просто число се нарича всяко естествено число, по-голямо от 1, |");
- slowmotion("\n\t| което има точно два естествени делителя – 1 и самото себе си. Например 5 е просто, |");
- slowmotion("\n\t| защото се дели единствено на 1 и 5, докато 6 не е, защото се дели освен на 1 и 6 и на 2 и 3. |");
- slowmotion("\n\t| Естествените числа, по-големи от едно, които не са прости, се наричат съставни. |");
- slowmotion("\n\t| Числата нула и едно не са нито прости, нито съставни. |");
- slowmotion("\n\t| Простите числа са един от основните обекти, които се изучават от теорията на числата. |");
- cout << "\n\t\t=================================================================================================";
- Sleep(3000);
- cout << endl << endl << endl;
- return main();
- }
- void slowmotion(string text) //ф-я за изписване бавно анимиран текст в/у екрана
- {
- int p = 0;
- p = text.length();
- for (int i = 0; i<p; i++)
- {
- cout << text[i];
- Sleep(55);
- }
- }
- int vtora_stepen()
- {
- // Извеждане на заглавие на обработката в програмата
- system("title Извеждане на прости числа в зададен интервал");
- system("color 2E"); // Цветови ефект
- system("cls");
- int n, i, j; // n - за задаване на най-голямо число
- char c; // За запитване за продължение с нова стойност на n
- do // Цикъл със запитване за продължение с нова стойност на n
- {
- // Запитване на потребителя за горна граница на интервала от прости числа
- do {
- char text[] = { "\n\t Моля, въведете число n за интервал от прости числа - до 10000: " };
- for (int i = 0; i < strlen(text); i++)
- {
- cout << text[i];
- Sleep(50);
- }
- cin >> n;
- } while (n < 0);
- int *a = new int[n]; // Създаване на динамичен масив с размер n
- if (a == NULL) // Проверка за евентуално препълване на паметта
- cout << " \n\t Недостатъчна памет!";
- else // Алгоритъм при нормално изпълнение на програмата
- {
- cout << "\n\t Простите числа от 1 до " << n << " са: \n"; // Подсказващ текст
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- for (i = 2; i <= n; i++) *(a + i) = 1; // Всички елементи приемат стойност 1 (естествени числа)
- for (i = 2; i <= n; i++)
- if (*(a + 1)) // Установяват се всички елементи от масива, чиито индекси
- for (j = i; i*j <= n; j++) // са кратни на вече намерените прости числа = 0 (1,2 и 3
- *(a + i*j) = 0; // са прости числа). По този начин се изключват тези
- // числа от множеството прости, които имат делители.
- int k = 0; // За извеждане по 15 прости числа в един ред
- for (i = 1; i <= n; i++) // Извеждане на простите числа
- if (*(a + i))
- {
- cout << setw(5) << "|" << i << "|"; // Извеждат се на екрана всички числа, които не са 0
- Sleep(100); // Закъснение 100 милисекунди - за анимация
- if (++k % 11 == 0)cout << endl; // Преминаване на нов ред след 15 числа
- }
- cout << endl;
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- cout << endl;
- cout << " Tова са стойностите на простите числа повдигнати на втора степен !!!" << endl;
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- for (i = 1; i <= n; i++) // Извеждане на простите числа
- if (*(a + i))
- {
- cout << setw(5) << "|" << i*i << "|"; // Извеждат се на екрана всички числа, които не са 0
- Sleep(100); // Закъснение 100 милисекунди - за анимация
- if (++k % 11 == 0)cout << endl; // Преминаване на нов ред след 15 числа
- }
- cout << endl;
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- cout << endl;
- cout << " Tова са стойностите на простите числа под корен!!!" << endl;
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- for (i = 1; i <= n; i++) // Извеждане на простите числа
- if (*(a + i))
- {
- cout << setw(5) << "|" << sqrt(i) << "|"; // Извеждат се на екрана всички числа, които не са 0
- Sleep(100); // Закъснение 100 милисекунди - за анимация
- if (++k % 7 == 0)cout << endl; // Преминаване на нов ред след 15 числа
- }
- cout << endl;
- cout << " -------------------------------------------------------------------------------------------------------------------" << endl;
- }
- delete[] a; // Освобождаване (изтриване) на динамичния масив
- char text[] = { "\n\n\t Желаете ли да въведете друго число n? (Y/N) " };// Запитване за продължение
- for (int c1 = 0; c1 < strlen(text); c1++) // Цикъл за анимация на текста
- {
- cout << text[c1];
- Sleep(50); // Закъснение - 50 милисекунди
- }
- cin >> c;
- } while (c == 'Y' || c == 'y'); // Условие за продължение
- if (c == 'n' || c == 'N')
- {
- cout << endl;
- return main();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement