tutorials.de Buch-Aktion 05/2012
  • Webmaster & Internet

    Webmaster & Internet
  • Berechnung der Diagonale eines rechtwinkligen Vierecks mittels JavaScript.

    Beschreibung:
    Dieser Code ist eine vollständige Website (HTML 4.1 Transitional und CSS level 2.1 valide) und dient dazu aus der Höhe und Breite eines rechtwinkligen Vierecks die Diagonale zu berechnen.



    Für einen Codeschnippsel ist es also eigentlich zu viel.
    Per Kommentarzeilen im Code habe ich die wesentlichen Dinge beschrieben, weshalb ich mir hier auch weitere Erklärungen erspare.
    Der Code bzw. die Website ist also eher als "Service von mir für euch" anzusehen.

    Die Eingabe ist auf 4 Zeichen begrenzt.
    Es können für die Höhe und Breite also alle Werte von 0,01 bis 9999 angegeben werden.
    Somit ergibt sich eine minimale Diagonale von 0,01 und eine maximale Diagonale von 14140,72.
    Sollte also mehr als genug sein.

    Da ich eigentlich nichts mit JavaScript zu tun habe, habe ich größtenteils Google und SelfHTML zu Rate ziehen müßen.
    Aber auch das Forum hat mir geholfen, wenn ich nicht mehr weiter wußte (mein Dank geht hier besonders an Maik, Sven und Quaese).

    Wie alles begann:
    Dazu gibt es eine Vorgeschichte.
    Mein alter Fernseher (Röhrengerät im 4:3 Format, Baujahr 1990 oder 1991) hat 2008 breits angekündigt den Geist aufzugeben (Bildverzerrung im linken Bildviertel und Grünstich beim einschalten).
    Die Bildverzerrung viel nicht weiter auf, ausser im Teletext.
    Der Grünstich verschwand, nach dem das Gerät warmgelaufen war.
    Aber 2009 war es dann eines Abends so weit..... ein dumpfer Knall gefolgt von knistern und nichts ging mehr.

    Heutige Fernseher haben fast nur noch ein 16:9 Bildformat.
    Da stellte sich mir natürlich die Frage: "Welche Bildschirmdiagonale benötige ich um mindestens auf die gewohnte Bildhöhe zu kommen?".
    Klar, ich hätte mir auch einen Zollstock (Gliedermaßstab) schnappen können und einfach mal die Bildhöhe meines alten Fernsehers mit den Bildhöhen div. Neugeräte im Elektonikfachhandel vergleichen können.
    Aber hey, wir leben im Computerzeitalter.
    Also hatte ich mir bereits 2008 ein Script in PHP geschrieben welches mir aus der Bildhöhe und dem Bildformat die notwendige Bildschirmdiagonale errechnet.

    Warum dieses JavaScript?
    Mittlerweile nutze ich das PHP-Script in abgeänderter Form (anstatt dem Bildformat und der Bildhöhe muss nun die Bildbreite und Bildhöhe eingegeben werden) um es z.B. für die Bildbearbeitung zu nutzen.
    Nun aber habe ich mir gedacht dass andere Leute das Script als nützliches Helferlein gebrauchen könnten.
    Damit diese es aber auch offline nutzen können und auch nicht erst einen lokalen Webserver einrichten müssen, habe ich nun eine Variante erstellt die JavaScript nutzt.
    Der Vorteil an dieser Variante liegt also darin dass jeder, der einen JavaScript-fähigen Web-Browser hat, dieses Script ohne irgendwelche Server- und/oder Websitekenntnisse nutzen kann.

    Welche Web-Browser werden unterstützt?
    Nun, da es mir natürlich nicht möglich ist sämtliche Web-Browser zu testen und dabei auch noch die verschiedenen Betriebssysteme zu berücksichtigen, muss ich einfach mal den Angaben von SelfHTML vertrauen.
    Dabei habe ich jedoch nur JavaScript berücksichtig.
    Da ich aber nur einfachsten HTML-/CSS-Code verwendet habe, sollte es auch hierbei mit den genannten Browserversionen keine Probleme geben.

    Microsoft Internet Explorer ab 5.5 (xx.07.2000)
    Opera ab 7.0 (28.01.2003)
    Mozialla Firefox ab 1.0 (09.11.2004)
    Konqueror ab 3.3 (19.08.2004)
    Safari ab 1.3 (Safari 1.2: 04.02.2004/Safari 1.3.1: 29.08.2005)

    Apple nennt kein Erscheinungsdatum für Safari 1.3, aber das Erscheinungsdatum von Safari 1.2 und Safari 1.3.1 läßt vermuten daß Safari 1.3 irgendwann im 1. Halbjahr 2005 erschienen ist.
    Da der Support für Netscape vor rund 2 Jahren eingestellt wurde, habe ich diesen nicht mehr berücksichtigt.

    Weiterführende Links:
    Satz des Pythagoras bei Wikipedia.
    JavaScript/DOM bei SelfHTML.
    HTML/XHTML bei SelfHTML.
    Stylesheets (CSS) bei SelfHTML.

    HTML-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="Thu, 01 Jan 1970 01:00:00 GMT">
    <title>Diagonale berechnen</title>
    
    <style type="text/css">
    <!--
    /*
    Einwenig CSS um die Seite in den verschiedenen Browsern halbwegs gleichmäßig aussehen zu lassen. ;-)
    */
    
    body, form, table, input, select {
        font-family: arial, verdana, sans-serif;
        font-size: 11pt;
    }
    
    table, td, tr {
        border: 0px solid #000000;
        margin: 0px;
        padding: 1px 0px 1px 0px;
        border-collapse: collapse;
    }
    
    .buttonstyle {
        width: 200px;
    }
    
    .JSwarning {
        color: #ff0000;
        font-size: 24pt;
    }
    
    -->
    </style>
    
    <script type="text/javascript">
    
    /*
    Eine Funktion wird erstellt, an welche die Breite und die Höhe aus dem Formular übergeben werden.
    In der Funktion geben wir den Formulardaten einen Namen.
    */
    function CheckInput(InputHeight, InputWidth) {
    
        /*
        Scriptsprachen "sprechen" Englisch und benötigen daher ein Punkt als Dezimaltrennzeichen, als Deutsche sind wir es aber gewohnt ein Komma zu schreiben/tippen.
        Darum wird zuerst mit replace() in den übergebenen Werten nach Kommata gesucht und ggf. gegen Punkte ersetzt sowie Variablennamen (var) vergeben.
        Normalerweise müßten die Dezimalzeichen noch gezählt werden.
        Da isNaN() aber nur EIN Dezimaltrennzeichen akzeptiert, wird bei mehr als einem Punkt und/oder einem Komma ohnehin die Fehlermeldung (siehe ErrorMessage) ausgegeben.
        isNaN() akzeptiert auch kein Tausendertrennzeichen (weder als Punkt, noch als Komma).
        */
        var ReplacedDecimalSeparatorHeight = InputHeight.replace(/,/g, ".");
        var ReplacedDecimalSeparatorWidth = InputWidth.replace(/,/g, ".");
    
        /*
        Mit isNaN() (is not a Number) wird nun geprüft ob die eingegebenen Werte KEINE Zahlen sind.
        Wenn die Überprüfung "false" ergibt, dann sind es (gültige) Zahlen.
        */
        if( (isNaN(ReplacedDecimalSeparatorHeight) == false) && (isNaN(ReplacedDecimalSeparatorWidth) == false) ) {
    
            // Es wird geprüft ob beide Werte nicht leer sind.
            if( (ReplacedDecimalSeparatorHeight != "") && (ReplacedDecimalSeparatorWidth != "") ) {
    
                /*
                Mit sqrt() wird die Quadratwurzel gezogen.
                Aber aus was? Na, aus "c" natürlich..... a-Quadrat plus b-Quadrat gleich c-Quadrat (Pythagoras läßt grüßen). ;-)
                Das Ergebnis wird mit toFixed() noch auf Zwei Dezimalstellen kaufmännisch gerundet und in einer Variable gespeichert.
                */
                var Result = Math.sqrt( (ReplacedDecimalSeparatorHeight * ReplacedDecimalSeparatorHeight) + (ReplacedDecimalSeparatorWidth * ReplacedDecimalSeparatorWidth)  ).toFixed(2);
    
                /*
                Da wir mit der Berechnung fertig sind und wir das Ergebnis in der deutschen Schreibweise haben möchten, ändern wir das Dezimaltrennzeichen wieder in ein Komma um und speichern das Ergebnis in einer neuen Variable.
                Der Punkt ist für die regulären Ausdrücke ein Platzhalter und muß daher hier nun mit einem Backslash maskiert werden.
                */
                var ReplacedDecimalSeparatorOutput = Result.replace(/\./g, ",");
    
                // Hiermit wird der vorbereitete Text per CSS (display:block) unter dem Formular eingeblendet.
                document.getElementById("TextField").style.display = "block";
    
                // Hiermit wird das Ergebnis in den vorbereiteten Text eingefügt.
                document.getElementById("InlineText").innerHTML = ReplacedDecimalSeparatorOutput;
            }
    
            // Liebes Script, mache ab hier bitte nicht weiter. ;-)
            return false;
    
        // Wenn isNaN() "true" ergibt.....
        } else {
    
            // .....dann wird eine Variable für die Fehlermeldung(en) vorbereitet und eine Überschrift definiert.
            var ErrorMessage = "Fehler bei der Eingabe!\n\n";
    
            // Ist die Breite "not a Number"?
            if( isNaN(InputWidth) ) {
    
                /*
                Dann füge den Fehler zur zuvor erstellten Variable hinzu (+=).
                unescape() wandelt die Hexadezimalen Zeichen in ASCI Zeichen um ("%20" --> Leerzeichen, "%FC" --> ü).
                Mit "\n" wird ein Zeilenumbruch erwirkt.
                Anstatt der vielen Leerzeichen hätte ich auch Tabstops ("\t") verwenden können, dieses hat mir jedoch optisch nicht gefallen.
                */
                ErrorMessage += unescape("Bildbreite:\n%20%20%20%20%20%20Der eingegebene Wert \"" + InputWidth + "\" ist keine g%FCltige Zahl!\n\n");
            }
    
            // Ist die Höhe "not a Number"?
            if( isNaN(InputHeight) ) {
    
                //Das gleiche wie zuvor bei der Breite. ;-) 
                ErrorMessage += unescape("Bildh%F6he:\n%20%20%20%20%20%20Der eingegebene Wert \"" + InputHeight + "\" ist keine g%FCltige Zahl!\n\n");
            }
    
            // Zeige ein Hinweisfenster mit den zuvor erstellten Fehlermeldungen an.
            alert(ErrorMessage);
    
            // Liebes Script, mache ab hier bitte nicht weiter. ;-)
            return false;
       }
    }
    
    /*
    Hier wird eine Funktion erstellt die die Maßeinheit aus dem Formular entgegen nimmt und selbige in den vorbereiteten Text einfügt.
    Dieses hat keinerlei Auswirkung auf die Berechnung, sondern dient lediglich der Optik. ;-)
    */
    function SelectMeasure(ValueMeasure) {
        document.getElementById("Measure").innerHTML = ValueMeasure;
    }
    
    // Hier wird eine Funktion erstellt die dann reagiert, wenn der "Formular zurücksetzen"-Button gedrückt wird.
    function ResetForm() {
    
        /*
        Es wird eine Variable angelegt.
        unescape() wandelt die hexadezimalen Zeichen in ASCI Zeichen um ("%20" --> Leerzeichen, "%FC" --> ü).
        confirm() zeigt ein Hinweisfenster mit einer Sicherheitsfrage an.
        Außerdem gibt confirm() zurück ob auf OK (true) oder auf Abbrechen (false) geklickt wurde.
        */
        var Warning = confirm( unescape("Soll das Formular wirklich zur%FCckgesetzt werden?") );
    
        // Wenn confirm() "true" zurück gibt.....
        if(Warning == true) {
    
            // .....dann lade die Seite neu.
            location.reload(true);
        }
    }
    
    /*
    Tests haben gezeigt daß die Seite immer wieder aus dem Browser-Chache geholt wurde und somit auch die zuletzt getätigten Eingaben angezeigt wurden.
    Daher diese Funktion, die beim Seitenaufruf ausgeführt wird.....
    */
    window.onload = function() {
    
        // .....und das Formular auf die Default-Werte zurück setzt.
        document.Calculator.reset();
    }
    
    </script>
    
    
    
    Diese Seite dient dazu die Diagonale eines rechtwinkligen Vierecks zu berechnen.<br>
    Um das Ergebnis in Zoll umzurechnen (z.B. für die Diagonale von Bildschirmen) muß dieses, in Zentimeter angegeben, durch 2,54 geteilt werden (1" = 2,54cm).<br>
    <br>
    <form name="Calculator" action="http://www.tutorials.de/">
        <table>
            <!--
            Eingabefelder für die Breite und die Höhe.
            onfocus() bewirkt beim reinklicken in die Formularfelder, daß deren vorgegebener/eingegebener Wert (value) im jeweiligen Formularfeld (this) gelöscht wird (='').
            -->
            <tr><td>Höhe:*</td><td><input type="text" name="Height" value="24.0" size="2" maxlength="4" onfocus="this.value='';"></td></tr>
            <tr><td>Breite:*</td><td><input type="text" name="Width" value="36.0" size="2" maxlength="4" onfocus="this.value='';"></td></tr>
            
            <!--
            Auswahlmenü für die Maßeinheit.
            Bei Auswahl (onchange) wird der gewählte (SelectedIndex) Wert (value) aus den <option>-Elementen (options) an die Funktion SelectMeasure() übergeben und, wie weiter oben beschrieben, verarbeitet.
            -->
            <tr><td>Maßeinheit:**</td><td><select size="1" onchange="SelectMeasure(options[selectedIndex].value)">
                                                         <option value="" selected="selected"></option>
                                                         <option value="mm">mm</option>
                                                         <option value="cm">cm</option>
                                                     </select> (optionale Auswahl, hat keinen Einfluß auf die Berechnung)</td></tr>
        
        <!--
        Der Button zur Berechnung der Diagonale.
        Beim anklicken (onclick) werden die Werte (value) aus diesem Formular (this.form) aus den Eingabefeldern für die Höhe/Breite (Height/Width) an die Funktion CheckInput() übergeben und, wie weiter oben beschrieben, verarbeitet.
        -->
        <tr><td>*</td><td><input class="buttonstyle" type="button" value="Bilddiagonale berechnen" onclick="CheckInput(this.form.Height.value, this.form.Width.value)"></td></tr>
        
        <!--
        Der Button zum zurücksetzen des Formulars.
        Beim anklicken (onclick) wird die Funktion ResetForm() aufgerufen und, wie weiter oben beschrieben, ausgeführt.
        -->
        <tr><td>*</td><td><input class="buttonstyle" type="button" value="Formular zurücksetzen" onclick="ResetForm()"></td></tr>
    </table>
    </form>
    
    <!--
    Das vorbereitete Textfeld in dem die Ausgabe erfolgt.
    Bei InlineText wird der errechnete Wert und bei Measure die gewählte Maßeinheit eingefügt.
    -->
    <p id="TextField" style="display:none;">Die Diagonale beträgt <b><span id="InlineText"></span><span id="Measure"></span></b>*(auf 2 Dezimalstellen kaufmännisch gerundet).</p>
    
    <!--
    Falls JavaScript deaktiviert ist, wird dieser Abschnitt angezeigt.
    -->
    <noscript>
        <br><b class="JSwarning">JavaScript muß aktiviert sein!</b>
    </noscript>
    <div class="footer_morecopyright" style="margin-top: 0px;color:#FFFFFF;">Page Time: <b>0,18122</b> seconds *****Memory: <b>11,569</b> KB *****Queries: <b>96</b> *****Templates: <b>55</b> (<b>34</b> uncached)<br />Server Uptime: <b>21 days 5 hours 31 mins</b> *****Server Load: <b>0.91</b> : 1.17 : 1.24<br /><table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;"><tr><td style="color: #cccccc; text-align: left;"><b>ad_showthread_firstpost_sig</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>ad_showthread_firstpost_start</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>ad_thread_first_post_content</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>blog_postbit_blog_this_post</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_clientscript</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_jsoptions_font</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_jsoptions_size</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie</b></td><td style="padding-left: 10px;">(20)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie_category</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smilie_row</b></td><td style="padding-left: 10px;">(30)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_smiliebox</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_colors</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_fontname</b></td><td style="padding-left: 10px;">(42)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_fontsize</b></td><td style="padding-left: 10px;">(14)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>editor_toolbar_on</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>newpost_attachment</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>newpost_attachmentbit</b></td><td style="padding-left: 10px;">(4)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>newpost_disablesmiliesoption</b></td><td style="padding-left: 10px;">(2)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>postbit_ip</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>postbit_onlinestatus</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>postbit_reputation</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>postbit_wrapper</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>tagbit_wrapper</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_article_editor</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_comments_block</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_comments_detail</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_content_article_inline</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_content_edit_editbar</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_block</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_metadataeditor</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_page</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_edit_publisher</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_editor_toolbar_on</b></td><td style="padding-left: 10px;">(1)</td></tr><tr><td style="color: #cccccc; text-align: left;"><b>vbcms_postbit</b></td><td style="padding-left: 10px;">(1)</td></tr></table></div></body>
    </html>
    [edit]
    Ganz vergessen, ich wollte ja noch einen Screenshot anhängen, damit ihr gleich sehen könnt wie die Website aussieht.
    Zum vergrößern, einfach anklicken.

    Und um euch die Arbeit mit Copy&Paste abzunehmen, habt ihr die Website hier auch noch als ZIP-Datei.
    Bilddiagonale_berechnen.zip
    Möglicherweise wird euch die ZIP-Datei beim entpacken als beschädigt gemeldet.
    Dieses Problem ist in der Vergangenheit öfter bei ZIP-Dateien vorgekommen und ist bekannt (siehe z.B. hier).
    Solltet ihr also Probleme haben, dann ladet die ZIP-Datei mit einem anderen Browser runter und/oder versucht sie mit einem anderen Packprogramm zu entpacken.
    [/edit]
     


    Kommentare 3 Kommentare
    1. Avatar von Staxx
      Staxx -
      Schön ausgearbeitet!
      Ne Menge Aufand für ein kleines "Tool", wo doch eigentlich jeder den Satz des Pythagoras können sollte.
    1. Avatar von ComFreek
      ComFreek -
      Echt viel Code, ich hätte viel weniger erwartet. Vielleicht ist es aber auch nur wegen den ganzen Kommentaren.
      Aber ich habe einen Bug gefunden. Der rechnet nicht zwischen mm und cm um.
      Der tauscht nur die zwei Buchstaben aus, nicht den Wert.
    1. Avatar von Dr Dau
      Dr Dau -
      Sorry, irgendwie war das Abo verschwunden.....

      @Staxx, der Satz des Pythagoras ist ja noch nicht alles.
      Sicherlich gibt es Leute die den Satz des Pythagoras im Kopf ausrechnen..... und aus dem Ergebnis dann auch noch die Quadratwurzel "ziehen" können.
      Andere nehmen dazu einen Taschenrechner.
      Ich finde es aber angenehmer (und auch effizienter) einfach nur die beiden Maße in einem Formular einzugeben und nurnoch auf den Button zu drücken.

      @ComFreek, wenn ich mich jetzt nicht verzählt habe, sind es 85 Kommentarzeilen plus 37 eigentlich unnötige Leerzeilen (dienen der besseren Lesbarkeit) bei insgesamt 213 Zeilen.
      Hinzu kommt noch das nicht zwingend notwendige HTML-Grundgerüst und einige Funktionen welche nichts mit der Berechnung zu tun haben (da ich das Tool der Öffentlichkeit zur Verfügung gestellt habe, soll es natürlich auch möglichst in allen Browsern funktionieren ).
      Theoretisch hätte ich den Code also bestimmt auf geschätze 25% schrumpfen können.

      Die Sache mit den mm und cm ist kein Bug.
      Es war (und ist) schlicht und einfach nicht angedacht das Ergebnis auch noch in eine andere Maßeinheit umzurechnen.
      Wozu auch? 1000mm sind 100cm sind 1m sind 0,001km.....
      Die Angabe von mm bzw. cm dient also nur der Optik.
      Es steht dort ja auch "hat keinen Einfluß auf die Berechnung".
      Wenn überhaupt, dann wäre eine Umrechnung in Zoll sinnvoller.
      Aber wann benötigen wir schon Zollangaben?!
      Und wer unbedingt eine Umrechnung benötigt, kann ja auch den Google-Calculator nutzen.

      PS: zuletzt habe ich das Tool gestern verwendet.
      Es ist also nicht etwas was ich "mal eben schnell" entwickelt habe weil ich es grad benötigt hatte.
    Kommentare Kommentar schreiben

    Klicke hier, um dich anzumelden

    Wie heißt die Bundeskanzlerin der BRD mit Nachnamen? Angela...