From b10dc7ab4c7615b16810276a9f9cb2fe2c573d85 Mon Sep 17 00:00:00 2001 From: Angel Dimitriev Date: Fri, 2 Apr 2021 13:11:05 +0300 Subject: Add files via upload --- Sem. 05/Interval/Interval.cpp | 133 ++++++++++++++++++++++++++++++++++++++++++ Sem. 05/Interval/Interval.h | 29 +++++++++ Sem. 05/Source.cpp | 15 +++++ 3 files changed, 177 insertions(+) create mode 100644 Sem. 05/Interval/Interval.cpp create mode 100644 Sem. 05/Interval/Interval.h create mode 100644 Sem. 05/Source.cpp diff --git a/Sem. 05/Interval/Interval.cpp b/Sem. 05/Interval/Interval.cpp new file mode 100644 index 0000000..c3f11cf --- /dev/null +++ b/Sem. 05/Interval/Interval.cpp @@ -0,0 +1,133 @@ +#include +#include +#include "Interval.h" + +bool isPrime(int n) +{ + double temp = sqrt(n); + for (int i = 2; i <= temp; i++) + { + if (n % i == 0) + return false; + } + return true; +} + +bool isPalindorme(int n) +{ + int reversed = 0; + + while (n != 0) + { + int lastDigit = n % 10; + (reversed *= 10) += lastDigit; + n /= 10; + } + return n == reversed; +} +bool containsOnlyDistinctNumbers(int n) +{ + bool digits[10]; + for (int i = 0; i < 10; i++) + digits[i] = false; + + while (n != 0) + { + int lastDigit = n % 10; + if (digits[lastDigit]) + return false; + digits[n % 10] = true; + n /= 10; + } + return true; +} + +size_t Interval::countNumbersInIntervalCondition(bool(*pred)(int)) const +{ + size_t count = 0; + for (int i = a; i <= b; i++) + { + if (pred(i)) + count++; + } + return count; +} + +Interval::Interval() : Interval(0, 0) {} + +Interval::Interval(int a, int b) +{ + if (a > b) + a = b = 0; + + this->a = a; + this->b = b; +} + +int Interval::getA() const +{ + return a; +} + +int Interval::getB() const +{ + return b; +} +void Interval::setA(int a) +{ + if (a > b) + return; + this->a = a; +} + +void Interval::setB(int b) +{ + if (b < a) + return; + this->b = b; +} + +size_t Interval::getLength() const +{ + return b - a + 1; +} + +bool Interval::isMemberOfInterval(int x) const +{ + return (a <= x && x <= b); +} + +size_t Interval::calcPrimeNumbersInTheInterval() const +{ + return countNumbersInIntervalCondition(isPrime); +} + +size_t Interval::calcPalindromicNumbersInTheInterval() const +{ + return countNumbersInIntervalCondition(isPalindorme); +} + +size_t Interval::calcDiffrentDigitNumbersInTheInverval() const +{ + return countNumbersInIntervalCondition(containsOnlyDistinctNumbers); +} + +bool Interval::areStartAndEndPowersOfTwo() const +{ + return (a == 0 || (a & a - 1) == 0) && (b == 0 || (b & b - 1) == 0); +} + +Interval Interval::intersect(const Interval& other) const +{ + if (b < other.getA() || a > other.getB()) + return Interval(0, 0); + + int newA = std::max(a, other.getA()); + int newB = std::min(b, other.getB()); + + return Interval(newA, newB); +} +bool Interval::isSuperInterval(const Interval& other) const +{ + return a <= other.getA() && b >= other.getB(); +} \ No newline at end of file diff --git a/Sem. 05/Interval/Interval.h b/Sem. 05/Interval/Interval.h new file mode 100644 index 0000000..432b368 --- /dev/null +++ b/Sem. 05/Interval/Interval.h @@ -0,0 +1,29 @@ + +class Interval +{ + int a; + int b; + + size_t countNumbersInIntervalCondition(bool(*pred)(int)) const; + +public: + + Interval(); + Interval(int a, int b); + + int getA() const; + int getB() const; + + void setA(int a); + void setB(int b); + + size_t getLength() const; + bool isMemberOfInterval(int x) const; + + size_t calcPrimeNumbersInTheInterval() const; + size_t calcPalindromicNumbersInTheInterval() const; + size_t calcDiffrentDigitNumbersInTheInverval() const; + bool areStartAndEndPowersOfTwo() const; + Interval intersect(const Interval& other) const; + bool isSuperInterval(const Interval& other) const; +}; \ No newline at end of file diff --git a/Sem. 05/Source.cpp b/Sem. 05/Source.cpp new file mode 100644 index 0000000..679e729 --- /dev/null +++ b/Sem. 05/Source.cpp @@ -0,0 +1,15 @@ +#include +#include "Interval.h" + +using namespace std; + + +int main() +{ + Interval i(1, 11); + + cout << i.calcDiffrentDigitNumbersInTheInverval() << endl; + + cout << i.getLength() << endl; + +} \ No newline at end of file -- cgit v1.3.1-23-gd82d