Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
6 / 6 / 0
Регистрация: 23.05.2013
Сообщений: 33
1

Создать класс "кольцевой буфер"

11.08.2016, 00:05. Показов 14760. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кольцевой буфер емкостью 1024 вещественных чисел. Доступ к элементам буфера – как к элементам очереди. Обязательны функции-члены класса для инициализации буфера, добавления и удаления элемента, определения количества свободного и занятого пространства в буфере. Описать класс и продемонстрировать его использование.
• GetFreeSpace() возвращает свободное место
• GetOccupiedSpace() возвращает занятое место
• void Add(int val) метод добавления элемента в буффер.
• int Get() метод достающий элемент из очереди
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
#include <iostream>
 
using namespace std;
 
class CircularBuffer {
private:
    int*    _data;          // Хранимые данные.
    int     _size;          // Размер циклического буффера.
    int     _freeSpace;     // Свободное метос в буффере.
    int     _occupiedSpace; // Занятое мето.
 
public:
    CircularBuffer();
    ~CircularBuffer();
 
    // Метод, возвращающий свободное место.
    int GetFreeSpace()      { return _size - _occupiedSpace; }
 
    // Метод, возвращающий занятое место.
    int GetOccupiedSpace()  { return _occupiedSpace; }
 
    // Метод добавления элемента в буффер.
    void Add(int val);
 
    // Метод достающий элемент из очереди (с последующим его выталкиванием).
    int Get();
};
 
int main(int argc, char **argv)
{
    // Создаем экземпляр класса.
    CircularBuffer c;
    int count = 10;
 
    // Заполним очередь от 1 до 10 с выводом текущего стояния буффера.
    for (int i = 1; i <= count; ++i) {
        c.Add(i);
        cout << "Fress space: " << c.GetFreeSpace() << "; Occupied: " << c.GetOccupiedSpace() << endl;
    }
 
    // Очистим очередь от 1 до 10 с выводом текущего стояния буффера.
    for (int i = 0; i < count; ++i) {
        cout << "Get next: " << c.Get() << endl;
        cout << "Fress space: " << c.GetFreeSpace() << "; Occupied: " << c.GetOccupiedSpace() << endl;
    }
 
    return 0;
}
 
CircularBuffer::CircularBuffer()
{
    // Инициализация мета под буффер.
    _size = 1024;
    _data = new int[_size];
    // Сборс внутреннего состояния всех полей.
    _freeSpace = _size;
    _occupiedSpace = 0;
}
 
CircularBuffer::~CircularBuffer()
{ delete[] _data; } // Не забываем осободить выделенную в конструкторе память.
 
void CircularBuffer::Add(int val)
{ _data[_occupiedSpace++ % _size] = val; }  // Устанавивливаем соотв. элемент согласно правилу заполнения циклического буффера.
 
int CircularBuffer::Get()
{
    // Проверка на пустоту буффера.
    if (_occupiedSpace == 0)
        throw "Buffer is empty";    // Борсаем исключение, в случае попытки вытолкнуть из пустой очереди.
 
    int res = _data[0]; // Запоминаем первостоящего в очереди.
    // Сдвигаем очередь на одну позицию вперед.
    for (int i = 1; i < _occupiedSpace; ++i)
        _data[i - 1] = _data[i];
    // Корректируем размер.
    --_occupiedSpace;
    return res; // Возвращаем первый элемент.
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2016, 00:05
Ответы с готовыми решениями:

Создать класс Кольцевой однонаправленный список
Создать класс Кольцевой_однонаправленный_список, используя для связи элементов списка указатели....

Кольцевой буфер
Здравствуйте, уважаемые пользователи. Мне поставили задачу, которую я один решить не могу и поэтому...

Что будет если добавить элемент в кольцевой буфер n+1 больший, чем размер буфера?
Что будет если добавить элемент в кольцевой буфер n+1 больший, чем размер буфера? Кольцевой...

Создать класса «однонаправленный кольцевой список».
Подскажите пожалуйста, в чем ошибка, так как компилятор ошибку не выдает, одна при запуске...

Создать кольцевой список. Удалить каждый K -ый элемент
После первого удаления нужного элемента всё хорошо, но если нужный элемент стоит в конце,то...

0
11.08.2016, 00:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2016, 00:05
Помогаю со студенческими работами здесь

Создать однонаправленный кольцевой список целых чисел
Помогите написать программу (СРОЧНО)!!! Тип списка:Однонаправленный кольцевой Элемент списка:...

Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ...
Создать класс Man (человек), с полями: имя, возраст, пол и вес. Определить методы задания имени,...

Создать абстрактный базовый класс Тройка чисел с виртуальными методами увеличения на 1. Создать производный класс Время со своими функциями
Здравствуйте, пожалуйста помогите написать код к данной задаче, с таким условием: Создать...

Создать базовый класс Человек. Создать производный класс Сотрудник, содержащий следующие данные
Создать базовый класс Человек. Каждый объект класса должен содержать следующие данные: ФИО, год...

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

Создать класс - данные - абстрактный базовый класс. Создать производные классы
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс....


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru