summaryrefslogtreecommitdiffstats
path: root/šola/p2/dn/DN02a_63230317.c
diff options
context:
space:
mode:
Diffstat (limited to 'šola/p2/dn/DN02a_63230317.c')
-rw-r--r--šola/p2/dn/DN02a_63230317.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/šola/p2/dn/DN02a_63230317.c b/šola/p2/dn/DN02a_63230317.c
new file mode 100644
index 0000000..c9bbad2
--- /dev/null
+++ b/šola/p2/dn/DN02a_63230317.c
@@ -0,0 +1,85 @@
+#include <stdio.h>
+#include <stdbool.h>
+#define PRED_ZAČETKOM 0
+#define PRVI_ZNAK 2
+#define PRVA_ŠTEVILKA 3
+#define ŠTEVILKE 4
+#define PO_NIČLI 5
+int main (void) {
+ int stanje = PRVI_ZNAK;
+ int znak = 0;
+ while (true) {
+ znak = getchar();
+ switch (stanje) {
+ case PRED_ZAČETKOM:
+ if (znak == ' ') {
+ stanje = PRVI_ZNAK;
+ continue;
+ }
+ if (znak == -1 || znak == '\n') {
+ putchar('\n');
+ return 0;
+ }
+ continue;
+ case PO_NIČLI:
+ if (znak == '\n') {
+ putchar('1');
+ putchar('\n');
+ return 1;
+ }
+ if (znak != ' ') {
+ putchar('0');
+ stanje = PRED_ZAČETKOM;
+ continue;
+ }
+ stanje = PRVI_ZNAK;
+ continue;
+ case PRVI_ZNAK:
+ if (znak == '+' || znak == '-') {
+ stanje = PRVA_ŠTEVILKA;
+ continue;
+ }
+ // falls through
+ case PRVA_ŠTEVILKA:
+ if (znak == '0') {
+ stanje = PO_NIČLI;
+ continue;
+ }
+ if (znak == '\n') {
+ putchar('0');
+ putchar('\n');
+ return 0;
+ }
+ if (znak == ' ') {
+ putchar('0');
+ stanje = PRVI_ZNAK;
+ continue;
+ }
+ if (znak > '9' || znak < '1') {
+ putchar('0');
+ stanje = PRED_ZAČETKOM;
+ continue;
+ }
+ stanje = ŠTEVILKE;
+ continue;
+ case ŠTEVILKE:
+ if (znak == '\n') {
+ putchar('1');
+ putchar('\n');
+ return 0;
+ }
+ if (znak == ' ') {
+ putchar('1');
+ stanje = PRVI_ZNAK;
+ continue;
+ }
+ if (znak > '9' || znak < '0') {
+ putchar('0');
+ stanje = PRED_ZAČETKOM;
+ continue;
+ }
+ continue;
+ }
+ }
+ return 1;
+}