From 6da144e04904629ff2dd01fdcbc9932fa2fabee8 Mon Sep 17 00:00:00 2001 From: Bora Date: Wed, 11 Jun 2025 10:02:01 +0200 Subject: [PATCH] halo --- Modul4/automat.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/Modul4/automat.c b/Modul4/automat.c index 586b6e7..0bd02b2 100644 --- a/Modul4/automat.c +++ b/Modul4/automat.c @@ -2,7 +2,7 @@ #include #include "automat.h" -typedef enum {A=0,B,C,D,E,F,H,I, NR_OF_STATES} state_t; +typedef enum {A=0, B, C, D, E, F, NR_OF_STATES} state_t; static state_t s_curstate = A; static int s_guthaben = 0; @@ -27,31 +27,36 @@ void automat_transition(BOOL becher, BOOL muenze, BOOL muenz_wert) s_muenz_rueck = false; s_display = false; + int wert = muenz_wert ? 2 : 1; + switch (s_curstate) { - case A: case B: case C: case D: + case A: case B: case C: case D: case E: // Münzeinwurf if (muenze) { - int wert = muenz_wert ? 2 : 1; if (s_guthaben + wert > 4) { s_muenz_rueck = true; + s_display = true; s_display_string = "Zu viel! Münze zurück"; + break; } else { s_guthaben += wert; } } - // *** Hier ist die Änderung *** + + // Guthaben prüfen if (s_guthaben < 4) { - if (s_guthaben == 0) s_curstate = A, s_display_string = "Warten"; - else if (s_guthaben == 1) s_curstate = B, s_display_string = "1 Euro"; - else if (s_guthaben == 2) s_curstate = C, s_display_string = "2 Euro"; - else if (s_guthaben == 3) s_curstate = D, s_display_string = "3 Euro"; + if (s_guthaben == 0) { s_curstate = A; s_display_string = "Warten"; } + else if (s_guthaben == 1) { s_curstate = B; s_display_string = "1 Euro"; } + else if (s_guthaben == 2) { s_curstate = C; s_display_string = "2 Euro"; } + else if (s_guthaben == 3) { s_curstate = D; s_display_string = "3 Euro"; } + // Kein Display aktivieren! } else if (s_guthaben == 4) { if (becher) { s_curstate = F; s_kaffee_los = true; s_display = true; s_display_string = "Kaffee wird ausgegeben"; - s_guthaben = 0; // Guthaben wird nach Ausgabe zurückgesetzt! + s_guthaben = 0; } else { s_curstate = E; s_display = true; @@ -60,18 +65,7 @@ void automat_transition(BOOL becher, BOOL muenze, BOOL muenz_wert) } break; - case E: // 4 Euro, warte auf Becher - s_display = true; - s_display_string = "Bitte Becher unterstellen!"; - if (becher) { - s_curstate = F; - s_kaffee_los = true; - s_display_string = "Kaffee wird ausgegeben"; - s_guthaben = 0; // Guthaben wird nach Ausgabe zurückgesetzt! - } - break; - - case F: // Kaffee läuft, warte auf Becherentnahme + case F: s_display = true; s_display_string = "Becher entnehmen"; if (!becher) { @@ -100,4 +94,5 @@ fsm_action_t automat_output(void) .display_string = s_display_string }; } + //gcc automat.c view.c main.c io.c checker.c -o console_automat