# Haskell simple Listen-Aufgabe



## Farbenfroh (6. Mai 2014)

Hallo!
Ich hoffe es ist nicht verwerflich, hier eine Frage zu einer anderen Programmiersprache zu stellen, aber ich finde einfach keine sonstige Hilfe im Bereich Haskell!

Und zwar:
Wir haben seit einer Woche Haskell, d.h. erst eine Vorlesung dazu gehabt. Ich habe auch 5 Übungsaufgaben hinbekommen aber bei der letzten stehe ich leider auf dem Schlauch:

Aufgabe: Eine Liste mit 11 Elementen wird aufgerufen

```
punktzahl [2,2,0,0,0,1,1,2,2,2,0]
```

Wenn diese Liste
1. mindestens 5x eine Zwei enthält
2. UND mindestens 7x einen Eintrag >0 hat
soll True ausgeworfen werden.

d.h.: 

```
punktzahl [2,2,0,0,0,1,1,2,2,2,0]
liefert True
```


```
punktzahl [2,2,0,0,0,1,0,2,2,2,0]
liefert False (zwar ist 5x 2 dabei aber insg nur 6 Einträge >0)
```

Mein bisheriger Ansatz war:

```
punktzahl :: [Int] -> Bool
punktzahl (x:xs)= sum(x:xs)>11
```

Nun ist mir aber der Fehler aufgefallen, dass es nicht reicht zu überprüfen, ob die Summe der Listenelemente >11 ist, bei [2,2,2,2,2,1,1,0,0,0,0] funktioniert das zwar, bei [2,2,2,2,2,2,0,0,0,0,0] jedoch kommt auch >11 raus, allerdings ist Punkt 2 nicht erfüllt (mind 7 Elemente >0).

Hier fehlt mir also eine Art Counter, der guckt, ob mindestens 7 Elemente >0 dabei waren.

Und ich habe keine Ahnung wie ich das in Haskell implementieren kann, da wir wie gesagt erst 90 Minuten Vorlesung dazu hatten. In Java wärs in Sekunden erledigt ^^

Das müsste irgendwie Rekursiv funktionieren:
Ich gucke mir die Liste punktzahl (x:xs) an. Wenn x >0 incrementiere ich die Variable "count" und addiere den x-Wert zur Variablen "summe" hinzu. Nun ersetze ich den Kopf "x" mit dem nächsten Elemente der Liste und rufe die Funktion damit erneut auf. Das ganze so lange bis kein Element mehr in der Liste ist.

Bitte um Hilfe und Hinweise wie ich das implementieren kann!


----------



## Thunderstorm (7. Mai 2014)

Hallo,

leg dir eine zusätzliche Funktion an, die die gewünschten Zähler hat. Die Hauptfunktiion ruft diese auf und gibt deren Resultat wieder. Hier ein kleines Grundgerüst.

help :: [Int] -> int -> int -> Bool
help [] _ _
help (x:xs) y1 y2

Falls du es nicht schaffst, schreib mir eine PM, da das hier ein Java Forum :toll:

lg Thunder

PS : Was wolltest du hiermit bezwecken punktzahl (x:xs)= sum(x:xs)>11 ???:L


----------

