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

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

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

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

C++ Вопрос по классам
книга по классам C++
учебник по классам C++
C++ Вопрос по классам
C++ лабораторная по классам
Вопрос по Классам... C++
C++ Задача по классам.с++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vandris
 Аватар для Vandris
63 / 63 / 13
Регистрация: 19.01.2011
Сообщений: 90
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;
}
Shnejder
0 / 0 / 0
Регистрация: 22.01.2011
Сообщений: 3
23.01.2011, 08:54  [ТС]     Лабораторные по классам #3
спасибо, очень выручили. Попробую завтра у препода выяснить.
mifeliz
 Аватар для mifeliz
2 / 2 / 0
Регистрация: 18.01.2011
Сообщений: 35
24.01.2011, 11:21     Лабораторные по классам #4
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Мне надо сдать через 7 часов вот это...Ни у кого нету готового решения? Просто тут рассмотрели лабу 1 а мне лаба 2 нада...задание точно такое же
rangerx
1918 / 1527 / 139
Регистрация: 31.05.2009
Сообщений: 2,886
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_;
        }
};
 
// ...
mifeliz
 Аватар для 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.: Тема решена, думаю стоит закрыь темку что бы больше такие как я не поднимали её.
rangerx
1918 / 1527 / 139
Регистрация: 31.05.2009
Сообщений: 2,886
24.01.2011, 22:40     Лабораторные по классам #7
Цитата Сообщение от mifeliz Посмотреть сообщение
rangerx, Спасибо но твоя работа не подошла. Я защитил на отлично по этому скрипту:
Так это же и есть мой исходник...
mifeliz
 Аватар для 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;
}
код исправил...получил отлично за него.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2011, 22:48     Лабораторные по классам
Еще ссылки по теме:

C++ Вопрос по классам
C++ Литература по классам
C++ от структур к классам
Программа по классам C++
C++ Программа по классам

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

Или воспользуйтесь поиском по форуму:
rangerx
1918 / 1527 / 139
Регистрация: 31.05.2009
Сообщений: 2,886
25.01.2011, 22:48     Лабораторные по классам #9
Цитата Сообщение от mifeliz Посмотреть сообщение
код исправил...получил отлично за него.
На самом деле этот код, яркий пример того, как делать не надо...
Yandex
Объявления
25.01.2011, 22:48     Лабораторные по классам
Ответ Создать тему
Опции темы

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