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

Реализация шаблона класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Frog
0 / 0 / 0
Регистрация: 25.11.2009
Сообщений: 14
30.12.2009, 03:34     Реализация шаблона класса #1
Большая-пребольшая просьба, помогите, пожалуйста, с решением данной задачи. Саму задачу реализовать не сложно, но вот с использованием шаблона и указаний у меня проблемы.
Использую C++ builder 6.0

Разработайте шаблон класса для решения задачи. Подготовьте программу, демонстрирующую использование шаблона.

Задача: Найдите периметр и площадь выпуклого многоугольника.

Указания.
1. Описание класса-шаблона должно включать операторы <<, >>, конструктор копирования, а также другие операторы и функции, необходимые для решения задачи.
2. Распределение памяти для хранения массивов должно осуществляться динамически (в конструкторе), а освобождение – в деструкторе.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Frog
0 / 0 / 0
Регистрация: 25.11.2009
Сообщений: 14
04.01.2010, 00:40  [ТС]     Реализация шаблона класса #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
#include <iostream.h>
#include <windows.h>
#include <math.h>
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i,n;
double s,p,a[100][2];
cout<<"Введите кол-во вершин"<<endl;
cin>>n;
s=0;
p=0;
for (i=0;i<n;i++) {
 cout<<"Введите координаты "<<i+1<<"-ой вершины"<<endl;
 cin>>a[i][0]>>a[i][1]; }
a[n][0]=a[0][0];
a[n][1]=a[0][1];
for (i=0;i<n;i++)
 s+=((a[i+1][1]+a[i][1])/2)*(a[i+1][0]-a[i][0]);
 }
for (i=0;i<n;i++)
 p+=sqrt(pow(a[i][0]-a[i+1][0],2)+pow(a[i][1]-a[i+1][1],2));
 
if (s<0) cout<<"Площадь = "<<s*(-1)<<endl;
 else cout<<"Площадь = "<<s<<endl;
cout<<"Периметр = "<<p<<endl;
system("pause");
return 0;
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
04.01.2010, 02:19     Реализация шаблона класса #3
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
#include <iostream>
#include <cmath>
 
template <typename T>
class Polygon{
    friend std::ostream & operator << ( std::ostream& lhs, const Polygon<T>& rhs){
        for(int i = 0; i < rhs.Count; ++i)
            lhs << "[ " << rhs.Vertices[i][0] << " "
            << rhs.Vertices[i][1] << " ]" << std::endl;
        return lhs;
    }
 
    friend std::istream & operator >> ( std::istream& lhs, Polygon<T>& rhs){
        for(int i = 0; i < rhs.Count; ++i){
            std::cout << "[ " << i << " ]" << "[ 0 ]: -> ";
            lhs >> rhs.Vertices[i][0];
            std::cout << "[ " << i << " ]" << "[ 1 ]: -> ";
            lhs >> rhs.Vertices[i][1];
        }
        return lhs;
    }
public:
    Polygon(int);
    Polygon(const Polygon&);
    ~Polygon();
 
    T &operator = (const Polygon&);
 
    T Square();
    T Perimeter();
private:
    T **Vertices;
    int Count;
};
 
template <typename T>
T Polygon<T>::Perimeter(){
    T Result = 0;
    for (int i = 0; i < Count; ++i)                    
    //  Result += sqrt( pow( Vertices[i][0] - Vertices[i+1][0], 2 ) + 
                                            // ^ - Выход за границы массива...  
    //               pow( Vertices[i][1] - Vertices[i+1][1], 2 ) );
                                             // ^ - Выход за границы массива... 
    return Result;
}
template <typename T>
T Polygon<T>::Square(){
    T Result = 0;
    for (int i = 0; i < Count; ++i)
        //Result += ( ( Vertices[i+1][1] + Vertices[i][1] ) / 2) *
                              // ^ - Выход за границы массива...    
        //        ( Vertices[i+1][0] - Vertices[i][0] );
                      // ^ - Выход за границы массива...    
        Result = Result < 0 ? -Result : Result;
    return Result;
}
template <typename T>
T & Polygon<T>::operator=( const Polygon<T>& rhs ){
    if( this == &rhs )
        return *this;
    Count = rhs.Count;
 
    Vertices = new T*[Count];
    for(int i = 0; i < Count; ++i){
        Vertices[i] = new T[2];
 
        Vertices[i][0] = rhs.Vertices[i][0];
        Vertices[i][1] = rhs.Vertices[i][1];
    }
 
}
template <typename T>
Polygon<T>::~Polygon(){
    for(int i = 0; i < Count; ++i)
        delete[] Vertices[i];
    delete[] Vertices;
}
template <typename T>
Polygon<T>::Polygon( const Polygon<T>& rhs): Count(0), Vertices(0){
    *this = rhs;
}
template <typename T>
Polygon<T>::Polygon( int _count = 0 ): Count(_count), Vertices(0){
    if(!Count) return;
    Vertices = new T*[Count];
    for(int i = 0; i < Count; ++i)
        Vertices[i] = new T[2];
}
 
int main()
{
    Polygon<float> pl(2);
    std::cin  >> pl;
    std::cout << pl;
 
    std::cout << pl.Square()    << "\n"
              << pl.Perimeter() << "\n";
    return 0;
}
Frog
0 / 0 / 0
Регистрация: 25.11.2009
Сообщений: 14
04.01.2010, 02:43  [ТС]     Реализация шаблона класса #4
что это?
Здесь не ни строчки из моего кода. Мой просто не нужен или это дополнение к моему?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
04.01.2010, 03:07     Реализация шаблона класса #5
Цитата Сообщение от Frog Посмотреть сообщение
Здесь не ни строчки из моего кода
Как это?
Периметр..
C++
1
2
Result += sqrt( pow( Vertices[i][0] - Vertices[i+1][0], 2 ) + 
                            pow( Vertices[i][1] - Vertices[i+1][1], 2 ) );
Площадь..
C++
1
2
Result += ( ( Vertices[i+1][1] + Vertices[i][1] ) / 2) * 
           ( Vertices[i+1][0] - Vertices[i][0] );
Я просто это закоментировал так как в вашем алгоритме ошибка...
Frog
0 / 0 / 0
Регистрация: 25.11.2009
Сообщений: 14
04.01.2010, 03:24  [ТС]     Реализация шаблона класса #6
Цитата Сообщение от ISergey Посмотреть сообщение
Как это?
Периметр..
Площадь..
Я просто это закоментировал так как в вашем алгоритме ошибка...
Ммм...спасибо за пояснение, просто вводит в ступор сам вид кода, но это уже мой мозг повинен. )
А можно, хотя бы в двух словах, описать предназначение шаблона класса для этой программы?
Yandex
Объявления
04.01.2010, 03:24     Реализация шаблона класса
Ответ Создать тему
Опции темы

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