Йерархия за функции
Да се реализира клас 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.
Към класа 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