| Moderator
Registriert seit: 20.07.05 Likes: 198 | Wozu muss man sich irgendwelche Algorithmen überlegen? Der Computer ist doch zum Nachdenken da, man muss ihm nur das Problem beschreiben Prolog gut kommentiert Code: schritt(1). %es gibt zwei Arten von Schritten.
schritt(2).
%Problem des Treppensteigens ist gelöst
%sofern man alle Stufen überwunden hat (wer hätte es gedacht ;) )
loesung(Stufen_gesamt,Zurueckgelegt):-
Stufen_gesamt =:= Zurueckgelegt.
%sonst:
loesung(Stufen_gesamt,Zurueckgelegt):-
Stufen_gesamt>Zurueckgelegt, %hat man noch nicht alle Stufen zurückgelegt,
schritt(Schrittweite), %gibt es einen Schritt, der uns vielleicht
loesung(Stufen_gesamt,Zurueckgelegt+Schrittweite), %in Lösungsnähe bringt
write(Schrittweite),write(' '). %wenn es so war,
%sollte man den Schritt ausgeben
%gehört nicht mehr zur Lösung, sondern dient eher bequemeren Ausgabe
loesungen(Stufen_gesamt, Anzahl):-
findall(X,(loesung(Stufen_gesamt,0),nl),Ergebnis),
length(Ergebnis,Anzahl). oder Prolog, kommentarlos und kompakt Code: schritt(1).
schritt(2).
loesung(St,Zu):- St is Zu.
loesung(St,Zu):- St>Zu,
schritt(Sw),loesung(St,Zu+Sw),write(Sw),write(' ').
loesungen(Stufen_gesamt, Anzahl):-
findall(X,(loesung(Stufen_gesamt,0),nl),Ergebnis),
length(Ergebnis,Anzahl).
wobei "findall" keine magische und geheime Handlung darstellt, sondern dazu dient alle Lösungen aufeinmal auszugeben (normalerweise liefert Prolog immer nur eine und man muss explizit bestätigen, wenn man eine weitere haben möchte).
Wobei man sich auch eine Beschreibung als Permutation der Schritte vorstellen könnte (aber solange mache ich Prolog noch nicht).
__________________ Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt. |