Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
#1

Класс ломаной линии - C++

28.05.2011, 00:11. Просмотров 1903. Ответов 4
Метки нет (Все метки)

Разработать класс ломанной линии CZigzagLine.В классе CZigzagLine линия должнабыть описана совокупностью координат точек на плоскости.Количество сегментов линии равно количествуточек минус один.
В классе реализовать:
1.Конструктор по умолчанию (создает линию(просто число как бы)вырожденнуюв точку с координатами (0.0))
2.Конструктор с двумя аргументами (количество вершин линии.Указатель на массив скоординатами вершин линии)
Деструктор
3.Функцию-член AddVector для добовления вершины линии в ее конец(удлинение линии)
4.Оператор присваивания одного объекта класса CZigzagLineдругому объекту того же класса.
5.Оператор сравнения двух объектов (сравнение осуществляеться по длине линии).


Ну вот что я натворил:
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
#include <iostream>
using namespace std;
class CZigzagLine
{
private:
    int value[7];//как я думаю надо сделать динамический массив
    int t;// ну это как бы размер или короче говоря длина массива
    int New;//ну новый вектор с "0"
public:
    int &operator() (int p1);//если честно взял гдето этот шаблон че он делает не знаю...
    CZigzagLine ():New(0){}//Конструктор по умолчанию (создает линию(просто число как бы)
//вырожденнуюв точку с координатами (0.0))
    CZigzagLine (int p1):t(p1){cout << "Конструктор копирования";}//чет я думаю 
                                                                                                    //лишнее сюда вписал
    CZigzagLine (int p1, int &p2):t(p1),value(&p2){}//не умею коструктор делать с 2 аргументами
    int ~CZigzagLine operator=(int t){return (value[t+1]=New);}//первый раз вижу деструктор 
//с оператором... вечно выдает ошибку что надо указать инт указываю он соровно ругаеться
//делаю void соровно ругаеться когда делаю без return
 
    ~CZigzagLine ();//стандартный деструктор
 
};
 
ostream& operator <<(ostream& Out, CZigzagLine matrix)//это продолжение шаблонки
{
    Out <<"\n+-------------------------------------------------------+\n";
    Out << '+';
    for(int i = 0; i < 7; i++)
    {
        
        
            Out.width(6);
            Out << matrix(i)<<" |";
        
        
    }
    Out << "\n";
    Out <<"+-------------------------------------------------------+\n";
    return Out;
};
int& CZigzagLine ::operator()(int p1)//без этого передача данных чет не идет...
//опять жэ это шаблонка
{
    if (p1 > 6)
    {       
        cout << "Error\n" << endl;
        exit(1);
    }
    return value[p1];
};
 
int main()
{
    int p;
    setlocale( LC_ALL, "Russian" );
    
    cin >> p;
    CZigzagLine A;
    CZigzagLine B(p);[LIST=1][/LIST]    for (int i = 0; i < p; i++)
    {
        
        cin >> p;//кода пишу cin >> A(i); ошибку выдает поэто сделал так
        A(i)=p;
    }
    cout << A;// ну можно сказать вызов функци 
//ostream& operator <<(ostream& Out, CZigzagLine matrix)
    cin >>p;//забыл какую библиотеку подключить  чтоб работал getch(); это типо вместо него
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 00:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс ломаной линии (C++):

Создать класс и вычислить длину ломаной линии - C++
Создать класс linXY - ломаная линия, принадлежащая первому квадранту плоскости. Функция-член класса: вычисление длины ломаной линии....

Длина Ломаной - C++
Помогите пожалуйста написать программку, вот задание : ломаная задана координатами своих вершин.Найти ее длину.Использовать функцию для...

расстояние от окружности к ломаной? - C++
написать функцию: даны координаты 20 точек ломаной, найти три круга, которые находятся дальше от нее и три ближайших окружности. есть...

Задача нахождения длины ломаной - C++
Условие: Ввод из: Стандартный ввод Время выполнения на одном тесте: 1 с Вывод в: Стандартный вывод Ограничение памяти программы на...

Найти длину кратчайшей ломаной - C++
Даны координаты N точек на плоскости. Найти длину кратчайшей ломаной, соединяющей эти точки. совсем нет идей как это сделать, приходит...

Определить длину ломаной по координатам - C++
Здравствуйте. Проблема с решением задачи &quot;Ловушки&quot;. Алгоритм ясен, ломаная образует многоугольник, начальная и конечная вершина...

4
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.05.2011, 01:57 #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
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
class PolyLine {
    float *Vertex[2];  
    int size;
public:
    PolyLine();
    PolyLine(int n, float *newVertexes[2]);
    ~PolyLine();
 
    void AddVertex(float x, float y);
    int VertexCount() const
    {
        return size;
    }
    float Length() const;
 
    PolyLine & operator = (const PolyLine & other);
    bool operator == (const PolyLine & other) const;
    bool operator != (const PolyLine & other) const;
    bool operator >= (const PolyLine & other) const;
    bool operator <= (const PolyLine & other) const;
    bool operator > (const PolyLine & other) const;
    bool operator < (const PolyLine & other) const;
};
 
PolyLine::PolyLine() : size(1)
{
    for(int i = 0; i < 2; i++)
    {
        Vertex[i] = new float [size];
        Vertex[i][0] = 0.0f;
    }
}
 
PolyLine::PolyLine(int n, float *newVertexes[2]) : size(n)
{
    for(int i = 0; i < 2; i++)
    {
        Vertex[i] = new float [size];
        for(int j = 0; j < size; j++)
        {
            Vertex[i][j] = newVertexes[i][j];
        }
    }
}
 
PolyLine::~PolyLine()
{
    for(int i = 0; i < 2; i++)
    {
        delete [] Vertex[i];
    }
}
 
void PolyLine::AddVertex(float x, float y)
{
    float * tmp[2];
    for(int i = 0; i < 2; i++)
    {
        tmp[i] = new float [size + 1];
        for(int j = 0; j < size; j++)
        {
            tmp[i][j] = Vertex[i][j];
        }
        delete [] Vertex[i];
        Vertex[i] = tmp[i];
    }
    Vertex[0][size] = x;
    Vertex[1][size] = y;
    size++;
}
 
float PolyLine::Length() const
{
    float length(0.0f);
    for(int i = 0; i < size - 1; i++)
    {
        length += sqrt(pow(Vertex[0][i + 1] - Vertex[0][i], 2.0f) + pow(Vertex[1][i + 1] - Vertex[1][i], 2.0f));
    }
    return length;
}
 
PolyLine & PolyLine::operator = (const PolyLine & other)
{
    if(this != &other)
    {
        size = other.size;
        for(int i = 0; i < size; i++)
        {   
            delete [] Vertex[i];
     Vertex[i] = new float [size];
     for(int j = 0; j < size; j++)
     {
        Vertex[i][j] = other.Vertex[i][j];
     }
       }
    }
    return *this;
}
 
bool PolyLine::operator == (const PolyLine & other) const
{
    return Length() == other.Length();
}
 
bool PolyLine::operator != (const PolyLine & other) const
{
    return Length() != other.Length();
}
 
bool PolyLine::operator >= (const PolyLine & other) const
{
    return Length() >= other.Length();
}
 
bool PolyLine::operator <= (const PolyLine & other) const
{
    return Length() <= other.Length();
}
 
bool PolyLine::operator > (const PolyLine & other) const
{
    return Length() > other.Length();
}
 
bool PolyLine::operator < (const PolyLine & other) const
{
    return Length() < other.Length();
}
0
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
28.05.2011, 02:40  [ТС] #3
спасибо большое но можно пожайлуста полный код main

Добавлено через 5 минут
я просто не знаю как масив сразу целеком передовать
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.05.2011, 03:22 #4
Цитата Сообщение от GooDLivE Посмотреть сообщение
спасибо большое но можно пожайлуста полный код main
а ключ от квартиры, не?

Цитата Сообщение от GooDLivE Посмотреть сообщение
я просто не знаю как масив сразу целеком передовать
что мешает самому попробовать сделать, и показать лог ошибок
0
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
28.05.2011, 10:15  [ТС] #5
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
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;
class PolyLine {
    float *Vertex[2];  
    int size;
public:
    PolyLine();
    PolyLine(int n, float *newVertexes[2]);
    ~PolyLine();
 
    void AddVertex(float x, float y);
    int VertexCount() const
    {
        return size;
    }
    float Length() const;
 
    PolyLine & operator = (const PolyLine & other);
    bool operator == (const PolyLine & other) const;
    bool operator != (const PolyLine & other) const;
    bool operator >= (const PolyLine & other) const;
    bool operator <= (const PolyLine & other) const;
    bool operator > (const PolyLine & other) const;
    bool operator < (const PolyLine & other) const;
};
 
PolyLine::PolyLine() : size(1)
{
    for(int i = 0; i < 2; i++)
    {
        Vertex[i] = new float [size];
        Vertex[i][0] = 0.0f;
    }
}
 
PolyLine::PolyLine(int n, float *newVertexes[2]) : size(n)
{
    for(int i = 0; i < 2; i++)
    {
        Vertex[i] = new float [size];
        for(int j = 0; j < size; j++)
        {
            Vertex[i][j] = newVertexes[i][j];
        }
    }
}
 
PolyLine::~PolyLine()
{
    for(int i = 0; i < 2; i++)
    {
        delete [] Vertex[i];
    }
}
 
void PolyLine::AddVertex(float x, float y)
{
    float * tmp[2];
    for(int i = 0; i < 2; i++)
    {
        tmp[i] = new float [size + 1];
        for(int j = 0; j < size; j++)
        {
            tmp[i][j] = Vertex[i][j];
        }
        delete [] Vertex[i];
        Vertex[i] = tmp[i];
    }
    Vertex[0][size] = x;
    Vertex[1][size] = y;
    size++;
}
 
float PolyLine::Length() const
{
    float length(0.0f);
    for(int i = 0; i < size - 1; i++)
    {
        length += sqrt(pow(Vertex[0][i + 1] - Vertex[0][i], 2.0f) + pow(Vertex[1][i + 1] - Vertex[1][i], 2.0f));
    }
    return length;
}
 
PolyLine & PolyLine::operator = (const PolyLine & other)
{
    if(this != &other)
    {
        size = other.size;
        for(int i = 0; i < size; i++)
        {       
            delete [] Vertex[i];
            Vertex[i] = new float [size];
            for(int j = 0; j < size; j++)
            {
                Vertex[i][j] = other.Vertex[i][j];
            }
        }
    }
    return *this;
}
 
bool PolyLine::operator == (const PolyLine & other) const
{
    return Length() == other.Length();
}
 
bool PolyLine::operator != (const PolyLine & other) const
{
    return Length() != other.Length();
}
 
bool PolyLine::operator >= (const PolyLine & other) const
{
    return Length() >= other.Length();
}
 
bool PolyLine::operator <= (const PolyLine & other) const
{
    return Length() <= other.Length();
}
 
bool PolyLine::operator > (const PolyLine & other) const
{
    return Length() > other.Length();
}
 
bool PolyLine::operator < (const PolyLine & other) const
{
    return Length() < other.Length();
}
int main()
{
    int n;
    cout<<"Vvedite razmer matricy: \n";
    cin>>n;
    float* C=new float [n];
    cout<<"Vvedite matricu: \n";
    for (int i=0;i<n;i++)
    {
        C[i];
    }
    PolyLine A(n,C);
 
}
Ну как бы вот тока не понимаю на что ругаеться.... все на 2 аргумент
0
28.05.2011, 10:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2011, 10:15
Привет! Вот еще темы с ответами:

Определить расстояние от данной точки до ломаной - C++
Есть задача. Вот ее краткий пересказ. На плосткости дана точка с координатами x и у. Дано n. На плоскости дано n точек, попарно...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Класс таблиц баз данных и класс записей в таблице(реляционная таблица). Предусмотреть класс связей между таблицами - C++
Здравствуйте! Никак не могу продумать структуру этой программы. Проходим наследование, но я все равно не знаю, как его здесь применить. Как...

Массив: Соединить точки замкнутой самонепересекающейся ломаной так, чтобы периметр полученного многоугольника был минимальным - C++
Здравствуйте!! Такая проблема, не могу придумать алгоритм для решения следующей задачи, прощу подскажите, у кого есть какие идеи: В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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