Skip to content

Commit

Permalink
Empty bitfield
Browse files Browse the repository at this point in the history
  • Loading branch information
Kirill Kornyakov committed Sep 3, 2015
1 parent 2772818 commit 17a852d
Show file tree
Hide file tree
Showing 13 changed files with 297 additions and 258 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 2.8)

set(PROJECT_NAME mp2)
set(PROJECT_NAME bitfield)
project(${PROJECT_NAME})

# TODO(Kornyakov): not sure if these lines are needed
Expand Down
9 changes: 0 additions & 9 deletions include/foo.hpp

This file was deleted.

31 changes: 0 additions & 31 deletions include/matrix.hpp

This file was deleted.

55 changes: 55 additions & 0 deletions include/tbitfield.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// tbitfield.h - Copyright (c) Гергель В.П. 07.05.2001
// Переработано для Microsoft Visual Studio 2008 Сысоевым А.В. (19.04.2015)
//
// Битовое поле

#ifndef __BITFIELD_H__
#define __BITFIELD_H__

#include <iostream>
//#include <stdlib.h>

using namespace std;

typedef unsigned int TELEM;

class TBitField
{
private:
int BitLen; // длина битового поля - макс. к-во битов
TELEM *pMem; // память для представления битового поля
int MemLen; // к-во эл-тов Мем для представления бит.поля

// методы реализации
int GetMemIndex(const int n) const; // индекс в pМем для бита n (#О2)
TELEM GetMemMask (const int n) const; // битовая маска для бита n (#О3)
public:
TBitField(int len); // (#О1)
TBitField(const TBitField &bf); // (#П1)
~TBitField(); // (#С)

// доступ к битам
int GetLength(void) const; // получить длину (к-во битов) (#О)
void SetBit(const int n); // установить бит (#О4)
void ClrBit(const int n); // очистить бит (#П2)
int GetBit(const int n) const; // получить значение бита (#Л1)

// битовые операции
int operator==(const TBitField &bf); // сравнение (#О5)
TBitField& operator=(const TBitField &bf); // присваивание (#П3)
TBitField operator|(const TBitField &bf); // операция "или" (#О6)
TBitField operator&(const TBitField &bf); // операция "и" (#Л2)
TBitField operator~(void); // отрицание (#С)

friend istream &operator>>(istream &istr, TBitField &bf); // (#О7)
friend ostream &operator<<(ostream &ostr, const TBitField &bf); // (#П4)
};
// Структура хранения битового поля
// бит.поле - набор битов с номерами от 0 до BitLen
// массив pМем рассматривается как последовательность MemLen элементов
// биты в эл-тах pМем нумеруются справа налево (от младших к старшим)
// О8 Л2 П4 С2

#endif
14 changes: 0 additions & 14 deletions samples/sample_foo.cpp

This file was deleted.

13 changes: 0 additions & 13 deletions samples/sample_matrix.cpp

This file was deleted.

94 changes: 94 additions & 0 deletions samples/sample_prime_numbers.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// main.cpp - Copyright (c) Гергель В.П. 20.08.2000
// Переработано для Microsoft Visual Studio 2008 Сысоевым А.В. (19.04.2015)
//
// Тестирование битового поля и множества

#include <iomanip>

// #define USE_SET // Использовать класс TSet,
// закоментировать, чтобы использовать битовое поле

#ifndef USE_SET // Использовать класс TBitField

#include "tbitfield.h"

int main()
{
int n, m, k, count;

setlocale(LC_ALL, "Russian");
cout << "Тестирование программ поддержки битового поля" << endl;
cout << " Решето Эратосфена" << endl;
cout << "Введите верхнюю границу целых значений - ";
cin >> n;
TBitField s(n + 1);
// заполнение множества
for (m = 2; m <= n; m++)
s.SetBit(m);
// проверка до sqrt(n) и удаление кратных
for (m = 2; m * m <= n; m++)
// если m в s, удаление кратных
if (s.GetBit(m))
for (k = 2 * m; k <= n; k += m)
if (s.GetBit(k))
s.ClrBit(k);
// оставшиеся в s элементы - простые числа
cout << endl << "Печать множества некратных чисел" << endl << s << endl;
cout << endl << "Печать простых чисел" << endl;
count = 0;
k = 1;
for (m = 2; m <= n; m++)
if (s.GetBit(m))
{
count++;
cout << setw(3) << m << " ";
if (k++ % 10 == 0)
cout << endl;
}
cout << endl;
cout << "В первых " << n << " числах " << count << " простых" << endl;
}
#else

#include "tset.h"

int main()
{
int n, m, k, count;

setlocale(LC_ALL, "Russian");
cout << "Тестирование программ поддержки множества" << endl;
cout << " Решето Эратосфена" << endl;
cout << "Введите верхнюю границу целых значений - ";
cin >> n;
TSet s(n + 1);
// заполнение множества
for (m = 2; m <= n; m++)
s.InsElem(m);
// проверка до sqrt(n) и удаление кратных
for (m = 2; m * m <= n; m++)
// если м в s, удаление кратных
if (s.IsMember(m))
for (k = 2 * m; k <= n; k += m)
if (s.IsMember(k))
s.DelElem(k);
// оставшиеся в s элементы - простые числа
cout << endl << "Печать множества некратных чисел" << endl << s << endl;
cout << endl << "Печать простых чисел" << endl;
count = 0;
k = 1;
for (m = 2; m <= n; m++)
if (s.IsMember(m))
{
count++;
cout << setw(3) << m << " ";
if (k++ % 10 == 0)
cout << endl;
}
cout << endl;
cout << "В первых " << n << " числах " << count << " простых" << endl;
}

#endif
6 changes: 0 additions & 6 deletions src/foo.cpp

This file was deleted.

115 changes: 0 additions & 115 deletions src/matrix.cpp

This file was deleted.

Loading

0 comments on commit 17a852d

Please sign in to comment.