====== Zufallszahlen ====== Die JavaScript-Funktion ''Math.random()'' liefert eine Zufallszahl zwischen 0 (inklusive) und 1 (exklusive). Damit lassen sich aus ganzzahlige Zufallszahlen generieren (Funktion und Name sind der entsprechenden Python-Funktion nachempfunden): // Liefert eine ganzzahlige Zufallszahl von 0 bis n-1 function randRange(n) { return Math.floor(Math.random()*n)); // floor rundet ab } ===== Buchstaben in Wörtern vertauschen ===== Es ist Ienhn wahrscheinlich bkeannt, dsas man Ttxee imemr ncoh flüsisg lseen knan, wnen zewi Buchstaebn innrehalb eenis Wtros vertaushct wreden. Irhe Aufgbae bhsteet nun dairn, ein Prmgraom zu progarmmieren, das eienn Txet so medifiziort. ==== Anleitung ==== Sie werden 5 Funktionen schreiben, die jeweils Teilaufgaben erfüllen. Testen Sie jede Funktion ausführlich, bevor Sie weiterfahren. Schreiben Sie eine Funktion ''randIn(a,b)'', die eine ganzzahlige Zufallszahl zwischen a und b inklusive generiert. // Ganzzahlige Zufallszahl von a bis und mit b function randIn(a,b) { return Math.floor(Math.random()*(b-a+1))+a; } // Test-Code for (let i=0; i<20; i++) { console.log(randIn(11,16)); } Schreiben Sie eine Funktion ''vertausche(wort, a, b)'', die ein einem Wort die Buchstaben an zwei gegebenen Stellen vertauscht. Z.B. soll ''vertausche('Buch', 1, 2)'' den String ''Bcuh'' liefern. Die Buchstaben im String sind von 0 bis Länge-1 indiziert. Verwenden Sie dafür die String-Methode [[https://www.w3schools.com/jsref/jsref_substring.asp|substring]] und den Zugriff auf einzelne Buchstaben mit eckigen Klammern. function vertauschen(wort, a, b) { if (a==b) return wort; // Nix tun, wenn a==b if (a>b) { // Vertauchen, so dass immer a Schreiben Sie eine Funktion ''wortwuerfeln'', die zufällig zwei innere Buchstaben vertauscht (wenn das Wort mindestens 4 Zeichen lang ist, ansonsten soll einfach das Wort zurückgegeben werden). Diese Funktion soll die Funktionen ''randIn'' und ''vertausche'' aufrufen. // Verwürfelt zwei Buchstaben eines Worts function wortwuerfeln(wort) { if (wort.length<4) { return wort; // Nichts zu tun, Funktion beenden. } // Hier ist kein else nötig, weil die Funktion im if beendet wird. => Gute Praxis! let n = wort.length-2; // Index von vorletzter Stelle let position1 = randIn(1,n); let position2 = randIn(1,n); while (position1==position2) { // Würfeln bis verschieden... position2 = randIn(1,n); } return vertauschen(wort, position1, position2); } // Test Code console.log(wortwuerfeln("Orange")); Schreiben Sie eine Funktion ''wortzeichen(zeichen)'' die true oder false liefert, je nachdem, ob das ''zeichen'' Teil eines Worts ist. Der Einfachheit halber betrachten wir nur Buchstaben von a-z als Teil eines Worts. Mit der String-Methode [[https://www.w3schools.com/jsref/jsref_tolowercase.asp|toLowerCase]] können Sie einen String in Kleinbuchstaben umwandeln, damit nur mit Buchstaben zwischen 'a' und 'z' verglichen werden muss. function wortzeichen(z) { return z.toLowerCase()>='a' && z.toLowerCase()<='z'; } Die letzte Funktion ''textwuerfeln(text)'' soll Wörter innerhalb eines Texts verwürfeln und den neuen Text als Resultat zurückgeben. Die Funktion soll wie folgt vorgehen: * Man initialisiert das Resultat auf den Leerstring. * Man hängt dem Text ein Nicht-Wortzeichen hinzu (z.B. den Leerschlag). * Man merkt sich die letzte Position ''lastOut'' eines Zeichens, das **nicht** in einem Wort vorkommt. Anfangs ist das -1. * Man geht jede Position im Text durch: * Ist es kein Wortzeichen, dann * Das Wort zwischen ''lastOut+1'' und aktueller Position verwürfeln und dem Resultat anfügen. * Das aktuelle Zeichen dem Resultat anfügen * Man entfernt das letzte Zeichen vom Resultat und gibt es zurück. // Ganzzahlige Zufallszahl von a bis und mit b function randIn(a,b) { return Math.floor(Math.random()*(b-a+1))+a; } function vertauschen(wort, a, b) { if (a>b) { let h = a; a = b; b = h; } return wort.substring(0,a)+wort[b]+wort.substring(a+1,b)+wort[a]+wort.substring(b+1,wort.length); } // Verwürfelt zwei Buchstaben eines Worts function wortwuerfeln(wort) { if (wort.length<4) { return wort; // Nichts zu tun, Funktion beenden. } // Hier ist kein else nötig, weil die Funktion im if beendet wird. => Gute Praxis! let n = wort.length-2; // Index von vorletzter Stelle let position1 = randIn(1,n); let position2 = randIn(1,n); while (position1==position2) { // Würfeln bis verschieden... position2 = randIn(1,n); } return vertauschen(wort, position1, position2); } function wortzeichen(z) { return z.toLowerCase()>='a' && z.toLowerCase()<='z'; } function textwuerfeln(text) { let neu = ""; lastOut = -1; // text+=" "; // Nicht-Wort-Buchstaben anhängen for (let p=0; p