Haskell作业 写作编程  辅导Haskell作业编程编程帮做Haskell

Verwenden Sie im Wesentlichen elem, head, tail, map, reverse, last, filter, concat, sum
und ( ), um die folgenden Funktionen zur Listenverarbeitung in Haskell zu programmieren
die Verwendung von Pattern-Matching ist verboten:
a) Eine Funktion, die einen String1
erhalt und zunachst folgende Ersetzungen durchfuhren
soll:
Entspricht ein Zeichen einer Ziffer, so soll es auf die entsprechende Zahl abgebildet
werden.
Entspricht ein Zeichen dem Buchstaben a, so soll dieses Zeichen auf die Zahl 1 abgebildet
werden.
Alle anderen Zeichen sollen auf die Zahl 0 abgebildet werden.
Danach soll die Summe dieser Zahlen berechnet werden. Zum Beispiel soll fur 138aza
der Wert 14 berechnet werden. (7 Punkte)
b) Einige Leute geben heutzutage einer Aussage nochmal eine besonders freundliche Betonung,
indem sie alles gro? schreiben. Ebenso tippen einige Personen gefuhlt 20.000 Zeichen
pro Sekunde mit dem Smartphone, haben aber absolut keine Zeit, die Gro?- und Kleinschreibung
zu beachten. Geben Sie eine Funktion an, die eine Liste von Strings erhalt und
alle Kleinbuchstaben eines Strings, der mit einem Ausrufezeichen endet, in Gro?buchstaben
umwandelt. Falls ein String jedoch nicht mit einem Ausrufezeichen endet, sollen alle
Gro?buchstaben in Kleinbuchstaben umgewandelt werden. Zum Beispiel soll fur
[Du bist so intelligent wie eine Bananeschale und halb so gutaussehend!,
Ich schreibe jedes Wort klein Nebensaetze und Punkte kenne ich nicht]
das folgende Ergebnis berechnet werden:
[DU BIST SO INTELLIGENT WIE EINE BANANESCHALE UND HALB SO GUTAUSSEHEND!,
ich schreibe jedes wort klein nebensaetze und punkte kenne ich nicht]
(7 Punkte)
c) Eine Funktion, die eine Liste von Listen von Zahlen erhalt und zunachst alle innersten
Listen entfernt, die weniger als 4 Elemente enthalten. Die ubriggebliebenen inneren Listen
sollen umgedreht werden und au?erdem sollen bei jeder inneren Liste alle Elemente au?er
den ersten Dreien entfernt werden. Danach sollen alle inneren Listen zu einer gro?en verschmolzen
werden. Zum Beispiel soll fur [[1,2],[1..4],[6..8],[8..12]] das Ergebnis
[4,3,2,12,11,10] berechnet werden. (11 Punkte)
1Strings sind in Haskell nichts anderes als Listen von Zeichen, d.h. Haskell ist nur eine andere Darstellung
fur die Liste [H,a,s,k,e,l,l].
1
Hinweis: Die Bibliothek Data.Char beinhaltet nutzliche Funktionen, die Sie in Ihrer L osung
verwenden durfen. Sie k onnen die Bibliothek durch import Data.Char am Anfang des Quelltextes
in Ihr Programm einbinden. Die Dokumentation von Bibliotheken finden Sie im Internet
unter https://www.haskell.org/ghc/docs/latest/html/libraries/.
Aufgabe 2 (30 Punkte)
Implementieren Sie in Haskell die folgenden Funktionen auf Listen im Wesentlichen unter Verwendung
von Pattern-Matching und Rekursion d.h. Sie durfen Hilfsfunktionen definieren und
nutzen, allerdings ist die Verwendung von Listenfunktionen wie z.B. map, concat, replicate
usw. verboten.
a) Eine Funktion, die eine Liste erwartet und je zwei benachbarte Elemente vertauscht.
Enthalt die Liste eine ungerade Anzahl an Elementen, so bleibt die Position des
letzten Elements unverandert. Zum Beispiel soll fur die Liste [1..9] das Ergebnis
[2,1,4,3,6,5,8,7,9] berechnet werden. (7 Punkte)
b) Eine Funktion, die eine Liste von Listen von Listen von Zahlen erwartet und die Summe
der jeweils ersten Elemente der innersten Listen berechnet. Zum Beispiel soll 44 fur die
Liste [[[1,2],[4,5],[7,8,9]],[[13,15],[19]]] berechnet werden. (10 Punkte)
c) Eine Funktion, die eine Liste erwartet und eine Liste zuruckgibt, die das k-te Element
der Eingabeliste k-mal enthalt. Dabei soll die Reihenfolge unverandert bleiben und der
Listenindex erstreckt sich von 1 bis zur Lange der Liste. Zum Beispiel soll fur die Liste
[a,b,c] das Ergebnis abbccc berechnet werden. (13 Punkte)
Aufgabe 3 (45 Punkte)
Diese Aufgabe beschaftigt sich mit Darts.
Das Dart-Board ist in 20 Zahlensegmente unterteilt. Die Felder zahlen jeweils soviel, wie au?en
am entsprechenden Segment notiert ist. Ausnahmen sind die schmalen Kreise. Im au?eren Kreis
zahlen die Felder das Doppelte (Double-Felder), im mittleren Kreis das Dreifache (Triple-Felder)
der entsprechenden Zahl. Der Mittelpunkt des Boards, das Bullseye, zahlt 50 Punkte (Double 25),
der Ring darum herum (Bull) 25 Punkte. Gespielt wird die Variante 501 mit Double-Out:
Jeder Spieler beginnt bei 501 Punkten. Eine Aufnahme besteht
aus (maximal) drei nacheinander geworfenen Darts.
Die erzielten Punkte werden jedesmal von der verbleibenden
Punktzahl abgezogen, wobei nach jeder Aufnahme der
jeweilige Gegenspieler dran ist. Es durfen nur diejenigen
Darts gezahlt werden, die im Board steckenbleiben. Gewonnen
hat derjenige Spieler, der zuerst genau 0 Punkte
erreicht hat, wobei der letzte Dart ein Doppel-Feld oder
das Bullseye treffen muss. Erzielt der Spieler zu viele Punkte
oder so viele, dass er nicht mehr mit einem Doppel abschlie?en
kann (der Spieler uberwirft sich), so werden alle
Darts dieser Aufnahme nicht gezahlt der Spieler bleibt
auf dem selben Rest wie vor der Aufnahme. In der letzte
Aufnahme, in der die Punktzahl genau auf 0 reduziert
wird, konnen auch weniger als 3 Darts geworfen werden.
Falls man sich uberwirft kann eine Aufnahme ebenso aus
weniger als 3 Darts bestehen.

添加老师微信回复‘’官网 辅导‘’获取专业老师帮助,或点击联系老师1对1在线指导