лабы / Сети Петри / Документация / ОтчетСетиПетри / Рабочая программа
.docНачальные условия
S 4
S1 S2 S3 S4 ##
Ns 4
3 2 1 2 ##
T 3
T1 T2 T3 ##
TIME 3
1 2 1 ##
NAMES 3
S1 S2 S3 ##
NAMET 3
T1 T2 T3 ##
N 3
1 2 2 ##
NAMET 3
T1 T2 T3 ##
NAMES 3
S3 S3 S4 ##
K 3
2 1 1 ##
TSTART 1
-1 ##
TAKT 1
T2 ##
TFIN 1
1 ##
TIME 6
1 1 2 3 3 4 ##
NAMES 6
S1 S3 S4 S1 S3 S1 ##
NS 6
1 1 2 2 1 1 ##
Результат моделирования от 0 до 4
-1 T2 1
0 T1 1
1 T1 2
1 T3 2
1 T2 3
2 T1 3
2 T3 3
3 T1 4
3 T3 4
S2 T2(1)
// cAttr.h
#ifndef CATTR_H
#define CATTR_H
#include <vector>
#include <fstream>
#include <string>
using namespace std;
template < class T >
class cAttr{
public:
cAttr();
cAttr( char* fileName, int& count );
string getName() const;
void setName( string nName );
int size();
T& getCell( int pos );
//void print ( char* fileName);
void print ();
void Delete ( int pos );
private:
string attrName;
vector < T > cell;
};
#endif
// cAttr.cpp
#include "cAttr.h"
#include <algorithm>
using namespace std;
template < class T > cAttr<T>:: cAttr () {;}
template < class T >
cAttr<T>:: cAttr( char fileName[], int& count){
string temp;
ifstream fin( fileName );
int i = 0;
while ( i != count){
fin >> temp;
if ( temp == "##") ++i;
}
fin >> attrName;
int size;
fin >> size;
T tTemp;
for ( int i =0; i < size; ++i ){
fin >> tTemp;
cell.push_back( tTemp );
}
fin >> temp;
count += 1;
fin.close();
}
template <class T> string cAttr< T >::getName() const{
return attrName;
}
template <class T> void cAttr< T >::setName(string nName ){
attrName = nName;
}
template < class T > int cAttr< T >::size(){
return cell.size();
}
template < class T > T& cAttr< T >:: getCell ( int pos ){
return cell[ pos ];
}
template < class T > void cAttr< T >::print(){
cout << "attrName = " << attrName << ' ';
for ( int i = 0; i < cell.size(); ++i){
cout << cell[ i ] << ' ';
}
cout << endl;
}
template <class T> void cAttr <T>::Delete(int pos){
cout << "Process of deleting starts,.." << endl;
vector <T> nCell;
for ( int i = 0; i < cell.size(); ++i){
if ( i != pos) nCell.push_back( cell[i] );
cout << i << "itteration";
}
cell.pop_back();
cell = nCell;
}
// cKort.h
#ifndef CKORT_H
#define CKORT_H
#include "cAttr.h"
#include "cAttr.cpp"
using namespace std;
template <class T1, class T2>
class cKort2{
public:
cKort2() {}
cKort2 ( T1 First, T2 Second ){ first = First; second = Second; }
void setFirst ( T1 nF ) { first = nF; }
void setSecond ( T2 nS ) { second = nS;}
const T1 getFirst () const { return first;}
const T2 getSecond () const { return second;}
virtual void setNew (cKort2<T1, T2>& nRel) { first = nRel.getFirst(); second = nRel.getSecond();}
virtual void print() const { cout << first << " " << second << endl; }
protected:
T1 first;
T2 second;
};
template <class T1, class T2, class T3>
class cKort3: public cKort2<T1, T2>{
public:
cKort3() {;}
cKort3 ( T1 First, T2 Second, T3 Third ):
cKort2<T1, T2> (First, Second) {third = Third; }
void setThird ( T3 nT ) { third = nT; }
T3 getThird () { return third; }
void print() const { cout << first << " " << second << " " << third << endl; }
void print ( char fileName[]) const;
private:
T3 third;
};
template < class T1, class T2, class T3 >
void cKort3<T1, T2, T3>::print ( char fileName[] ) const{
ofstream fout ( fileName, ios::app );
fout << first << " " << second << " " << third << endl;
fout.close();
}
#endif
// cRel.h
#ifndef CREL_H
#define CREL_H
#include "cKort.h"
using namespace std;
template <class T1, class T2>
class cRel2{
public:
cRel2() {;}
cRel2(vector< cKort2<T1, T2> >& sourse) {rel = sourse;}
void setRel2(vector< cKort2<T1, T2> >& sourse)
{rel sourse;}
void add (cKort2 <T1, T2> Kor) {rel.push_back(Kor);}
void Delete1(T1& sourse);
void Delete2(T2& sourse);
int size () { return rel.size(); }
cKort2<T1, T2>& operator[] (int pos) {return rel[pos];}
private:
vector < cKort2<T1, T2> > rel;
};
template <class T1, class T2>
void cRel2< T1, T2 >::Delete1(T1& sourse){
vector< cKort2 <T1, T2, T3> >::iterator Iter;
for (int i = 0; i < rel.size(); ++i)
if ( rel[i].getFirst() == sourse ){
Iter = rel.begin() + i;
rel.erase( Iter, Iter + 1 );
}
}
template <class T1, class T2>
void cRel2< T1, T2 >::Delete2(T2& sourse){
vector< cKort2 <T1, T2, T3> >::iterator Iter;
for (int i = 0; i < rel.size(); ++i)
if ( rel[i].getSecond() == sourse ){
Iter = rel.begin() + i;
rel.erase( Iter, Iter + 1 );
}
}
template <class T1, class T2, class T3>
class cRel3{
public:
cRel3() {;}
cRel3(vector< cKort3<T1, T2, T3> >& sourse) {rel=sourse;}
void setRel3(vector< cKort3<T1, T2, T3> >& sourse) { rel = sourse; }
void add (cKort3 <T1, T2, T3>& Kor) {rel.push_back(Kor);}
void Delete1(T1& sourse);
void Delete2(T2& sourse);
void Delete3(T3& sourse);
int size () { return rel.size(); }
cKort3< T1, T2, T3 >& operator [] ( int pos ) { return rel[pos]; }
private:
vector < cKort3<T1, T2, T3> > rel;
};
template <class T1, class T2, class T3>
void cRel3< T1, T2, T3 >::Delete1(T1& sourse){
vector< cKort3 <T1, T2, T3> >::iterator Iter;
for (int i = 0; i < rel.size(); ++i)
if ( rel[i].getFirst() == sourse ){
Iter = rel.begin() + i;
rel.erase( Iter, Iter + 1 );
}
}
template <class T1, class T2, class T3>
void cRel3< T1, T2, T3 >::Delete3(T3& sourse){
vector< cKort3 <T1, T2, T3> >::iterator Iter;
for (int i = 0; i < rel.size(); ++i)
if ( rel[i].getThird() == sourse ){
Iter = rel.begin() + i;
rel.erase( Iter, Iter + 1 );
}
}
template <class T1, class T2, class T3>
void cRel3< T1, T2, T3 >::Delete2(T2& sourse){
vector< cKort3 <T1, T2, T3> >::iterator Iter;
for (int i = 0; i < rel.size(); ++i)
if ( rel[i].getSecond() == sourse ){
Iter = rel.begin() + i;
rel.erase( Iter, Iter + 1 );
}
}
#endif
// protocol.h
#ifndef PROTOCOL_H
#define PROTOCOL_H
#include "cRel.h"
#include <iostream>
using namespace std;
class cProtocol{
public:
cProtocol () {;}
void addEvent ( cKort3 <int, string, int> nEvent);
void print() const;
private:
vector < cKort3< int, string, int> > event;
};
#endif
// protocol.cpp
#include "protocol.h"
using namespace std;
void cProtocol::addEvent( cKort3 <int, string, int> nEvent ){
event.push_back( nEvent);
}
void cProtocol::print() const{
char fileName[80];
cout << "Enter name of file to print event protocol -> ";
cin >> fileName;
for(int i = 0; i < event.size(); ++i ) event[i].print( fileName);
}
// net.h
#ifndef NET_H
#define NET_H
#include "protocol.h"
#include <iostream>
using namespace std;
class cPetry{
public:
cPetry (char fileName []);
void print();
void model( int tStart, int tFinish
private:
cRel2<string, int> Sn;
cRel2<string, int> Tt;
cRel3<string, string, int> TSk;
cRel3<string, string, int> STn;
cRel3<int, string, int> activeT;
cRel3<int, string, int> externalAct;
cProtocol protocol;
void finishAct( int time );
void addExternal( int time );
bool startAct( int time );
};
#endif
// driver.cpp
#include "net.h"
using namespace std;
int main(){
cout << "Program models net Petry from 0 to 4 time" << endl;
char fileName [80];
cout << "Enter sourse file name -> ";
cin >> fileName;
cPetry prExempl(fileName);
prExempl.model( 0, 5 );
return 0;
}