Bearbeiten von „P1-WS04-MusterLoesung07.txt“
Zur Navigation springen
Zur Suche springen
Warnung: Du bist nicht angemeldet. Deine IP-Adresse wird bei Bearbeitungen öffentlich sichtbar. Melde dich an oder erstelle ein Benutzerkonto, damit Bearbeitungen deinem Benutzernamen zugeordnet werden.
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 68: | Zeile 68: | ||
% (d) tore_durchschnitt(+Mannschaft, | % (d) tore_durchschnitt(+Mannschaft, | ||
% ? | % ?Treffer_Durchschnitt, ?Gegentreffer_Durchschnitt) | ||
% berechnet die durchschnittliche Zahl von Treffern und | % berechnet die durchschnittliche Zahl von Treffern und | ||
% Gegentreffern pro Spiel einer Mannschaft (unter Benutzung des | % Gegentreffern pro Spiel einer Mannschaft (unter Benutzung des | ||
Zeile 74: | Zeile 74: | ||
% length/2 für Listen): | % length/2 für Listen): | ||
tore_durchschnitt(Mannschaft, | tore_durchschnitt(Mannschaft, Treffer_Durchschnitt, Gegentreffer_Durchschnitt) :- | ||
trefferlisten(Mannschaft, Trefferliste, Gegentrefferliste), | trefferlisten(Mannschaft, Trefferliste, Gegentrefferliste), | ||
sum(Trefferliste, Treffer), | sum(Trefferliste, Treffer), | ||
sum(Gegentrefferliste, Gegentreffer), | sum(Gegentrefferliste, Gegentreffer), | ||
length(Trefferliste, | length(Trefferliste, AnzahlSpiele), | ||
Treffer_Durchschnitt is Treffer / AnzahlSpiele, | |||
Gegentreffer_Durchschnitt is Gegentreffer / AnzahlSpiele. | |||
% (e) punkte(+Mannschaft, ?Plus, ?Minus) | % (e) punkte(+Mannschaft, ?Plus, ?Minus) | ||
Zeile 92: | Zeile 92: | ||
punkte(Mannschaft, 1, 1) :- | punkte(Mannschaft, 1, 1) :- | ||
tore(Mannschaft, | tore(Mannschaft, Unentschieden_Treffer, Unentschieden_Treffer). | ||
punkte(Mannschaft, 0, 2) :- | punkte(Mannschaft, 0, 2) :- | ||
Zeile 153: | Zeile 153: | ||
% schlage_wort_nach(?Deutsch, ?Englisch, ?Woerterbuch) | % schlage_wort_nach(?Deutsch, ?Englisch, ?Woerterbuch) | ||
% sucht Deutsch | % sucht Deutsch/Englisch Wortpaar in Woerterbuch (einer Liste von | ||
% "Paaren", wobei letzteres lt. Aufgabenblatt Listen mit zwei | % "Paaren", wobei letzteres lt. Aufgabenblatt Listen mit zwei | ||
% Elementen sind). | % Elementen sind). | ||
Zeile 174: | Zeile 174: | ||
uebersetzung([], []). | uebersetzung([], []). | ||
uebersetzung( | uebersetzung([DeutschesWort|RestDeutsch], | ||
[EnglischesWort|RestEnglisch]) :- | |||
schlage_wort_nach( | schlage_wort_nach(DeutschesWort, EnglischesWort), | ||
uebersetzung( | uebersetzung(RestDeutsch, RestEnglisch). | ||
% Tests zeigen was passiert, wenn mehrer Wörter gleich übersetzt sind; | % Tests zeigen was passiert, wenn mehrer Wörter gleich übersetzt sind; | ||
Zeile 218: | Zeile 218: | ||
suffix(S, [_|X]) :- suffix(S, X). | suffix(S, [_|X]) :- suffix(S, X). | ||
% Anfragen, bei denen nur der Präfix | % Anfragen, bei denen nur der Präfix/Suffix instanziiert sind, | ||
% terminieren, aber geben nur eine Lösung, bei der die gesamte | % terminieren, aber geben nur eine Lösung, bei der die gesamte | ||
% Restliste durch eine Variable dargestellt wird: | % Restliste durch eine Variable dargestellt wird: | ||
Zeile 245: | Zeile 245: | ||
% Hierfür muß wiederum lediglich der Rekursionsabschluß so | % Hierfür muß wiederum lediglich der Rekursionsabschluß so | ||
% geändert werden, daß die Liste selbst mindestens ein Element | % geändert werden, daß die Liste selbst mindestens ein Element | ||
% mehr als der Präfix | % mehr als der Präfix/Suffix hat (hier als Varianten der Prädikate | ||
% aus (b), analog auch für die Originale aus (a) machbar): | % aus (b), analog auch für die Originale aus (a) machbar): | ||
Zeile 285: | Zeile 285: | ||
% jetzt brauchen wir ein Hilfsprädikat, um rekursiv die Liste | % jetzt brauchen wir ein Hilfsprädikat, um rekursiv die Liste | ||
% durchzugehen und die Worthäufigkeiten zu bestimmen: | % durchzugehen und die Worthäufigkeiten zu bestimmen: | ||
zaehle_woerter(Woerter, | zaehle_woerter(Woerter, Haeufigkeiten_Roh), | ||
% anschließend ist das Ergebnis noch nach den Wörtern sortiert, | % anschließend ist das Ergebnis noch nach den Wörtern sortiert, | ||
% nicht wie gewünscht zuerst nach den Häufigkeiten, aber das ist | % nicht wie gewünscht zuerst nach den Häufigkeiten, aber das ist | ||
% schnell erledigt: | % schnell erledigt: | ||
sort( | sort(Haeufigkeiten_Roh, Haeufigkeiten). | ||
% zaehle_woerter/2 bekommt die sortierte Liste der Wörter und soll | % zaehle_woerter/2 bekommt die sortierte Liste der Wörter und soll | ||
Zeile 315: | Zeile 315: | ||
% Rekursionsabschluß / Zählen beenden, wenn man auf ein anderes Wort | % Rekursionsabschluß / Zählen beenden, wenn man auf ein anderes Wort | ||
% trifft (und _nur_ dann): | % trifft (und _nur_ dann): | ||
zaehle_wort([Wort, | zaehle_wort([Wort,NaechstesWort|Woerter], Wort, 1, [NaechstesWort|Woerter]) :- | ||
Wort \= | Wort \= NaechstesWort. | ||
% Rekursion falls Wort noch mehrfach in der Liste - ein Vorkommnis | % Rekursion falls Wort noch mehrfach in der Liste - ein Vorkommnis | ||
% wegnehmen und nach diesem Wort weitersuchen/zählen, rekursiv Anzahl | % wegnehmen und nach diesem Wort weitersuchen/zählen, rekursiv Anzahl | ||
% um einen erhöhen. | % um einen erhöhen. | ||
zaehle_wort([Wort,Wort|Woerter], Wort, Anzahl, | zaehle_wort([Wort,Wort|Woerter], Wort, Anzahl, RestWoerter) :- | ||
zaehle_wort([Wort|Woerter], Wort, Nochanzahl, | zaehle_wort([Wort|Woerter], Wort, Nochanzahl, RestWoerter), | ||
Anzahl is Nochanzahl + 1. | Anzahl is Nochanzahl + 1. | ||