Wertetabellen-Ausgabe hinzugefügt

This commit is contained in:
Jonny007-MKD 2013-11-21 21:28:07 +01:00
parent bcac4dd121
commit 9d79f2dc27
3 changed files with 133 additions and 3 deletions

View File

@ -1,4 +1,4 @@
// Hazard.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
// Hazard.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
@ -9,6 +9,7 @@
#include "PrimImplikant.h"
#include "PrimImplikantCollection.h"
#include "Cell.h"
#include "Wertetabelle.h"
using namespace std;
@ -93,11 +94,16 @@ int _tmain(int argc, _TCHAR* argv[])
numOnes++;
}
Wertetabelle* wt = new Wertetabelle(&cells, variables);
wt->Print();
delete wt;
// find hazards
if (numOnes > numElements / 2) // we have more 1 than 0 --> checkerboard --> 50% of cells are checked
{
cout << "\nSchachbrettmuster\n";
cout << "\nHazard-Algorithmus: Schachbrettmuster\n";
for (uint i = 0; i < numElements; i++)
{
uint grayI = i ^ (i/2); // transform to gray code
@ -115,7 +121,7 @@ int _tmain(int argc, _TCHAR* argv[])
}
else // less 1 than 0 --> only check every 1 --> less than 50% (numOnes/numElements) of cells are checked
{
cout << "\nÜberspringe Nullen\n";
cout << "\nHazard-Algorithmus: Ueberspringe Nullen\n";
for (uint i = 0; i < numElements; i++)
{
if (!cells[i]->value)

View File

@ -0,0 +1,87 @@
#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>
#include "Cell.h"
#include "PrimImplikant.h"
#include "Wertetabelle.h"
using namespace std;
extern uint dimension;
extern uint numElements;
void Wertetabelle::Print()
{
printHeader();
for (uint i = 0; i < numElements; i++)
{
cout << "|"; // => |
this->printI(i); // => 0 1 0 0
cout << "| "; // => |
cout << (*this->cells)[i]->value; // => 1
cout << " |"; // => |
this->printPrimImplikanten(i); // => 0 0x1 4
cout << endl;
if (i > 0 && i % 20 == 0 && i - numElements > 5)
cout << this->makeHeader() << endl;
}
cout << string(this->width, '-');
}
string Wertetabelle::makeHeader()
{
bool setPad = padding.size() == 0;
if (setPad)
padding.resize(dimension);
string row2 = "|";
for (vector<string>::iterator v = variables->begin(); v < variables->end(); v++)
{
row2 += " " + *v;
if (setPad)
padding.push_back(((*v).size()-1) / 2.0f);
}
row2 += " | y |";
this->width = row2.size();
row2 += " PrimImplikanten";
return row2;
}
void Wertetabelle::printHeader()
{
string row2 = this->makeHeader();
cout << string(this->width, '-') << endl; // repeat '-' several times => ---------------------
cout << row2 << endl; // print header row => | a bärchen c d | y | PrimtImpl.
cout << string(this->width, '-') << endl; // repeat '-' several times => ---------------------
}
void Wertetabelle::printI(uint i)
{
string row = " ";
for (int j = dimension - 1; j >= 0; j--) // Variablen rückwärts durchlaufen (s.u.)
{
char iAtJ = (i & 0x1) + '0'; // Maskierung (aktuelle Stelle j, die ausgegeben wird)
i >>= 1; // Schieben für nächstes Mal
// ' ' + Padding left (' ') + 1 | 0 + Padding right (' ') + row
row = string((uint)ceil(padding[j]) + 1, ' ') + iAtJ + string((uint)floor(padding[j]), ' ') + row;
}
cout << row;
}
void Wertetabelle::printPrimImplikanten(unsigned int i)
{
cout << ' ';
Cell* cell = cells->at(i);
for (unsigned int pi = 0; pi < cell->primImplikanten.size(); pi++) // for every PrimImplikant in Cell
cout << cell->primImplikanten[pi]->name << " ";
}

View File

@ -0,0 +1,37 @@
#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>
#include "Cell.h"
#include "PrimImplikant.h"
#include "Cell.h"
using namespace std;
#ifndef WERTETABELLE
#define WERTETABELLE
class Wertetabelle
{
public:
void Print();
Wertetabelle(vector<Cell*>* cells, vector<string>* variables)
{
this->cells = cells;
this->variables = variables;
}
private:
string makeHeader();
void printHeader();
void printI(unsigned int i);
void printPrimImplikanten(unsigned int i);
vector<Cell*>* cells;
vector<string>* variables;
vector<float> padding;
uint width;
};
#endif