summaryrefslogtreecommitdiffstats
path: root/šola/p2/dn/DN02b_63230317.c
diff options
context:
space:
mode:
Diffstat (limited to 'šola/p2/dn/DN02b_63230317.c')
-rw-r--r--šola/p2/dn/DN02b_63230317.c105
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;
+}