Habe hier eine Aufgabe mit einer Liste. Bitte um Hilfe.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Habe hier eine Aufgabe mit einer Liste. Bitte um Hilfe.

    Hallo,

    habe folgendes Problem.
    Ich habe als Aufgabe bekommen folgenden Quellcode umzubauen damit als Ergebnis fogelndes raus kommt.

    - man hat eine Liste z.B. (a , b , c, a)
    - aus der möchte ich alle Elemente zählen damit als Ergebnis jedes Element einzeln gezählt angezeigt wird. also bei diesem Beispiel a=2, b=1, c=1


    diesen Quelltext soll ich umbauen

    [code:1]count_element( [], _, 0).
    count_element( [H|T], Element, Anzahl) :- H = Element, count_element(T, Element, X), Anzahl = X + 1.
    count_element( [_|T], Element, Anzahl) :- count_element(T, Element, Anzahl).[/code:1]


    Der gegebene Quelltext gibt nur aus das z.B. bei der Liste (a, b, a) das a zweimal vorkommt.

    Ich bin da jetzt schon seit einem Tag dran aber ich komme einfach nicht auf die Lösung.
    Kann mir da bitte jemand weiterhelfen?

    MFG
    MN
  • Hi,

    als Lösungsansatz würde ich folgenden Algorithmus empfehlen. Dies ist zwar nicht das effizienteste Vorgehen, aber relativ einfach umzusetzen.

    [code:1]
    countAllElements([]).
    countAllElements(List) :-
    % Gibt das erste Element der Liste List in Head zurück
    head(List, Head),

    % Zählt das Element Head in der Liste List und gibt es in Number zurück
    count(Head, List, Number),

    % Löscht das Element Head in der Liste List und gibt die modifizierte
    % Liste in NewList zurück
    deleteOne(Head, List, NewList),

    % Ausgabe
    write(Head), write(' = '), write(Number), nl,

    % Rekursiver Aufruf mit der modifizierten Liste
    countAllElements(NewList).
    [/code:1]

    Das Grundprinzip ist, in der gesamten Liste das erste Element zu zählen, dann dieses Element überall aus der Liste zu entfernen und das Verfahren mit der neuen Liste solange zu wiederholen, bis kein Element mehr in der Liste vorhanden ist.

    Viele Grüße,

    Siracusa