summaryrefslogblamecommitdiffstats
path: root/šola/p2/dn/DN02b_63230317.c
blob: ebaa36438f11b6f83ae0fd148f9dba6c847c9e1b (plain) (tree)








































































































                                                                                                                    
#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;
}