Форум программистов, компьютерный форум CyberForum.ru

Упражнение из книги Страуструпа для начинающих. Точность вычислений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс и пространство имен http://www.cyberforum.ru/cpp-beginners/thread935949.html
Есть стэк, а он использует структуру как базовую единицу. Куда определить описание этой структуры - в пространство имен, а его включить в class?struct customer { enum e1{str_size = 35}; char fullname; double payment; }; #ifndef STACK_H_ #define STACK_H_
C++ Как создать старт приложения на определенной кнопки клавиатуры Вот например есть таймер как сделать так чтобы таймер запустился\остановился(остановился и збросился) при нажатии какой-то конкретной кнопки например при нажатии пробел http://www.cyberforum.ru/cpp-beginners/thread935943.html
template (найти ошибку в коде) C++
Добрый день! Подскажите, где ошибка? никак не пойму...как нешаблонная ф-я она работает...где-то у меня в оформлении ошибка template <typename T> void reverse_container(vector<T>::iterator it_beg, vector<T>::iterator it_end) { for(it_beg, --it_end; (it_beg!=it_end)&&(it_beg!=it_end-1); ++it_beg, --it_end) {
C++ Отсортировать саб лист используя лямбда фунций
Данн лист из объектов класса и нужно отсортировать часть этого листа. Что то типа: class someClass; std::list<someClass> classList; //находим начало саб листа
C++ Ошибка при сохранении ВЦ++ 2010 http://www.cyberforum.ru/cpp-beginners/thread935925.html
Я писал себе прогу, на Visual C++ Express 2010 сижу. Я раньше ставил, чтобы в значение %кнопка%->Text = "→", то есть символы Юникода. Делал я это через код, а сейчас сделал через конструктор, и при компиляции он выдал ошибку о сохранении. Скрин внизу. После нажатия любого варианта код не компилируется, как вернуть обратно?
C++ Наткнулся на баг Всем привет! Сегодня наткнулся на следующую странность (использую MVS2012)... Если в вашем проекте присутствуют классы, написанные вами, причем не важно в основном коде или в хедере и вы инклудите Windows.h, то классы, написанные вами, при создании объектов, перестают идентифицироваться. :wizard: подробнее

Показать сообщение отдельно
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181

Упражнение из книги Страуструпа для начинающих. Точность вычислений - C++

09.08.2013, 21:03. Просмотров 336. Ответов 0
Метки (Все метки)

Добрый вечер. В конце одной из глав идёт след. упражнение:
Модифицируйте класс Fct так, чтобы в нём был дополнительный аргумент, позволяющий контролировать точность. Сделайте тип этого аргумента шаблонным параметром, чтобы повысить гибкость класса.
Как понять "контролировать точность"? Подскажите, пожалуйста, что же имелось ввиду.
Вот имеющийся код (класс Function):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
//------------------------------------------------------------------------------
 
typedef double Fct(double);
 
class Shape  {        // deals with color and style, and holds sequence of lines 
public:
    void draw() const;                 // deal with color and draw lines
    virtual void move(int dx, int dy); // move the shape +=dx and +=dy
 
    void set_color(Color col) { lcolor = col; }
    Color color() const { return lcolor; }
    void set_style(Line_style sty) { ls = sty; }
    Line_style style() const { return ls; }
    void set_fill_color(Color col) { fcolor = col; }
    Color fill_color() const { return fcolor; }
 
    Point point(int i) const { return points[i]; } // read only access to points
    int number_of_points() const { return int(points.size()); }
 
    virtual ~Shape() { }
protected:
    Shape();    
    virtual void draw_lines() const;   // draw the appropriate lines
    void add(Point p);                 // add p to points
    void set_point(int i,Point p);     // points[i]=p;
private:
    vector<Point> points;              // not used by all shapes
    Color lcolor;                      // color for lines and characters
    Line_style ls; 
    Color fcolor;                      // fill color
 
    Shape(const Shape&);               // prevent copying
    Shape& operator=(const Shape&);
};
 
//------------------------------------------------------------------------------
 
struct Function : Shape {
    // the function parameters are not stored
    Function(Fct f, double r1, double r2, Point orig,
        int count = 100, double xscale = 25, double yscale = 25);    
};
 
Function::Function(Fct f, double r1, double r2, Point xy,
                   int count, double xscale, double yscale)
// graph f(x) for x in [r1:r2) using count line segments with (0,0) displayed at xy
// x coordinates are scaled by xscale and y coordinates scaled by yscale
{
    if (r2-r1<=0) error("bad graphing range");
    if (count <=0) error("non-positive graphing count");
    double dist = (r2-r1)/count;
    double r = r1;
    for (int i = 0; i<count; ++i) {
        add(Point(xy.x+int(r*xscale),xy.y-int(f(r)*yscale)));
        r += dist;
    }
}
 
//-----------------------------------------------------------------------------
Класс FCT:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class FCT : public Function {
public:
    FCT(Fct f, double r1, double r2, Point xy, int cnt=100, double xscl=25, double yscl=25)
        : Function(f,r1,r2,xy,cnt,xscl,yscl), func(f)
    {
        ag_min=r1;
        ag_max=r2;
        orig=xy;
        count=cnt;
        xscale=xscl;
        yscale=yscl;
    }
 
    void set_func(Fct f) { func=f; }
    void set_range(double r_min, double r_max) 
    { 
        ag_min=r_min; 
        ag_max=r_max;
    }
    void set_xy(Point xy) { orig=xy; }
    void set_scale(double xscl, double yscl)
    {
        xscale=xscl;
        yscale=yscl;
    }
 
    void make_changes();
private:
    Fct* func;
 
    double ag_min;
    double ag_max;
    Point orig;
    int count;
    double xscale;
    double yscale;
};
 
void FCT::make_changes()
{
    if (ag_max<ag_min) error("bad graphing range");
    if (count <=0) error("non-positive graphing count");
    double dist = (ag_max-ag_min)/count;
    double r = ag_min;
    for (int i = 0; i<count; ++i) {
       set_point(i,Point(orig.x+int(r*xscale),orig.y-int(func(r)*yscale)));
       r += dist;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru