Anfänger-Frage - Druckversion +- Javascript-forum (https://javascript-forum.de) +-- Forum: Entwicklung (https://javascript-forum.de/forumdisplay.php?fid=4) +--- Forum: Javascript (https://javascript-forum.de/forumdisplay.php?fid=6) +--- Thema: Anfänger-Frage (/showthread.php?tid=2323) Seiten: Seiten:
1
2
|
Anfänger-Frage - nbergmann - 24.04.2023 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. RE: Anfänger-Frage - ollelinse - 25.04.2023 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... RE: Anfänger-Frage - nbergmann - 25.04.2023 Hab ich gemacht. Aber dann kommt als Ergebnis "Größter gemeinsamer Teiler: -1" heraus. Und das ist offensichtlich falsch. RE: Anfänger-Frage - ollelinse - 26.04.2023 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. RE: Anfänger-Frage - nbergmann - 26.04.2023 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.) RE: Anfänger-Frage - ollelinse - 26.04.2023 (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. RE: Anfänger-Frage - rzscout - 26.04.2023 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) { 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 RE: Anfänger-Frage - ollelinse - 27.04.2023 (26.04.2023, 17:03)rzscout schrieb: Hi nbergmann, So ist es natürlich optimal . 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). RE: Anfänger-Frage - nbergmann - 27.04.2023 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? RE: Anfänger-Frage - littles - 27.04.2023 (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. Ich bin auch Anfänger und nutze Visual Studio Code und zum "debuggen" Firefox. Dort rechtsclick, Untersuchen auswählen. |