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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
28.05.2011, 00:11     Класс ломаной линии #1
Разработать класс ломанной линии 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(); это типо вместо него
    
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 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();
}
GooDLivE
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 13
28.05.2011, 02:40  [ТС]     Класс ломаной линии #3
спасибо большое но можно пожайлуста полный код main

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

Цитата Сообщение от GooDLivE Посмотреть сообщение
я просто не знаю как масив сразу целеком передовать
что мешает самому попробовать сделать, и показать лог ошибок
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 аргумент
Yandex
Объявления
28.05.2011, 10:15     Класс ломаной линии
Ответ Создать тему
Опции темы

Текущее время: 05:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru