#include #include #define UNBETAETIGT 0 #define BETAETIGT 1 #define SCHALTERANZAHL 8 #define NICHT_VORHANDEN -1 #define SCHALTER 1 #define OEFFNER 2 // Funktionsprototypen. void zeigePlan(); void zeigeZustand(); int pruefeLogik(); int toggle(); main () { int i, run, settings[SCHALTERANZAHL]; int input; int typen[SCHALTERANZAHL] = {SCHALTER, OEFFNER, OEFFNER, SCHALTER, NICHT_VORHANDEN, SCHALTER, OEFFNER, SCHALTER}; int default_setting[SCHALTERANZAHL] = {UNBETAETIGT, UNBETAETIGT, UNBETAETIGT, UNBETAETIGT, NICHT_VORHANDEN, UNBETAETIGT, UNBETAETIGT, UNBETAETIGT}; for (i = 0; i < SCHALTERANZAHL; i++) { settings[i] = default_setting[i]; } do { run = 1; printf("ABSCHLUSSAUFGABE 1.8 - SCHALTUNGSLOGIK\n"); printf("======================================"); printf("\n\nAktuelle Schalterbelegung und Schaltplan:\n\n"); zeigeZustand(settings, typen); printf("\n\nBitte waehlen Sie mit den Tasten 1 - 8 einen\n"); printf("Schalter, den Sie betaetigen moechten.\n"); printf("'0' zum Beenden.\n\n\tAUSWAHL: "); scanf("%c", &input); if (input >= 1 && input <= 8 && settings[input-1] != NICHT_VORHANDEN) { settings[input-1] = toggle(settings[input-1]); system("cls"); } else { switch (input) { case 0: printf("\n\nArrividerci und Goodbye, bis zum naechsten Mal...!\n\n"); run = 0; break; default: system("cls"); printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"); printf("!!! BITTE KORREKTE AUSWAHL TREFFEN !!!\n"); printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"); } } } while(run == 1); printf("\n\n"); system("PAUSE"); } int toggle(int setting) { if (setting == NICHT_VORHANDEN) { return setting; } if (setting == BETAETIGT) { setting = UNBETAETIGT; } else { setting = BETAETIGT; } return setting; } void zeigeZustand(int settings[], int typen[]) { int i, l; for (i = 0; i < SCHALTERANZAHL; i++) { // Pruefen, ob manche Schalternummern nicht verwendet werden. if (settings[i] == NICHT_VORHANDEN) { continue; } // Zustand des Schalters angeben. printf("Schalter %d ist ", i+1); (settings[i] == BETAETIGT)? printf("betaetigt.\n"):printf("nicht betaetigt.\n"); } // Zustand der Lampe ausgeben l = pruefeLogik(settings); zeigePlan(settings, typen, l); } int pruefeLogik(int settings[]) { // Korrekturwert zur Vereinfachung der Eingabe. int i = 1; if (((settings[1-i] == BETAETIGT) || (settings[2-i] == UNBETAETIGT && settings[3-i] == UNBETAETIGT) || (settings[4-i] == BETAETIGT) ) && ((settings[6-i] == BETAETIGT) || (settings[8-i] == BETAETIGT) || (settings[7-i] == UNBETAETIGT))) { printf("Lampe 1 leuchtet.\n\n"); return 1; } else { printf("Lampe 1 leuchtet nicht.\n\n"); return 0; } } void zeigePlan(int settings[], int typen[], int l) { int i, j, k = 1; char lampe[4]={'#','#','#'}; if (l == 0) { for (i = 0; i < 3; i++) { lampe[i] = '.'; } } char s_geschaltet[3] = {'_','_'}; char s_offen[3] = {'/',' '}; char o_geschaltet[3] = {'-','|'}; char o_offen[3] = {'\\','|'}; char s[SCHALTERANZAHL][3]; for (i = 0; i < SCHALTERANZAHL; i++) { // SCHALTER if (settings[i] == BETAETIGT && typen[i] == SCHALTER) { for (j = 0; j < 3; j++) { s[i][j] = s_geschaltet[j]; } } if (settings[i] == UNBETAETIGT && typen[i] == SCHALTER) { for (j = 0; j < 3; j++) { s[i][j] = s_offen[j]; } } //OEFFNER if (settings[i] == BETAETIGT && typen[i] == OEFFNER) { for (j = 0; j < 3; j++) { s[i][j] = o_geschaltet[j]; } } if (settings[i] == UNBETAETIGT && typen[i] == OEFFNER) { for (j = 0; j < 3; j++) { s[i][j] = o_offen[j]; } } } printf("______%s______ _______%s_______\n", s[4-k], s[6-k]); printf("| S4 | | S6 |\n"); printf("| | | |\n"); printf("|__ ___ ___|______|______ ______|\n"); printf("| %s %s | | %s |\n", s[2-k], s[3-k], s[7-k]); printf("| S2 S3 | | S7 |\n"); printf("| | | |\n"); printf("|_____%s_____| |______%s______|\n", s[1-k], s[8-k]); printf("| S1 S8 |\n"); printf("| %s\n", lampe); printf("| L1 %s\n", lampe); printf("| %s\n", lampe); printf("|----+ |---------------------------|\n"); }