Skip to content

Files

Седмица 04 - Оператори

Практикум 04 - Предефениране на оператори

Задача 01 - Комплексно число

Да се реализира клас Complex, представляващ комплексно число. Да се реализират нужните конструктори, селектори и мутатори. Да се реализират методи за намиране на модула, извеждане на числото във вида a + bi и в тригонометричен вид. Да се предефинират следните оператори:

  • operator+, operator-, operator*(const Complex&), operator/, operator^ - извършват съответните аритметични операции над 2 комплексни числа и връщат ново комплексно число - резултата от операциите
  • operator+=, operator-=, operator*=, operator/=, operator^= - извършват съответните аритметични операции над 2 комплексни числа и записват резултата в първото число
  • operator*(), operator double() - връщат модула на числото
  • operator<, operator>, operator<=, operator>= - сравняват две комплексни числа по модула им
  • operator==, operator!= - проверяват дали две комплексни числа са равни (две комплексни числа са равни, когато са равни едновременно реалните и имагинерните им части)
  • operator<< - извежда комплексно число във вида a + bi
  • operator>> - въвежда комплексно число по дадена реална и имагинерна част

Задача 02 - Символен низ

Да се реализира клас String, представляващ символен низ с произволна дължина. Да се реализират нужните контруктори, селектори и мутатори. Да се реализират следните методи:

  • empty - проверява дали низа е празен
  • size - връща размера на низа
  • copy - по подадена дестинация (друг низ) и брой, копира в дестинацията толкова символа, започващи от началото на низа, колкото е подадения брой
  • substr - по подадена начална позиция и брой, връща подниз с начало началната позиция и толкова знака, колкото е подадения брой.

Освен това да се предефинират следните оператори:

  • operator[] - връща знак по подадена позиция. Да се реализират константен и неконстантен вариант
  • operator+= - конкатенира два низа или низ и знак и записва резултата в първия низ
  • operator+ - прави същото като operator+=, но връща нов низ, съдържащ резултата
  • operator<, operator>, operator<=, operator>=, operator==, operator!= - сравняват два низа лексикографски
  • operator<< - извежда низ
  • operator* - връща първия знак на низа
  • operator char*() - връща низа като указател

Бонус:

Реализирайте operator>> за въвеждане на низ с произволна дължина до срещане на интервал или нов ред.

Задача 03 - Полином

Да се реализира клас Polynomial, представляващ полином от произволна степен. Полиномът да се представи като масив от коефициентите пред всяка степен. Да се реализират нужните контруктори, селектори и мутатори. Да се реализират методи за добавяне и премахване на коефициент. Да се предефинират следните оператори:

  • operator() - по подадено число пресмята полинома
  • operator[] - по подадена степен, връща коефициента пред тази степен
  • operator+, operator- - съответно събират и изваждат два полинома и връщат нов полином, съдържащ резултата
  • operator+=, operator-= - същите като operator+ и operator-, но записват резултата в първия полином
  • operator*, operator/ - съответно умножават и делят полином с число и връщат нов полином, съдържащ резултата
  • operator*=, operator/= - същите като operator* и operator/, но записват резултата в първия полином
  • operator==, operator!= - проверяват дали два полинома са еднакви. Два полинома казваме, че са еднакви, ако единият може да се сведе до другия чрез умножение или деление на коефициентите с число. Пример:
    5х + 7 = 10х + 14
  • operator<< - извежда полинома във формат: anxn + an-1xn-1 + ... + a1x + a0, където а0, а1, ... , аn са коефициентите на полинома

Опитайте се да използвате функциите от по-висок ред map и reduce, където е възможно.

Бонус:

Направете operator*, operator*=, operator/, operator/= да работят с два полинома, вместо с полином и число. Разгледайте как може да се реализират operator% и operator%=