#include #include #define ČAKAM 1 #define PRVI 0 #define NIČLA 2 #define ŠTEVILKE 3 #define OCTAL 4 #define HEX1 5 #define BIN1 6 #define HEX 7 #define BIN 8 int main (void) { int stanje = PRVI; int znak = 0; while (true) { znak = getchar(); if (stanje == HEX || stanje == BIN || stanje == ŠTEVILKE || stanje == NIČLA || stanje == OCTAL) { // term za * stanja if (znak == EOF || znak == '\n') goto pravilno_in_konec; if (znak == ' ') goto pravilno; } switch (stanje) { case ČAKAM: if (znak == EOF || znak == '\n') goto konec; if (znak == ' ') { stanje = PRVI; continue; } continue; case PRVI: if (znak == '0') { stanje = NIČLA; continue; } if (znak <= '9' && znak >= '1') { stanje = ŠTEVILKE; continue; } goto napaka; case NIČLA: if (znak <= '7' && znak >= '0') { stanje = OCTAL; continue; } if (znak == 'x') { stanje = HEX1; continue; } if (znak == 'b') { stanje = BIN1; continue; } goto napaka; case OCTAL: if (znak <= '7' && znak >= '0') continue; goto napaka; case HEX1: if ((znak <= '9' && znak >= '0') || (znak <= 'F' && znak >= 'A')) { stanje = HEX; continue; } goto napaka; case HEX: if ((znak <= '9' && znak >= '0') || (znak <= 'F' && znak >= 'A')) continue; goto napaka; case BIN1: if (znak == '0' || znak == '1') { stanje = BIN; continue; } goto napaka; case BIN: if (znak == '0' || znak == '1') continue; goto napaka; case ŠTEVILKE: if (znak <= '9' && znak >= '0') continue; goto napaka; } continue; pravilno: putchar('1'); goto terminator_check; napaka: putchar('0'); terminator_check: stanje = ČAKAM; if (znak == ' ') stanje = PRVI; if (znak == '\n') goto konec; continue; pravilno_in_konec: putchar('1'); konec: putchar('\n'); return 0; } return 1; }