restructure and add ipi texs
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
// Konstruktor fuer leeres Programm
|
||||
Programm::Programm ()
|
||||
{
|
||||
zeilen = 0; // noch keine gueltige Zeile
|
||||
fertig = false;
|
||||
}
|
||||
|
||||
// Fuege eine Zeile in die Zustandsuebrgangstabelle hinzu
|
||||
void Programm::zeile (int q_ein, char s_ein, char s_aus, R richt, int q_aus)
|
||||
{
|
||||
if (fertig) {
|
||||
print("Programm war schon abgeschlossen!");
|
||||
return;
|
||||
}
|
||||
Qaktuell[zeilen] = q_ein;
|
||||
eingabe[zeilen] = s_ein;
|
||||
ausgabe[zeilen] = s_aus;
|
||||
richtung[zeilen] = richt;
|
||||
Qfolge[zeilen] = q_aus;
|
||||
zeilen = zeilen+1;
|
||||
}
|
||||
|
||||
// Definiere letzte Zeile in der Zustandsuebergangstabelle
|
||||
void Programm::zeile (int endzustand)
|
||||
{
|
||||
if (fertig) {
|
||||
print("Programm war schon abgeschlossen!");
|
||||
return;
|
||||
}
|
||||
Qaktuell[zeilen] = endzustand;
|
||||
zeilen = zeilen+1;
|
||||
fertig = true;
|
||||
print("Programm mit ",zeilen," Zeilen definiert",0);
|
||||
print("Anfangszustand ",Anfangszustand(),0);
|
||||
print("Endzustand ",Endzustand(),0);
|
||||
}
|
||||
|
||||
// Ermittle zu schreibendes Zeichen
|
||||
char Programm::Ausgabe (int q, char symbol)
|
||||
{
|
||||
// wurde Zeile als letztes benutzt ?
|
||||
if ( letztesQ==q && letzteEingabe==symbol )
|
||||
return ausgabe[letzteZeile];
|
||||
// suche Zeile im Programm
|
||||
if (FindeZeile(q,symbol))
|
||||
return ausgabe[letzteZeile];
|
||||
// Fehler: es gibt keine solche Zeile
|
||||
print(q," , ",symbol,0);
|
||||
print(" nicht definiert!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Ermittle Richtung
|
||||
Programm::R Programm::Richtung (int q, char symbol)
|
||||
{
|
||||
// wurde Zeile als letztes benutzt ?
|
||||
if ( letztesQ==q && letzteEingabe==symbol )
|
||||
return richtung[letzteZeile];
|
||||
// suche Zeile im Programm
|
||||
if (FindeZeile(q,symbol))
|
||||
return richtung[letzteZeile];
|
||||
// Fehler: es gibt keine solche Zeile
|
||||
print(q," , ",symbol,0);
|
||||
print(" nicht definiert!");
|
||||
return links;
|
||||
}
|
||||
|
||||
// Ermittle Folgezustand
|
||||
int Programm::Folgezustand (int q, char symbol)
|
||||
{
|
||||
// wurde Zeile als letztes benutzt ?
|
||||
if ( letztesQ==q && letzteEingabe==symbol )
|
||||
return Qfolge[letzteZeile];
|
||||
// suche Zeile im Programm
|
||||
if (FindeZeile(q,symbol))
|
||||
return Qfolge[letzteZeile];
|
||||
// Fehler: es gibt keine solche Zeile
|
||||
print(q," , ",symbol,0);
|
||||
print(" nicht definiert!");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Gebe Anfangszustand zurueck
|
||||
int Programm::Anfangszustand ()
|
||||
{
|
||||
return Qaktuell[0];
|
||||
}
|
||||
|
||||
// Gebe Endzustand zurueck
|
||||
int Programm::Endzustand ()
|
||||
{
|
||||
return Qaktuell[zeilen-1];
|
||||
}
|
||||
|
||||
// Finde Zeile in der Zustandsuebergangstabelle zu gegebenem
|
||||
// Zustand und Symbol. Merke Eingabe und Zeilennummer damit
|
||||
// bei wiederholtem Zugriff nicht gesucht werden muss.
|
||||
bool Programm::FindeZeile (int q, char symbol)
|
||||
{
|
||||
for (int i=0; i<zeilen; i=i+1)
|
||||
if ( Qaktuell[i]==q && eingabe[i]==symbol )
|
||||
{
|
||||
letzteZeile = i;
|
||||
letztesQ = Qaktuell[letzteZeile];
|
||||
letzteEingabe = eingabe[letzteZeile];
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user