Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Anfänger-Frage
#1
Diese Programm funktioniert:

<!DOCTYPE html><html lang="de">
<head>
  <meta charset="utf-8">
  <title>ggT</title>
  <link rel="stylesheet" href="js4.css">
</head>
  <script>
function ggT(a, b)
  {
  let t = b;                    // 1. geänderte Zeile
  if (a == 0 || b == 0) return 0;
  if (a == 1 || b == 1) return 1;
  if (a > b) t == a;            // 2. geänderte Zeile 
  while (a % t !== 0 || b % t !== 0)
    {
    t--;
    } 
  return t;
  }
  </script>
<body>
  <script>
    document.write("Größter gemeinsamer Teiler: ");
document.write(ggT(108, 24));
  </script>
</body>
</html>

Dieses nicht:


<!DOCTYPE html><html lang="de">
<head>
  <meta charset="utf-8">
  <title>ggT</title>
  <link rel="stylesheet" href="js4.css">
</head>
  <script>
function ggT(a, b)
  {
  let t;                                              // 1. geänderte Zeile
  if (a == 0 || b == 0) return 0;
  if (a == 1 || b == 1) return 1;
  if (a > b) t == a; else t == b;           // 2. geänderte Zeile 
  while (a % t !== 0 || b % t !== 0)
    {
    t--;
    } 
  return t;
  }
  </script>
<body>
  <script>
    document.write("Größter gemeinsamer Teiler: ");
document.write(ggT(108, 24));
  </script>
</body>
</html>


Warum?
Ich suche keine Alternativ-Prgogramme dazu und will nur diese Frage beantwortet haben.
Zitieren
#2
Ich nehme an (! ... wissen tue ich es nicht), dass du im Beispiel 2 (mit let t) eine "undefined" - Variable erzeugst und dieser dann mit a oder b einen numerischen Wert zuordnest. Ich würde es mal mit let t=0 versuchen...
Zitieren
#3
Hab ich gemacht. Aber dann kommt als Ergebnis "Größter gemeinsamer Teiler: -1" heraus.
Und das ist offensichtlich falsch.
Zitieren
#4
t=0 war ein blödes Beispiel, hatte mir die Funktion nicht komplett angesehen. Du solltest statt "let" auch "var" benutzen.
Damit die Rechnung aufgeht, darf die Vorgabe von t in deiner Funktion auch nicht kleiner als der GGT sein (in diesem Fall also 12), darf aber beliebig groß sein. Deshalb wäre immer richtig:
var t=a;      oder
var t=b;
... so dachte ich erst. Dann sah ich aber dieses:

Die 2. veränderten Zeile ist zudem komplett falsch und muss lauten  
if (a > b) t = a; else t = b;

dann reicht natürlich auch:
var t;

Ich hoffe jetzt nicht übersehen zu haben.
Zitieren
#5
Es stimmt, was du schreibst.
Mit einfachen Gleichheitszeichen funktioniert die if-Zeile und damit das Programm.

Aber warum funktioniert das Programm oben mit der Zeile "if (a > b) t == a;" auch?

(Nebenbei habe ich gemerkt, dass die beiden if-Zeilen zwischen den geänderten Zeilen überflüssig sind und gelöscht werden können.)
Zitieren
#6
(26.04.2023, 09:28)nbergmann schrieb: Aber warum funktioniert das Programm oben mit der Zeile "if (a > b) t == a;" auch?

Weil diese Zeile  eh unwirksam ist - kann auch weg. Schließlich beziehst du ja in  " while (a % t !== 0 || b % t !== 0)" sowohl a als auch b in deine Schleife mit ein.  Und  t==a verändert den deklarierten Wert von t nicht und da a und b austauschbar sind, ist es egal.
Zitieren
#7
Hi nbergmann,

du kannst mithilfe dem Eukidischen Algorrithmus den größten gemeinsamen Teiler berechnen. Ich habe mal versucht das ganze in JavaScript-Berechnung umzubauen und es hat geklappt.

Code:
function gcd(a, b) {
  if (b == 0) {
    return a;
  } else {
    return gcd(b, a % b);
  }
}

Ich hoffe der Code hilft dir weiter. Meine Empfehlung: Formatiere den Code so das er gut zu lesen ist. Man kann zwar den Code so schreiben wie man möchte, aber wenn man diesen teilt hift es umgemein bei der Leserlichkeit den Code zu formatieren und damit richtig einzurücken.

Wenn du weitere Fragen hast dann einfach ins Forum schreiben.

Viele Grüße

rzscout
"Gerne dürft ihr mir eine gute Bewertung da lassen aber auch gegenüber Kritik bin ich offen" Angel
Zitieren
#8
(26.04.2023, 17:03)rzscout schrieb: Hi nbergmann,

du kannst mithilfe dem Eukidischen Algorrithmus den größten gemeinsamen Teiler berechnen. ...

So ist es natürlich optimal  Cool . Allerdings ging es ja nicht darum eine alternative (optimale) Lösung zu finden, sondern nbergmann wollte den Fehler in seiner abgewandelten Version erkennen... Dabei wäre natürlich interessant, ob seine Variante 1 von ihm selbst geschrieben wurde - und wenn nicht, ob die Quelle fehlerbehaftet war (oder ein Übertragungsfehler vorlag).
Zitieren
#9
Es waren meine Lösungen zu einer Aufgabe aus der Seite "JavaScript Hero", mit der ich sehr gerne arbeite.
Du hast den Fehler gefunden und ich habe gelernt, dass "==" nicht gleich "=" ist. So lerne ich dazu. Auch der Hinweis auf eine funktionslose Zeile war informativ.
Ich arbeite mit dem Editor "Notepad++".
Der gibt leider keinerlei Fehlerhinweise wie Editoren von Java.
Gibt es dazu eine sinnvolle Alternative?
Zitieren
#10
(27.04.2023, 19:01)nbergmann schrieb: Es waren meine Lösungen zu einer Aufgabe aus der Seite "JavaScript Hero", mit der ich sehr gerne arbeite.
Du hast den Fehler gefunden und ich habe gelernt, dass "==" nicht gleich "=" ist. So lerne ich dazu. Auch der Hinweis auf eine funktionslose Zeile war informativ.
Ich arbeite mit dem Editor "Notepad++".
Der gibt leider keinerlei Fehlerhinweise wie Editoren von Java.
Gibt es dazu eine sinnvolle Alternative?

Ich bin auch Anfänger und nutze Visual Studio Code und zum "debuggen"  Firefox. Dort  rechtsclick, Untersuchen auswählen.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
2 Gast/Gäste