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

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

Войти
Регистрация
Восстановить пароль
 
LORDVIEW
2 / 2 / 0
Регистрация: 20.04.2012
Сообщений: 54
#1

Перенагрузка масивов - C++

01.04.2013, 18:22. Просмотров 281. Ответов 6
Метки нет (Все метки)

Перегрузить масив в виде очереди.Выручайте
АДТ - черга. Додатково перевантажити наступні операції:
+ - додати елемент;
- - витягнути елемент;
bооl() - перевірка, чи порожня черга.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 18:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перенагрузка масивов (C++):

Перенагрузка функции - C++
Надо написать с помощю перегагрузки такую задачу: Нахождение максимума двух, трех, четырех целых чисел. во что я написал #include...

Объединение масивов - C++
Итак есть задание:" n- количество масивов какие нужно обеденить, a- масив указателей на масивы которые нужно нужно обьеденить size -...

Сортировка масивов - C++
Посмотрите пжл что не так# include <iostream> using namespace std; int main() {int a={10,12,6,4,1,8,17,2,9}; int c,is; for(int...

Обработка масивов - C++
Задана матрица размерностью N * M . Поменять местами строки матрицы по алгоритму : 1 с последним , 2 с предпоследним и тд . в окрашенной...

Сортировка масивов - C++
Сабж. Не могу додуматься до решения, особенно вторая задача. 1. Организуйте массив, содержащий 20 различных целых чисел. После этого 10...

Обработка одномерных масивов. - C++
1) Найти максимальный элемент массива A. 2) Найти среднее арифметическое элементов массива В. A (25), B (30) Метод сортировки...

6
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
01.04.2013, 18:35 #2
Во-первых, нет такого понятия в С++, как "перенагрузка". Есть "перегрузка".
Во-вторых, к массивам это понятие не применимо. Перегружают операторы и только для не встроеных (пользовательских) типов данных!

Это весь текст задания?
0
LORDVIEW
2 / 2 / 0
Регистрация: 20.04.2012
Сообщений: 54
01.04.2013, 18:37  [ТС] #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
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
147
148
149
150
151
152
153
154
155
#include<iostream>
#include<Windows.h>
#include<stack>
using namespace std;
#include <iostream>
#include <string.h>
#include <time.h>
using namespace std;
 
class Queue
{
 // Очередь
 int * Wait;
 // Максимальный размер очереди
 int maxturn;
 // Текущий размер очереди
 int timeturn;
 
public:
 // Конструктор
 Queue(int m);
 
 //Деструктор
 ~Queue();
 
 // Добавление элемента
 void Add(int c); 
 
 // Извлечение элемента
 int Extract();        
 
 // Очистка очереди
 void Clear();    
 
 // Проверка существования элементов в очереди
 bool IsEmpty();    
 
 // Проверка на переполнение очереди
 bool IsFull();     
 
 // Количество элементов в очереди
 int GetCount();   
 
 //демонстрация очереди
 void Show();
};
 
void Queue::Show(){
 cout<<"\n-------------------------------------\n";
 //демонстрация очереди
 for(int i=0;i<timeturn;i++){
 cout<<Wait[i]<<" ";
 }
 cout<<"\n-------------------------------------\n";
}
 
Queue::~Queue()
{
 //удаление очереди
 delete[]Wait;
}
 
Queue::Queue(int m)
{
 //получаем размер
 maxturn=m;
 //создаем очередь
 Wait=new int[timeturn];
 // Изначально очередь пуста
 timeturn = 0;
}
 
void Queue::Clear()
{
 // Эффективная "очистка" очереди 
 timeturn = 0;
}
 
bool Queue::IsEmpty()
{
 // Пуст?
 return timeturn == 0;
}
 
bool Queue::IsFull()
{
 // Полон?
 return timeturn == maxturn;
}
 
int Queue::GetCount()
{
 // Количество присутствующих в стеке элементов
 return timeturn;
}
 
void Queue::Add(int c)
{
    
 // Если в очереди есть, то увеличиваем количество
 // значений и вставляем новый элемент
 if(!IsFull())
 Wait[timeturn++] = c;
 
}
 
int Queue::Extract()
{
    cout<<"Видалено елемент"<<endl;
 // Если в очереди есть элементы, то возвращаем тот, 
 // который вошел первым и сдвигаем очередь 
 if(!IsEmpty()){
 //запомнить первый
 int temp=Wait[0];
 
 //сдвинуть все элементы
 for(int i=1;i<timeturn;i++)
 Wait[i-1]=Wait[i];
 
 //уменьшить количество
 timeturn--;
 
 //вернуть первый(нулевой)
 return temp;
 }
 
 else // Если в стеке элементов нет
     
 return -1;
}
 
void main()
{
  SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 //создание очереди
 Queue QU(25);
 
 //заполнение части элементов
 for(int i=0;i<5;i++){
 QU.Add(rand()%50);
 }
 //показ очереди
 QU.Show();
 
 //извлечение элемента
 QU.Extract();
 
 //показ очереди
 QU.Show();
 QU.Add(5);
 cout<<"Новий елемент в черзi"<<endl;
  QU.Show();
 system("pause");
}
Как сделать перегрузку на добавление,удаление,проверку на пустоту
0
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
01.04.2013, 18:55 #4
Для перегрузки сложения нужно добавить следующую функцию в класс:

C++
1
2
3
4
void operator + (int element)
{
   this->Add(element);
}
Работает следующим образом:
C++
1
QU + 10;
- добавляет число "десять" в очередь!

Для проверки на пустоту нужно добавить функцию:

C++
1
2
3
4
bool operator () (void)
{
   return this->IsEmpty();
}
Как работает, думаю, понятно уже!

А вот перегрузка вычитания в данном контексте невозможна (вернее бессмысленна). Потому как оно оперирует двумя аргументами, а для выборки из очереди не нужно указывать никаких аргументов.
1
supra7sky
15 / 15 / 1
Регистрация: 07.02.2013
Сообщений: 123
01.04.2013, 18:59 #5
Вот еще код с некоторыми перегрузками операторов

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>
using namespace std;
 
class Safe
{
    int size;     //Размер массива
    int *arr;   //Указатель для хранения массива
    int how_add; //Сколько было добавлено памяти
public:
    Safe (int SIZE); //Конструктор с параметром
    Safe (const Safe &object); //Конструктор копий
    ~Safe ();        //Деструктор
    void Set_to (); //Дополнение массива значениями
    int View (char flag[8]);  //Получение информации с private переменных
    int &operator[] (int i); //Перегрузка оператора индексирования + контроль границ
    friend ostream &operator<< (ostream &stream, Safe &object);  //Вывод всего массива
    friend istream &operator>> (istream &stream, Safe &object); //Заполнение массива с начала
    friend Safe &operator+ (Safe &object, int ADD);  //Добавление размера
    friend Safe &operator- (Safe &object, int ROB); //Уменьшение размера
};
 
Safe::Safe (int SIZE) //Конструктор с параметром
{
    size = SIZE;
    arr = new int[size];
    cout << '\a';
}
Safe::Safe (const Safe &object) //Конструктор копий
{
    size = object.size;
    arr = new int[size];
    for (int i = 0; i < object.size; i++)
        arr[i] = object.arr[i];
    how_add = object.how_add;
}
Safe::~Safe () //Деструктор
{
    delete[] arr;    cout << '\a' << '\a';
}
 
void Safe::Set_to () //Дополнение массива значениями
{
    for (int i = size - how_add; i < size; i++)
        cin >> arr[i];
}
int  Safe::View (char flag[8]) //Получение информации с private переменных
{
    if (flag == "size" )        return size;        
    else if (flag == "how_add") return how_add;
    else return 0;
}
 
int &Safe::operator[] (int i) //Перегрузка оператора индексирования + контроль границ
{
    if (i < 0 || i > size-1)
        cout << endl << "Warning! Exceeded! " << endl;
    else return arr[i];
}
ostream &operator<< (ostream &stream, Safe &object) //Вывод всего массива
{
    for (int i = 0; i < object.size; i++)
        stream << object[i] << " ";
    return stream;
}
istream &operator>> (istream &stream, Safe &object) //Заполнение массива с начала
{
    for (int i = 0; i < object.size; i++)
        cin >> object[i];
    return stream;
}
Safe &operator+ (Safe &object, int ADD) //Добавление размера
{
    int *temp = object.arr;
    object.arr = new int[object.size+ADD];
    for (int i = 0; i < object.size; i++)
        object.arr[i] = temp[i];
    object.size += ADD;
    object.how_add = ADD;
    delete[] temp;
    return object;
}
Safe &operator- (Safe &object, int ROB) //Уменьшение размера
{
    int *temp = object.arr;
    object.arr = new int[object.size-ROB];
    for (int i = 0; i < object.size-ROB; i++)
        object.arr[i] = temp[i];
    object.size -= ROB;
    delete[] temp;
    return object;
}
 
int main ()
{   setlocale(LC_ALL, "Russian");
 
    int SIZE, add;
    char choice = 'y', way;
 
    cout << "Размер массива: ";     cin  >> SIZE;
    Safe mass(SIZE); //Объект класса Safe – массив размера SIZE
 
    cout << "Заполнение: ";     cin >> mass;
    cout << "Просмотр массива: "        << mass << endl;
    while (true)
    {
        cout << endl << "Добавить размер: ";   cin >> add;   
        mass+add; //Увеличение размера массива. Перегруженный оператор +int
 
        again:
        cout << "Заполнение. С начала[b] или продолжать[c] : ";
        cin >> way;
        if (way == 'c')  { cout << "Продолжение: ";     mass.Set_to(); }
        else if (way == 'b') { cout << "С начала: ";        cin >> mass;   }
        else goto again;
 
        cout << "Обновленный массив: " << mass           << endl;
        cout << "Размер: "          << mass.View("size")     << endl;
        cout << "Сколько добавили: "   << mass.View("how_add") << endl;
        cout << "Continue? [y/n]: ";      cin >> choice;
        if (choice == 'y') continue;
        else break;
    }
    system("pause");
    return 0;
}
0
LORDVIEW
2 / 2 / 0
Регистрация: 20.04.2012
Сообщений: 54
01.04.2013, 19:01  [ТС] #6
Цитата Сообщение от D.E.S.P.E.R.O. Посмотреть сообщение
Для перегрузки сложения нужно добавить следующую функцию в класс:

C++
1
2
3
4
void operator + (int element)
{
   this->Add(element);
}
Работает следующим образом:
C++
1
QU + 10;
- добавляет число "десять" в очередь!

Для проверки на пустоту нужно добавить функцию:

C++
1
2
3
4
bool operator () (void)
{
   return this->IsEmpty();
}
Как работает, думаю, понятно уже!

А вот перегрузка вычитания в данном контексте невозможна (вернее бессмысленна). Потому как оно оперирует двумя аргументами, а для выборки из очереди не нужно указывать никаких аргументов.
Спосибо +1 реп
0
D.E.S.P.E.R.O.
9 / 9 / 0
Регистрация: 12.03.2009
Сообщений: 110
Завершенные тесты: 1
01.04.2013, 19:07 #7
Кстати, в коде есть ошибки... Если это уже чистовик, так сказать , то обрати внимание, что в конструкторе класса выделяется память под неинициализированую переменную!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Queue::Queue(int m)
{
   // Получаем размер 
   maxturn = m;
   
   // Переменная timeturn не инициализирована
   Wait = new int[timeturn];
 
   // Правильный вариант
   Wait = new int[m];
   
   // Изначально очередь пуста
   timeturn = 0;
}
0
01.04.2013, 19:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 19:07
Привет! Вот еще темы с ответами:

Програма на масив масивов - C++
Помогите написать задачу, очень надо... Я в с++ вааше 0... Ввести прямоугольною матрицу целых чисел. Напечатать номера строк матрицы, ...

Сортировка двух масивов с++ - C++
Помогите разработать програму, которая прописовает все числа, которые не повторяються с масива А(n) в масив В(n) и печатает масив В(n) по 5...

Обработка двумерных масивов - C++
Задана матрица А(n,n). Определить максимальный элемент среди элементов матрицы, расположенных выше главной диагонали, и минимальный...

Ошибки при обробке масивов - C++
Решил задачу, но есть оршибки.#include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; float m(float r) { float z; int S=0,...


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

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

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