Ruby-Rekursion und Zeichenketten |
04.12.2015, 08:41 | Auf diesen Beitrag antworten » | |||||||||||||||
CluelessBiologyStudent | Ruby-Rekursion und Zeichenketten Meine Frage: Rekursion a.)Ich muss folgende Formel bei Ruby eingeben: def magic(str) n = str.length; if n < 2 then return str; else if n % 2 == 0 then return magic(str[1,n-1]) + str[0,1]; else return str[0,1] + magic(str[1,n-1]); end; end; end; Diese soll dann durch die rekursive Auswertung des Funktionsaufrufs "magic("yrbu")" ausführlich beschrieben werden. (b) Daraus soll danach eine Funktion "contains_substring (text,sub)" gebildet werden, die true zurückliefert wenn sub im Text vorkommt, und false wenn nicht. Zudem soll das Programm eine Funktion für vom Benutzer eingegebene Strings aufrufen und als "Kommt vor" oder "Kommt nicht vor" ausgeben. (c) Die bei b) geschriebene Funktion soll so umgestellt erden, dass sie nicht mit einer Schleife arbeitet, sondern sich rekursiv aufruft. Zeichenketten d.)Es soll eine Prozedur "ersetze!(s, a, b)" geschrieben werden, die alle Vorkommen der Zeichenkettte a in der Zeichenkette s durch die Zeichenkette b ersetzt. Dabei müssen a und b nicht unbedingt Zeichenketten gleicher Länge sein. Die Zeichenkette s soll dabei von links nach rechts verarbeitet werden. Meine Ideen: Rekursion zu a.)bis c.) Ich habe bereits eine Formel angefangen, komme ab da aber nicht mehr weiter, weiß auch nicht genau ob sie überhaupt richtig ist: # Language: Ruby, Level: Level 1 def magic(z) if z > 0 then return magic(z - 3) * 3; #1 else return z; #2 end; #3 end; #4 x = magic(2); #5 puts(x); #6 Zeichenketten d.) Ich habe bereits eine Formel angefangen, die das Wort Affe ausgeben soll: str = "Alfalfa"; ersetze!(str, "lfa", "e"); # ergibt str = "Aee" ersetze!(str, "e", "ee"); # ergibt str = "Aeeee" ersetze!(str, "eee", "ff"); # ergibt str = "Affe" puts(str); Zudem weiß ich das man am besten Mutationen mit []= arbeitet. Vielen Dank wenn ihr mir helfen könnt, diese Aufgaben zu lösen. |
|||||||||||||||
|
||||||||||||||||
04.12.2015, 10:17 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | a) machen wir doch Kontrollausgaben:
liefert:
also magic("yrbu") = "magic("rbu") + "y" = "r" + magic("bu") + "y" = "r" + magic("u") + "b" + "y" = "ruby".
d) und wo ist jetzt die Funktion selbst? |
|||||||||||||||
05.12.2015, 12:41 | Auf diesen Beitrag antworten » | |||||||||||||||
CluelessBiologyStudent | Ruby Vielen Dank!! Das hat mir sehr geholfen! Ich habe aber doch noch ein paar Fragen: zu c.) was muss ich tun, damit die Funktion ohne weitere rekursive Ausrufe direkt "true" oder "false" angibt? zu d.) die allgemeine Funktion muss ich selbst schreiben, das was ich geschrieben habe war nur ein Beispiel, welches ich mir selbst ausgedacht habe. Es muss dann noch eine Mutation mit []= eingefügt werden. Aufgabenstellung: Schreiben Sie eine Prozedur "ersetze!(s, a, b)", die alle Vorkommen der Zeichenkettte" a" in der Zeichenkette" s2 durch die Zeichenkette" b "ersetzt. Dabei müssen" a "und "b2 nicht unbedingt Zeichenketten gleicher Länge sein. Die Zeichenkette" s" soll dabei von links nach rechts verarbeitet werden. Ich wäre sehr dankbar, wenn du mir auch dabei helfen könntest. Vielen, vielen Dank im voraus und fröhlichen Nikolaus!! |
|||||||||||||||
05.12.2015, 13:07 | Auf diesen Beitrag antworten » | |||||||||||||||
eulerscheZahl | c) das passiert bereits. Die Rekursion wird vorzeitig abgebrochen, wenn das Ergebnis feststeht. d)
Kann gut sein, dass das unnötig umständlich ist. Ich habe noch nie mit Ruby gearbeitet. |
|||||||||||||||
Anzeige | ||||||||||||||||
|
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |
|