forked from valentina-kustikova/mp2-lab1-bitfield
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Kirill Kornyakov
committed
Sep 3, 2015
1 parent
2772818
commit 17a852d
Showing
13 changed files
with
297 additions
and
258 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.