Да се реализира клас Function, който описва функция. Обект от този клас трябва да съдържа информация за името на функцията. Да се напишат функции за намиране на стойност в точка getValue, проверка дали е дефинирана функцията в дадена точка. isDefined. Функцията за намиране на стойност вточка да разпознава следните имена на функции - "sin", "cos", "log","exp", "sqr", "sqrt", във всички останали случаи да работи като константата 0.

Към класа Function да се добавят функция за извеждане на таблица от стойности в интервал с някаква стъпка printTable, функция за намиране на минимална стойност в някакъв интервал с дадена стъпка findMin и да се предифинира operator() така че за обект f от клас Function извикването f(x) да е еквивалентно на извикването f.getValue(x).

Да се обявят за виртуални функциите getValue и isDefined. Защо няма нужда да правим виртуални останалите функции?

Да се напише клас Polynome, който наследява LList<Monome> и Function и описва полином със списък от неговите коефициенти разглеждан като функция на един аргумент. Тук имаме struct Monome { int power; double coef; }; Да се предефинират виртуалните функции getValue и isDefined.

Да се напише клас Expression, който наследява Tree<char> и Function и реализира функция пресмятана от израз, записан в дърво. В листата на дървото са записани цифри или символ за променлива, а във възлите - операциите +, -, *, /. Да се добави член-данна char var, която указва кой символ се възприема като променлива (напр. 'x','y',...). Да се напише подходящ конструктор. Да се предефинират виртуалните функции getValue и isDefined.

Да се напише клас UserDefinedFunction, който наследява Function и има член-данни указатели към функции double(*f)(double) и bool(*def)(double), които указват по какъв начин работят съответно функциите getValue и isDefined. Да се напише подходящ конструктор с един параметър за f и един параметър за def, който по подразбиране е функция, която връща винаги true. Да се предефинират виртуалните функции getValue и isDefined.

Да се напише клас Derivative, който наследява Function и има за член-данна Function* (указател към обект - функция) и double delta (точност). Идеята на класа Derivative е да смята производна на функция зададена в клас Function числено с точност delta по формулата f'(x) = (f(x+delta)-f(x))/delta. Да се предефинират виртуалните функции getValue и isDefined.

С помощта на клас Derivative да се пресметне втора производна на обект Function с някаква точност. Да се даде идея как може да се напише функция, която пресмята n-та производна.

Да се напише метод findRoot на клас Function, който смята корен на функция по метода на Нютон: по дадено начално приближение x0 и точност eps се пресмятат последователно точките xn+1 = xn - f(xn)/f'(xn) до момента в който |f(xn)| < eps, като може да се счита, че това е добро приближение на корена. Като се използва тази функция да се дефинира метод findFixedPoint, който намира неподвижна точка на функция f, т.е. числото x за което f(x) = x.
Последно модифициране: събота, 12 ноември 2011, 17:38