Timer Übungen


Aufgabe 1 - Interval Timer

Erläutern Sie den folgenden Quelltext! (z.B. Ausdrucken und schriftliche Anmerkungen mit den passenden Fachbegriffen)
<!DOCTYPE html>
<html>
<head>
    <title>Interval Timer test</title>
    <meta charset="utf-8">
    <script>
 
        var IntervalId;
        var zahl=10;
 
        function meineFunktion()
        {
          document.getElementById("ausgabe").innerHTML=zahl;
          if( zahl <= 0)
          {
            stop();
          }
 
          zahl=zahl-1;
        }
 
        function start()
        {
          IntervalId = setInterval(meineFunktion, 2000);
        }
 
        function stop()
        {
          clearInterval(IntervalId);
        }
 
    </script>
</head>
<body>
    <div id="ausgabe"></div>
 
    <script>
        // starten des Programms nach Laden der Seite
        meineFunktion();
        start();
    </script>
</body>
</html>
 

Aufgabe 2 - PIN Cracker

Korrigieren Sie den folgenden Quelltext, so dass die eingegebenen PINs gecrackt werden!
<!DOCTYPE html>
 
<html>
 
 
<head>
 
  <title>Brute-Force PIN-Cracker</title>
  <meta charset="utf-8">
 
  <script>
 
    var cracked    = "Ihre PIN konnte in der vorgegebenen Zeit nicht ermittelt werden";
    var timId      = null;
    var intervalId = null;
    var maxzeit    = 0;
 
    // PIN besteht nur aus Zahlen; kann man also aus Zahlenwert ermitteln
    var i=0;
 
    function ende()
    {
      // Timer für die maximale Crackzeit stoppen falls er noch läuft!
      if( timId != null )
      {
        clearTimeout( timId );
      }
      timId = null;
 
      // Intervall-Timer für die Zeitanzeige stoppen falls er noch läuft!
      if( intervalId != null )
      {
        clearTimeout( intervalId );
      }
      intervalId = null;
 
      // Reset maxzeit und maxzeit Ausgabefeld
      maxzeit = 0;
      document.getElementById("zeitausgabe").innerHTML = "";
 
      // Ausgabe der PIN oder ggf. Fehlermeldung
      document.getElementById("ausgabe").innerHTML = cracked;
 
      // Reset cracked
      cracked = "Ihre PIN konnte in der vorgegebenen Zeit nicht ermittelt werden";
    }
 
 
    // Die folgende Funktion wird nur einmal nach Anklicken des Buttons
    // aufgerufen.
    // Start der Zeitausgabe
    function crack( pw, zeits )
    {
      var zeitms = zeits*500;
      maxzeit = zeits-1;
 
      // Ausgabefeld löschen
      document.getElementById("ausgabe").innerHTML = "";
 
      // Setzen des Timers für die sekundenweise Zeitausgabe
      intervalId = setInterval( zeitausgabe, 1000 )
 
      // Setzen der maximalen Zeit für den Test
      timId = setTimeout(ende, zeitms);
 
      // Ermittlung der PIN
      do
      {
 
        if( i%10 == 0 )
        {
          document.getElementById("ausgabe").innerHTML += " .";
        }
 
        if( pw == i )
        {
          cracked = pw;
          ende();
        }
        else
        {
          // document.getElementById("trace").innerHTML += i + (i%10==0?"<br>":" ");
        }
 
        i++;
 
      } while( timId != null && i < 100000 && pw!=i );
 
    }
 
 
    function zeitausgabe()
    {
      document.getElementById("zeitausgabe").innerHTML
          = "Noch " + maxzeit-- + " Sekunden. Aktuelle Anzahl der Vergleiche: " + i;
    }
 
  </script>
 
</head>
 
 
 
<body onload="document.getElementById("eingabe").focus()">
 
  <h1>Brute Force PIN Cracker</h1>
 
  <form name="pwc">
 
     Bitte geben Sie hier Ihre PIN ein!
     <input type="text" id="eingabe" name="pweingabe" size="25" maxlength="10">
 
     <p>
 
     Wie viele Sekunden darf das Cracken Ihrer PIN dauern?
     <input type="text" name="pwcracktime" size="5">
     <div id="zeitausgabe"></div>
 
     <p>
 
     <input
       type    = "button"
       name    = "meinButton"
       value   = "Crack It!"
       onclick = "crack( document.pwc.pweingabe.value
                       , parseInt(document.pwc.pwcracktime.value) )"
     >
 
  </form>
 
  Status / Ihre PIN lautet:
  <div id="ausgabe"></div>
  <div id="trace"></div>
 
 
</body>
 
</html>