diff options
clean up
4 files changed, 0 insertions, 398 deletions
| -rw-r--r-- | Sem. 05/Interval/Interval.cpp | 133 | ||||
| -rw-r--r-- | Sem. 05/Interval/Interval.h | 32 | ||||
| -rw-r--r-- | Sem. 05/Interval/Source.cpp | 15 | ||||
| -rw-r--r-- | Sem. 05/README.md | 218 |
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 <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 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 <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 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 <iostream>
-
-using namespace std;
-
-
-struct Test
-{
- Test()
- {
- cout << "Object is created" <<endl;
- }
-
- ~Test()
- {
- cout << "Object is destroyed" <<endl;
- }
- int a;
- int b;
-};
-
-int main()
-{
- while ()
- {
- Test t;// Object is created
- if ()
- {
- Test t2; // Object is created
-
- }// Object is destroyed (t2)
-
- }//Object is destroyed (t)
-}
-
- ```
- ## Капсулация (encapsulation).
-Понякога искаме потребителите да **нямат достъп до всички член-данни и методи на даден клас**.
-Това е така, защото тяхната промяна може да доведе до **неочаквано поведение** на нашата програма. Принципът за **капсулация** ни помага като позволява да определим кои методи и атрибути може да използват потребителите на нашия клас.
-
- **Модификатор за достъп**:
-
-| Модификатор за достъп: | Достъп: |
-|------------------------|---------------------------------|
-| private | В текущия клас. |
-| protected | В текущия клас и *наследниците. |
-| public | За всеки |
-
-**Пример за get-ъри и set-ъри**
-
- ```c++
-
-#include <iostream>
-
-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)
-}
- ```
-
-
|
