Stefan Krenz: Umrechnung Dezimal->Dual! Fehlersuche im Script...

Hallo,

ich wollte mir einen Umrechner von Dezimalzahlen in Dualzahlen
schreiben.

Leider stimmt etwas mit dem Script nicht, kann aber den Fehler nicht finden!
Ich hoffe es gibt jemanden, der mir die fehlerhaften Zeilen korrigieren kann.

Wichtig ist, daß durch Eingabe einer Dezimalzahl und darauffolgenden Klick auf "Berechnen" das Ergebnis im Feld für Dualzahlen erscheint.

Danke im voraus.

MfG

Stefan Krenz

Nachfolgend das Script:

<HTML>

<HEAD>
       <META http-equiv=Content-Type content="text/html; charset=windows-1252">

<TITLE>2.2.2 Geschäftsbereich Informationstechnik</TITLE>

<script type="text/javascript">

Function DezimaltoDual()

{

var Dezimalzahl=document.DezimaltoDual.Dezimal.value;
var Dualzahl=0;}

while (Dezimalzahl > 0) {

Dualzahl=Dezimalzahl.toString(2); }

document.DezimaltoDual.Dual.value=Dualzahl;
}

</script>

</head>

<BODY>
<H1>Berechnung Dualzahlen aus Dezimalzahlen</H1>

<Form name="DezimaltoDual">

<TABLE border=1>

<TR>
    <TH>Dezimalzahl</TH>
    <TH>Dualzahl</TH></TR>
  <TR>
    <TH>Eingabe Dezimalzahl</TH>
    <TH>Ausgabe Dualzahl</TH></TR>
  <TR>

<TD align="center">
          <INPUT type="text" name="Dezimal" size="50"></TD>

<TD align="center">
          <INPUT type="text" name="Dual" size="50"></TD>
  </TR>

<TR>
      <TD colspan="1" align="center">
         <input type="reset" VALUE="Werte Löschen"></TD>

<TD colspan="1" align="center">
         <input type="button" value="Berechnung" onClick="DezimaltoDual()">
      </TD>
  </TR>

</Table>
</Form>

</Body>

</Html>

  1. Hi,

    Leider stimmt etwas mit dem Script nicht, kann aber den Fehler nicht finden!

    wir auch nicht, solange Du keine Fehlerbeschreibung lieferst.

    <META http-equiv=Content-Type content="text/html; charset=windows-1252">

    Warum benutzt Du keinen standardisierten Zeichensatz wie ISO-8859-1?

    Function DezimaltoDual()

    Was ist "Function"?

    <Form name="DezimaltoDual">

    ERROR: Required attribute "action" missing.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      zur genauen Fehlerbeschreibung kann ich nicht viel sagen.

      Mein IE gibt folgende Meldung ab:

      Zeile: 62
      Zeichen: 1
      Fehler: Das Objekt unterstützt diese Eigenschaft oder Methode nicht
      Code: 0

      Was immer das auch heißen mag... beschäftige mich erst seit einer Woche mit dem Thema Javascript! Deshalb habe ich auch noch keinen richtigen Überblick über das, was ich da so an Fehlern gemacht habe.

      Wie ich bereits "Slyh" geschrieben habe, soll ich ein Formular erstellen, mit dem man eingegebene Dezimalzahlen in Dualzahlen umrechnen kann! Die Erstellung des Formulars ist sicherlich fehlerfrei, lediglich die Javascript Passage, speziell der Funktionsblock, scheint mir nicht geglückt zu sein...

      Evtl. hast Du ja eine Idee wie ich den Funktionsblock schreiben muss, damit das Script einen Wert ausgibt!?

      Gruß

      Stefan

      Habe alle bisherigen Verbesserungsvorschläge eingearbeitet:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

      <HTML>

      <HEAD>
             <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

      <TITLE>2.2.2 Geschäftsbereich Informationstechnik</TITLE>

      <script language="JavaScript">

      function DezimaltoDual()

      {

      var Dezimalzahl=document.DezimaltoDual.Dezimal.value;
      var Dualzahl=0;

      while (i > 0) {

      Dualzahl=Dezimalzahl.toString(2); }

      document.DezimaltoDual.Dual.value=Dualzahl;

      }

      </script>

      </head>

      <BODY>
      <H1>Berechnung Dualzahlen aus Dezimalzahlen</H1>

      <Form name="DezimaltoDual">

      <TABLE border=1>

      <TR>
          <TH>Dezimalzahl</TH>
          <TH>Dualzahl</TH></TR>
        <TR>
          <TH>Eingabe Dezimalzahl</TH>
          <TH>Ausgabe Dualzahl</TH></TR>
        <TR>

      <TD align="center">
                <INPUT type="text" name="Dezimal" size="50"></TD>

      <TD align="center">
                <INPUT type="text" name="Dual" size="50"></TD>
        </TR>

      <TR>
            <TD colspan="1" align="center">
               <input type="reset" VALUE="Werte Löschen"></TD>

      <TD colspan="1" align="center">
               <input type="button" value="Berechnung" onClick="DezimaltoDual()">
            </TD>
        </TR>

      </Table>
      </Form>

      </Body>

      </Html>

      1. Hallo Stefan,

        zur genauen Fehlerbeschreibung kann ich nicht viel sagen.
        Mein IE gibt folgende Meldung ab:

        Zeile: 62
        Zeichen: 1
        Fehler: Das Objekt unterstützt diese Eigenschaft oder Methode nicht
        Code: 0

        Was steht in Zeile 62?

        Was immer das auch heißen mag...

        Siehe Jürgens Posting: [pref:t=81993&m=477304]
        Du gehst davon aus, dass Deine Variable 'Dezimal' eine Zahl enthält.
        Davon darfst Du aber nicht ausgehen, auch wenn z.B. im Input-Feld 10.25 steht.
        Prüfe den Typ Deiner Variablen und noch ein Tipp: http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#number sollte Dir auch noch weiterhelfen.

        Weiterhin weist Dein Skript einen Namenskonflikt auf. Formularelemente und Funktionen sollten nicht den gleichen Namen tragen. Überprüfe Dein Skript auf doppelte Namen.

        Freundliche Grüsse,

        Vinzenz

        1. Hallo Vinzenz,

          ich habe das Script jetzt überarbeitet und alle Fehlermeldungen beseitigt!

          Ein Problem besteht jedoch noch, und zwar gibt mir das Programm nach der Umrechnung des Dezimalwerts genau den gleichen Wert als Dualwert aus!!
          Ich denke es liegt an der Zeile:

          var Dualzahl=Dezimalzahl.toString(2);

          Ersetze ich die Zeile z.B. durch: ...=Dezimalzahl*2;
          dann rechnet er den Ausgabewert für das Dualzahlfeld richtig aus.

          Es scheint so, als ob der Befehl "toString(2);" nicht richtig funktioniert!?

          Grüße

          Stefan

          Hier nochmal der komplette Java-Abschnitt zur Übersicht:

          <script type="text/javascript">

          function Umrechner ()

          {
          var Dezimalzahl = 0;
          var Dualzahl = 0;

          {

          var Dezimalzahl=document.Dezidual.Dezimal.value;

          var Dualzahl=Dezimalzahl.toString(2);
          }

          document.Dezidual.Dual.value=Dualzahl;

          }

          </script>

          </head>

          Hallo Stefan,

          zur genauen Fehlerbeschreibung kann ich nicht viel sagen.
          Mein IE gibt folgende Meldung ab:

          Zeile: 62
          Zeichen: 1
          Fehler: Das Objekt unterstützt diese Eigenschaft oder Methode nicht
          Code: 0

          Was steht in Zeile 62?

          Was immer das auch heißen mag...

          Siehe Jürgens Posting: [pref:t=81993&m=477304]
          Du gehst davon aus, dass Deine Variable 'Dezimal' eine Zahl enthält.
          Davon darfst Du aber nicht ausgehen, auch wenn z.B. im Input-Feld 10.25 steht.
          Prüfe den Typ Deiner Variablen und noch ein Tipp: http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#number sollte Dir auch noch weiterhelfen.

          Weiterhin weist Dein Skript einen Namenskonflikt auf. Formularelemente und Funktionen sollten nicht den gleichen Namen tragen. Überprüfe Dein Skript auf doppelte Namen.

          Freundliche Grüsse,

          Vinzenz

          1. Hallo Stefan ,

            Du hast schon gewaltige Fortschritte gemacht, prima.
            Aber bitte keine sogenannten Fullquotes, d.h. komplettes Zitieren am Stück ...
            Zitiere nur das Notwendige, kommentiere an der richtigen Stelle.

            Nach dieser Ermahnung Hinweise darauf, was noch nicht in Ordnung ist

            Hier nochmal der komplette Java-Abschnitt zur Übersicht:

            <steine anzahl="viele">Java und Javascript sind zwei verschiedene Programmiersprachen</steine>,  bitte lies http://aktuell.de.selfhtml.org/artikel/humor/brian/index.htm dazu ;-)

            function Umrechner ()

            ein Fehler beseitigt :-)

            {
            var Dezimalzahl = 0;
            var Dualzahl = 0;
            {
            var Dezimalzahl=document.Dezidual.Dezimal.value;

            einen neuen Fehler eingebaut. Bitte verwende var nur einmal.

            An dieser Stelle solltest Du Dir Gedanken über den Typ Deiner Eingabe machen, Number() http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#number ist Dein Freund.

            var Dualzahl=Dezimalzahl.toString(2);

            Fehler wiederholt :-(

            }

            ...

            Beginn Fullquote

            Hallo Stefan,

            mein komplettes Posting am Stück, unkommentiert ...
            ... mit dem Verweis auf Number(), dieser blieb ungenutzt und nicht hinterfragt.

            Vinzenz

            Ende Fullquote

            Freundliche Grüsse,

            Vinzenz

            1. Hallo Vinzenz,

              erstmal sorry dafür, dass ich meine Beiträge ein wenig ausschweifend
              dargestellt habe...

              Da ich mittlerweile seit Dienstag versuche mir das nötige Wissen anzueignen, um diese doch wohl recht leichte Aufgabe zu lösen,
              steht für mich an erster Stelle natürlich das richtige Umrechnen
              der Dezimalzahl.
              Meinen Lösungsansatz hab ich mir aus dem Archiv gesucht, jedoch bin
              ich damit nicht so recht weitergekommen, da dort mit komplizierten Rechnungen hantiert wurde...

              Dann habe ich den Befehl "to.String" gefunden unter
              http://selfhtml.teamone.de/javascript/objekte/number.htm#to_string

              Das Beipielprogramm läuft ja anstandslos, lediglich mit der Übertragung in mein Programm bin ich gescheitert...
              Ich erhalte als Ausgabewert für die Dualzahl immer genau den Eingabewert der Dezimalzahl!?

              function Umrechner ()
              {
               var Dezimalzahl = 0;
               var Dualzahl = 0;
              {
                Dezimalzahl=document.Dezidual.Dezimal.value;
                Dualzahl=Dezimalzahl.toString(2);
              }

              document.Dezidual.Dual.value=Dualzahl;
              }

              </script>

              An dieser Stelle solltest Du Dir Gedanken über den Typ Deiner
              Eingabe machen, Number()

              -Ist es notwendig, daß ich mit Number() arbeite um mein Problem mit der Umrechnung zu lösen?
              Es interessiert mich in erster Linie wie ich den "toString"-Befehl
              in meinem Programm einarbeiten muss, damit ich den richtigen Dual-Wert erhalte...

              Ich hoffe Du kannst mir da weiterhelfen, da ich die Aufgabe am Freitag bei meinem Dozenten abgeben muß.

              Gruß

              Stefan

              1. Hallo Stefan,

                An dieser Stelle solltest Du Dir Gedanken über den Typ Deiner
                Eingabe machen, Number()

                -Ist es notwendig, daß ich mit Number() arbeite um mein Problem mit der Umrechnung zu lösen?

                Ja.

                Es interessiert mich in erster Linie wie ich den "toString"-Befehl

                Ich hoffe Du kannst mir da weiterhelfen, da ich die Aufgabe am Freitag bei meinem Dozenten abgeben muß.

                Das, was Du über ein Input-Feld in einem Formular eingibst, ist für Javascript eine Zeichenkette, ein String. Das gilt auch dann, wenn diese Zeichenkette z.B. den Wert

                10.25

                hat. Es ist notwendig, dass Du diese Zeichenkette explizit - mit der Funktion Number() - in eine Zahl umwandelst. Javascript macht dies _nicht_ implizit für Dich, Javascript nimmt Dir diese Arbeit nicht ab.

                Eines der typischen Beispiele, wie Javascript mit solchen Eingaben umgeht, kannst Du einfach nachvollziehen:

                Zwei Eingabefelder, eine Schaltfläche im Formular und ein Ergebnisfeld (Eingabefeld).
                Beim Klicken auf die Schaltfläche werden die beiden Eingaben addiert und das Ergebnis im Ergebnisfeld ausgegeben.
                Gib in das erste Eingabefeld 1 ein, in das zweite Eingabefeld 2,
                das Ergebnis bei Verwendung des Operators + ist 12, nicht 3.

                Grundsätzlich solltest Du Dir angewöhnen, die Benutzereingabe zu überprüfen. Wenn Du in einem Eingabefeld Zahlen erwartest, dann überprüfe, ob es sich um eine Zahl handelt, mit isNaN(). Wurde eine Zahl eingegeben, so wandle die Zahl explizit mit Number() um ...

                Freundliche Grüsse,

                Vinzenz

  2. Hallo,

    <script type="text/javascript">

    Function DezimaltoDual()

    Eigentlich ist JavaScript case-sensitive. Das Schlüsselwort
    "function" müßte also kleingeschrieben sein.

    {

    var Dezimalzahl=document.DezimaltoDual.Dezimal.value;
    var Dualzahl=0;}

    ..................^

    Hat es einen Grund, daß du den Funktions-Block hier schon wieder
    schließt?
    (Das dürfte übrigens dein Fehler sein.)

    while (Dezimalzahl > 0) {
         Dualzahl=Dezimalzahl.toString(2); }

    Bist du sicher, daß "Deziamlzahl" an dieser Stelle überhaupt eine
    Zahl ist?

    Gruß
    Slyh

    1. Hallo,

      danke für die schnelle Antwort, ich habe Deine Verbesserungsvorschläge ausprobiert. Leider funktioniert
      das Script noch immer nicht.

      Da ich mich erst seit ca. 1 Woche mit dem Thema Javascript beschäftige habe ich noch wenig Ahnung davon.

      Wenn Du eine Idee hast, wie ich die Schleife programmieren
      muß damit es funktioniert, wäre ich sehr dankbar.

      Es soll halt die ins Formular eingegebene Dezimalzahl, nach klicken auf den Button "Berechnung", im Feld Dualzahl dargestellt werden.

      Hier noch meine abgeänderte Version:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

      <HTML>

      <HEAD>
             <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

      <TITLE>2.2.2 Geschäftsbereich Informationstechnik</TITLE>

      <script language="JavaScript">

      function DezimaltoDual()

      {

      var Dezimalzahl=document.DezimaltoDual.Dezimal.value;
      var Dualzahl=0;

      while (i > 0) {

      Dualzahl=Dezimalzahl.toString(2); }

      document.DezimaltoDual.Dual.value=Dualzahl;

      }

      </script>

      </head>

      <BODY>
      <H1>Berechnung Dualzahlen aus Dezimalzahlen</H1>

      <Form name="DezimaltoDual">

      <TABLE border=1>

      <TR>
          <TH>Dezimalzahl</TH>
          <TH>Dualzahl</TH></TR>
        <TR>
          <TH>Eingabe Dezimalzahl</TH>
          <TH>Ausgabe Dualzahl</TH></TR>
        <TR>

      <TD align="center">
                <INPUT type="text" name="Dezimal" size="50"></TD>

      <TD align="center">
                <INPUT type="text" name="Dual" size="50"></TD>
        </TR>

      <TR>
            <TD colspan="1" align="center">
               <input type="reset" VALUE="Werte Löschen"></TD>

      <TD colspan="1" align="center">
               <input type="button" value="Berechnung" onClick="DezimaltoDual()">
            </TD>
        </TR>

      </Table>
      </Form>

      </Body>

      </Html>

      Gruß

      Stefan

      Hallo,

      <script type="text/javascript">

      Function DezimaltoDual()

      Eigentlich ist JavaScript case-sensitive. Das Schlüsselwort
      "function" müßte also kleingeschrieben sein.

      {

      var Dezimalzahl=document.DezimaltoDual.Dezimal.value;
      var Dualzahl=0;}
      ..................^

      Hat es einen Grund, daß du den Funktions-Block hier schon wieder
      schließt?
      (Das dürfte übrigens dein Fehler sein.)

      while (Dezimalzahl > 0) {
           Dualzahl=Dezimalzahl.toString(2); }

      Bist du sicher, daß "Deziamlzahl" an dieser Stelle überhaupt eine
      Zahl ist?

      Gruß
      Slyh

      1. Hallo Stefan,

        ob es mit den folgenden Änderungsvorschlägen geht, habe ich nicht getestet.

        <script language="JavaScript">

        <script type="text/javascript>

        function DezimaltoDual()

        {

        var Dezimalzahl=document.DezimaltoDual.Dezimal.value;
        var Dualzahl=0;

        while (i > 0) {

        Dualzahl=Dezimalzahl.toString(2); }

        wozu ist die while-Schleife da? Welchen Wert hat i? Für i==0 passiert nichts, sonst läuft sie bis zum Nimmerleinstag. Lass Sie einfach mal weg. Du willst die Zahl ja nur einmal konvertieren.

        document.DezimaltoDual.Dual.value=Dualzahl;

        }

        </script>

        Gut wäre es auch noch, den Input zu prüfen. Such mal im selfhtml nach isNaN (is not a number).

        Gruß, Jürgen

        1. Hallo Jürgen,

          ich habe das Script jetzt überarbeitet, jedoch taucht ein
          Fehler in der Berechnung der Dualzahl auf...

          Im Ausgabefeld für die Dualzahl gibt er den gleichen Wert aus,
          den ich bei der Dezimalzahl eingebe!?
          Hast Du evtl. eine Lösung für dieses Problem? Ich habe die Vermutung, dass der Befehl "Dezimalzahl.toString(2)" nicht funktioniert! Sobald ich den "String" z.B. durch ein +5 ersetze stimmt die Ausgabe...

          Vielen Dank für Deine Hilfe. (aktuelles Script ist unten)

          Grüße

          Stefan

          <script type="text/javascript">

          function Umrechner ()

          {
          var Dezimalzahl=0;
          var Dualzahl=0;

          {
          var  Dezimalzahl = document.Dezidual.Dezimal.value;
          var  Dualzahl = Dezimalzahl.tostring(2);
          }

          document.Dezidual.Dual.value=Dualzahl;
          }

          </script>

          1. Hallo,

            ich habe das Script jetzt überarbeitet, jedoch taucht ein
            Fehler in der Berechnung der Dualzahl auf...

            Bei mir führt Mozilla das Skript überhaupt erst gar nicht aus, weil
            tostring() (man beachte die komplette Kleinschreibung) keine Funktion
            ist. Das hattest du im vorherigen Posting noch richtig gehabt.
            Baue nicht "absichtlich" Fehler ein.
            Und verwende einen anständingen Browser, der dir auch anständig
            Fehler anzeigen kann.

            Im Ausgabefeld für die Dualzahl gibt er den gleichen Wert aus,
            den ich bei der Dezimalzahl eingebe!?

            Ja. Weil der Inhalt eines Textfeldes ein String und keine Zahl ist.
            Das schrieb ich (indirekt) schonmal.
            Mache aus dem String eine Zahl. Verwende dazu eine der "Objektunabhängigen
            Funktionen" von JavaScript. (Siehe Selfhtml.)

            {
            var  Dezimalzahl = document.Dezidual.Dezimal.value;
            var  Dualzahl = Dezimalzahl.tostring(2);
            }

            Darf ich fragen weshalb du hier einen neuen Block aufmachst?
            Und warum du die Variablen nochmal deklariert? Du brauchst nicht bei
            jeder Zuweisung "var" davor schreiben.

            Gruß
            Slyh