Добавил:
Tushkan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Готовые лабораторные работы (ММ) / DMath_Lab1__ / DMath_Lab1 / DMath_Lab1
.cpp// DMath_Lab1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "List.hpp"
enum Var
{
_null = 2,
_one = 1,
_X = 3,
_zero = 0
};
#define List BDList
template<unsigned n = 16> struct Vector
{
Var data_[n];
Vector(){}
Vector(char* str)
{
for(unsigned i = 0; i < n; ++i)
{
switch(str[i])
{
case '0' : data_[i] = _null; break;
case '1' : data_[i] = _one; break;
case 'x' : data_[i] = _X; break;
}
}
}
Vector operator ^(Vector arg) const
{
Vector tmp;
unsigned nullCount = 0;
for(unsigned i = 0; i < n; ++i)
{
tmp.data_[i] = static_cast<Var>(data_[i] & arg.data_[i]);
if (tmp.data_[i] == _zero)
{
++nullCount;
tmp.data_[i] = _X;
}
}
if(nullCount == 1) return tmp;
else throw "Error";
}
Vector operator &(Vector arg) const
{
Vector tmp;
for(unsigned i = 0; i < n; ++i)
{
tmp.data_[i] = static_cast<Var>(data_[i] & arg.data_[i]);
}
return tmp;
}
bool inc(Vector arg) const
{
return ((*this) & arg) == arg;
}
bool operator == (Vector arg) const
{
for(unsigned i = 0; i < n; ++i)
{
if(data_[i] != arg.data_[i]) return false;
}
return true;
}
void print() const
{
for(unsigned j = 0; j < n; ++j)
{
switch(data_[j])
{
case _null: std::cout << "0"; break;
case _one: std::cout << "1"; break;
case _X: std::cout << "x"; break;
}
}
std::cout << std::endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
typedef Vector<16> Vector;
NSD::List<Vector> lst;
//ввод
lst.getLast().insertAfter(Vector("10xx01001xxxx101"));
lst.getLast().insertAfter(Vector("0x11x1xx1x00xx01"));
lst.getLast().insertAfter(Vector("xxxxxxxxxxxxx01x"));
bool newIteration = true;
while(newIteration)
{
newIteration = false;
for(NSD::List<Vector>::iterator i = lst.getFirst(); i && !newIteration;)
{
Vector curr = *i;
bool weryty = false;
for(NSD::List<Vector>::iterator j = lst.getFirst(); j; ++j)
{
Vector nxt = *j;
if(nxt.inc(curr) && i != j)
{
NSD::List<Vector>::iterator k = i;
++k;
i.remove();
i = k;
weryty = true;;
break;
}
}
if(weryty) continue;
for(NSD::List<Vector>::iterator j = lst.getFirst(); j;)
{
Vector nxt = *j;
if(curr.inc(nxt) && i != j)
{
NSD::List<Vector>::iterator k = j;
++k;
j.remove();
j = k;
}
else ++j;
}
NSD::List<Vector>::iterator j = i;
++j;
for(; j; ++j)
{
Vector nxt = *j;
try
{
Vector abc = curr ^ nxt;
bool absorpted = false;
for(NSD::List<Vector>::iterator q = lst.getFirst(); q; ++q)
{
Vector dd = *q;
if(dd.inc(abc))
{
absorpted = true;;
break;
}
}
if(!absorpted)
{
lst.getFirst().insertBefore(abc);
newIteration = true;
break;
}
} catch(...){}
}
++i;
}
}
for(NSD::List<Vector>::iterator i = lst.getFirst(); i ; ++i)
{
Vector curr = *i;
curr.print();
}
return 0;
}
Соседние файлы в папке DMath_Lab1