diff options
Diffstat (limited to 'šola/p2/dn/DN02a_63230317.c')
-rw-r--r-- | šola/p2/dn/DN02a_63230317.c | 85 |
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; +} |