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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Shnejder
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 3
#1

Лабораторные по классам - C++

22.01.2011, 01:55. Просмотров 1246. Ответов 8
Метки нет (Все метки)

С абсолютно не знаю, поэтому пришел сюда за помощью.
Лабораторная 1
Описать базовый класс «Элемент».
Поля:
- имя элемента (указатель на строку символов);
- количество входов элемента;
- количество выходов элемента.
Методы:
- конструктор класса;
- деструктор класса;
- метод, задающий имя элемента.
2. На основе класса «Элемент» описать производный класс «Комбинационный», представляющий собой комбинационный элемент (двоичный вентиль), который может иметь несколько входов и один выход.
Поля:
- указатель, используемый для динамического размещения полей, содержащих значения входов.
Методы:
- конструктор;
- конструктор копирования;
- деструктор;
- метод, задающий значение на входах экземпляра класса;
- метод, позволяющий опрашивать состояние отдельного входа экземпляра класса;
- метод вычисляющий значение выхода (по варианту задания).
В задании перечислены только обязательные члены и методы класса. Можно задавать дополнительные члены и методы, если они не отменяют обязательные и обеспечивают дополнительные удобства при работе с данными классами, например, описать функции вычисления выхода/состояния как виртуальные.
3. Для проверки функционирования созданных классов написать программу, использующую эти классы. В программе должны быть продемонстрированы все свойства созданных классов.
Комбинационный элемент: ИЛИ
Число входов: 8

Лабораторная 2
Определить класс ограниченного массива чисел с плавающей точкой, индексы элементов которого могут принимать отрицательные значения. Нижний из этих индексов устанавливается по умолчанию равным 1. Перегрузить операции
• MDouble [int] – значение элемента с заданным номером;
• MDouble + double – прибавление целого числа к каждому элементу массива;
• MDouble*double – умножение всех элементов массива на целое число;
• MDouble = MDouble – операция присваивания.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2011, 01:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Лабораторные по классам (C++):

лабораторная по классам - C++
Доброго вечера ув. гуру. Очень прошу вас помочь написать небольшую программу, связанной с великим ООП, а конкретнее работой с классами....

Вопрос по классам - C++
Опишу определение базавого класса и производного class Date { private: ... public: Date( ){}; ...

учебник по классам - C++
Люди, подскажите, пожалуйста, где можно найти хороший учебник по классам с примерами задач

Литература по классам - C++
Посоветуйте какую-то книгу где хорошо описано объявления, как работать с классами и все о классах!

от структур к классам - C++
Добрый вечер. Помогите пожалуйста разобраться в классах, только начал их изучать. Есть задание переделать структуру в класс ну и сделать...

Программа по классам - C++
Нужна помощь по классам, помогите с написание кода Описать класс, реализующий стек и работу с ним. 1.) Класс должен содержать следующие...

8
Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 94
22.01.2011, 11:22 #2
2я лабораторная. Уточни пожалуйста что значит
Цитата Сообщение от Shnejder Посмотреть сообщение
Нижний из этих индексов устанавливается по умолчанию равным 1.
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
#include <iostream>
 
using namespace std;
 
class Array
{
    float *arr;
    int count;
public:
    Array() {arr = NULL; count = 0;}
    Array(int n)  //ввод элементов массива можно сделать как рандом, так и задавать с клавиатуры
    {
        count = n;
        arr = new float[count];
        for (int i = 0; i < count; i++)
            arr[i] = i;
    }
    void operator + (const float&);
    void operator * (const float&);
    Array operator = (Array);
    float operator [] (int);
    void show();
};
 
void Array :: operator + (const float &a)
{
    for (int i = 0; i < count; i++)
        arr[i] += a;
}
 
void Array :: operator * (const float &a)
{
    for (int i = 0; i < count; i++)
        arr[i] *= a;
}
 
Array Array :: operator = (Array A)
{
    count = A.count;
    arr = new float [count];
    for (int i = 0; i < count; i++)
        arr[i] = A.arr[i];
    return *this;
}
 
float Array :: operator[] (int a)
{
    if (a < 0)
        a = -a;
    if (a > count)
    {
        cout << "\nВыход за границы массива!!!\n";
        return -1;
    }
    return arr[a];
}
 
void Array :: show()
{
    for (int i = 0; i < count; i++)
        cout << arr[i] << " ";
}
 
int main()
{
    setlocale(2, ".1251");
    Array A(20), B;
    cout << "Изначально массив А таков: \n";
    A.show();
    while (true)
    {
        cout << "\n1. Проверка оператора [].\n";
        cout << "2. Проверка оператора +.\n";
        cout << "3. Проверка оператора *.\n";
        cout << "4. Проверка оператора =.\n";
        cout << "5. Выход.\n";
        int choise, n;
        cin >> choise;
        switch (choise)
        {
        case 1:
            cout << "\nВведите индекс элемента массива: ";
            cin >> n;
            cout << "\n" <<  n << "й элемент массива это " << A[n];
            break;
        case 2:
            cout << "\nВведите число, с которым хотите сложить все элементы массива: ";
            cin >> n;
            A + n;
            cout << "\nМассив стал таким: \n";
            A.show();
            break;
        case 3:
            cout << "\nВведите число, с которым умножить все элементы массива: ";
            cin >> n;
            A * n;
            cout << "\nМассив стал таким: \n";
            A.show();
            break;
        case 4:
            cout << "\nИзначально массив В равен:\n";
            B.show();
            B = A;
            cout << "\nПосле операции В = А, массив В стал:\n";
            B.show();
            break;
        case 5:
            cout << "\nВы выбрали выход, до свидания!\n";
            return 0;
        default:
            cout << "\nТакого пункта нет, попробуйте еще раз.\n";
            break;
        }
    }
    return 0;
}
1
Shnejder
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 3
23.01.2011, 08:54  [ТС] #3
спасибо, очень выручили. Попробую завтра у препода выяснить.
0
mifeliz
2 / 2 / 0
Регистрация: 18.01.2011
Сообщений: 35
24.01.2011, 11:21 #4
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Мне надо сдать через 7 часов вот это...Ни у кого нету готового решения? Просто тут рассмотрели лабу 1 а мне лаба 2 нада...задание точно такое же
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
24.01.2011, 13:45 #5
Цитата Сообщение от Shnejder Посмотреть сообщение
Определить класс ограниченного массива чисел с плавающей точкой, индексы элементов которого могут принимать отрицательные значения. Нижний из этих индексов устанавливается по умолчанию равным 1. Перегрузить операции
• MDouble [int] – значение элемента с заданным номером;
• MDouble + double – прибавление целого числа к каждому элементу массива;
• MDouble*double – умножение всех элементов массива на целое число;
• MDouble = MDouble – операция присваивания.
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
#include <iostream>
#include <algorithm>
#include <stdexcept>
 
#define CHECK_OUT_OF_RANGE 1
 
class DoubleArray
{
    private:
        int startIndex_;
        int size_;
        double* data_;
 
        void throwIsOutOfRange_(int i) const
        {
            if(i - startIndex_ < 0 || i - startIndex_ >= size_)
                throw std::out_of_range("Error: index out of range.");
        }
 
    public:
        explicit DoubleArray(int size, int startIndex = 1)
            : startIndex_(startIndex)
        {
            if(size <= 0) throw std::invalid_argument("Error: size <= 0.");
            size_ = size;
            data_ = new double[size_];
        }
 
        DoubleArray(const DoubleArray& rhs)
            : size_(rhs.size_)
        {
            data_ = new double[size_];
            std::copy(rhs.data_, rhs.data_+rhs.size_, data_);
        }
 
        ~DoubleArray()
        {
            delete[] data_;
        }
 
        double& operator[](int i)
        {
            #if CHECK_OUT_OF_RANGE
              throwIsOutOfRange_(i);
            #endif
 
            return data_[i - startIndex_];
        }
 
        const double& operator[](int i) const
        {
            #if CHECK_OUT_OF_RANGE
              throwIsOutOfRange_(i);
            #endif
 
            return data_[i - startIndex_];
        }
 
        DoubleArray& operator+=(int val)
        {
            std::transform(data_, data_+size_, data_,
                           std::bind2nd(std::plus<double>(), val));
            return *this;
        }
 
        DoubleArray& operator*=(int val)
        {
            std::transform(data_, data_+size_, data_,
                           std::bind2nd(std::multiplies<double>(), val));
            return *this;
        }
 
        const DoubleArray operator+(int val)
        {
            return DoubleArray(*this)+= val;
        }
 
        const DoubleArray operator*(int val)
        {
            return DoubleArray(*this)*= val;
        }
 
        DoubleArray& operator=(const DoubleArray& rhs)
        {
            if(&rhs != this)
            {
                if(size_ != rhs.size_)
                {
                    delete[] data_;
                    size_ = rhs.size_;
                    data_ = new double[size_];
                }
                std::copy(rhs.data_, rhs.data_+rhs.size_, data_);
            }
 
            return *this;
        }
 
        int size() const
        {
            return size_;
        }
 
        int startIndex() const
        {
            return startIndex_;
        }
 
        int endIndex() const
        {
            return size_ - 1 + startIndex_;
        }
};
 
// ...
1
mifeliz
2 / 2 / 0
Регистрация: 18.01.2011
Сообщений: 35
24.01.2011, 21:38 #6
rangerx, Спасибо но твоя работа не подошла. Я защитил на отлично по этому скрипту:
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
#include <iostream>
#include <algorithm>
#include <stdexcept>
 
#define CHECK_OUT_OF_RANGE 1
 
class DoubleArray
{
    private:
        int startIndex_;
        int size_;
        double* data_;
 
        void throwIsOutOfRange_(int i) const
        {
            if(i - startIndex_ < 0 || i - startIndex_ >= size_)
                throw std::out_of_range("Error: index out of range.");
        }
 
    public:
        explicit DoubleArray(int size, int startIndex = 1)
            : startIndex_(startIndex)
        {
            if(size <= 0) throw std::invalid_argument("Error: size <= 0.");
            size_ = size;
            data_ = new double[size_];
        }
 
        DoubleArray(const DoubleArray& rhs)
            : size_(rhs.size_)
        {
            data_ = new double[size_];
            std::copy(rhs.data_, rhs.data_+rhs.size_, data_);
        }
 
        ~DoubleArray()
        {
            delete[] data_;
        }
 
        double& operator[](int i)
        {
            #if CHECK_OUT_OF_RANGE
              throwIsOutOfRange_(i);
            #endif
 
            return data_[i - startIndex_];
        }
 
        const double& operator[](int i) const
        {
            #if CHECK_OUT_OF_RANGE
              throwIsOutOfRange_(i);
            #endif
 
            return data_[i - startIndex_];
        }
 
        DoubleArray& operator+=(int val)
        {
            std::transform(data_, data_+size_, data_,
                           std::bind2nd(std::plus<double>(), val));
            return *this;
        }
 
        DoubleArray& operator*=(int val)
        {
            std::transform(data_, data_+size_, data_,
                           std::bind2nd(std::multiplies<double>(), val));
            return *this;
        }
 
        const DoubleArray operator+(int val)
        {
            return DoubleArray(*this)+= val;
        }
 
        const DoubleArray operator*(int val)
        {
            return DoubleArray(*this)*= val;
        }
 
        DoubleArray& operator=(const DoubleArray& rhs)
        {
            if(&rhs != this)
            {
                if(size_ != rhs.size_)
                {
                    delete[] data_;
                    size_ = rhs.size_;
                    data_ = new double[size_];
                }
                std::copy(rhs.data_, rhs.data_+rhs.size_, data_);
            }
 
            return *this;
        }
 
        int size() const
        {
            return size_;
        }
 
        int startIndex() const
        {
            return startIndex_;
        }
 
        int endIndex() const
        {
            return size_ - 1 + startIndex_;
        }
};
 
// ...
Кому надо юзайте. Задание:
Лабораторная 2
Определить класс ограниченного массива чисел с плавающей точкой, индексы элементов которого могут принимать отрицательные значения. Нижний из этих индексов устанавливается по умолчанию равным 1. Перегрузить операции
• MDouble [int] – значение элемента с заданным номером;
• MDouble + double – прибавление целого числа к каждому элементу массива;
• MDouble*double – умножение всех элементов массива на целое число;
• MDouble = MDouble – операция присваивания.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.


p.s.: Тема решена, думаю стоит закрыь темку что бы больше такие как я не поднимали её.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
24.01.2011, 22:40 #7
Цитата Сообщение от mifeliz Посмотреть сообщение
rangerx, Спасибо но твоя работа не подошла. Я защитил на отлично по этому скрипту:
Так это же и есть мой исходник...
0
mifeliz
2 / 2 / 0
Регистрация: 18.01.2011
Сообщений: 35
25.01.2011, 19:05 #8
юпс....не тот код выкинул...вечером исправлюсь когда с компа буду..

Добавлено через 7 часов 14 минут
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
#include <iostream>
 
using namespace std;
 
class Array
{
    float *arr;
    int count;
public:
    Array() {arr = NULL; count = 0;}
    Array(int n)  //ввод элементов массива можно сделать как рандом, так и задавать с клавиатуры
    {
        count = n;
        arr = new float[count];
        for (int i = 0; i < count; i++)
            arr[i] = i;
    }
    void operator + (const float&);
    void operator * (const float&);
    Array operator = (Array);
    float operator [] (int);
    void show();
};
 
void Array :: operator + (const float &a)
{
    for (int i = 0; i < count; i++)
        arr[i] += a;
}
 
void Array :: operator * (const float &a)
{
    for (int i = 0; i < count; i++)
        arr[i] *= a;
}
 
Array Array :: operator = (Array A)
{
    count = A.count;
    arr = new float [count];
    for (int i = 0; i < count; i++)
        arr[i] = A.arr[i];
    return *this;
}
 
float Array :: operator[] (int a)
{
    if (a < 0)
        a = -a;
    if (a > count)
    {
        cout << "\nВыход за границы массива!!!\n";
        return -1;
    }
    return arr[a];
}
 
void Array :: show()
{
    for (int i = 0; i < count; i++)
        cout << arr[i] << " ";
}
 
int main()
{
    setlocale(2, ".1251");
    Array A(20), B;
    cout << "Изначально массив А таков: \n";
    A.show();
    while (true)
    {
        cout << "\n1. Проверка оператора [].\n";
        cout << "2. Проверка оператора +.\n";
        cout << "3. Проверка оператора *.\n";
        cout << "4. Проверка оператора =.\n";
        cout << "5. Выход.\n";
        int choise, n;
        cin >> choise;
        switch (choise)
        {
        case 1:
            cout << "\nВведите индекс элемента массива: ";
            cin >> n;
            cout << "\n" <<  n << "й элемент массива это " << A[n];
            break;
        case 2:
            cout << "\nВведите число, с которым хотите сложить все элементы массива: ";
            cin >> n;
            A + n;
            cout << "\nМассив стал таким: \n";
            A.show();
            break;
        case 3:
            cout << "\nВведите число, с которым умножить все элементы массива: ";
            cin >> n;
            A * n;
            cout << "\nМассив стал таким: \n";
            A.show();
            break;
        case 4:
            cout << "\nИзначально массив В равен:\n";
            B.show();
            B = A;
            cout << "\nПосле операции В = А, массив В стал:\n";
            B.show();
            break;
        case 5:
            cout << "\nВы выбрали выход, до свидания!\n";
            return 0;
        default:
            cout << "\nТакого пункта нет, попробуйте еще раз.\n";
            break;
        }
    }
    return 0;
}
код исправил...получил отлично за него.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
25.01.2011, 22:48 #9
Цитата Сообщение от mifeliz Посмотреть сообщение
код исправил...получил отлично за него.
На самом деле этот код, яркий пример того, как делать не надо...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2011, 22:48
Привет! Вот еще темы с ответами:

Вопрос по Классам... - C++
#include &lt;iostream&gt; using std::cout; using std::endl; class GradeBook { public: void displayMessage()

Задача по классам.с++ - C++
Задание 1 Разработать пользовательский тип (класс) «матрица целых чисел». Класс должен содержать: – все нужные поля, исходя из...

Вопрос по классам - C++
Вообщем есть два класса, TTriangular и TPoint. В TTriangular есть метод, который должен вводить координаты заданной точки. В TPoint...

Программа по классам - C++
Всем доброго времени суток, обращаюсь с просьбой помощи! = ) Нужно написать программу в которой: 1) Создать класс 2) Создать...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
25.01.2011, 22:48
Ответ Создать тему
Опции темы

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