Beispielklausur Aufgabe 5 a)
Beispielklausur Aufgabe 5 a)
Hallo, wir sind hier am lernen und sehen an der Lösung von Aufgabe 5 a) keinen Sinn.
Man soll eine direktverbindung als Relation definieren mit Parametern A und B die uns eine Direktverbindung zwischen zwei Bahnhöfen (Orten) OHNE UMSTEIGEN liefert.
Die Lösung ist:
direktverbindung(A,B):- haelt_in(Nr, A, _, _, _), haelt_in(Nr, B, _, _, _).
Doch diese Relation liefert mir doch einfach nur zwei Orte an denen ein und der selbe Zug anhält, aber zwischen diesen beiden Orten kann doch noch ein Halteort liegen und der MUSS ausgeschlossen werden oder nicht? Daher fehlen hier doch noch einige Bedingungen oder? Daher gibt doch die Lösung einfach alle möglichen Ortepaare ab bei denen ein und derselbe Zug anhält.
Man soll eine direktverbindung als Relation definieren mit Parametern A und B die uns eine Direktverbindung zwischen zwei Bahnhöfen (Orten) OHNE UMSTEIGEN liefert.
Die Lösung ist:
direktverbindung(A,B):- haelt_in(Nr, A, _, _, _), haelt_in(Nr, B, _, _, _).
Doch diese Relation liefert mir doch einfach nur zwei Orte an denen ein und der selbe Zug anhält, aber zwischen diesen beiden Orten kann doch noch ein Halteort liegen und der MUSS ausgeschlossen werden oder nicht? Daher fehlen hier doch noch einige Bedingungen oder? Daher gibt doch die Lösung einfach alle möglichen Ortepaare ab bei denen ein und derselbe Zug anhält.
Ich glaube, Direktverbindung soll einfach heißen: Ohne Umsteigen.
So verstehe ich das "Direktverbindung (d.h. ohne Umsteigen)".
Zwischen A und B besteht also eine direkte Verbindung, wenn man nicht umsteigen muss.
Ansonsten wäre das sehr viel umständlicher.
Vielleicht sowas wie
direktverbindung(A,B) :- haelt_in(Nr, A, X, _, _) , haelt_in(Nr, B, Y, _, _), nachbarn(Nr,A,B,X,Y).
nachbarn(A,B, X,Y) :- X < Y, \+(haelt_in(Nr, C, Z,_,_), X < Z, Z < Y).
nachbarn(A,B, X,Y) :- X > Y, \+(haelt_in(Nr, C, Z,_,_), X > Z, Z > Y).
So verstehe ich das "Direktverbindung (d.h. ohne Umsteigen)".
Zwischen A und B besteht also eine direkte Verbindung, wenn man nicht umsteigen muss.
Ansonsten wäre das sehr viel umständlicher.
Vielleicht sowas wie
direktverbindung(A,B) :- haelt_in(Nr, A, X, _, _) , haelt_in(Nr, B, Y, _, _), nachbarn(Nr,A,B,X,Y).
nachbarn(A,B, X,Y) :- X < Y, \+(haelt_in(Nr, C, Z,_,_), X < Z, Z < Y).
nachbarn(A,B, X,Y) :- X > Y, \+(haelt_in(Nr, C, Z,_,_), X > Z, Z > Y).
Ich bin mir sicher das die Lösung falsch ist, denn ich habe das ganze mal beispielhaft programmiert.
Das kam als Ergebnis raus als ich direktverbindung(X,Y). eingegeben habe.
Das zugehörige Programm in der *.pl Datei sieht so aus, damit ihr auch seht das alles korrekt ist.
Das kam als Ergebnis raus als ich direktverbindung(X,Y). eingegeben habe.
Code: Alles auswählen
DES> direktverbindung(X,Y).
{
direktverbindung(berlin,berlin),
direktverbindung(berlin,hamburg),
direktverbindung(darmstadt,darmstadt),
direktverbindung(darmstadt,frankfurt),
direktverbindung(darmstadt,langen),
direktverbindung(frankfurt,darmstadt),
direktverbindung(frankfurt,frankfurt),
direktverbindung(frankfurt,langen),
direktverbindung(hamburg,berlin),
direktverbindung(hamburg,hamburg),
direktverbindung(langen,darmstadt),
direktverbindung(langen,frankfurt),
direktverbindung(langen,langen)
}
Code: Alles auswählen
zug(1, ice).
zug(2, rb).
zug(3, sbahn).
zug(4, ic).
haelt_in(1, berlin, 11, 907, 915).
haelt_in(1, hamburg, 10, 930, 935).
haelt_in(2, frankfurt, 9, 905, 908).
haelt_in(2, langen, 3, 920, 921).
haelt_in(2, darmstadt, 10, 931, 933).
direktverbindung(A, B) :- haelt_in(Nr, A, _, _, _), haelt_in(Nr, B, _, _, _).
Wäre also
korrekt, oder? Dann kommt zwar noch für jedes Paar von Städten, die nicht gleich sind ein Zug in jeder Richtung, aber das sollte ja nicht beachtet werden (laut Aufgabenstellung).
Code: Alles auswählen
direktverbindung(A,B) :-
haelt in(Nr, A,_,_,_),
haelt in(Nr, B,_,_,_),
A \= B.
Viele Grüße,
Florian
Florian
-
- BASIC-Programmierer
- Beiträge: 132
- Registriert: 10. Nov 2005 17:51
- Wohnort: Heppenheim
- Kontaktdaten:
zug(1, ice).
zug(2, rb).
zug(3, sbahn).
zug(4, ic).
haelt_in(1, berlin, 11, 907, 915).
haelt_in(1, hamburg, 10, 930, 935).
haelt_in(2, frankfurt, 9, 905, 908).
haelt_in(2, langen, 3, 920, 921).
haelt_in(2, darmstadt, 10, 931, 933).
direktverbindung(A, B) :- haelt_in(Nr, A, _, _, _), haelt_in(Nr, B, _, _, _), A \= B.
in Prolog funktioniert der Kram so. Wieder ein Fehler in der Mulö. Obwohl Fehler??
Naja, zumindest macht die Lösung keinen Sinn *gg* Ein- und direkt wieder aussteigen könnte man ja.
zug(2, rb).
zug(3, sbahn).
zug(4, ic).
haelt_in(1, berlin, 11, 907, 915).
haelt_in(1, hamburg, 10, 930, 935).
haelt_in(2, frankfurt, 9, 905, 908).
haelt_in(2, langen, 3, 920, 921).
haelt_in(2, darmstadt, 10, 931, 933).
direktverbindung(A, B) :- haelt_in(Nr, A, _, _, _), haelt_in(Nr, B, _, _, _), A \= B.
in Prolog funktioniert der Kram so. Wieder ein Fehler in der Mulö. Obwohl Fehler??
Naja, zumindest macht die Lösung keinen Sinn *gg* Ein- und direkt wieder aussteigen könnte man ja.
Hallo,
erst mal -wir müssen das in Datalog programmieren. Und wenn du dir unsere Ausgabe genau anschaust, dann siehst du dass dir das Programm auch eine Verbindung zwischen Frankfurt - Darmstadt zurückgibt. Aber es besteht keine Direktverbindung zwischen diese beide Städte ( Langen liegt dazwischen )
Grüße
erst mal -wir müssen das in Datalog programmieren. Und wenn du dir unsere Ausgabe genau anschaust, dann siehst du dass dir das Programm auch eine Verbindung zwischen Frankfurt - Darmstadt zurückgibt. Aber es besteht keine Direktverbindung zwischen diese beide Städte ( Langen liegt dazwischen )
Grüße
Es ist nicht genug zu wissen-man muss auch anwenden!
Es ist nicht genug zu wollen-man muss auch tun!
Es ist nicht genug zu wollen-man muss auch tun!
-
- BASIC-Programmierer
- Beiträge: 132
- Registriert: 10. Nov 2005 17:51
- Wohnort: Heppenheim
- Kontaktdaten:
Also ob die nächste Haltestelle nach DA die Haltestelle Frankfurt ist bekommt man aus der Relation eh nicht raus. Da können beliebig viele oder auch keine dazwischen liegen.
Es sei denn man setzt die Vollständigkeit der gegebenen Daten voraus. dann könnte man das über Akunfts- und Abfahrtszeiten machen.
Es sei denn man setzt die Vollständigkeit der gegebenen Daten voraus. dann könnte man das über Akunfts- und Abfahrtszeiten machen.