Lehrer

** komplette Lösungen (A-G) )zu den Aufgaben vom 11. resp. 18. Dezember **

Aufgaben A+B:
A) Runde die Zahl 4.77 auf 5 auf resp. runde sie auf 4 ab.
B) Runde die Note 4.71 auf Viertelnote (4.75), Halbnote (4.5) oder Ganznote (5.0)

Die Aufgaben A und B zusammen, in einem loop drinnen, gucken, ob der code auch richtig funktioniert ….

document.write("<br> ###########  A  ###########  <br>" );

    var rvalue = 4.0;
    for (var i=0 ; i <= 100 ; i++){
        rGanzzahlAufgerundet = Math.ceil(rvalue);
        rGanzzahlAbgerundet  = Math.floor(rvalue);
        rHalbNote    = Math.round(2*rvalue)/2;
        rViertelNote = Math.round(4*rvalue)/4;
        var result=Math.round(rvalue*100)/100  //returns 28.12
        document.write("<br> Die Zahl  " + rvalue + "   ganzzahlig aufgerundet: " + rGanzzahlAufgerundet + "   ganzzahlig abgerundet " + rGanzzahlAbgerundet + "   viertelNote " + rViertelNote + "  halbNote " + rHalbNote);
        document.write("<br> Die Zahl  " + result + "   ganzzahlig aufgerundet: " + rGanzzahlAufgerundet + "   ganzzahlig abgerundet " + rGanzzahlAbgerundet + "   viertelNote " + rViertelNote + "  halbNote " + rHalbNote);
        document.write("<br> ");
        rvalue = rvalue + 0.01
    }

.


Aufgabe C: Eine Zufallszahl zwischen 0 und 1 generieren lassen

document.write("<br> ###########  C  ###########  <br>" );
document.write("<br> ");

document.write("<br> zufallszahl ... " + Math.random()  );

.


Aufgabe D: Die Zufallszahl x zwischen 0 und 1 soll derart gerundet werden, dass die Werte zwischen
0.00 <= x < 0.25 als 1,
0.25 <= x < 0.50 als 2,
0.50 <= x < 0.75 als 3 und
0.75 <= x < 1.00 als 4 interpretiert werden.
Aufgabe D soll möglichst flexibel, das heisst ohne if-else-Abfragen programmiert werden!

Aufgabe E: Ein Würfel soll simuliert werden … das heisst, jeder 'Wurf' soll eine Zahl von 1 bis 6 liefern.

Diese Aufgabe wurde wenig geändert: simuliere das 10-malige Werfen eines Würfels und gib die entsprechende Augenzahl (1,2…6) aus. Beide Aufgaben wurden zusammengefasst.

document.write("<br> ###########  D und E ###########  <br>" );
document.write("<br> ");

        for (var i=1; i <= 10; i++) {
            document.write("<br> zufallswurf Nummer " + i);
            rzufall = Math.random();                    // liefert eine Zahl zwischen 0 und 1
            iwuerfel = Math.ceil(rzufall * 6);            // die Zufallszahl anders ausgeben ... Aufgabe D: *4
            document.write("<br> -------- Augenzahl Wuerfel 1: " + iwuerfel);
            document.write("<br> -------- Augenzahl Wuerfel 2: " + Math.ceil(Math.random()* 6)   );        // alles in einer zeile
            document.write("<br> ");
        }

.


Aufgabe F: Zähle in 100'000 Würfen, ob die Zahlen 1, 2, … 6 gleichmässig verteilt sind.
Die Effizienz des Codes soll durch ein Timing berechnet werden. Es stellt sich raus, dass ein loop über 100'000 Probleme bereiten kann. Warum wohl? Anzahl Würfe deshalb auf 20'000 gesetzt.

document.write("<br> ###########  F  ###########  <br>" );
document.write("<br> ");

        var iloopvalue = 20000;

        var icounter1, icounter2, icounter3, icounter4, icounter5, icounter6;
        icounter1 = icounter2 = icounter3 = icounter4 = icounter5 = icounter6 = 0;

    //    var jetzt = new Date();
    //    alert(jetzt.getTime());

        var jetzt1 = new Date();
    //    var jetzt2 = new Date();
        var startTime=jetzt1.getTime();
        for (var i=1; i <= iloopvalue; i++) {
            iwurf = Math.ceil(Math.random()* 6);
            if (iwurf == 1)  {
                icounter1 = icounter1 + 1;
            } else if (iwurf == 2) {
                icounter2 = icounter2 + 1;
            } else if (iwurf == 3) {
                icounter3 = icounter3 + 1;
            } else if (iwurf == 4) {
                icounter4 = icounter4 + 1;
            } else if (iwurf == 5) {
                 icounter5 = icounter5 + 1;
            } else {
                icounter6 = icounter6 + 1;
            }
        }
        var jetzt2 = new Date();
        var endTime=jetzt2.getTime();
        document.write("<br> Zeit fuer Variante 1: " + (endTime- startTime) );

        // variante 2

        icounter1 = icounter2 = icounter3 = icounter4 = icounter5 = icounter6 = 0;
        jetzt1 = new Date();
        startTime=jetzt1.getTime();
        for (var i=1; i <= iloopvalue; i++) {
            iwurf = Math.ceil(Math.random()* 6);
            if (iwurf == 1) icounter1++;
            if (iwurf == 2) icounter2++;
            if (iwurf == 3) icounter3++;
            if (iwurf == 4) icounter4++;
            if (iwurf == 5) icounter5++;
            if (iwurf == 6) icounter6++;
        }
        jetzt2 = new Date();
        endTime=jetzt2.getTime();
        document.write("<br> Zeit fuer Variante 2: " + (endTime- startTime) );
        document.write("<br> Zeit fuer Variante 22: " + (jetzt2- jetzt1) );

        // variante 3

        var icounterArray = new Array(7);
        icounterArray[0] = 0;
        icounterArray[1] = 0;
        icounterArray[2] = 0;
        icounterArray[3] = 0;
        icounterArray[4] = 0;
        icounterArray[5] = 0;
        icounterArray[6] = 0;

        jetzt1 = new Date();
        startTime=jetzt1.getTime();
        for (var i=1; i <= iloopvalue; i++) {
            iwurf = Math.ceil(Math.random()* 6);
            icounterArray[iwurf]++; 
        }
        jetzt2 = new Date();
        endTime=jetzt2.getTime();
        document.write("<br> Zeit fuer Variante 3: " + (endTime- startTime) );

        document.write("<br> Auswertung .... Anzahl Wuerfe mit einem ... <br>" );

        isum = icounterArray[1] + icounterArray[2] + icounterArray[3] + icounterArray[4] + icounterArray[5] + icounterArray[6];
        document.write("<br> ......... summe " + isum );

        for (var i=1; i <= 6; i++) {
            document.write("<br>  " + i + "   =  " + icounterArray[i] +   "   oder in Prozent: " + icounterArray[i]/isum*100  );
        }

.


Aufgabe G: sollte nur eine Fingerübung sein.

document.write("<br> ###########  pi  ###########  <br>" );

var rpi = 0;

for (var k=0 ; k <= 5 ; k++) {
    rpi = rpi +  1 / Math.pow(16,k)    * (4 / (8*k+1) - 2 / (8 * k +4) - 1 / (8 * k + 5) - 1 / (8 * k + 6) )
    document.write("<br> rpi = " + rpi);
}

.

Lösungen vom 11. Dezember

Nachtrag zum rückwärts lesen …

document.write("<br> ");
document.write("<br> Variante 2 ... vergleiche den ersten sowie letzten Buchstaben ... ");
document.write("<br> ");

x = new Array('anna', 'hund', 'sugus', 'katze', 'radar');

for (var j=0; j < x.length; j++) {    
    document.write("<br> Untersuche den Begriff " + x[j]);
    // 4 -> 2,    5 -> 2
    var x2 = Math.ceil(  (x[j].length)  / 2 );
    var icounterhinten = x[j].length - 1;
    var bol = true;             // wir nehmen mal an, dass die woerter vorwaertes und rueckwaerts gelesen gleich sind ...
    var cvorne, chinten;
    for (var k=0; k < x2; k++) {
        cvorne = x[j][k];
        chinten = x[j][icounterhinten]
    //    document.write("<br> buchstabe x " + x[j][k]);
    //    document.write("<br> buchstabe z " + x[j][icounterhinten]);
        if (cvorne != chinten) {
            bol = false;
            break;        //   verlasse den loop ... und zwar sofort 
        }
        icounterhinten = icounterhinten - 1;
    }
    if (bol == true) document.write ("<br> ----------- vorwaerts und rueckwaerts gelesen identisch  <br>" );
    if (bol == false) document.write("<br> ----------- vorwaerts und rueckwaerts gelesen nicht identisch  <br>" );
}

Diese Variante soll die Schönheit und Eleganz zeigen. Es wird nicht das ganze Wort verglichen, sondern der erste mit dem letzten Buchstaben, dann der 2. resp. 2.-letzte Buchstaben etc. Wenn die Buchstaben einmal nicht gleich sind, so ist logischerweise auch das ganze Wort nicht symmetrisch.

.
.

Augaben:
A) Runde die Zahl 4.77 auf 5 auf resp. runde sie auf 4 ab.
B) Runde die Note 4.71 auf Viertelnote (4.75), Halbnote (4.5) oder Ganznote (5.0)
Diese Aufgabe wurde leicht modifiziert. Um zu kontrollieren, ob die anzuwendende Funktion wirklich richtig angewandt wird, die ganze Sache in einem loop:

document.write("<br> ###########  A  ###########  <br>" );

    var rvalue = 4.0;
    for (var i=0 ; i <= 100 ; i++){
        rGanzzahlAufgerundet = Math.ceil(rvalue);
        rGanzzahlAbgerundet  = Math.floor(rvalue);
        rHalbNote    = Math.round(2*rvalue)/2;
        rViertelNote = Math.round(4*rvalue)/4;
        var result=Math.round(rvalue*100)/100  //returns 28.12
        document.write("<br> Die Zahl  " + rvalue + "   ganzzahlig aufgerundet: " + rGanzzahlAufgerundet + "   ganzzahlig abgerundet " + rGanzzahlAbgerundet + "   viertelNote " + rViertelNote + "  halbNote " + rHalbNote);
        document.write("<br> Die Zahl  " + result + "   ganzzahlig aufgerundet: " + rGanzzahlAufgerundet + "   ganzzahlig abgerundet " + rGanzzahlAbgerundet + "   viertelNote " + rViertelNote + "  halbNote " + rHalbNote);
        document.write("<br> ");
        rvalue = rvalue + 0.01
    }

Hinweis: man beachte die Effekte ob nun mit der richtigen Zahl, das heisst rvalue. Diese wird pro loop um 0.01 Einheiten erhöht. Interessant wird die Sache bei 4.25 … Bitte selbst angucken.

.
.

C) Eine Zufallszahl zwischen 0 und 1 generieren lassen

Sollte einfach gewesen sein ….

document.write("<br> zufallszahl ... " + Math.random()  );

.
.

D) Die Zufallszahl x zwischen 0 und 1 soll derart gerundet werden, dass die Werte zwischen
0.00 <= x < 0.25 als 1,
0.25 <= x < 0.50 als 2,
0.50 <= x < 0.75 als 3 und
0.75 <= x < 1.00 als 4 interpretiert werden.
Aufgabe D soll möglichst flexibel, das heisst ohne if-else-Abfragen programmiert werden!

E) Ein Würfel soll simuliert werden … das heisst, jeder 'Wurf' soll eine Zahl von 1 bis 6 liefern.

F) Zähle in 100'000 Würfen, ob die Zahlen 1, 2, … 6 gleichmässig verteilt sind.


10. Dezember: die Lösungen 9 und 10 sind zugefügt

Aufgabe 1 - 4:
Ein gegebener String (z.B. 'Karl der Grosse lebte vor langer Zeit.') soll analysiert und zerpflückt werden. Aufgaben:
1) alles kleingeschrieben, alles GROSSGESCHRIEBEN
2) die Anzahl aller Buchstaben bestimmen, die Anzahl der Buchstaben 'e' bestimmen, die Anzahl Leerschläge
3) durch eine 'if' Abfrage soll geprüft werden, ob die Totalanzahl der Buchstaben grösser als 42 ist. Wenn ja, document.write(" mehr als 42 Buchstaben"); wenn nein document.write(" weniger als 42 Buchstaben");
4) der String soll automatisch rückwärts ausgegeben werden (kein document.write(".tiez regnal etc."); !)

Lösung Aufgabe 1 (leicht):

var teststring = "Karl der Grosse lebte vor langer Zeit.";
var teststring_lowercase = teststring.toLowerCase();

document.write("<br> teststring_lowercase = "  + teststring_lowercase);
document.write("<br>direkt kleingeschrieben = "  + teststring.toLowerCase());
document.write("<br>direkt GROSSGESCHRIEBEN = "  + teststring.toUpperCase());

.

Lösung Aufgabe 2 (mittel):
Anzahl Buchstaben, e sowie Leerschläge … Eine grobe Vereinfachung: auch Leerschläge, Kommas etc. gelten als Zeichen. Aber Word macht ja das gleiche . :-)

document.write("<br> Anzahl Buchstaben (auch Leerschlaege ...) = "  + teststring.length);

var ianzahl_e = 0;
var ianzahl_leer = 0;
var iloop = teststring.length-1;
for (var i=0; i<iloop; i++) {
    if ('e' == teststring.charAt(i)) ianzahl_e++;
    if (' ' == teststring.charAt(i)) ianzahl_leer++;
}

document.write("<br> Anzahl Buchstaben e oder E = "  + ianzahl_e );
document.write("<br> Anzahl Leerschlaege  = "  + ianzahl_leer );

In einem Loop wird durch den String gegangen und gezählt, wieviel Male der zu suchende Begriff vorkommt.
Hinweis / Frage 1: wieso nicht folgender, direkter Loop, was ist der Unterschied?

var ianzahl_e = 0;
var ianzahl_leer = 0;
for (var i=0; i<teststring.length-1; i++) {
    if ('e' == teststring.charAt(i)) ianzahl_e++;
    if (' ' == teststring.charAt(i)) ianzahl_leer++;
}

Hinweis2: im Loop selbst wird eine if-Abfrage gemacht. Ist eine kurze Variante von:

if ('e' == teststring.charAt(i)) {
    ianzahl_e = ianzahl_e + 1;
} else {
    ianzahl_e = ianzahl_e + 0;
}

Hinweis 3: der momentante Code weisst einen Fehler auf. Im Moment gibt er einen korrekten Wert für die Anzahl e aus, aber …???

Hinweis 4: Es ist von Vorteil, wenn der source-code menschenfreundlich dargestellt wird. So ist es sehr sehr praktisch, wenn innerhalb von schleifen oder if-else abfragen, code-teile eingeschoben werden. Siehe dazu das gleiche Beispiel, ohne Einrückung.

var ianzahl_e = 0;
var ianzahl_leer = 0;
for (var i=0; i<teststring.length-1; i++) {
if ('e' == teststring.charAt(i)) {
ianzahl_e = ianzahl_e + 1;
} else {
ianzahl_e = ianzahl_e + 0;
}
}

Hinweis 5: Es geht noch schlimmer.

.

Aufgabe 3 (leicht):
Lösung nicht hübsch ….

if (teststring.length > 42) {
    document.write("<br> Anzahl Zeichen mehr als 42 ");
} else if (teststring.length == 42) {
    document.write("<br> Anzahl Zeichen exakt  42 " );
} else {
    document.write("<br> Anzahl Zeichen weniger  als 42  ");
}

.

Aufgabe 4 (mittel):
Der String soll automatisch rückwärts ausgegeben werden.
Idee: alles in einen array und array reverse machen …

var iloop = teststring.length-1;
var arr_charsholder = new Array(iloop);

for (var i=0 ; i <= iloop ; i++) {
    arr_charsholder[i] = teststring.charAt(i);
}

document.write("<br> whole charsarray = " + arr_charsholder);
document.write("<br> reverse charsarray = " + arr_charsholder.reverse());

Output:

whole charsarray = K,a,r,l, ,d,e,r, ,G,r,o,s,s,e, ,l,e,b,t,e, ,v,o,r, ,l,a,n,g,e,r, ,Z,e,i,t,.
reverse charsarray = .,t,i,e,Z, ,r,e,g,n,a,l, ,r,o,v, ,e,t,b,e,l, ,e,s,s,o,r,G, ,r,e,d, ,l,r,a,K

Der Output ist alles andere als gut, die Zeichen sind durch ein Komma voneinander getrennt. Kann zum Teil praktisch sein, hier ist es nicht …. aber wir sind so fast am Ziel. Eine Versuchung wäre nun, die Kommas nun durch eine replace-Funktion zu ersetzen. Jein … weil der String ja auch im Text selber Kommas enthalten könnte. Wie also weiter?
Alles in einen String zurückschreiben:

var cstringnew = "";

for (var i=0 ; i <= iloop ; i++) {
    cstringnew = cstringnew + arr_charsholder[i];
    document.write("<br> i, cstringnew = " + i + " " + cstringnew);
   }

document.write("<br> cstringnew = " + cstringnew);

Output: 
cstringnew = .tieZ regnal rov etbel essorG red lraK


Achtung: Der code funktioniert obwohl er es nicht tun sollte … ! Hinweis: wieso wird eigentlich der array rückwärts ausgegeben????

.
.

Aufgaben 5 bis 8:
5) In einem loop sollen die Zahlen von 1 bis 999 ausgegeben werden
6) Die beiden String x= 'James' und y = 'Bond' sollen als 'James Bond' ausgegeben werden (Leerschlag zwischen den beiden Strings! Stichwort 'concat'
7) Die Integerzahl 7 soll in den String 007 umgewandelt werden. Hinweis: siehe Allgemein, Javascript
8) In einem loop soll die Ausgabe 'James Bond 001', 'James Bond 002', 'James Bond 003' bis 'James Bond 999' gemacht werden.

.

Aufgabe 5 (leicht):

document.write( "<br> <br>########### aufgabe fünf ##################### <br> <br>" );
iloop = 999;
for (var i=1 ; i <= iloop ; i++) {
    document.write("<br> loopvalue = " + i);
}

.
Aufgabe 6 (leicht):

// 6) Die beiden String x= 'James' und y = 'Bond' sollen als 'James Bond' ausgegeben werden (Leerschlag zwischen den beiden Strings! Stichwort 'concat'

var x = "James";
var y = " ";
var z = "Bond";
var xy = x.concat(y);
var xyz = xy.concat(z);

document.write("<br> Mein Name ist " + xyz);

.
Aufgabe 7 (leicht):

document.write( "<br> <br>########### aufgabe sieben ##################### <br> <br>" );

// 7) Die Integerzahl 7 soll in den String 007 umgewandelt werden. Hinweis: siehe Allgemein, Javascript

var izahl = 7;
var izahl_integer = 5 * izahl;
var izahl_character = "" + izahl;
document.write("<br> izahl als integer gebraucht  " + izahl_integer);
document.write("<br> izahl als character gebraucht  00" + izahl_character);

.
Aufgabe 8 (leicht):

document.write( "<br> <br>########### aufgabe acht ##################### <br> <br>" );

// 8) In einem loop soll die Ausgabe 'James Bond 001', 'James Bond 002', 'James Bond 003' bis 'James Bond 999' gemacht werden.

for (var i=1 ; i <= 999 ; i++) {
    if (i < 10) document.write("<br> James Bond 00" + i);
    if (i >= 10 && i <= 99) document.write("<br> James Bond 0" + i);
    if (i >= 100) document.write("<br> James Bond " + i);
}

.
.
Aufgaben 9-11:
9) kreiere einen Array x mit den Inhalten 'anna', 'hund', 'sugus', 'katze'
10) Es soll untersucht werden, welche Wörter innerhalb des Arrays x ('anna', 'hund', 'sugus', 'katze') vorwärts wie auch rückwärts das gleiche Wort ergeben
11) Die Inhalte des Arrays x sollen zufällig ausgegeben werden und statistisch ausgewertet werden.
Vorgehen: Ein loop von 0 bis 10'000, jedesmal wird ein Element des Arrays ausgegeben und intern gezählt,
wieviel Mal nun der Begriff anna, hund, sugus oder katze erscheint. Am Schluss eine Ausgabe mit einer kleinen Auswertung.

.
Aufgaben 9 (leicht):
Hinweis: wenn nicht schon bekannt, ein Array kann folgendermassen konstruiert werden …

document.write( "<br> <br>########### aufgabe neun ##################### <br> <br>" );

// 9) kreiere einen Array x mit den Inhalten 'anna', 'hund', 'sugus', 'katze'

x = new Array('anna', 'hund', 'sugus', 'katze');
for (var i=0; i < 4 ; i++) {
    document.write("<br> Inhalt des Arrays fuer i = " + i + " = " + x[i]);
}

.
Aufgaben 10 (schwer):
Hinweis: wie immer … sich zuerst überlegen, was alles gemacht werden sollte … pseudocode aufschreiben und dann übersetzen in javascript.

document.write( "<br> <br>########### aufgabe zehn  ##################### <br> <br>" );

// 10) Es soll untersucht werden, welche Wörter innerhalb des Arrays x ('anna', 'hund', 'sugus', 'katze') vorwärts 
//      wie auch rückwärts das gleiche Wort ergeben
//     inhalt in buchstaben verwandeln, danach reverse machen und kommas wegknallen und vergleichen

for (var j=0; j < 4; j++) {                // total 4 Begriffe: anna, hund, sugus und katze
    var iloop = x[j].length-1;            // anzahl buchstaben fuer den x-ten Begriff
    var arr_charsholder = new Array(iloop);

    var cstringnew = "";

    for (var i=iloop ; i >= 0 ; i--) {
        cstringnew = cstringnew + x[j].charAt(i);
       }

//    document.write("<br>  cstringnew " + cstringnew );

    if (cstringnew == x[j]) {
        document.write("<br> der Begriff " + x[j] + " liest sich vorwaerts und rueckwaerts gleich "   );
    } else {
        document.write("<br> der Begriff " + x[j] + " liest sich vorwaerts und rueckwaerts nicht gleich "   );
    }

}

.
Aufgaben 11 (schwer):
Hinweis: Zufallszahlen … es gibt Funktionen hierzu … google-search machen.



Cäsar … erste Schritte:
ersetzen von Klein-Grossbuchstaben in Kleinbuchstaben:

var teststring = "Diese laaaaaaange Zeichenfolge wurde zur besseren" +
                " Uebersicht in mehrere einzelne Abschnitte unterteilt," +
                " die jeweils durch ein Pluszeichen getrennt" +
                " und bei der Darstellung die Teilstuecke wieder zusammengestellt werden. Testfile fertig? Nein! Was ist," +
            " mit den Zahlen 1, 13, 135, 789542 oder sogar pi=3.1415926535?";

document.write("<br> teststring = "  + teststring);

var teststring_lowercase = teststring.toLowerCase();

.

Füllen eines Arrays mit Buchstaben:

var ischluessel = 1 ;    

// ############## 
// uebersetze nun den string, es sind mehrere Moeglichkeiten vorhanden
// Variante 1: alle Buchstaben, Zahlen, Leerschlaege, Satzzeichen in einen Array legen. Remember: Alles wird kleingeschrieben
// Problem: was wird aus den Zeichen !?- etc. welche aus dem Array fallen .... Es waere nun moeglich, eine if-else schleife zu basteln
// und jedes mal gucken, ob das zeichen rausfallen wuerde ... einfacher: verdopple den array, 2 mal den gleichen array

var abcABC = "abcdefghijklmnopqrstuvwxyz0123456789. -?!";    //
var abcABC_long = abcABC.concat(abcABC);                 // 2 mal gleicher string ....
var istringlength_long = abcABC_long.length - 1;
var arr_chars_long = new Array(istringlength_long);

// ############## 
// der array wird mit den zeichen gefuellt.

for (var i=0 ; i <=istringlength_long  ; i++) {
    arr_chars_long[i] = abcABC_long.charAt(i);            
//    document.write("<br> arr_chars at i = " + i + " = "  + arr_chars_long[i]);
}

Aufgaben vom 18. September: Stringmanipulation

Der Aufbau des *.html-files ist immer der gleiche,

<html>
<head>
<title>Test</title>
<script type="text/javascript">
var teststring = "Diese laaaaaaange Zeichenfolge wurde zur besseren" +
                " Uebersicht in drei einzelne Abschnitte unterteilt," +
                " die jeweils durch ein Pluszeichen getrennt" +
                " und bei der Darstellung die Teilstuecke wieder zusammengestellt werden. Testfile fertig.";
 
document.write("teststring = "  + teststring);
 
/* hier die Aufgaben:
 
   1.  ersetze alle "a" durch A
   2. ersetze alle " " (Leerschlag) durch "@@@"
   3. gib den Teststring nur mit Kleinbuchstaben oder Grossbuchstaben aus
   4. Welcher Buchstabe steht an der 3, 5, 45 Position? Welcher an der ersten-letzten Position?
   5. Bestimme die Anzahl der Wörter! Welches ist das 13. Wort?
   6. Gib in einem loop jeweils die buchstabenfolge a, ab, abc, abcd, .... bis zu abc..xyz aus. pro zeile eine buchstabenfolge 
 
    Ausgabe:
 
        a
        ab
        abc
        ...
        abcdefghijklmnopqrstuvwxyz
 
   7. Schreibe jedes Wort in eine neue Zeile.
   8. gib den Teststring rückwärts aus
   9. mache eine Analyse und zähle die Anzahl der Buchstaben a, b, c … z … A, B, C … Z. Die Printausgabe soll 'schön' sein.
  10. suche alle Wörter innerhalb des Teststringes, welche die Wortkombination "ei" enthalten und bestimme deren Anzahl
 
*/
 
//    **an dieser Stelle den code einfügen**
 
</script>
</head>
<body>
</body></html>

.

Lösung Aufgabe1: ersetze alle "a" durch A
Problem: die Funktion replace funktioniert nicht so offensichtlich wie erwartet: die Grundvariante 1 ersetzt nur das erste a durch A, alle anderen a bleiben unverändert. Variante 2 ersetzt alle ('global' -> g) a zu A.

// use regular expressions: http://www.irt.org/script/1583.htm
// ausfuehrlich: http://bennadel.com/blog/142-Ask-Ben-Javascript-String-Replace-Method.htm
 
var neu= teststring.replace(/a/, 'A');
document.write("<b>Variante 1, ein a durch A ersetzt:</b><br> " + neu);
 
var neu2= teststring.replace(/a/g, 'A');
document.write("<br><b> Variante 2, alle a durch A ersetzt </b><br> " + neu2);

.

Lösung Aufgabe2: ersetze alle " " (Leerschlag) durch "@@@"
Aufgabenstellung wie unter Aufgabe1, sollte daher keine Probleme bereiten:

var neu= teststring.replace(/ /, '@@@');
document.write("<b>Variante 1, ein ' ' durch @@@ ersetzt:</b><br> " + neu);
 
var neu= teststring.replace(/ /g, '@@@');
document.write("<br><b>Variante 2, alle' ' durch @@@ ersetzt:</b><br> " + neu);

.

Lösunge Aufgabe3: alles klein oder GROSS geschrieben
kleinbuchstaben in GROSSBUCHSTABEN oder umgekehrt. Diese Funktion ist oftmals praktisch, wenn es darum geht, einen String via Userinput einzulesen und man sich keine Gedanken machen möchte von wegen Gross-kleinschreibung. Zum Beispiel: 'wollen Sie die Berechnung nun beginnen?' Antwort JA, jA, Ja, ja kann durch ein 'readstring.toLowerCase()' einfach und schnell in ein 'ja' umgewandelt werden.

document.write("<b>Variante 1, alles kleingeschrieben :</b><br> " + teststring.toLowerCase());
document.write("<br><b>Variante 2, alles GROSSGESCHRIEBEN :</b><br> " + teststring.toUpperCase());

.

Lösung Aufgabe4: Buchstabe an Position x ausgeben
Die Lösung des Problemes findet sich in der Funktion 'charAt'. Hier arbeiten wir schon im gewissen Sinne mit einem Array.
Hinweis1: javascript beginnt mit der Nummerierung bei '0'
Hinweis2: es gibt die praktische Funktion, die Gesamtlänge des stringes auszugeben: length. Um nun also das letzte Zeichen auszugenben, muss 'teststring.length-1' gemacht werden, da ja ab '0' begonnen wird ….

document.write("<b>Variante 0, Buchstabe an Position 0+1=1 :</b> " + teststring.charAt(0));
document.write("<br><b>Variante 1, Buchstabe an Position 3+1=4 :</b> " + teststring.charAt(3));
document.write("<br><b>Variante 2, Buchstabe an Position 5+1=6 :</b> " + teststring.charAt(5));
document.write("<br><b>Variante 3, Buchstabe an Position 45+1=46 :</b> " + teststring.charAt(45));
 
document.write("<br><b>Variante 4, Buchstabe am Anfang :</b> " + teststring.charAt(0));
document.write("<br><b>Variante 5, Buchstabe am Schluss:</b> " + teststring.charAt(teststring.length-1));
document.write("<br><b>Variante 6, Buchstabe am Schluss:</b> " + teststring.charAt(teststring.length-2));

.

Lösung Aufgabe5: Bestimme die Anzahl der Wörter! Welches ist das 13. Wort?
Schwierige Aufgabe, die Funktion 'split' trennt einen Teststring gemäss einem gegebenem Muster, hier sind es Leerschläge. Der Rückgabewert der Funktion 'split' sind beim teststring die Wörter des teststringes (waren ja durch Leerschläge voneinander getrennt) und werden automatisch in einem array gespeichert, hier in der variabel Woerter, welche eigentlich ein Array ist.
Hinweis: nicht vergessen, dass die Zählweise wieder von '0' beginnt.

var Woerter = teststring.split(" "); 
document.write("Ein Satz mit " + Woerter.length + " W&ouml;rtern.<br>");
document.write("Das 13. Wort ist '" + Woerter[12] + "'");

.

Lösung Aufgabe6: Loop
Ein loop ist etwas sehr praktisches: mache die gleiche Sache beliebig oft. Aufpassen muss man, dass ein eindeutiger Start sowie Schluss gesetzt wird. Wird die Stopbedingung nie erfüllt, so bleibt der loop 'hängen' und die Schleife wird unendlich oft durchlaufen.

var abc = "abcdefghijklmnopqrstuvwxyz";
 
for (var i=1; i<=26; i++) {
    document.write(" <br> i = " + i + " " + abc.slice(0,i));
}

.

Lösung Aufgabe7: Loop, pro Zeile ein Wort

var iwoerter = teststring.split(" "); 
var itemp = iwoerter.length;
document.write("Ein Satz mit " + iwoerter.length + " W&ouml;rtern.<br>");
for (var i=0; i<= iwoerter.length; i++) {
    document.write(" <br> Wort  " + i + " = " + iwoerter[i]);
}

.

Lösung Aufgabe8: Teststring rückwärts
Wiederum eine loop-Aufgabe. Achtung: in den Bedingungen ist es sehr oft von Vorteil, wenn die Werte vorher ausgerechnet werden.
Siehe dazu folgenden code.

document.write(" <br><b>Teststring rueckwaerts: </b><br>");
document.write(" Anzahl Buchstaben: " + teststring.length + "<br>");
 
// Beispiel 1, die Bedingung i<=teststring.length wird in jedem Durchgang berechent ...
 
for (var i=0; i<=teststring.length; i++) {
    document.write(teststring.charAt(teststring.length-i));
}
 
document.write(" <br><b> Variante 2 </b><br> ");
 
for (var i=teststring.length-1; i>=0; i--) {
    document.write(teststring.charAt(i));
}
 
// achtung ... var i = teststring.length-1 wichtig ... nicht var i = teststring.length!!!!
 
// Beispiel 2, teststring.length wird in einer Variabeln gespeichert ...
 
var ilength = teststring.length;
for (var i=0; i<=ilength; i++) {
    document.write(teststring.charAt(teststring.length-i));
}

.

Lösung Aufgabe9: Anzahl a, b, …Z … schöne Printausgabe
Hier einige Anregungen … noch ist die Ausgabe nicht schön, alles sollte in eine Tabelle gepackt werden … selber rausfinden wie!

var abcABC = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";    // total 2 * 26 = 52
var istringlength = teststring.length - 1;
var arr_chars = new Array(52);
 
for (var i=0 ; i<=51 ; i++) {                // gehe durch den Suchstring abcABC, i=0 -> a, i=2 -> b ....
 
    ctest = abcABC.charAt(i);
//    document.write(" suchbuchstabe = " + ctest + "<br>");
    var icounter = 0; 
 
    for (var j=0 ; j <= istringlength ; j++) {    // teste, ob im teststring 
         if (teststring.charAt(j) == ctest) {
            icounter = icounter + 1;
//            document.write(" gleicher Teststring vorhanden: " + ctest + " " + teststring.charAt(j) + " icounter = " + icounter + "<br>");
//            arr_chars[i] = arr_chars[i] + 1;
         }
    }
 
    arr_chars[i] = icounter;
//    document.write(" Anzahl "  + abcABC.charAt(i) + " : " +  arr_chars[i] + "<br>");
}
 
document.write("<br>");
for (var i=0 ; i<=51 ; i++) {
    document.write(" Anzahl " + abcABC.charAt(i) + " : " + arr_chars[i] + "<br>");
}
 
document.write(" Variante 2 <br>");
 
for (var i=0 ; i<=25 ; i++) {
 
    document.write(    abcABC.charAt(i) + " " + arr_chars[i] + " " + abcABC.charAt(i+26) + " " + arr_chars[i+26]);
    document.write( " " + (arr_chars[i] + arr_chars[i+26]) + " " + ((arr_chars[i] + arr_chars[i+26])/istringlength  * 100).toFixed(2) + " %   <br>"  )
}

Aufgaben vom 11. September: Files mit und ohne Fehler

ohne fehler
stringausgabe1
stringausgabe2

mit fehler
fehler1

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.