Print Implikant algoritmus geschrieben aber. funktionniert. Keine Fehler
bei der Compilierung aber die Kuller auftreten nicht
This commit is contained in:
parent
aeb5cbfe34
commit
10269bcd65
4 changed files with 114 additions and 47 deletions
|
@ -9,6 +9,8 @@ extern uint dimension;
|
|||
extern uint numElements;
|
||||
extern bool KNF;
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
void KV::Clear()
|
||||
{
|
||||
|
@ -207,22 +209,68 @@ void KV::PrintPrimImplikanten()
|
|||
|
||||
|
||||
|
||||
uint X1 = -1, X2 = 0, Y1 = -1, Y2 = 0; // find coordinates for Rechteck
|
||||
// uint X1 = -1, X2 = 0, Y1 = -1, Y2 = 0; // find coordinates for Rechteck
|
||||
|
||||
|
||||
for (uint j = 0; j < currentPI->PI_groupCollection.size(); j++)
|
||||
{
|
||||
vector<Implikant_localisation*>* kuller = currentPI->PI_groupCollection[j];
|
||||
for (uint j = 0; j < kuller->size(); j++)
|
||||
|
||||
|
||||
vector<Implikant_localisation*>* kullers = currentPI->PI_groupCollection[j];
|
||||
|
||||
|
||||
for (uint k = 0; k < kullers->size(); k++)
|
||||
{
|
||||
uint x1 = (*kuller)->w * (this->edgeLength + 1) + this->VarY_Length; // Upper coord
|
||||
|
||||
for (vector<Implikant_localisation*>::iterator it = kullers->begin(); it < kullers->end(); it++)
|
||||
{
|
||||
uint X1 = -1, X2 = 0, Y1 = -1, Y2 = 0;
|
||||
|
||||
uint x1 = (*it)->w * (this->edgeLength + 1) + this->VarY_Length; // Upper coord
|
||||
uint x2 = x1 + this->edgeLength; // Lower coord
|
||||
uint y1 = h * (this->edgeLength + 1) + this->VarX_Length; // Left coord
|
||||
uint y1 = (*it)->h * (this->edgeLength + 1) + this->VarX_Length; // Left coord
|
||||
uint y2 = y1 + this->edgeLength; // Right coo
|
||||
|
||||
X1 = min(X1, x1);
|
||||
X2 = max(X2, x2);
|
||||
Y1 = min(Y1, y1);
|
||||
Y2 = max(Y2, y2);
|
||||
|
||||
if (currentPI->name.find("|") != string::npos)
|
||||
{
|
||||
this->Rechteck(X1 + 12, Y1 + 9, X2 - 12, Y2 - 9, RED, TRANS);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint random = rand() % 10;
|
||||
X1 += random;
|
||||
X2 -= random;
|
||||
Y1 += random;
|
||||
Y2 -= random;
|
||||
if (currentPI->implikanten.size() == 1)
|
||||
this->Rechteck(X1, Y1, X2, Y2, GREEN, TRANS);
|
||||
else
|
||||
this->Rechteck(X1, Y1, X2, Y2, BLUE, TRANS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
|
||||
uint w = currentPI->PI_groupCollection // get all bits that make X (=w)
|
||||
|
@ -264,7 +312,7 @@ void KV::PrintPrimImplikanten()
|
|||
//------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@ public:
|
|||
|
||||
|
||||
|
||||
|
||||
vector<uint> implikanten;
|
||||
vector<Implikant_localisation*> I_Vector;
|
||||
vector<vector<Implikant_localisation*>*> PI_groupCollection;
|
||||
|
|
|
@ -15,21 +15,21 @@ void PrimImplikantCollection::add(string input)
|
|||
PrimImplikant* PI = new PrimImplikant(input);
|
||||
|
||||
PI->id = this->size();
|
||||
setgroupCollection1(PI);
|
||||
this->setgroupCollection1(PI);
|
||||
this->add(PI);
|
||||
}
|
||||
void PrimImplikantCollection::add(uint input)
|
||||
{
|
||||
PrimImplikant* PI = new PrimImplikant(input);
|
||||
PI->id = this->size();
|
||||
setgroupCollection1(PI);
|
||||
this->setgroupCollection1(PI);
|
||||
this->add(PI);
|
||||
}
|
||||
void PrimImplikantCollection::add(uint input1, uint input2)
|
||||
{
|
||||
PrimImplikant* PI = new PrimImplikant(input1, input2);
|
||||
PI->id = this->size();
|
||||
setgroupCollection1(PI);
|
||||
this->setgroupCollection1(PI);
|
||||
this->add(PI);
|
||||
}
|
||||
|
||||
|
@ -81,11 +81,13 @@ void PrimImplikantCollection::setgroupCollection1(PrimImplikant* ¤tPI)
|
|||
static int Linie_mitte;
|
||||
uint numVarY = (uint)ceil(dimension / 2.0f);
|
||||
|
||||
//PrimImplikant* currentPI = currentPI; // Zuweisung diese Adresse an einem ZeigerObjekt denselben Namen.
|
||||
|
||||
|
||||
|
||||
for (it1 = currentPI->I_Vector.begin(); it1 < currentPI->I_Vector.end(); it1++)
|
||||
{
|
||||
if ((((*it1)->h) = (numVarY / 2) - 1) || (((*it1)->h) = (numVarY / 2)))
|
||||
if ((((*it1)->h) == (numVarY / 2) - 1) || (((*it1)->h) == (numVarY / 2)))
|
||||
{
|
||||
Linie_mitte++; // test zu wissen ob die MitteLinie h der KV diagramm erreicht ist.
|
||||
// Test zu wissen , wieviele Implikanten in Mitte_tiefe sind
|
||||
|
@ -121,12 +123,20 @@ void PrimImplikantCollection::setgroupCollection1(PrimImplikant* ¤tPI)
|
|||
|
||||
}
|
||||
|
||||
if (groupA.size())
|
||||
{
|
||||
setgroupCollection2(currentPI, groupA);
|
||||
}
|
||||
|
||||
if (groupB.size())
|
||||
{
|
||||
setgroupCollection2(currentPI, groupB);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void PrimImplikantCollection::setgroupCollection2(PrimImplikant* ¤tPI, vector<Implikant_localisation*> &group)
|
||||
{
|
||||
|
@ -134,19 +144,19 @@ void PrimImplikantCollection::setgroupCollection2(PrimImplikant* ¤tPI, vec
|
|||
vector<Implikant_localisation*> hilfVec1, hilfVec2;
|
||||
vector<Implikant_localisation*>::iterator it1;
|
||||
uint numVarX = (uint)floor(dimension / 2.0f);
|
||||
static int Linie_mitte; // Zustand 0--> wird h überprüft im Vector
|
||||
// Zustand 1-->wird w überprüft im Vector.
|
||||
// Ohne Zuweisung hat schalter am Anfang den Wert 0
|
||||
static int Linie_mitte; // Zustand 0--> wird w überprüft im Vector
|
||||
// Zustand 1 oder >1 -->wird w überprüft im Vector.
|
||||
|
||||
|
||||
|
||||
|
||||
for (it1 = group.begin(); it1 < group.end(); it1++)
|
||||
{
|
||||
if ((((*it1)->h) = (numVarX / 2) - 1) || (((*it1)->h) = (numVarX / 2)))
|
||||
if ((((*it1)->h) == (numVarX / 2) - 1) || (((*it1)->h) == (numVarX / 2)))
|
||||
{
|
||||
Linie_mitte++; // test zu wissen ob die MitteLinie h der KV diagramm erreicht ist.
|
||||
Linie_mitte++; // test zu wissen ob die MitteLinie w der KV diagramm erreicht ist.
|
||||
// Test zu wissen , wieviele Implikanten in Mitte_tiefe sind
|
||||
//schalter = 1;
|
||||
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -162,8 +172,8 @@ void PrimImplikantCollection::setgroupCollection2(PrimImplikant* ¤tPI, vec
|
|||
for (it1 = group.begin(); it1 < group.end(); it1++)
|
||||
{
|
||||
|
||||
if (((*it1)->w < (numVarX / 2) - 1)) // die Implikanten, deren h <= numVary/2 -1 sind im groupA
|
||||
{ // gespeichert.
|
||||
if (((*it1)->w < (numVarX / 2) - 1)) // die Implikanten, deren w <= numVarX/2 -1 sind im groupA
|
||||
{ // gespeichert. wenn w größer, dann wird im hilfVec2 gespeichert
|
||||
|
||||
hilfVec1.push_back(*it1);
|
||||
|
||||
|
@ -174,9 +184,17 @@ void PrimImplikantCollection::setgroupCollection2(PrimImplikant* ¤tPI, vec
|
|||
|
||||
}
|
||||
|
||||
if (hilfVec1.size())
|
||||
{
|
||||
currentPI->PI_groupCollection.push_back(&hilfVec1);
|
||||
}
|
||||
|
||||
if (hilfVec2.size())
|
||||
{
|
||||
currentPI->PI_groupCollection.push_back(&hilfVec2);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue