Advertisement
ksyshshot

Lab.2.2

Oct 26th, 2022
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.81 KB | Source Code | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void writeTask()
  6. {
  7.     cout << "Данная программа находит все натуральные числа, которые можно представить в виде произведения двух простых чисел и которые не превосходят введённое натуральное число N\n";
  8. }
  9.  
  10. short inputNumber()
  11. {
  12.     const short MIN_NUMBER = 2;
  13.     const short MAX_NUMBER = 127;
  14.     bool isIncorrect;
  15.     short number;
  16.     do
  17.     {
  18.         isIncorrect = false;
  19.         cout << "Введите натурально число N в диапазоне от " << MIN_NUMBER << " до " << MAX_NUMBER << endl;
  20.         cin >> number;
  21.         if (cin.fail())
  22.         {
  23.             cin.clear();
  24.             while (cin.get() != '\n');
  25.             cout << "Введены некорректные данные\n";
  26.             isIncorrect = true;
  27.         }
  28.         if ((!isIncorrect) && (cin.get() != '\n'))
  29.         {
  30.             cin.clear();
  31.             while (cin.get() != '\n');
  32.             cout << "Введены некорректные данные\n";
  33.             isIncorrect = true;
  34.         }
  35.         if ((!isIncorrect) && ((number > MAX_NUMBER) || (number < MIN_NUMBER)))
  36.         {
  37.             cout << "Неправильный диапазон данных\n";
  38.             isIncorrect = true;
  39.         }
  40.     } while (isIncorrect);
  41.     return number;
  42. }
  43.  
  44. short* ConsistencyUpToNumber(short number)
  45. {
  46.     short* arrayInt = new short[number - 1];
  47.     int i = 0;
  48.     while (i < number - 1)
  49.     {
  50.         arrayInt[i] = i + 2;
  51.         i++;
  52.     }
  53.     return arrayInt;
  54. }
  55.  
  56. short SecondDivision(short arrNumbersElement, int quotient)
  57. {
  58.     const short arrOfPrimes[18] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61 };
  59.     short arrCorrectnessElement = 0;
  60.     int k = 0;
  61.     while ((k < 18) && (arrOfPrimes[k] <= quotient))
  62.     {
  63.         if (quotient == arrOfPrimes[k])
  64.         {
  65.             arrCorrectnessElement = arrNumbersElement;
  66.             k = 18;
  67.         }
  68.         else
  69.         {
  70.             arrCorrectnessElement = 0;
  71.             k++;
  72.         }
  73.     }
  74.     delete[] arrOfPrimes;
  75.     return arrCorrectnessElement;
  76. }
  77.  
  78. short* findingRequiredNumbers(short number)
  79. {
  80.     const short arrOfPrimes[18] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61};
  81.     short* arrNumbers = ConsistencyUpToNumber(number);
  82.     number--;
  83.     short* arrCorrectness = new short[number];
  84.     for (int i = 0; i < number; i++)
  85.     {
  86.         arrCorrectness[i] = 0;
  87.         int k = 0;
  88.         while ((k < 18) && (arrOfPrimes[k] < arrNumbers[i]))
  89.         {
  90.             if (arrNumbers[i] % arrOfPrimes[k] == 0)
  91.             {
  92.                 short quotient = arrNumbers[i] / arrOfPrimes[k];
  93.                 arrCorrectness[i] = SecondDivision(arrNumbers[i], quotient);
  94.                 k = 18;
  95.             }
  96.             k++;
  97.         }
  98.     }
  99.     delete[] arrOfPrimes;
  100.     delete[] arrNumbers;
  101.     return arrCorrectness;
  102. }
  103.  
  104. void outputNumber(short number, short* arrCorrect)
  105. {
  106.     cout << "Полученные натуральные числа: \n";
  107.     number--;
  108.     short zeroValue = number;
  109.     for (int i = 0; i < number; i++)
  110.     {
  111.         if (arrCorrect[i] != 0)
  112.         {
  113.             cout << arrCorrect[i] << " ";
  114.             zeroValue++;
  115.         }
  116.     }
  117.     if (zeroValue == number)
  118.     {
  119.         cout << "Натуральные числа, соответствующие требованиям, не найдены\n";
  120.     }
  121. }
  122.  
  123. int main()
  124. {
  125.     setlocale(LC_ALL, "Rus");
  126.     writeTask();
  127.     short n = inputNumber();
  128.     short* arrayOfCorrect = findingRequiredNumbers(n);
  129.     outputNumber(n, arrayOfCorrect);
  130.     delete[] arrayOfCorrect;
  131.     return 0;
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement