Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
0 / 0 / 1
Регистрация: 31.01.2014
Сообщений: 12
1

Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно иметь следующие

25.02.2014, 13:05. Просмотров 2523. Ответов 1
Метки нет (Все метки)

1. Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как
динамический массив. Для этого определение класса должно иметь следующие поля:
• указатель на начало массива;
• максимальный размер массива;
• текущий размер массива.
2. Определить и реализовать в классе конструкторы (и конструктор копирования), деструктор, функции Input() (ввод склавиатуры) и Print() (вывод на экран), перегрузить операцию присваивания.
3. Написать программу тестирования класса и выполнить тестирование.
4. Дополнить определение класса заданными перегруженными операциями ( в соответствии с
вариантом).
5. Реализовать эти операции. Выполнить тестирование.
АТД - множество с элементами типа char. Дополнительно перегрузить следующие
операции:
«-» - удалить элемент из множества (типа set-char);
«*» - пересечение множеств (дружественная функция);
«<» - сравнение множеств(дружественная функция ).
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>
using namespace std;
 
class SetChar{
private:
    char *arr;
    int maxSize;
    int size;
public:
    SetChar(){
        maxSize = 0;
        size = 0;
        arr = NULL;
    }
    SetChar(int maxSize){
        this->maxSize = maxSize;
        size = 0;
        arr = new char[maxSize];
    }
    SetChar(const SetChar &setchar){
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
    }
    ~SetChar(){
        delete [] arr;
    }
    
    bool in(char item){
        for(int i = 0; i < size; i++)
            if(arr[i]==item) return true;
        return false;
    }
    
    SetChar &operator += (char item){
        if(in(item)==false && size < maxSize){
            arr[size] = item;
            size++;
        }
        return *this;
    }
 
    SetChar &operator = (SetChar &setchar){
        if(this == &setchar) return *this;
        if(arr != NULL) delete [] arr;
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
        return *this;
    }
 
    bool operator == (SetChar &setchar){
        if(size != setchar.size) return false;
        // предварительно отсортировать arr и setchar.arr
        for(int i = 0; i < size; i++)
            if(arr[i]!=setchar.arr[i]) return false;
        return true;
    }
 
    void input(int size){
        if(size > maxSize) return ;
        this->size = size;
        int i = 0;
        while(i < size){
            char item = (33 + rand()%100);
        //  cin >> item;
            if(!in(item)) {
                arr[i] = item;
                i++;
            }
        }   
    }
    
    void print(){
        for(int i = 0; i < size; i++)
            cout << arr[i] << " ";
        cout << endl;
    }
    friend SetChar operator + (SetChar &s1, SetChar &s2);
    friend SetChar operator * (SetChar &s1, SetChar &s2);
};
 
SetChar operator + (SetChar &s1, SetChar &s2){
    int maxTotalSize = s1.maxSize + s2.maxSize;
    SetChar result(maxTotalSize);   
    for(int i = 0; i < s1.size; i++){
        result.arr[i] = s1.arr[i];
    }
    result.size = s1.size;
    for(int i = 0; i < s2.size; i++){
        result += s2.arr[i];
    }
    return result;
}
 
SetChar operator * (SetChar &s1, SetChar &s2){
    int mSize;
    if(s1.maxSize > s2.maxSize) mSize = s1.maxSize; else mSize = s2.maxSize;
    SetChar result(mSize);
    for(int i = 0; i < s1.size; i++){
        for(int j = 0 ; j < s2.size; j++)
            if(s1.arr[i] == s2.arr[j])
                result += s1.arr[i];
    }
    return result;
}
 
int main(){
    srand(5);
    SetChar st(10);
    st.input(5);
    st.print();
 
    SetChar st2(10);
    st2.input(5);
    st2.print();
    
    if(st == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st1 = st2;
    if(st1 == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st3;
    st3 = st + st2;
    st3.print();
 
    
  
    st3 += 't';
 
 
    st3.print();
 
    SetChar st4;
    st4 = st*st2;
    cout <<"--------"<< endl;
    st4.print();
    system("pause");
    return 0;
}
Желательно с комментариями) Я просто не понимаю эту тему, хочется вникнуть на примере решённой задачи
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2014, 13:05
Ответы с готовыми решениями:

Реализовать класс абстрактного типа данных "Множество"
Доброго вечера! Требуется помощь с задачей. Никак не могу понять, что не так. Может в указателях...

Динамический массив абстрактного класса
Никак не могу понять, почему память не освобождается. Подскажите в чем ошибка пожалуйста. #ifndef...

Реализовать класс строки CMyString и приложение для тестирования этого класса
Реализовать класс строки CMyString и приложение для тестирования этого класса. Класс должен иметь...

Реализовать класс строки CMyString и приложение для тестирования этого класса
Реализовать класс строки CMyString и приложение для тестирования этого класса. Класс должен иметь...

1
Просто Лис
Эксперт Python
3853 / 2345 / 831
Регистрация: 17.05.2012
Сообщений: 7,150
Записей в блоге: 9
01.03.2014, 22:16 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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <iostream>
using namespace std;
 
class SetChar{// класс
private://приватные, закрытые поля класса
    char *arr; //указатель на начало массива;
    int maxSize; //максимальный размер массива;
    int size; //текущий размер массива.
public://открытые поля и методы класса
    SetChar(){ //конструктор по умолчанию
        maxSize = 0; //присваивание значений полям класса
        size = 0;
        arr = NULL;
    }
    SetChar(int maxSize){//другой конструктор с параметрами
        this->maxSize = maxSize;
        size = 0;
        arr = new char[maxSize];//создание массива максимальной длины
    }
    SetChar(const SetChar &setchar){
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
    }
    ~SetChar(){//деструктор
        delete [] arr;//освобождение памяти из под массива
    }
    
    bool in(char item){
        for(int i = 0; i < size; i++)
            if(arr[i]==item) return true;
        return false;
    }
    
    SetChar &operator += (char item){
        if(in(item)==false && size < maxSize){
            arr[size] = item;
            size++;
        }
        return *this;
    }
 
    SetChar &operator = (SetChar &setchar){
        if(this == &setchar) return *this;
        if(arr != NULL) delete [] arr;
        maxSize = setchar.maxSize;
        arr = new char[maxSize];
        size = setchar.size;
        for(int i = 0; i < size; i++)
            arr[i] = setchar.arr[i];
        return *this;
    }
 
    bool operator == (SetChar &setchar){
        if(size != setchar.size) return false;
        // предварительно отсортировать arr и setchar.arr
        for(int i = 0; i < size; i++)
            if(arr[i]!=setchar.arr[i]) return false;
        return true;
    }
 
    void input(int size){
        if(size > maxSize) return ;
        this->size = size;
        int i = 0;
        while(i < size){
            char item = (33 + rand()%100);
        //  cin >> item;
            if(!in(item)) {
                arr[i] = item;
                i++;
            }
        }   
    }
    
    void print(){
        for(int i = 0; i < size; i++)
            cout << arr[i] << " ";
        cout << endl;
    }
    friend SetChar operator + (SetChar &s1, SetChar &s2);
    friend SetChar operator * (SetChar &s1, SetChar &s2);
};
 
SetChar operator + (SetChar &s1, SetChar &s2){
    int maxTotalSize = s1.maxSize + s2.maxSize;
    SetChar result(maxTotalSize);   
    for(int i = 0; i < s1.size; i++){
        result.arr[i] = s1.arr[i];
    }
    result.size = s1.size;
    for(int i = 0; i < s2.size; i++){
        result += s2.arr[i];
    }
    return result;
}
 
SetChar operator * (SetChar &s1, SetChar &s2){
    int mSize;
    if(s1.maxSize > s2.maxSize) mSize = s1.maxSize; else mSize = s2.maxSize;
    SetChar result(mSize);
    for(int i = 0; i < s1.size; i++){
        for(int j = 0 ; j < s2.size; j++)
            if(s1.arr[i] == s2.arr[j])
                result += s1.arr[i];
    }
    return result;
}
 
int main(){
    srand(5);
    SetChar st(10);
    st.input(5);
    st.print();
 
    SetChar st2(10);
    st2.input(5);
    st2.print();
    
    if(st == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st1 = st2;
    if(st1 == st2) cout << "set equal" << endl;
    else cout << "set no equal" << endl;
 
    SetChar st3;
    st3 = st + st2;
    st3.print();
 
    
  
    st3 += 't';
 
 
    st3.print();
 
    SetChar st4;
    st4 = st*st2;
    cout <<"--------"<< endl;
    st4.print();
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2014, 22:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выражение должно иметь тип класса, как исправить?
Ошибку выдает в строчке кода bool kill (Rplane x, Uplane y){ if(x.set &lt; y.set) return...

Создайте АТД class, в области данных которого содержится динамический массив
Задание: Создайте АТД class в области данных которого содержится динамический массив типа float и...

Определить класс для работы с одномерным массивом типа double, разработав следующие элементы класса. Поля: - double []
Определить класс для работы с одномерным массивом типа double, разработав следующие элементы...

Заполнить динамический массив случайными числами и реализовать функции работы с массивом согласно условию
Всем доброго времени суток!) Уважаемые знатоки и пользователи, помогите, пожалуйста, написать...

Как правильно записывать в динамический массив типа класса обьекты? вот банальный пример
#pragma once #include &quot;iostream&quot; namespace Program { class Book { typedef unsigned int...

Динамический массив для хранения данных в переменной пользовательского типа
С пользовательским типом вродь разобралась, а вот с динамическим массивом не получается. В справках...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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