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

Объектно ориентированное программирование. - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
24.05.2011, 19:10     Объектно ориентированное программирование. #1
Нужно решить задачи. Помогите кому это не сложно, очень нужно. Вот задачи:
1) Создание и редактирование классов. Нужно создать класс "арифметическое выражение" с компонентными данными: 1-й аргумент, 2-й аргумент, знак арифметического выражения(перечислимого типа +, -, *,/). Определить компонентные функции: получение каждого элемента класса по отдельности, изменение значения операндов,вычисление значения выражения, вывод на экран в формате "арг1 операция арг2 = результат".
2)Перегрузка стандартных операций. Нужно описать класс "квадрат" с компонентными данными: координаты центра,длина стороны. Перегрузить операции: <<, префиксный --(декремент длины стороны), !=(проверка на неравенство длин сторон квадратов), +=(увеличение на n координат центра).
3)Наследование и полиморфизм.Виртуальные функции. Нужно создать базовый класс - работник и производные классы - служащий с почасовой оплатой, служащий в штате и служащий с процентной ставкой. Определить функцию начисления зарплаты.
4)Шаблоны классов. Нужно разработать шаблон класса где поля могут иметь различные типы данных(некоторые поля могут быть статическими)Предусмотреть наличие в классе указанных методов и перегруженных операций.Название класса - линейное уравнение; поля - коэффициенты, корень; методы - изменение значений полей, вывод в формате (ax+b=0), решение уравнения; перегружаемые операции - <=(сравнение корней двух уравнений), префиксный ++(инкремент каждого коэффициента).
5)Обработка исключений. Необходимо создать три массива a,b и c размерами соответственно n1, n2, n3 (размеры массивов не равны). В массив a занести значения f(x)= 1/(x^2-1), x принадлежит отрезку от -2 до 0, дельта x равен 0,1. Массив b заполнить случайными числами среди них должны быть и отрицательные числа и нули. Массив c формируется согласно правилу ci=ai-!-2/(bi-1+1). Предусмотреть и обработать возникающие при этом исключительные ситуации( деление на ноль, выход за диапазон индексов массива и т.п.).
6)Разработка приложений с использованием типа string. Дана строка слов. Подсчитать,какая из букв встречается наибольшее(наименьшее) количество раз, а так же, общее количество разных букв в строке.
7)Использование стандартной библиотеки шаблонов STL. Сформировать стек из записей: наименование продукта, калорийность единицы продукта, количество продукта. Найти самый калорийный продукт, найти сумму калорийности всех продуктов. В массив перенести только те продукты чья калорийность ниже средней.
Вот все задачи...кто может посмотрите, пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.05.2011, 19:25     Объектно ориентированное программирование. #2
это типа лабы за весь семестр?
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
24.05.2011, 20:20  [ТС]     Объектно ориентированное программирование. #3
Ну да...
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
24.05.2011, 23:04     Объектно ориентированное программирование. #4
Первое задание
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
#include <iostream>
using namespace std;
 
template <class T>
class virazhenie {
 public:
  virazhenie (T a, T b, char znak):a_1(a), b_1(b), znak_1(znak){};        
 
  //Возвращают значения всего и вся
  T set_1 () {return a_1;};
  T set_2 () {return b_1;};
  char set_3 () {return znak_1;};
 
  //Изменяют значения оперендов
  void operand_a (int x) {a_1= x;}
  void operand_b (int y) {b_1= y;}
 
  //Определяют значение
  T znachenie () {
   switch (znak_1) {
    case '+':{ 
     return a_1+ b_1;
    };
    case '*': {
     return a_1* b_1;
    };
    case '-':{ 
     return a_1- b_1;
    };
    case '/': {
     return a_1/ b_1;
    };
   }
  };
  
  //Выводят всю эту херь
  
  void vivod () {
   cout<< set_1()<<set_3()<<set_2()<<"="<< znachenie(); 
  }
 
 
 private:
  T a_1,b_1;
  char znak_1;           
};
 
int main () {
 
 virazhenie<int> vir (3, 4, '*');
 cout<< vir.set_1()<<" "<<vir.set_2()<<" "<<vir.set_3()<< endl;
 
 vir.operand_a (45);
 vir.operand_b (34);
 cout<< vir.set_1()<<" "<<vir.set_2()<<" "<<vir.set_3()<< endl;
 vir.vivod ();
 
 cout<< endl;
 
 virazhenie<double> vir_ (3, 4, '/');
 cout<< vir_.set_1()<<" "<<vir_.set_2()<<" "<<vir_.set_3()<< endl;
 
 vir_.operand_a (45);
 vir_.operand_b (34);
 cout<< vir_.set_1()<<" "<<vir_.set_2()<<" "<<vir_.set_3()<< endl;
 vir_.vivod ();
 
 cout<< endl;
 
 virazhenie<float> vir__ (3, 4, '-');
 cout<< vir__.set_1()<<" "<<vir__.set_2()<<" "<<vir__.set_3()<< endl;
 
 vir__.operand_a (45);
 vir__.operand_b (34);
 cout<< vir__.set_1()<<" "<<vir__.set_2()<<" "<<vir__.set_3()<< endl;
 vir__.vivod ();
 
 getchar ();
 return 0;
}
Добавлено через 54 секунды
Этот хоть задания понятно написал.
Jupiter
24.05.2011, 23:07
  #5

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
Этот хоть задания понятно написал.
правильно перепечатал)

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.05.2011, 23:19     Объектно ориентированное программирование. #6
Перегрузка стандартных операций. Нужно описать класс "квадрат" с компонентными данными: координаты центра,длина стороны. Перегрузить операции: <<, префиксный --(декремент длины стороны), !=(проверка на неравенство длин сторон квадратов), +=(увеличение на n координат центра).
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
#include <iostream>
 
struct Point
{
    explicit Point(double x_ = 0, double y_ = 0):x(x_), y(y_)
    { 
    }
    double x;
    double y;
};
 
std::ostream& operator <<(std::ostream& os, const Point& pt)
{
    os << "x: " << pt.x << " y: " << pt.y << '\n';
    return os;
}
 
class Square
{
public:
    Square(Point center_, size_t side_length_):center(center_), side_length(side_length_)
    { 
    }
    Square& operator --()
    {
        if(side_length > 0)
           --side_length;
        return *this;
    }
    Square& operator +=(size_t n)
    { 
        side_length += n;
        return *this;
    }
    const Point& getCenter() const {return center;}
    const size_t getLength() const {return side_length;}
private:
   Point center;
   size_t side_length;
};
 
bool operator !=(const Square& first, const Square& second)
{
    return first.getLength() != second.getLength();
}
 
std::ostream& operator <<(std::ostream& os, const Square& sq)
{
    os << "Side length: " << sq.getLength() << '\n';
    os << "Center coords\n" << sq.getCenter() << '\n';
    return os;
}
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
24.05.2011, 23:36     Объектно ориентированное программирование. #7
Что даёт?
explicit Point(double x_ = 0, double y_ = 0):x(x_), y(y_)
Как я знаю, применяется там, где конструктор с одним параметром
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
24.05.2011, 23:40     Объектно ориентированное программирование. #8
kravam, Ну а кто мешает здесь вызвать с одним?)
Убери explicit и попробуй вызвать через =.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
24.05.2011, 23:49     Объектно ориентированное программирование. #9
а ну да
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.05.2011, 00:38     Объектно ориентированное программирование. #10
Использование стандартной библиотеки шаблонов STL. Сформировать стек из записей: наименование продукта, калорийность единицы продукта, количество продукта. Найти самый калорийный продукт, найти сумму калорийности всех продуктов. В массив перенести только те продукты чья калорийность ниже средней.
Изврат блин.
Ловите изврат в ответ.

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
#include <iostream>
#include <string>
#include <stack>
#include <deque>
#include <numeric>
#include <vector>
#include <functional>
#include <algorithm>
 
namespace my
{
    template<class T, class container = std::deque<T> >
    class stack:public std::stack<T, container>
    {
    public:
        typedef typename container::iterator iterator;
        typedef typename container::const_iterator const_iterator;
 
        iterator begin() {return c.begin();}
        iterator end() {return c.end();}
        const_iterator begin() const {return c.begin();}
        const_iterator end() const {return c.end();}
    };
}
 
class Product
{
public:
    Product(const std::string& title_,
            double en_price_,
            int numb_):title(title_), en_price(en_price_), numb(numb_)
    {
    }
    const std::string& getTitle() const {return title;}
    double getEnPrice() const {return en_price;}
    int getNumb() const {return numb;}
    void setTitle(const std::string& title_) {title = title_;}
    void setEnPrice(double en_price_) {en_price = en_price_;}
    void setNumb(int numb_) {numb = numb_;}
private:
    std::string title;
    double en_price;
    int numb;
};
 
double operator +(double en_pr, Product prod)
{
    return en_pr + prod.getEnPrice();
}
 
struct EnPricesCompare:public std::binary_function<Product, Product, bool>
{
    result_type operator () (const first_argument_type& first, const second_argument_type& second)
    {
        return first.getEnPrice() < second.getEnPrice();
    }
};
 
template<class StackType>
double enPriceSum(const StackType& stck)
{
    return std::accumulate(stck.begin(), stck.end(), 0.0);
}
 
template<class StackType>
double enPriceMiddle(const StackType& stck)
{
    return enPriceSum(stck) / stck.size();
}
 
template<class StackType>
Product getMax(const StackType& stck)
{
    return *std::max_element(stck.begin(), stck.end(), EnPricesCompare());
}
 
struct EnPriceCompare:public std::unary_function<Product, bool>
{
public:
    EnPriceCompare(double m_p):middle_price(m_p)
    {
    }
    result_type operator () (const argument_type& pr)
    {
        return pr.getEnPrice() < middle_price;
    }
private:
    double middle_price;
};
 
namespace my
{
    template<class InIt, class OutIt, class Pr1>
    inline OutIt copy_if(InIt First, InIt Last, OutIt Dest, Pr1 Pred)
    {
        while(First != Last)
        {
            if(Pred(*First))
            {
                *Dest=*First;
                ++Dest;
            }
            ++First;
        }
        return Dest;
    }
};
 
template<class StackType, class Cont, class Pred>
void copyProducts(const StackType& stck, Cont& cont, Pred pred)
{
    my::copy_if(stck.begin(), stck.end(), std::back_inserter(cont), pred);
}
 
int main()
{
    my::stack<Product> prod_stack;
    prod_stack.push(Product("1", 10, 5));
    prod_stack.push(Product("2", 5, 6));
    prod_stack.push(Product("3", 7, 10));
    Product prod = getMax(prod_stack);
    double en_sum = enPriceSum(prod_stack);
    std::vector<Product> prod_vec;
    copyProducts(prod_stack, prod_vec, EnPriceCompare(enPriceMiddle(prod_stack)));
}
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
25.05.2011, 17:21     Объектно ориентированное программирование. #11
Объектно ориентированное программирование.
Так всё ничё, но оператор += перегружен для стороны, а надо для центра
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.05.2011, 17:26     Объектно ориентированное программирование. #12
kravam, Хм. И правда. Ночь уж была) Не заметил
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,266
25.05.2011, 18:37     Объектно ориентированное программирование. #13
Третье задание
Вложения
Тип файла: rar rabotnik.rar (111.0 Кб, 14 просмотров)
Nameless One
25.05.2011, 18:57
  #14

Не по теме:

Цитата Сообщение от sheill Посмотреть сообщение
Использование стандартной библиотеки шаблонов STL. Сформировать стек из записей: наименование продукта, калорийность единицы продукта, количество продукта. Найти самый калорийный продукт, найти сумму калорийности всех продуктов. В массив перенести только те продукты чья калорийность ниже средней.
стек для такой задачи - мощно...

sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
29.05.2011, 11:59  [ТС]     Объектно ориентированное программирование. #15
ForEveR, Почему то выдает пустое окно...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.05.2011, 12:58     Объектно ориентированное программирование. #16
sheill, По какой задаче? Про стек? Что значит пустое окно?
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
29.05.2011, 13:40  [ТС]     Объектно ориентированное программирование. #17
ForEveR, Да про стек. Появляется консоль и надпись нажмите для продолжения, после нажатия окно закрывается.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.05.2011, 14:50     Объектно ориентированное программирование. #18
sheill, Ну да. Все верно) Там вывода-то и нет. Сам не сможешь дописать?))
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
29.05.2011, 14:52  [ТС]     Объектно ориентированное программирование. #19
ForEveR, Я пока не совсем разобрался, может поможешь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2011, 16:07     Объектно ориентированное программирование.
Еще ссылки по теме:

C++ Объектно-ориентированное программирование в С++ ?
Объектно-ориентированное программирование C++
Функции Объектно-ориентированное программирование C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.05.2011, 16:07     Объектно ориентированное программирование. #20
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
#include <iostream>
#include <string>
#include <stack>
#include <deque>
#include <numeric>
#include <vector>
#include <functional>
#include <algorithm>
 
namespace my
{
        template<class T, class container = std::deque<T> >
        class stack:public std::stack<T, container>
        {
        public:
                typedef typename container::iterator iterator;
                typedef typename container::const_iterator const_iterator;
 
                iterator begin() {return c.begin();}
                iterator end() {return c.end();}
                const_iterator begin() const {return c.begin();}
                const_iterator end() const {return c.end();}
        };
}
 
class Product
{
public:
        Product(const std::string& title_,
                        double en_price_,
                        int numb_):title(title_), en_price(en_price_), numb(numb_)
        {
        }
        const std::string& getTitle() const {return title;}
        double getEnPrice() const {return en_price;}
        int getNumb() const {return numb;}
        void setTitle(const std::string& title_) {title = title_;}
        void setEnPrice(double en_price_) {en_price = en_price_;}
        void setNumb(int numb_) {numb = numb_;}
private:
        std::string title;
        double en_price;
        int numb;
};
 
std::ostream& operator <<(std::ostream& os, const Product& obj)
{
     os << "Title: " << obj.getTitle() << '\n'
         << "EnPrice: " << obj.getEnPrice() << '\n'
         << "Numb: " << obj.getNumb() << '\n';
}
 
double operator +(double en_pr, Product prod)
{
        return en_pr + prod.getEnPrice();
}
 
struct EnPricesCompare:public std::binary_function<Product, Product, bool>
{
        result_type operator () (const first_argument_type& first, const second_argument_type& second)
        {
                return first.getEnPrice() < second.getEnPrice();
        }
};
 
template<class StackType>
double enPriceSum(const StackType& stck)
{
        return std::accumulate(stck.begin(), stck.end(), 0.0);
}
 
template<class StackType>
double enPriceMiddle(const StackType& stck)
{
        return enPriceSum(stck) / stck.size();
}
 
template<class StackType>
Product getMax(const StackType& stck)
{
        return *std::max_element(stck.begin(), stck.end(), EnPricesCompare());
}
 
struct EnPriceCompare:public std::unary_function<Product, bool>
{
public:
        EnPriceCompare(double m_p):middle_price(m_p)
        {
        }
        result_type operator () (const argument_type& pr)
        {
                return pr.getEnPrice() < middle_price;
        }
private:
        double middle_price;
};
 
namespace my
{
        template<class InIt, class OutIt, class Pr1>
        inline OutIt copy_if(InIt First, InIt Last, OutIt Dest, Pr1 Pred)
        {
                while(First != Last)
                {
                        if(Pred(*First))
                        {
                                *Dest=*First;
                                ++Dest;
                        }
                        ++First;
                }
                return Dest;
        }
};
 
template<class StackType, class Cont, class Pred>
void copyProducts(const StackType& stck, Cont& cont, Pred pred)
{
        my::copy_if(stck.begin(), stck.end(), std::back_inserter(cont), pred);
}
 
int main()
{
        my::stack<Product> prod_stack;
        prod_stack.push(Product("1", 10, 5));
        prod_stack.push(Product("2", 5, 6));
        prod_stack.push(Product("3", 7, 10));
        Product prod = getMax(prod_stack);
        std::cout << "Product with max energ price\n" << prod << '\n';
        std::cout << "Sum is: " << enPriceSum(prod_stack) << '\n';
        double middle = enPriceMiddle(prod_stack);
        std::cout << "Middle is: " << middle << '\n';
        std::vector<Product> prod_vec;
        copyProducts(prod_stack, prod_vec, EnPriceCompare(middle));
        std::cout << "Products with energ price less than middle\n";
        std::copy(prod_vec.begin(), prod_vec.end(), std::ostream_iterator<Product>(std::cout, "\n"));
}
Yandex
Объявления
29.05.2011, 16:07     Объектно ориентированное программирование.
Ответ Создать тему
Опции темы

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