Метод, сбрасывающий заданный бит вектор - C (СИ)

Узнай цену своей работы

Формулировка задачи:

помогите написать последний метод(метод,сбрасывающий заданный бит вектор).Код программы:
#include "BitVector.h"
 
BitVector::BitVector()
{
    size = 0;
    n = 0;
        mask = 1;
}
 
BitVector::BitVector(int num_bits)
{
    size = num_bits;
    n = size/(sizeof(unsigned long) * 8);
    if (size % (sizeof(unsigned long) * 8) != 0)
                n++;
    data = new unsigned long[n];
    for (int i = 0; i < n; i++)
        data[i] = 0;
}
 
BitVector::BitVector(const BitVector &v)
{
    size = v.size;
    n = v.n;
    data = new unsigned long[n];
    for (int i = 0; i < n; i++)
        data[i] = v.data[i];
}
 
BitVector::~BitVector()
{
    if (size > 0)
        delete []data;
}

BitVector& BitVector::operator=(const BitVector &v)
{
    if ( &v == this )
                return *this;
    if (size > 0)
                delete []data;
    size = v.size;
    n = v.n;
    data = new unsigned long[n];
    for (int i = 0; i < n; i++)
        data[i] = v.data[i];
    return *this;
}
 
bool BitVector::operator==(const BitVector &v)
{
    if (size != v.size || n != v.n)
        return false;
    for (int i = 0; i < n; i++)
        if (data[i] != v.data[i])
            return false;
    return true;
}
 
istream& operator>>(istream &s, BitVector &v)
{

    if (v.size == 0)
    {
        s.setstate(ios::failbit);
        return s;
    }
    for (int i = 0; i < v.size; i++)
    {
        char c;
        unsigned long mask = 1;
        s >> c;
        if (c != '0' && c != '1')
        {
            s.setstate(ios::failbit);
            return s;
        }
        if (c == '1')
            v.data[i/(sizeof(unsigned long) * 8)] |= (mask << ((sizeof(unsigned long) * 8) - 1 - i % (sizeof(unsigned long) * 8)));
    }
    return s;
}
 
ostream& operator<<(ostream &s, const BitVector &v)
{
    unsigned long mask;
    int g = v.size % (sizeof(unsigned long) * 8);
    int t = (g == 0)? v.n : (v.n-1);
    for (int i = 0; i < t; i++)
    {
        for (int k = 0; k < (sizeof(unsigned long) * 8); k++)
        {
            mask = 1 << ((sizeof(unsigned long) * 8) - k - 1);
            if (v.data[i] & mask)
                s << 1;
            else
                s << 0;
        }
    }
    if (g != 0)
        for (int k = 0; k < g; k++)
        {
            mask = 1 << ((sizeof(unsigned long) * 8) - k - 1);
            if (v.data[v.n-1] & mask)
                s << 1;
            else
                s << 0;
        }
    return s;
}
 
BitVector BitVector::ResetBit(int bit_number);   //метод,сбрасывающий заданный бит вектор//
{
???????????????????????????????
}
    
    return *this;
}
Зарание Спасибо

Решение задачи: «Метод, сбрасывающий заданный бит вектор»

textual
Листинг программы
#include <iostream>
using namespace std;
 
class BitVector
{
    private:
    int size;
    int n;
    unsigned long *data;
    // add
    unsigned long mask;
 
    public:
    BitVector();                                                //конструктор инициализации
    BitVector(int num_bits);                                    //тоже конструктор инициализации только для полей unsigned и какой то хитрый
    BitVector(const BitVector &v);                              //конструктор копирования, чтобы не работать с копиями кажется
    ~BitVector();                                               //деструктор
    BitVector& operator=(const BitVector &v);                   //перегрузка оператора присваивания
    bool operator == (const BitVector &v) ;                //перегрузка оператора сравнения
    friend istream& operator>>(istream &s, BitVector &v);       //перегрузка оператора потокового ввода
    friend ostream& operator<<(ostream &s, const BitVector &v); //перегрузка оператора потокового вывода
    BitVector ResetBit(int bit_number);
};

Объяснение кода листинга программы

В данном коде представлен класс BitVector, который предназначен для работы с битовыми векторами. Ниже представлены основные элементы класса и их функции:

  1. size - размер битового вектора
  2. n - количество битов в векторе
  3. data - указатель на массив, в котором хранятся данные битового вектора
  4. mask - маска, используемая для операций с битами Методы класса BitVector:
  5. BitVector() - конструктор инициализации, который создает экземпляр класса BitVector с заданным размером
  6. BitVector(int num_bits) - конструктор инициализации, который создает экземпляр класса BitVector с заданным количеством битов
  7. BitVector(const BitVector &v) - конструктор копирования, который создает экземпляр класса BitVector, копируя данные из другого экземпляра
  8. ~BitVector() - деструктор, который освобождает память, занятую экземпляром класса BitVector
  9. BitVector& operator=(const BitVector &v) - перегрузка оператора присваивания, которая позволяет копировать данные из другого экземпляра класса BitVector
  10. bool operator == (const BitVector &v) - перегрузка оператора сравнения, которая позволяет сравнивать два экземпляра класса BitVector
  11. friend istream& operator>>(istream &s, BitVector &v) - перегрузка оператора потокового ввода, которая позволяет считывать данные из потока в экземпляр класса BitVector
  12. friend ostream& operator<<(ostream &s, const BitVector &v) - перегрузка оператора потокового вывода, которая позволяет выводить данные из экземпляра класса BitVector в поток
  13. BitVector ResetBit(int bit_number) - метод, который сбрасывает (устанавливает в 0) бит в заданной позиции Таким образом, данный код представляет собой реализацию класса BitVector для работы с битовыми векторами.

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы