From 8cf1283a4ffb9fe1901c29c087fa376de82726af Mon Sep 17 00:00:00 2001 From: angeld55 Date: Sat, 19 Feb 2022 23:30:52 +0200 Subject: clean up --- Sem. 05/Interval/Interval.cpp | 133 -------------------------- Sem. 05/Interval/Interval.h | 32 ------- Sem. 05/Interval/Source.cpp | 15 --- Sem. 05/README.md | 218 ------------------------------------------ 4 files changed, 398 deletions(-) delete mode 100644 Sem. 05/Interval/Interval.cpp delete mode 100644 Sem. 05/Interval/Interval.h delete mode 100644 Sem. 05/Interval/Source.cpp delete mode 100644 Sem. 05/README.md (limited to 'Sem. 05') diff --git a/Sem. 05/Interval/Interval.cpp b/Sem. 05/Interval/Interval.cpp deleted file mode 100644 index c3f11cf..0000000 --- a/Sem. 05/Interval/Interval.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#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 deleted file mode 100644 index c8fcbc7..0000000 --- a/Sem. 05/Interval/Interval.h +++ /dev/null @@ -1,32 +0,0 @@ - -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; -}; diff --git a/Sem. 05/Interval/Source.cpp b/Sem. 05/Interval/Source.cpp deleted file mode 100644 index 7e6b3e1..0000000 --- a/Sem. 05/Interval/Source.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#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 diff --git a/Sem. 05/README.md b/Sem. 05/README.md deleted file mode 100644 index d9bd067..0000000 --- a/Sem. 05/README.md +++ /dev/null @@ -1,218 +0,0 @@ -# Член-функции. Конструктори и деструктор. Модификатори за достъп. Капсулация. - -## Член-функции. -Член-функциите са функции, които работят с член-данните на обекта от дадена структура. - ```c++ -struct Point -{ - int x; - int y; -}; -bool isInFirstQuadrant(const Point& p) -{ - return p.x >= 0 && p.y >= 0; -} -int main() -{ - Point p1 = {3, 4}; - Point p2 = {-9, 8}; - cout << isInFirstQuadrant(p1) << endl; - cout << isInFirstQuadrant(p2) << endl; -} - ``` - - Може функцията да бъде член-функция: - ```c++ -struct Point -{ - - int x; - int y - - bool isInFirstQuadrant() - { - return x >= 0 && y >= 0; - } - -}; - -int main() -{ - Point p1 = {3, 4}; - Point p2 = {-9, 8}; - cout << p1.isInFirstQuadrant() << endl; - cout << p2.isInFirstQuadrant() << endl; -} - ``` -# -**Член-функциите**: - - - Работят с член-данните на класа. - - Извикват се с обект на класа - - - Компилаторът преобразува всяка **член-функция** на дадена структура в - обикновена функция с уникално име и един допълнителен параметър - –**указател към обекта**. - -**Константни член-функции**: - - - Не променят член-данните на структурата. - - Оказва се чрез записването на ключовата дума **const** в декларацията и в края на заглавието в дефиницията им - - Могат да се извикват от константни обекти. -## Конструктори и деструктор. - -**Жизнен цикъл на обект**: - - Създаване на обект в даден scope – заделя се памет и член-данните се инициализират. - - Достига се до края на скоупа(област). - - Обектът и паметта, която е асоциирана с него се разрушава. - -**Конструктор**: - - Извиква се веднъж - при създаването на обекта. - - Не се оказва експлицитно тип на връщане (връща констатна референция). - - Има същото име като класа. - - **Деструктор**: - - Извиква се веднъж - при изтриването на обекта. - - Не се оказва експлицитно тип на връщане. - - Има същото име като класа със симовла '~' в началото. - - ```c++ - -#include - -using namespace std; - - -struct Test -{ - Test() - { - cout << "Object is created" < - -using namespace std; - - -struct Student -{ -private: - int grade; - int age; -public: - Student(int grade, int age) - { - setGrade(grade); - setAge(age); - } - int getGrade() - { - return grade; - } - int getAge() - { - return age; - } - void setGrade(int grade) - { - if(grade >= 2 && grade <= 6) - this->grade = grade; - } - int setAge(int age) - { - if(age >= 0) - this->age = age; - } -}; - -int main() -{ - while () - { - Test t;// Object is created - if () - { - Test t2; // Object is created - - }// Object is destroyed (t2) - - }//Object is destroyed (t) -} - - ``` - - -## Задачи - -**Задача 1:** -Реализирайте клас/структура интервал, който представлява интервал [a,b] (задължително а <= b) от реалната права. Нашият интервал ще бъде дискретен - началото и краят му ще бъдат цели числа и ще разглеждаме само точки, които са цели числа. Релизирайте следният интерфейс: - - - Подразбиращ се контруктор, който създава интервала **[0,0]**. - - Конструктор, който приема двата параметъра. Ако a<=b, то създава интервала **[a,b]**. В противен случай, създава **[0,0]**. - - Член-функция, която връща **дължината на интервала**. - - Член-функция, която приема число и проверява **дали е част от интервала**. - - Член-функция, която връща **броя на простите числа** в интервала. - - Член-функция, която връща **броя на числата в интервала**, които са палиндорми. - - Член-функция, която връща **броя на числата, които нямат повтарящи цифри**. - - Член-функция, която връща дали началото и края на интервала са **степени на 2-ката**. ([2,16] - истина) - - Член-функция, която приема интервал и връща **сечението на текущия интервал с подадения**. (Сечението на [1, 5] [3, 7] e [3, 5]). - - Член-функция, която приема интервал и връща дали подадения (като параметър) интервал е **подинтервал на текущия**(обектът, от който се извиква функцията). - - **Пример за работа с класа:** - ```c++ - -int main() -{ - Interval t1(3,10); // [3, 10] - Interval t2(4,14); // [4, 14] - Interval t3; // [0, 0] - - Interval result = t1.intersect(t2); // [4, 10] - - t2.isSuperInterval(result); //true - - result.calcPrimeNumbersInTheInterval() // 2 (only 5 and 7) -} - ``` - - -- cgit v1.3.1-23-gd82d