Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рекурсивным способом получить все возможные траектории с 0-ой вершины до 6-ой вершины длиной не более 4 вершин https://www.cyberforum.ru/cpp-beginners/thread1401823.html
Как написать рекурсивную функцию по задаче: Задается например,такая верхняя треугольная матрица, на самом деле она достаточно большая float A={ { 1, 2, 1,-1,-1,-1}, {-1,...
C++ Файл с разнотипными данными
Подскажите, пожалуйста, есть файл с числовыми данными, хочу написать программу, которая посимвольно читает данные, пропускает то, что не нужно (текст), остальное записывает куда нужно. С последним...
Объясните что делает эта программа (do.while) C++
Объясните пожалуйста что делает эта программа. #include <stdio.h> #include <conio.h> #include <math.h> int main() { int i=1; float a,n; scanf("%f",&n);
C++ Стек в виде массива Помогите программку составить, выполнение арифметических действий записанных в инфиксной записи, стеков в виде массива. https://www.cyberforum.ru/cpp-beginners/thread1401747.html
C++ Аппроксимация. Квадратичная интерполяция https://www.cyberforum.ru/cpp-beginners/thread1401736.html
Нужен пример реализации квадратичной интерполяции на интервале с 11 точками. Исходные хi вычисляются по формуле xi=-2+7*(i-1)/10, i=1,11 и у по формуле y=x3-50*cos(x). Используя полученную таблицу...
Создание таблицы C++
Добрый день, задача заключается в том, чтобы считать данные и поместить их в таблицу.Задача состоит в том, чтобы создать таблицу. Прошу помочь обозначить в какую сторону копать, где можно почерпнуть...
Не срабатывает условие while (!file.eof() C++
Есть функция, которая считает из файла числа в динамический массив: int* ReadFile(string FileName) { ifstream file; file.open(FileName); int* mas=(int*)malloc(sizeof(int)*10); int Count =...
C++ Шаблонный оператор не шаблонного класса Пытаюсь создать альтернативный оператор выделения памяти для своей библиотеки. С целью получить возможность передавать дополнительную информацию о типах в свой диспетчер памяти. Сначала сделал... https://www.cyberforum.ru/cpp-beginners/thread1401683.html
C++ Задача с файлом https://www.cyberforum.ru/cpp-beginners/thread1401653.html
Дан файл определить сколько раз встречается в нем слово вывести на экран номер строк где это слово найдено(программа находит слово не зависимо от регистра) Я написал пррограмму но не знаю как...
C++ Конвертирование типов данных Нужно обработать данные. Пропустить их через кучу функций, каждая из них требует свой тип данных. Вовремя компиляции постоянно сталкиваюсь с тем что компилятор ругается "невозможно преобразовать... https://www.cyberforum.ru/cpp-beginners/thread1401649.html
sourcerer
Модератор
Эксперт CЭксперт С++
5000 / 2182 / 330
Регистрация: 20.02.2013
Сообщений: 5,596
Записей в блоге: 24
Завершенные тесты: 1
19.04.2015, 13:48 0

Решение всех задач из учебника Стивена Прата

19.04.2015, 13:48. Просмотров 78004. Ответов 211
Метки (Все метки)

Ответ

Глава 11. Упражнение 2

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
60
61
62
63
64
//  sp_Ch11_Pg588_Ex02 - main.cpp
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 11, страница 588, упражнение 2.
/*
Модифицируйте заголовок класса Vector и файлы реализации (листинги 11.13
и 11.14) так, чтобы модуль и направление вектора больше не хранились в виде
компонентов данных. Вместо этого они должны вычисляться по требованию
при вызове методов magval() и angval(). Вы должны оставить открытый
интерфейс без изменений (те же открытые методы с теми же аргументами), но
изменить закрытую часть, включая некоторые из закрытых методов и их
реализации. Протестируйте модифицированную версию с помощью программы из
листинга 11.15, которая должна остаться неизменной, поскольку открытый
интерфейс класса Vector не менялся.
*/
 
#include <cstdlib>      // rand(), srand() prototypes
#include <ctime>        // time() prototype
#include "Vector.h"     // includes <iostream>
int main()
{
    using namespace std;
    using VECTOR::Vector;
 
    srand(time(0));     // seed random-number generator
    double direction;
    Vector step;
    Vector result(0.0, 0.0);
    unsigned long steps = 0;
    double target;
    double dstep;
    cout << "Enter target distance (q to quit): ";
    while (cin >> target)
    {
        cout << "Enter step length: ";
        if (!(cin >> dstep))
            break;
 
        while (result.magval() < target)
        {
            direction = rand() % 360;
            step.reset(dstep, direction, VECTOR::Vector::POL);
            result = result + step;
            steps++;
        }
        cout << "After " << steps << " steps, the subject "
            "has the following location:\n";
        cout << result << endl;
        result.polar_mode();
        cout << " or\n" << result << endl;
        cout << "Average outward distance per step = "
            << result.magval()/steps << endl;
        steps = 0;
        result.reset(0.0, 0.0);
        cout << "Enter target distance (q to quit): ";
    }
    cout << "Bye!\n";
/* keep window open
    cin.clear();
    while (cin.get() != '\n')
        continue;
    cin.get();
*/
    return 0;
}
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
//  sp_Ch11_Pg588_Ex02 - Vector.h
 
#ifndef VECTOR_H
#define VECTOR_H
 
#include <iostream>
 
namespace VECTOR
{
    class Vector
    {
        public:
            enum Mode {RECT, POL};  // RECT for rectangular, POL for Polar modes
 
            Vector();
            Vector(double n1, double n2, Mode form = RECT);
            void reset(double n1, double n2, Mode form = RECT);
            ~Vector();
            double xval() const {return x;}     // report x value
            double yval() const {return y;}     // report y value
            double magval() const;              // calculate magnitude
            double angval() const;              // calculate angle
            void polar_mode();                  // set mode to POL
            void rect_mode();                   // set mode to RECT
        // operator overloading
            Vector operator+(const Vector & b) const;
            Vector operator-(const Vector & b) const;
            Vector operator-() const;
            Vector operator*(double n) const;
 
        // friends
            friend Vector operator*(double n, const Vector & a);
            friend std::ostream & operator<<(std::ostream & os, const Vector & v);
 
        private:
            double x;          // horizontal value
            double y;          // vertical value
            Mode mode;         // RECT or POL
    };
 
}   // end namespace VECTOR
 
#endif // VECTOR_H
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//  sp_Ch11_Pg588_Ex02 - Vector.cpp
//  methods for the Vector class
 
#include <cmath>
#include "Vector.h"  // includes <iostream>
 
using std::sqrt;
using std::sin;
using std::cos;
using std::atan;
using std::atan2;
using std::cout;
 
namespace VECTOR
{
    // compute degrees in one radian
    const double Rad_to_deg = 45.0 / atan(1.0);
    // should be about 57.2957795130823
 
 
// ===================public methods====================
 
    Vector::Vector()             // default constructor
    {
        x = y = 0.0;
        mode = RECT;
    }
 
    // construct vector from rectangular coordinates if form is r
    // (the default) or else from polar coordinates if form is p
    Vector::Vector(double n1, double n2, Mode form)
    {
        mode = form;
        if (form == RECT)
        {
             x = n1;
             y = n2;
        }
        else if (form == POL)
        {
             x = n1 * cos(n2 / Rad_to_deg);
             y = n1 * sin(n2 / Rad_to_deg);
        }
        else
        {
             cout << "Incorrect 3rd argument to Vector() -- ";
             cout << "vector set to 0\n";
             x = y = 0.0;
             mode = RECT;
        }
    }
 
    // reset vector from rectangular coordinates if form is
    // RECT (the default) or else from polar coordinates if
    // form is POL
    void Vector:: reset(double n1, double n2, Mode form)
    {
        mode = form;
        if (form == RECT)
         {
             x = n1;
             y = n2;
        }
        else if (form == POL)
        {
             x = n1 * cos(n2 / Rad_to_deg);
             y = n1 * sin(n2 / Rad_to_deg);
        }
        else
        {
             cout << "Incorrect 3rd argument to Vector() -- ";
             cout << "vector set to 0\n";
             x = y = 0.0;
             mode = RECT;
        }
    }
 
    Vector::~Vector()    // destructor
    {
    }
 
    double Vector::magval() const   // calculate magnitude
    {
        return sqrt(x * x + y * y);
    }
 
    double Vector::angval() const   // calculate angle
    {
        return (x == 0.0 && y == 0.0) ? 0.0 : atan2(y, x);
    }
 
    void Vector::polar_mode()    // set to polar mode
    {
        mode = POL;
    }
 
    void Vector::rect_mode()     // set to rectangular mode
    {
        mode = RECT;
    }
 
    // operator overloading
    // add two Vectors
    Vector Vector::operator+(const Vector & b) const
    {
        return Vector(x + b.x, y + b.y);
    }
 
    // subtract Vector b from a
    Vector Vector::operator-(const Vector & b) const
    {
        return Vector(x - b.x, y - b.y);
    }
 
    // reverse sign of Vector
    Vector Vector::operator-() const
    {
        return Vector(-x, -y);
    }
 
    // multiply vector by n
    Vector Vector::operator*(double n) const
    {
        return Vector(n * x, n * y);
    }
 
    // friend methods
    // multiply n by Vector a
    Vector operator*(double n, const Vector & a)
    {
        return a * n;
    }
 
    // display rectangular coordinates if mode is RECT,
    // else display polar coordinates if mode is POL
    std::ostream & operator<<(std::ostream & os, const Vector & v)
    {
        if (v.mode == Vector::RECT)
             os << "(x,y) = (" << v.x << ", " << v.y << ")";
        else if (v.mode == Vector::POL)
        {
             os << "(m,a) = (" << v.magval() << ", "
                 << v.angval() * Rad_to_deg << ")";
        }
        else
             os << "Vector object mode is invalid";
        return os;
    }
 
}  // end namespace VECTOR


Вернуться к обсуждению:
Решение всех задач из учебника Стивена Прата
3
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2015, 13:48
Готовые ответы и решения:

Пример с книги Стивена Прата (Язык программирования с++). Расхождение в ответе
В книге один ответ. У меня другой выходит (На русский перевод, не обращайте внимание) Сама...

Решение задач из учебника Томшина
Я являюсь студентом 1-го курса, и нам дали задачи по c# которые необходимо решить. Задачи взяты из...

Понятен материал учебника, но не получается самостоятельное решение задач
Здравствуйте. Читаю книжку Дейтелов, переписываю код, который дан в учебнике, потом читаю...

Нюансы синтаксиса: классы, список инициализации (неясная строка из учебника Стивена Праты)
Вот сам класс #ifndef TABTENN0_H_ #define TABTENN0_H_ #include &lt;string&gt; using std ::...

211
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.