/* Author: MB Version: 1.0.1, APR 2015 */ /* Endlicher Automat, der durch 3 teilbare Zahlen erkennt */ #include #include #include int zustand = 0; /* Startzustand: Zustand_0, Akzeptanzzustand: Zustand_3 */ /* die Zustaende wechseln abhaengig von der Pruefung der Quersumme. Beispiel: 1, 4, 7 sind 2 von einer naechsten durch 3 teilbaren Zahl entfernt, weswegen von Zustand 0 aus, bei einer dieser Ziffern in Zustand 1 verlangt wird eine 2, 5 oder 8, um in den Akzeptanzzustand zu wechseln, da diese 2 uber einer durch 3 teilbaren Zahl liegen. */ void zustandWechseln(char eingabe){ switch (zustand){ case 0: { switch (eingabe){ case '0': { zustand = 0; break; } case '1': case '4': case '7': { zustand = 1; break; } case '2': case '5': case '8': { zustand = 2; break; } case '3': case '6': case '9': { zustand = 3; break; } } break; } case 1: { switch (eingabe){ case '0': { zustand = 1; break; } case '1': case '4': case '7': { zustand = 2; break; } case '2': case '5': case '8': { zustand = 3; break; } case '3': case '6': case '9': { zustand = 1; break; } } break; } case 2: { switch (eingabe){ case '0': { zustand = 2; break; } case '1': case '4': case '7': { zustand = 3; break; } case '2': case '5': case '8': { zustand = 1; break; } case '3': case '6': case '9': { zustand = 2; break; } } break; } case 3: { switch (eingabe){ case '0': { zustand = 3; break; } case '1': case '4': case '7': { zustand = 1; break; } case '2': case '5': case '8': { zustand = 2; break; } case '3': case '6': case '9': { zustand = 3; break; } } break; } } } int main(){ char eingabe[10]; int i = 0; printf("Bitten Geben Sie eine bis zu 10-stellige Zahl ein: "); scanf("%s",&eingabe); printf("\n"); for (i = 0; i < strlen(eingabe); i++){ printf("In Zustand: %i",zustand); zustandWechseln(eingabe[i]); printf(" wird untersucht %c mit neuem Zustand: %i\n", eingabe[i], zustand); Sleep(2000); } printf("\n"); if (zustand == 3){ printf("Die Zahl ist durch 3 teilbar!\n"); } else { printf("Die Zahl ist nicht durch 3 teilbar!\n"); } }