Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.15 Кб
Скачать
#include <iostream>
#include <windows.h>
using namespace std;

class CircularBuffer {
private:
    static const int SIZE = 1024;
    double buffer[SIZE];
    int head, tail, count;
    
public:
    CircularBuffer() {
        head = tail = count = 0;
        cout << "Создан кольцевой буфер размером " << SIZE << " элементов" << endl;
    }
    
    void init() {
        head = tail = count = 0;
        cout << "Буфер инициализирован" << endl;
    }
    
    bool add(double value) {
        if (count == SIZE) {
            cout << "Ошибка: буфер полон!" << endl;
            return false;
        }
        
        buffer[tail] = value;
        tail = (tail + 1) % SIZE;
        count++;
        cout << "Добавлен элемент: " << value << endl;
        return true;
    }
    
    bool remove(double &value) {
        if (count == 0) {
            cout << "Ошибка: буфер пуст!" << endl;
            return false;
        }
        
        value = buffer[head];
        head = (head + 1) % SIZE;
        count--;
        cout << "Извлечен элемент: " << value << endl;
        return true;
    }
    
    int freeSpace() {
        return SIZE - count;
    }
    
    int occupiedSpace() {
        return count;
    }
    
    void printStatus() {
        cout << "Занято места: " << occupiedSpace() << endl;
        cout << "Свободно места: " << freeSpace() << endl;
    }
};

int main() {
    SetConsoleOutputCP(65001);
    
    CircularBuffer cb;
    
    cout << "=== Тестирование кольцевого буфера ===" << endl;
    
    // Добавление элементов
    for (int i = 0; i < 5; i++) {
        cb.add(i * 1.5);
    }
    
    cb.printStatus();
    
    cout << "\nИзвлечение элементов:" << endl;
    double value;
    while (cb.remove(value)) {
        // Элементы извлекаются в цикле
    }
    
    cb.printStatus();
    
    return 0;
}
Соседние файлы в папке Лаба1