Website Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitb10dc7ab4c7615b16810276a9f9cb2fe2c573d85 (patch)
Author
 Angel Dimitriev <achi_d@abv.bg>
2021-04-02 13:11:05 +0300
Committer
 GitHub <noreply@github.com>
2021-04-02 13:11:05 +0300
Filesa060e7f1127871d9f6a15c770586c0d288f1d292
Object-oriented_programming_FMI-b10dc7ab4c7615b16810276a9f9cb2fe2c573d85.tar
Object-oriented_programming_FMI-b10dc7ab4c7615b16810276a9f9cb2fe2c573d85.tar.gz
Object-oriented_programming_FMI-b10dc7ab4c7615b16810276a9f9cb2fe2c573d85.zip
Parent5c059d1eeb8dd92b30e6dd39885b332d9fa845b9 (diff)
Add files via upload
3 files changed, 177 insertions, 0 deletions
-rw-r--r--Sem. 05/Interval/Interval.cpp133
-rw-r--r--Sem. 05/Interval/Interval.h29
-rw-r--r--Sem. 05/Source.cpp15
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 <iostream>
+#include <algorithm>
+#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 <iostream>
+#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