Gepostet: |
findandreplace | ||||||||||
Hallo, also ich bin anfänger was haskell betrifft und habe nun bei zwei aufgaben, die ich in meinem studium lösen muss, probleme. 1. Ich soll eine Funktion findAndReplace schreiben (findAndReplace :: String->String->String->String), die sequentiell in einem Text jedes Vorkommen eines Strings str durch einen anderen String newstr ersetzt. Dabei wäre es am besten, wenn der Text nur einmal von rechts nach links durchgegangen wird (also wenn der neue String wieder den alten enthält, soll dieser nicht mehr ersetzt werden). 2. Diese Aufgabe finde ich noch schwieriger: Also gegeben ist folgende Funktion: aufAb :: Int->Int aufAb n | n==1 = 1 | even n = aufAb (div n 2) | odd n = aufAb (3*n+1) Die Aufgabenstellung ist folgende: Schreiben Sie Funktionen, die für Argumente n aus einem Eingabeintervall die maximale Anzahl an Funktionsaufrufen aufAb () bei der Bestimmung von aufAb n berechnet, die maximalen Zwischenergebnisse bei der Berechnung von aufAb n ausgibt und Listen der lokalen Maxima bezüglich dieser beiden Kriterien erstellt (dieses letzte ist glaube ich überflüssig; wichtig sind die zwei ersten Funktionen). (Also ich soll einmal eine Funktion schreiben, die als eingabe n kriegt und dann für das Intervall [1..n] die Funktionsaufrufe bei jeder Zahl aus dem Intervall berechnet, und mir dann eine Liste ausgibt: [(n1,x1),(n2,x2)...] wobei n eine Zahl aus dem Intervall bis n ist und x die Anzahl der Funktionsaufrufe beim zugehörigen n; die zweite Funktion gibt eine Liste aus [(n1,x1),(n2,x2)...] wobei hier x das maximale Zwischenergebnis bei der Berechnung von aufAb vom zugehörigen n ist. so zumindest habe ich die Aufgabenstellung verstanden) Ich hoffe ihr habt die Aufgaben verstanden und könnt mir helfen! Vielen dank schon mal! |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
findAndReplace :: String->String->String->String so das funktioniert schonmal... Aufruf Main> findAndReplace meintext suchstr newstr |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
danke, aber... | ||||||||||
Vielen, vielen dank schon mal für deinen einsatz. leider ist die fuktion nicht ganz so, wie sie sein sollte: Main> findAndReplace "halle mein Name ist Julia und Johanna" "ha" "lo" "lolle mein Name ist Julia und Johanna" da hätte die funktion eigentlich auch das "ha" in "Johanna" ersetzen müssen! falls du das zufällig beheben könntest (oder weißt wie die funktion zu ergänzen ist) wäre ich dir noch dankbarer! noch eine andere Frage: was bedeutet das acc? ist das eine variable? und noch eine andere frage: findAndReplace2 ((t:text),(s:str),(n:new),acc) |(t==s)&&find(text,str) =findAndReplace2(text,str,new, acc++[n]) |otherwise = findAndReplace2(text,s:str,n:new,acc++[t]) warum schreibst du str und new (unterstrichen) und nicht (s:str) und (n:new) Danke, danke, danke! Vielleicht hast du ja lust dir das nochmal anzugucken (und hast du ne Idee für aufgabe 2?)! |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
findAndReplace2 ((t:text),(s:str),(n:new),acc) |(t==s)&&find(text,str) =findAndReplace2(text,str,new, acc++[n]) |otherwise = findAndReplace2(text,s:str,n:new,acc++[t]) warum schreibst du str und new (unterstrichen) und nicht (s:str) und (n:new) weil ich denn ersten buchstaben vom suchstring da schon ersetzt habe...das brauch ich für die anker funktionen damit die rekursion irgendwann abbrechen kann... die zweite aufgabe ist nicht besonders schwierig du mußt dir nen akkumulator machen...so einen wie in findandreplace2 und darauf immer +1 addieren...für jeden rekursionsschritt...und die zwischenergebnisse haust du alle in ne liste rein, die führst du als 2ten akkumulator mit...so jetzt programmier ich noch schnell das es alle strings ersetzt |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
so funktion f ersetzt alle ...;-) ich kann die funktion auch noch umbennenen...aber ich denke das kriegste auch noch hin aufruf
gruß jacke |
|||||||||||
Zum Seitenanfang | |||||||||||