Automat deterministyczny w C

0

Witam
Mam za zadanie zrobić automat deterministyczny w C lub C++. Mam zaczętą klasę ale utknąłem ponieważ nie mogę znaleźć żadnego prostego przykładu, a nie mam pojęcia jak zdefiniować metody [???]
Chciałbym wykorzystać listy dwukierunkowe.
tu kod tego co mam:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include<conio.h>
//---------------------------------------------------------------------------

#pragma argsused

/*     napis
zmienna stan_biezacy=poczatkowy
while napis jest niepusty
   c= utnij pierwszy znak z s
   podaj przejscie od stan_biezacy po znaku 'c'
   if nie ma takiego przejscia return false
	 else stan_bbiezacy=stan docelowy tego przejscia
   return stan_biezacy= stan koncowy
*/
class Automat{
private:
  int stan_poczatkowy;
  int stan_koncowy;


public:
  void dodaj_Stan(int nr);
  void dodaj_Przejscie(int od_nr,int do_nr,char sybol);
  void ustaw_start(int nr){
	stan_poczatkowy=nr;
  }
  void ustaw_koniec(int nr){
	stan_koncowy=nr;
  }

  int podaj_start() const;
  int podaj_koniec() const;
  int ile_stanow() const;
  int ile_przejsc() const;
  char podaj_Przejscia(int od_nr,int do_nr) const;
  bool czy_akceptowanyh(char *napis) const;
};

int main(int argc, char* argv[])
{

 Automat *tekst;
 tekst->dodaj_Stan(1);

 tekst->dodaj_Stan(2);
 tekst->dodaj_Stan(3);
 tekst->dodaj_Stan(4);
 tekst->dodaj_Przejscie(1,2,'a');
 tekst->dodaj_Przejscie(2,3,'b');
 tekst->dodaj_Przejscie(3,4,'c');
 tekst->dodaj_Przejscie(3,4,'a');
 tekst->dodaj_Przejscie(4,2,'d');
 tekst->ustaw_start(1);
 tekst->ustaw_koniec(4);

 getch();
	return 0;
}
//---------------------------------------------------------------------------

Z góry dzięki za pomoc.

Pozdrawiam

0

metody tzn funkcje tej klasy?
definiujesz np. void Automat::dodaj_Stan(int nr){}

0
złoty napisał(a)

metody tzn funkcje tej klasy?
definiujesz np. void Automat::dodaj_Stan(int nr){}

W sumie wiem jak się definiuje, ale chodzi mi jakiś przykład automatu deterministycznego w C bo nie mam pojęcia jak napisać przejścia za pomocą listy dwukierunkowej a później sprawdzać słowo. Nie mogę znaleźć żadnego przykładu w niecie:(

0

wybacz ze nie w temacie, ale sprobuj moze boost::statechart
..chyba ze ten automat musi byc konfigurowalny w locie tak jak u Ciebie w przykladzie

w takim przypadku, najprosciej taki automat zaimplementowac jako tablice/listelist przejsc i jedna zmienna pamietajaca aktualny numer stanu

tablica 2d:
wiersze/pierwszyindeks obrazuje numer stanu wejsciowego przejscia
kolumny/drugiindeks obrazuje warunek przejscia - 'a','b',...
komorka na danym xy - zawiera numer stanu docelowego przejscia

int warunek = ... np. 'a'
aktualnystan = ... np. 5
przejscie to:
aktualnystan = tablicaprzejsc[aktualnystan][warunek];

listalist - jest to lista struktur:
{ int numerstanuwejsciowego; listaprzejsc }
listaprzejsc - lista struktur
{ int warunek; int standocelowy; }
i zasada ta sama.. najpierw szukanie aktualnego stanu w liscielist, potem w znalezionym elemencie, szukanie na liscieprzejsc odpowiedniego warunku, i wykonanie przejscia, czyli przepisanie numeru stanu jako aktualny..

1 użytkowników online, w tym zalogowanych: 0, gości: 1