Bergervei/Javascript-Spielwiese

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
== Gebrauch des Smileys ==

<code id="575e4fe7ef3fd">
function ggT(m, n) {
 if (n == 0)
  return m;
 else
  return ggT(n, m % n);
}
</code>

<check execute="(ggT(123, 69) == 3) && (ggT(9797, 303) == 101) && (ggT(31, 5) == 1)">
true
</check>

<run id="575e4fe7ef477">
ggT(123, 9);
</run>

== Dreieckprüfer ==

<table cellspacing="0" cellpadding="0">
<tr>
<td align="left" valign="top" width="460">[[Bild:DreieckPruefer.gif]]</td>
<td align="left" valign="top" width="740">
<code id="5bd5881c0731e">
function DreieckPruefer(a, b, c) {
 var txt = "";
 // -- weitere Anweisngen --
 return txt;
}
</code>

<check execute="(DreieckPruefer(5, 3, 4).search('nicht konstruierbar') == -1) && (DreieckPruefer(97, 3, 1).search('nicht konstruierbar') != -1)">
true
</check>

<run id="5bd593cfb3c71">
(DreieckPruefer(3, 5, 4));
</run>
</td>
</tr>
</table>

== Tilgung eines zinslosen Kredits ==

<code id="5bd5c4670d004">
function tilgung(kredit, prozent) {
 var jahr = 0;
 // -- weitere Anweisungen --
 return jahr;
}
</code>

<run id="5bd5c4670d14b">
tilgung(25000, 7.5, 1000);
</run>

== Taxigebühr ==

Das Taxiunternehmen "LöbTax" bietet seinen Kunden folgende Tarife an:
{| border=0
|-
|<ul><li>Grundgebühr:</li></ul>
|2,50 €
|-
|<ul><li>Kilometerpreis bis 5 km:</li></ul>
|1,70 €
|-
|<ul><li>Kilometerpreis ab 5 km bis 10 km:</li></ul>
|1,55 €
|-
|<ul><li>Kilometerpreis ab 10 km:</li></ul>
|1,40 €
|}
Implementiere die entsprechende Funktion zur Berechnung der Taxigebühr in Abhängigkeit der gefahrenen Streck in Kilometern. 

<code id="5bd593cfb3b84">
function TaxiPreis(km) {
 var preis = 0;
 // -- weitere Anweisungen --
 return preis;
}
</code>

<run id="5bd593cfb3d89">
TaxiPreis(12.5);
</run>

== Turtlegrafik ==

<code id="57617d4f30174" hidden>
function center(turtle) {
 turtle.move(200, 150);
}

function black(turtle) {
 turtle.penColor(0, 0, 0);
}

function red(turtle) {
 turtle.penColor(255, 0, 0);
}

function brown(turtle) {
 turtle.penColor(100, 50, 0);
}

function orange(turtle) {
 turtle.penColor(255, 100, 0);
}

function yellow(turtle) {
 turtle.penColor(255, 200, 0);
}

function green(turtle) {
 turtle.penColor(0, 255, 0);
}

function blue(turtle) {
 turtle.penColor(0, 0, 255);
}

function pink(turtle) {
 turtle.penColor(200, 50, 200);
}
</code>

<code id="57618d00e9982">
var farbliste = ["red", "orange", "yellow", "green", "blue", "pink"];

function n_eck(turtle, x, n) {
 var winkel = 360 / n;
 for (var i = 1; i <= n; i++) {
  turtle.forward(x);  
  turtle.right(winkel); 
 }
}

function farbstern(turtle, x, n, m) {
 var winkel = 360 / m;
 var farbe;
 for (var i = 1; i <= m; i++) {
  farbe = farbliste[Math.floor((i - 1) * farbliste.length / m)];
  switch (farbe) {
   case "red":
    red(turtle); break;
   case "brown":
    brown(turtle); break;
   case "orange":
    orange(turtle); break;
   case "yellow":
    yellow(turtle); break;
   case "green":
    green(turtle); break;
   case "blue":
    blue(turtle); break;
   case "pink":
    pink(turtle); break;
   default:
    black(turtle); break;
  }
  n_eck(turtle, x, n);
  turtle.right(winkel);
 }
}
</code>

<canvas w="400" h="300"></canvas>

<run id="57618d00e99ff">
canvas1.clear(); 
turtle1.move(200, 150);
farbstern(turtle1, 75, 5, 55);
</run>

<code id="5b0c70d02658f">
function kreis(turtle, x, y, r) {
 var winkel = 180 / r / Math.PI;
 var n = 360 / winkel;
 turtle.move(x - r, y);
 for (var i = 1; i <= n; i++) {
  turtle.forward(1);
  turtle.right(winkel);
 }
}
</code>

<canvas w="400" h="300"></canvas>

<run id="5b0c70d026631">
canvas2.clear();
kreis(turtle2, 200, 150, 50);
</run>

== Zufallsfelder und BubbleSort ==

<code id="5c3b4eca22eb8">
function zufallszahl(von, bis) {
 return Math.floor(Math.random() * (bis - von + 1) + von);
}

function erzeugen(von, bis, anz) {
 var feld = new Array();
 for (var i = 0; i < anz; i++)
  feld[i] = zufallszahl(von, bis);
 return feld;
}

function ausgabe(feld) {
 var maxAnzahl = 25;
 var teilFeld = new Array();
 var i = 0, j = 0;
 while (i < feld.length) {
  j = i + maxAnzahl;
  if (j < feld.length)
   teilFeld = feld.slice(i, j);
  else
   teilFeld = feld.slice(i, feld.length);
  console.log(teilFeld);
  i = j;
 }
} 

function BubbleSort(feld) {
 for (var j = feld.length - 1; j > 0; j--)
  for (var i = 0; i < j; i++)
   if (feld[i] > feld[i + 1]) {
    var h = feld[i]; feld[i] = feld[i + 1]; feld[i + 1] = h;
   }
 return feld; 
}
</code>

<run id="5c3b4eca22fc8">
var newFeld = erzeugen(-50, 100, 100);
console.log("Unsortiertes Datenfeld:");
ausgabe(newFeld);
console.log("Sortiertes Datenfeld:");
ausgabe(BubbleSort(newFeld));
</run>

=== Übereinstimmung zweier Felder ===

<code id="5c3b58d643419">
function gleich(feld1, feld2) {
 var test = (feld1.length == feld2.length);
 var i = 0;
 while (test && i < feld1.length - 1) {
  test = (feld1[i] == feld2[i]);
  i++
 }
 return test;
}
</code>

<run id="5c3b516843f15">
gleich(BubbleSort([23, 4, -2, 17, 38, 17]), [-2, 4, 17, 17, 23, 38]);
</run>

=== Übereinstimmung sortierter Felder ===

<code id="5c3b5c2cac2ce">
function sortTest(von, bis, anz, n) {
 var i = 1;
 do {
  var feld1 = BubbleSort(erzeugen(von, bis, anz));
  var feld2 = feld1.slice();
  feld2.sort(function(a,b) {return a - b;});
  var test = gleich(feld1, feld2);
  i++
 }
 while (test && i < n);
 return test;
}
</code>

<run id="5c3b58d643642">
sortTest(-50, 100, 10, 100);
</run>

=== BubbleSort-Aufwand ===

<code id="5c3b6f958122f">
function sortAufwand(von, bis, anz, n) {
 var sum = 0;
 for (var k = 1; k <= n; k++) {  
  var feld = erzeugen(von, bis, anz);
  var count = 0;
  for (var j = feld.length - 1; j > 0; j--)
   for (var i = 0; i < j; i++) {
    count++;
    if (feld[i] > feld[i + 1]) {
     count++;
     var h = feld[i]; feld[i] = feld[i + 1]; feld[i + 1] = h;
    }
   }
  sum = sum + count;
 }
 return Math.round(sum / n);  
}
</code>

<run id="5c3b6f958133d">
sortAufwand(1, 1000, 1000, 10);
</run>

== Würfeln mit einem Würfel ==

<code id="5c04e9630b868" hidden>
var rand = 50;
var maxBreite = 400 - 2 * rand;
var maxHoehe = 300 - 2 * rand;

function minMax(feld) {
 var ergebnis = new Array(0, 0);
 for (var i = 0; i < feld.length; i++) {
  if (ergebnis[0] > feld[i]) ergebnis[0] = feld[i];
  if (ergebnis[1] < feld[i]) ergebnis[1] = feld[i];
 }
 return ergebnis;
}

function balken(turtle, hoehe, breite) {
 turtle.forward(breite); turtle.left(90); 
 turtle.forward(hoehe); turtle.left(90);
 turtle.forward(breite); turtle.left(90);
 turtle.forward(hoehe); turtle.left(90);
 turtle.forward(breite); 
}

function balkenDiagramm(canvas, turtle, feld) {
 var breite = maxBreite / feld.length; 
 var extremWert = minMax(feld);
 var min = extremWert[0];
 var max = extremWert[1];
 canvas.clear();
 turtle.hide();
 turtle.move(rand, rand + max /(max - min) * maxHoehe);
 turtle.right(90);
 for (var i = 0; i < feld.length; i++)
  balken(turtle, feld[i] / (max - min) * maxHoehe, breite);
}
</code>

<code id="5c04e9630b91d">
function wuerfel1(anzahl) {
 var zaehlFeld = new Array(0, 0, 0, 0, 0, 0);
 for (var i = 1; i <= anzahl; i++) {
  var zufall = Math.floor(Math.random() * 6 + 1);
  zaehlFeld[zufall-1]++;
 }
 return zaehlFeld;
}

function wuerfelAusgabe1(feld) {
 for (var i = 0; i < feld.length; i++)
  console.log("Augenzahl " + (i + 1) + ": " + feld[i]);
}
</code>

<canvas w="400" h="300"></canvas>

<run id="5c04e9630b9ef">
var newZaehlFeld = wuerfel1(1000);
balkenDiagramm(canvas3, turtle3, newZaehlFeld);
wuerfelAusgabe1(newZaehlFeld);
</run>

== Zeichenzähler ==

<code id="5ba880a3466e7">
function zeichenzaehler(zeichenkette, z) {
 var zaehler = 0;
 for (var i = 0; i < zeichenkette.length; i++)
  if (z == zeichenkette.substr(i, 1)) zaehler++;
 return zaehler;
}
</code>

<run id="5ba87ccf7e1d4">
zeichenzaehler("Mississippi-Missouri", "i");
</run>

== Vokalzähler ==

<code id="5ba880a346776">
function vokalzaehler(zeichenkette) {
 var zaehler = 0;
 var vokale = "AEIOU";
 zeichenkette = zeichenkette.toUpperCase();
 for (var j = 0; j < vokale.length; j++)
  for (var i = 0; i < zeichenkette.length; i++)
   if (vokale.substr(j, 1) == zeichenkette.substr(i, 1)) zaehler++;
 return zaehler;
}
</code>

<run id="5ba87ccf7e23f">
vokalzaehler("Mississippi-Missouri");
</run>

== Drei Chinesen mit dem Kontrabass... ==

<code id="5bbcd022ed78a">
function dreiChinesen(zeichenkette, zeichen) {
 var neukette = "", zei = "";
 var vokale = "AEIOUÄÖÜaeiouäöü";
 var pos = -1;
 for (var i = 0; i < zeichenkette.length; i++) {
  zei = zeichenkette.substr(i, 1);
  pos = vokale.indexOf(zeichenkette.substr(i, 1));
  if (pos >= 0)   
   if (pos < 8)
    neukette = neukette + zeichen.toUpperCase();
   else
    neukette = neukette + zeichen.toLowerCase();
  else
   neukette = neukette + zei;
 }
 return neukette;
}
</code>

<check execute="(dreiChinesen('Drei Chinesen mit dem Kontrabass...', 'a') == 'Draa Chanasan mat dam Kantrabass...') && (dreiChinesen('AeIoU', 'e') == 'EeEeE') && (dreiChinesen('', 'i') == '')">
true
</check>

<run id="5bbcd022ed841">
dreiChinesen("Drei Chinesen mit dem Kontrabass saßen auf der Straße und erzählten sich was.", "i");
</run>

== Plindromprüfung ==

<code id="5ba880a346807">
function palindrompruefer(zeichenkette) {
 var neukette = "";
 zeichenkette = zeichenkette.toUpperCase();
 for (var i = 0; i < zeichenkette.length; i++)
  neukette = zeichenkette.substr(i, 1) + neukette;
 return (zeichenkette == neukette);
}
</code>

<run id="5b9619346de9e">
palindrompruefer("Rentner");
</run>

== Schüttelwörter ==

<code id="5bbcd6e2a1b86" hidden>
function schuettelTest(zeichenkette, neukette) {
 var test = (zeichenkette.length == neukette.length);
 var pos = -1;
 if (test)
  for (i = 0; i < neukette.length; i++) {
   pos = zeichenkette.indexOf(neukette.substr(i, 1));
   test = test && (pos >= 0);
  }
 return test;
} 
</code>

<code id="5ba880a3468ae">
function schuetteln(zeichenkette) {
 var neukette = "";
 var pos, zeichen;
 do {
  pos = Math.floor(Math.random() * zeichenkette.length);
  zeichen = zeichenkette.substr(pos, 1);
  neukette = neukette + zeichen;
  zeichenkette = zeichenkette.replace(zeichen, "");
 }
 while (zeichenkette.length > 0);
 return neukette;
} 
</code>

<check execute="schuettelTest('das ist ein langer Text', schuetteln('das ist ein langer Text')) && (schuetteln('das ist ein langer Text') != schuetteln('das ist ein langer Text'))">
true
</check>

<run id="5b960f62e3580">
schuetteln("Informatik");
</run>

== Cäsar-Verschlüsselung ==

<code id="5bc36b68951aa">
function wandeln(zeichen, schritt) {
 var code = zeichen.charCodeAt();
 if (code > 64 && code < 91) {
  code = code + schritt;
  while (code > 90) code = code - 26;
  while (code < 65) code = code + 26;
  return String.fromCharCode(code);
 }
 else
  return zeichen;
}

function caesarCodieren(zeichenkette, schluesselbuchstabe, richtung) {
 var neukette = "";
 zeichenkette = zeichenkette.toUpperCase();
 schluesselbuchstabe = schluesselbuchstabe.toUpperCase();
 for (var i = 0; i < zeichenkette.length; i++) {
  let buchstabe = zeichenkette.substr(i, 1);
  let schritt = schluesselbuchstabe.charCodeAt() - 65;
  neukette = neukette + wandeln(buchstabe, richtung * schritt);
 }
 return neukette;
}

function caesarVerschluesseln(zeichenkette, schluesselbuchstabe) {
 return caesarCodieren(zeichenkette, schluesselbuchstabe, 1);
}

function caesarEntschluesseln(zeichenkette, schluesselbuchstabe) {
 return caesarCodieren(zeichenkette, schluesselbuchstabe, -1);
}
</code>

<run id="5ba880a346a3f">
caesarVerschluesseln("Informatik", "B");
</run>

<run id="5ba880a346ae6">
caesarEntschluesseln("JOGPSNBUJL", "B");
</run>

=== Häufigkeitsuntersuchungen ===

<code id="5bc4ebd3e782b">
function maxBuchstabe(zeichenkette) {
 var alphabet ="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 var maxzeichen = "", maxanzahl = 0;
 zeichenkette = zeichenkette.toUpperCase();
 for (var j = 0; j < alphabet.length; j++) {
  let zeichen = alphabet.substr(j, 1);
  let anzahl = 0;
  for (var i = 0; i < zeichenkette.length; i++)
   if (zeichenkette.substr(i, 1) == zeichen) anzahl++;
  if (anzahl > maxanzahl) {
   maxzeichen = zeichen; maxanzahl = anzahl;
  }
 }
 return maxzeichen;
}

function caesarKnacken(zeichenkette, buchstabe) {
 zeichenkette = zeichenkette.toUpperCase();
 buchstabe = buchstabe.toUpperCase();
 var schritt = maxBuchstabe(zeichenkette).charCodeAt() - buchstabe.charCodeAt();
 var code = 65 + schritt;
 while (code > 90) code = code - 26;
 while (code < 65) code = code + 26;
 var schluesselbuchstabe = String.fromCharCode(code);
 return caesarEntschluesseln(zeichenkette, schluesselbuchstabe);
}

function caesarTesten(zeichenkette, testkette) {
 for (var i = 0; i < testkette.length; i++) {
  let txt = caesarKnacken(zeichenkette, testkette.substr(i, 1));
  console.log(txt);
 }
} 
</code>

<run id="5bc36b689535a">
txt = "Das ist ein relativ kurzer, aber brisanter Informatik-Text!";
txt_geheim = caesarVerschluesseln(txt, "D");
caesarTesten(txt_geheim, "ERNSTL");
</run>

== Countdown-Zähler ==

<code id="5cd91a948fa71">
function countdown(time) {
 console.log(time);
 return time != 0 ? setTimeout(()=>{countdown(time-1);}, 1000): console.log("Zeit abgelaufen!");
}
</code>

<run id="5cd91a948fba6">
countdown(13);
</run>