diff options
Diffstat (limited to 'šola/p2/dn/DN02b_63230317.c')
-rw-r--r-- | šola/p2/dn/DN02b_63230317.c | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/šola/p2/dn/DN02b_63230317.c b/šola/p2/dn/DN02b_63230317.c new file mode 100644 index 0000000..ebaa364 --- /dev/null +++ b/šola/p2/dn/DN02b_63230317.c @@ -0,0 +1,105 @@ +#include <stdio.h> +#include <stdbool.h> +#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) { // 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; +} |