/* FACHWAH4.PRO */ fw :- anleitung, dialog, verabschiedung. anleitung :- nl, nl, nl, write(' F Ž C H E R W A H L'), nl, write(' -------------------'), nl, nl, write(' Dieses Programm hilft bei der Wahl der Prfungsf„cher'), nl, write(' fr die Abiturprfung im Land Niedersachsen.'), nl, nl, write(' Sollen die Abkrzungen der F„cher gezeigt werden?(j/n) '), read(Antwort), write(Antwort), nl, nl, abkuerzungen(Antwort). abkuerzungen(j) :- zugeordnet1(Fachkuerzel, Fachname), tab(1), write(Fachkuerzel), write(' = '), write(Fachname), nl, fail. abkuerzungen(_). quittiert :- nl, write(' Eingabetaste drcken!'), skip(13), nl. verabschiedung :- nl, write(' Ende des Programms "F„cherwahl".'), nl, write(' Auf Wiedersehen.'), nl. dialog :- nl, write(' Geben Sie Ihre vier Prfungsf„cher (Krzel) ein!'), nl, leistungsfaecher(F1, F2), grundkursfaecher(F1, F2, F3, F4), nl, write(' Die F„cherkombination '), ausgegeben([F1, F2, F3, F4]), nl, write(' ist zul„ssig.'), write(' Diese Auskunft erfolgt o h n e G e w „ h r.'), nl, quittiert. dialog. leistungsfaecher(F1, F2) :- geprueft1(F1), geprueft2(F1, F2). geprueft1(Fach) :- nl, write(' Das erste Prfungsfach muá Deutsch, Mathematik, eine'), nl, write(' Naturwissenschaft oder eine Fremdsprache sein.'), nl, gelesen(Fach), existiert(p1, Fach), moeglich(Fach), !. geprueft1(Fach) :- nl, write(' Bitte noch einmal!'), !, geprueft1(Fach). geprueft2(Fach1, Fach2) :- nl, write(' Geben Sie das zweite Prfungsfach ein!'), nl, gelesen(Fach2), existiert(p2, Fach2), verschieden(Fach2, [Fach1]), !. geprueft2(Fach1, Fach2) :- nl, write(' Bitte noch einmal!'), !, geprueft2(Fach1, Fach2). gelesen(Fachkuerzel) :- write(' >>> '), read(Fachkuerzel), atom(Fachkuerzel), zugeordnet1(Fachkuerzel, Fachname), write(Fachname), nl, !. gelesen(Fachkuerzel) :- nl, write(' Dies ist kein zul„ssiges Fachkrzel.'), nl, write(' Versuchen Sie es noch einmal!'), nl, !, gelesen(Fachkuerzel). existiert(Fachtyp, Fachkuerzel) :- faecher(Fachtyp, Liste), element(Fachkuerzel, Liste), !. existiert(Fachtyp, Fachkuerzel) :- zugeordnet1(Fachkuerzel, Fachname), nl, write(Fachname), write(' kann nicht'), zugeordnet2(Fachtyp, Fachtypname), write(Fachtypname), write(' sein. '), !, fail. moeglich(Fach) :- faecher(dfmn, Liste), element(Fach, Liste), !. moeglich(_) :- nl, write(' Nicht m”glich!'), nl, write(' Sie mssen eines der folgenden F„cher w„hlen:'), nl, faecher(dfmn, Liste), ausgegeben(Liste), !, fail. verschieden(Fach, Liste) :- not element(Fach, Liste), !. verschieden(Fach, Liste) :- nl, write(' Was soll denn das?!'), write(' Die F„cher mssen verschieden sein.'), nl, !, fail. grundkursfaecher(F1, F2, F3, F4) :- geprueft3(F1, F2, F3, Nr), geprueft4(F1, F2, F3, F4, Nr), !. grundkursfaecher(F1, F2, F3, F4) :- grundkursfaecher(F1, F2, F3, F4). geprueft3(Fach1, Fach2, Fach3, Nr) :- nl, write(' Ihre Wahl bisher: '), ausgegeben([Fach1, Fach2]), nl, write(' Geben Sie das dritte und das vierte Prfungsfach ein, '), bedingung(Fach1, Fach2, Nr), meldung(Nr, Text), nl, write(' darunter '), write(Text), nl, gelesen(Fach3), existiert(p3, Fach3), verschieden(Fach3, [Fach1, Fach2]), !. geprueft3(Fach1, Fach2, Fach3, Nr) :- nl, write(' Noch einmal bitte!'), !, geprueft3(Fach1, Fach2, Fach3, Nr). geprueft4(Fach1, Fach2, Fach3, Fach4, Nr) :- nl, write(' Ihre Wahl bisher: '), ausgegeben([Fach1, Fach2, Fach3]), nl, write(' Welches ist Ihr viertes Prfungsfach?'), nl, gelesen(Fach4), existiert(p4, Fach4), verschieden(Fach4, [Fach1, Fach2, Fach3]), zulaessig(Nr, Fach3, Fach4), !. geprueft4(Fach1, Fach2, Fach3, Fach4, Nr) :- nl, write(' Fehlerhafte Wahl des dritten oder vierten Fachs.'), nl, write(' Noch einmal bitte!'), !, fail. /* Bedingungen zur Wahl des 3. und 4. Prfungsfachs */ bedingung(Fach1, Fach2, m1) :- faecher(df, DFSpr), element(Fach1, DFSpr), element(Fach2, DFSpr), !. bedingung(Fach1, Fach2, m1) :- faecher(f, FSpr), element(Fach1, FSpr), element(Fach2, [ku, mu]), !. bedingung(de, Fach2, m2) :- element(Fach2, [ku, mu]), !. bedingung(Fach1, Fach2, m3) :- faecher(f, FSpr), faecher(b, BFaecher), element(Fach1, FSpr), element(Fach2, BFaecher), !. bedingung(de, Fach2, m4) :- faecher(b, BFaecher), element(Fach2, BFaecher), !. bedingung(ma, Fach2, m5) :- faecher(b, BFaecher), element(Fach2, BFaecher), !. bedingung(Fach1, Fach2, m6) :- faecher(df, DFSpr), element(Fach1, DFSpr), faecher(mn, NatWiss), element(Fach2, NatWiss), !. bedingung(ma, Fach2, m6) :- element(Fach2, [ku, mu]), !. bedingung(Fach1, Fach2, m7) :- faecher(n, NatWiss), element(Fach1, NatWiss), element(Fach2, NatWiss), !. bedingung(ma, Fach2, m8) :- faecher(n, NatWiss), element(Fach2, NatWiss), !. bedingung(Fach1, Fach2, m9) :- faecher(b, BFaecher), element(Fach1, BFaecher), faecher(n, NatWiss), element(Fach2, NatWiss), !. bedingung(Fach1, Fach2, m0) :- element(Fach1, [ku, mu]), faecher(b, BFaecher), element(Fach2, BFaecher), !. bedingung(Fach1, Fach2, Nr) :- bedingung(Fach2, Fach1, Nr). meldung(m1, 'je ein Fach aus den Aufgabenfeldern B und C.'). meldung(m2, 'Mathematik und ein Fach aus dem Aufgabenfeld B.'). meldung(m3, 'ein beliebiges Fach aus dem Aufgabenfeld C.'). meldung(m4, 'Ma oder (eine FrSpr und (Ph oder Ch oder Bi oder If))'). meldung(m5, 'ein beliebiges Fach aus dem Aufgabenfeld A'). meldung(m6, 'ein beliebiges Fach aus dem Aufgabenfeld B'). meldung(m7, 'De oder eine FrSpr und ein beliebiges Fach aus B.'). meldung(m8, 'je ein Fach aus den Aufgabenfeldern A und B.'). meldung(m9, 'De oder eine FrSpr oder (Ma und ein Fach aus A).'). meldung(m0, 'ein Fach aus B und (De oder eine FrSpr oder Ma).'). zulaessig(m1, Fach3, Fach4) :- faecher(b, BFaecher), faecher(c, CFaecher), element(Fach3, BFaecher), element(Fach4, CFaecher), !. zulaessig(m1, Fach3, Fach4) :- faecher(b, BFaecher), faecher(c, CFaecher), element(Fach4, BFaecher), element(Fach3, CFaecher), !. zulaessig(m2, ma, Fach4) :- faecher(b, BFaecher), element(Fach4, BFaecher), !. zulaessig(m2, Fach3, ma) :- faecher(b, BFaecher), element(Fach3, BFaecher), !. zulaessig(m3, Fach3, _) :- faecher(c, CFaecher), element(Fach3, CFaecher), !. zulaessig(m3, _, Fach4) :- faecher(c, CFaecher), element(Fach4, CFaecher), !. zulaessig(m4, ma, _) :- !. zulaessig(m4, _, ma) :- !. zulaessig(m4, Fach3, Fach4) :- faecher(f, FSpr), element(Fach3, FSpr), faecher(nif, NatWissIf), element(Fach4, NatWissIf), !. zulaessig(m4, Fach3, Fach4) :- faecher(f, FSpr), element(Fach4, FSpr), faecher(nif, NatWissIf), element(Fach3, NatWissIf), !. zulaessig(m5, Fach3, _) :- faecher(a, AFaecher), element(Fach3, AFaecher), !. zulaessig(m5, _, Fach4) :- faecher(a, AFaecher), element(Fach4, AFaecher), !. zulaessig(m6, Fach3, _) :- faecher(b, BFaecher), element(Fach3, BFaecher), !. zulaessig(m6, _, Fach4) :- faecher(b, BFaecher), element(Fach4, BFaecher), !. zulaessig(m7, Fach3, Fach4) :- faecher(df, DFSpr), element(Fach3, DFSpr), faecher(b, BFaecher), element(Fach4, BFaecher), !. zulaessig(m7, Fach3, Fach4) :- faecher(df, DFSpr), element(Fach4, DFSpr), faecher(b, BFaecher), element(Fach3, BFaecher), !. zulaessig(m8, Fach3, Fach4) :- faecher(a, AFaecher), faecher(b, BFaecher), element(Fach3, AFaecher), element(Fach4, BFaecher), !. zulaessig(m8, Fach3, Fach4) :- faecher(a, AFaecher), faecher(b, BFaecher), element(Fach4, AFaecher), element(Fach3, BFaecher), !. zulaessig(m9, Fach3, _) :- faecher(df, DFSpr), element(Fach3, DFSpr), !. zulaessig(m9, _, Fach4) :- faecher(df, DFSpr), element(Fach4, DFSpr), !. zulaessig(m9, ma, Fach4) :- faecher(a, AFaecher), element(Fach4, AFaecher), !. zulaessig(m9, Fach3, ma) :- faecher(a, AFaecher), element(Fach3, AFaecher), !. zulaessig(m0, Fach3, Fach4) :- faecher(b, BFaecher), element(Fach3, BFaecher), faecher(dfm, DFSprM), element(Fach4, DFSprM), !. zulaessig(m0, Fach3, Fach4) :- faecher(b, BFaecher), element(Fach4, BFaecher), faecher(dfm, DFSprM), element(Fach3, DFSprM), !. zugeordnet1(de, ' Deutsch'). zugeordnet1(en, ' Englisch'). zugeordnet1(fr, ' Franz”sisch'). zugeordnet1(la, ' Latein'). zugeordnet1(ku, ' Kunst'). zugeordnet1(mu, ' Musik'). zugeordnet1(ge, ' Geschichte'). zugeordnet1(gk, ' Gemeinschaftskunde'). zugeordnet1(ek, ' Erdkunde'). zugeordnet1(re, ' Religionslehre'). zugeordnet1(ma, ' Mathematik'). zugeordnet1(ph, ' Physik'). zugeordnet1(ch, ' Chemie'). zugeordnet1(bi, ' Biologie'). zugeordnet1(if, ' Informatik'). zugeordnet1(sp, ' Sport'). zugeordnet2(p1, ' 1. Prfungsfach'). zugeordnet2(p2, ' 2. Prfungsfach'). zugeordnet2(p3, ' 3. Prfungsfach'). zugeordnet2(p4, ' 4. Prfungsfach'). faecher(p1, [de, en, fr, la, ku, mu, ge, gk, ek, re, ma, ph, ch, bi]). faecher(p2, [de, en, fr, la, ku, mu, ge, gk, ek, re, ma, ph, ch, bi]). faecher(p3, [de, en, fr, la, ku, mu, ge, gk, ek, re, ma, ph, ch, bi, if]). faecher(p4, [de, en, fr, la, ku, mu, ge, gk, ek, re, ma, ph, ch, bi, if, sp]). faecher(a, [de, en, fr, la, ku, mu]). faecher(b, [ge, gk, ek, re]). faecher(c, [ma, ph, ch, bi, if]). faecher(f, [en, fr, la]). faecher(df, [de, en, fr, la]). faecher(dfm, [de, en, fr, la, ma]). faecher(dfmn, [de, en, fr, la, ma, ph, ch, bi]). faecher(n, [ph, ch, bi]). faecher(mn, [ma, ph, ch, bi]). faecher(nif, [ph, ch, bi, if]). element(E, [E| _]). element(E, [_| Rest]) :- element(E, Rest). ausgegeben([]) :- nl. ausgegeben([Fachkuerzel| Restliste]) :- zugeordnet1(Fachkuerzel, Fachname), nl, tab(30), write(Fachname), !, ausgegeben(Restliste).