Hallo, ich sitze gerade verzweifelnd über folgendem Projekt: Es geht darum ein Auto (virtuell) von einem Straßenabschnitt zu einem Zielabschnitt zu schicken. Die Straßen sind als Abschnitte bezeichnet. Sie alle sind in einem Array ("abschnitte") gespeichert. Jeder Abschnitt hat eine eigene individuelle Nummer. So sieht der Name eines Abschnitts beispielsweise so aus: a1. Des weiteren gibt es auch Kreuzungen (korrekterweise sind es eher Weichen). Auch diese sind in einem Array gespeichert ("kreuzungen") und haben auch eine individuelle Nummer, die nicht die gleichen Nummern der Abschnitte sind. Kreuzungen haben beispielsweise den Namen k3. Das k steht hierbei für Kreuzung, sodass sie sich von den Abschnitten unterscheiden. Es ist nicht möglich, dass es sowohl k2 als auch a2 gibt! Jede Kreuzung hat drei Attribute. Exemplarisch an Kreuzung k2 wären das: k2_l - gibt an, wo das Auto hinfahren würde, wenn es nach links fährt. k2_r - gibt an, wo das Auto hinfahren würde, wenn es nach rechts fährt. k2 gibt an, ob das Auto nach links oder nach rechts fährt. Immer die andere Seite ist gesperrt. Als Attributwert steht bei allen Attributen ein Abschnitt. Beispiel für Kreuzung k2: const k2_l = "w3"; const k2_r = "w1536"; let k2 = "w3"; Von einer Kreuzung bis zur nächsten (also eine Straße) sind alle Abschnitte fortlaufend nummeriert. Ein Auto kann nur vorwärts fahren. Nun zu meiner Frage: Wie berechne ich den Weg mit Javascript von einem Abschnitt zu einem festgelegten Zielabschnitt, wenn der Weg auch über Kreuzungen gehen kann? Die Ausgabe soll dabei als Array gespeichert sein und alle Abschnitte (ausgenommen Kreuzungen) beinhalten, die das Auto passieren muss. Ohne Kreuzungen hätte ich schon eine Lösung... Könnt ihr mir helfen? Vielen Dank vorab und beste Grüße euer Ernst
:
Verschoben durch Moderator
Harald K. schrieb: > s/Projekt/Schulaufgabe/ Es ist keine Schulaufgabe. Hätten wir das im Unterricht behandelt, würde ich das können.
Wäre es ein Projekt, hättest Du eine Vorstellung von dem, was Du erreichen willst. Das riecht sehr, sehr streng nach einer von anderen gestellten Aufgabe. Im übrigen ist das der falsche Forenbereich für Deine Fragestellung: > Hier könnt ihr Projekte, Schaltungen oder Codeschnipsel vorstellen. > Projekte bitte nur mit Code oder Schaltplan posten (falls ihr nur > Fotos vorstellen möchtet, bitte in "Zeigt her eure Kunstwerke"). > Bitte hier keine Fragen posten.
Kann das Auto in beide Richtungen über eine Straße fahren? Oder ist das dann eine andere Straße? Falls ja: Was passiert, bzw. wie ist die Notation, wenn das Auto von der anderen Seite an eine Weiche kommt? Muss es dann immer den eindeutigen Weg nehmen? Oder könnte es an k3 auch von w3 auf w1536 fahren? Bei der Notation der Weichen fehlt noch die Ausgangsstrecke, d.h. auf welcher Straße muss ich sein, damit ich zu k3 komme. Wäre folgender Semi-Bruteforce-Ansatz möglich: Schau, ob Start- und Ziel-Strecke identisch sind; * Falls ja: Fertig. * Falls nein: Suche, ob es eine Weiche gibt, bei der ein erlaubter Zweig die Start-, ein anderer erlaubter Zweig die Zielstrecke ist; ** Falls ja: Fertig. ** Falls nein: Prüfe für jede Zielstrecke der Weiche an der Startstrecke, ob diese zu einer Weiche führt, von der die Zielstrecke abgeht. ** Falls ja: Fertig. ** Falls nein: ... usw. Es gibt dabei natürlich noch Optimierungsmöglichkeiten.
Achim H. schrieb: > Kann das Auto in beide Richtungen über eine Straße fahren? Oder ist das > dann eine andere Straße? Hallo Achim H., das Auto kann nur in eine Richtung fahren. Auf einer Straße, wie man sie aus der Realität kennt, wäre nun ein Abschnitt die linke Spur, ein weiterer Abschnitt die rechte. Achim H. schrieb: > Bei der Notation der Weichen fehlt noch die Ausgangsstrecke, d.h. auf > welcher Straße muss ich sein, damit ich zu k3 komme. Das habe ich bisher tatsächlich nicht erwähnt: Bedingt durch die fortlaufende Nummerierung, wissen wir, dass auf Abschnitt a3 die Kreuzung k4 folgen kann. So ist es nicht möglich, dass nach a3 beispielsweise k546 folgt. Achim H. schrieb: > Suche, ob es eine Weiche gibt, bei der ein erlaubter Zweig die Start-, > ein anderer erlaubter Zweig die Zielstrecke ist; > ** Falls ja: Fertig. > ** Falls nein: Prüfe für jede Zielstrecke der Weiche an der > Startstrecke, ob diese zu einer Weiche führt, von der die Zielstrecke > abgeht. Dieser Ansatz hilft sehr. Nun muss ich allerdings darauf achten, dass die Zielstrecke nicht zwingend direkt an einer Weiche liegen muss. Demzufolge müsste ich von der Zielstrecke rückwärts "fahren" (rein virtuell), bis ich zu einer Weiche komme. Aber das ist dank deiner Hilfestellung eher ein kleineres Problem. Vielen Dank für die Hilfe! Ernst H.
Kann es sein, das du den alten A* Algorithmus suchst? Das ist der Klassiker für Wegpunkte in der Gamingbranche (und oft auch auf Navis) und wird für alles mögliche benutzt (z.B. Autos) um auf einem Netz von Wegen den kürzesten und (wenn man die Strecken und Punkte mit Kosten beaufschlagt) günstigsten Weg zu finden. Such mal nach A* und schau, ob das das richtige für dich ist. Ab und zu sagt man auch 'AStar'.
:
Bearbeitet durch User
Für mich klingt das nach einem klassischen Backtrackingalgorithmus. Was aber deine Beschreibung und Code Beispiele angeht, finde ich die suboptimal. Zugeben, ich bin nicht der Javascript Experte, aber ich würde erwarten, dass Informationen wie k2_l, k2_r und k2 in einem Objekt wie einer Datenklasse gemeinsam gespeichert werden und mit entsprechende gettter/setter zur Verfügung stehen. Das Variablen wie k2 existieren deutet eigentlich schon darauf hin, dass es einen Array von ks sein sollte, dann macht es auch nichts, wenn es k2 &a2 gibt, denn das sind unterschiedliche Entitäten.
Lass Dich mal von Dijkstra inspirieren: https://de.wikipedia.org/wiki/Dijkstra-Algorithmus Haste Du den Algo in Pseudocode hilft dir bestimmt ein Buch/Online-Tutorial weiter das ganze in Java-Script umzu popeln. -- > Such mal nach A* und schau, ob das das richtige für dich ist. Ab und zu sagt man auch 'AStar'. Da gibt es auch mehrere Wikipediaartikel dazu: * https://de.wikipedia.org/wiki/A*-Algorithmus * https://de.wikipedia.org/wiki/Kategorie:Graphsuchalgorithmus gilt als Verallgemeinerung des Dijkstra. Vor 10 Jahren war IMHO die Beschreibung in der engl. WP besser als die in der deutschsprachigen.
Ernst H. schrieb: > Nun zu meiner Frage: > Wie berechne ich den Weg mit Javascript von einem Abschnitt zu einem > festgelegten Zielabschnitt, wenn der Weg auch über Kreuzungen gehen > kann? du suchst erst einmal einen Algorithmus, also ein "Rechenverfahren", um deine Aufgabenstellung zu lösen. Zweckmäßigerweise ist das eine Art "Pseudosprache", die erst mal allgemein umgangssprachlich (aber dennoch strukturiert) beschreibt, was zu tun ist. Beim Beschreiben des Algorithmus werden dir Besonderheiten und Einschränkungen des Algorithmus auffallen, dei es zu beachten und zu berücksichtigen gilt. danach suchst du einen Weg, diesen Algorithmus "technisch" in deiner Zielsprache (mit dessen Besonderheiten und Einschränkungen) zu implementieren.
:
Bearbeitet durch User
Hallo. Seit ich hier das letzte Mal online war, hat sich einiges getan. Ich erlaube mir jedoch nicht in chronologischer, sondern auf die Beiträge in der Reihenfolge zu antworten, in welcher sie sinngemäß zusammenhängen. Starten wir also wie folgt: Oliver schrieb: > ich > würde erwarten, dass Informationen wie k2_l, k2_r und k2 in einem Objekt > wie einer Datenklasse gemeinsam gespeichert werden Da ich nicht "nur" Javascript verwende, sondern mittels "Node-RED" eine MQTT-Anwendung programmiere, in die ich das "Wegesuchsystem" einbette, und nicht in jeder "Funktion", in der ich Javascript-Code enthalten habe neu Daten zu Kreuzungen und Abschnitten speichern will (die Daten zentral zu haben macht es leichter sie im Bedarfsfall zu ändern), speichere ich jede Information (z.B. "k2_l", "k2_r", ...) in einer einzelnen Variable. So können sich die Programme die Daten "herholen", die sie brauchen, ohne lange in Datenstrukturen "herumwühlen" zu müssen. Matthias S. schrieb: > Kann es sein, das du den alten A* Algorithmus suchst? Das kann sehr gut sein. Soweit ich das verstanden habe, braucht der Algorithmus einen Parameter "Kosten" (z.B. Weglänge), auf Wikipedia "h(x)" genannt. Ich denke, bevor ich den Pseudocode vollends in "richtigen" Code umwandle, werde ich mich darauf beschränken, für "h(x)" für alle Knoten einen festen Parameter zu verwenden. Danke an Matthias S., DSGV-Violator, Wegstaben V und Oliver. Viele Grüße von Ernst
Ich arbeite an einer JavaScript-Funktion, die die Summe aller Elemente in einem Array berechnen soll. Wenn ich den Code jedoch ausführe, wird nicht das erwartete Ergebnis zurückgegeben. Ich habe versucht, es zu debuggen, aber ich kann das Problem nicht herausfinden. Kann sich bitte jemand meinen Code ansehen und mir helfen, herauszufinden, was das Problem verursacht?
1 | function calculateSum(arr) { |
2 | let sum = 0; |
3 | for (let i = 0; i <= arr.length; i++) { |
4 | sum += arr[i]; |
5 | } |
6 | return sum; |
7 | } |
8 | |
9 | const numbers = [1, 2, 3, 4, 5]; |
10 | const result = calculateSum(numbers); |
11 | console.log(result); // Output should be 15, but it's not |
Ich erwarte, dass die Funktion berechneSum die Summe aller Elemente im Zahlenarray zurückgibt, die 15 sein sollte. Die tatsächliche Ausgabe, die ich erhalte, ist jedoch anders. Kann mir bitte jemand helfen, herauszufinden, was mit meinem Code nicht stimmt, und eine Lösung vorschlagen? Danke schön! Open in Google Translate • Feedback
off by one
Ich arbeite an einem kleinen HTML- und JavaScript-Projekt und stoße auf ein Problem beim Konvertieren von Zeichenfolgen in Zahlen. Ich habe in meinem HTML-Code ein Eingabefeld, in das Benutzer eine Zahl als Zeichenfolge eingeben können. Ich verwende JavaScript, um diese Zeichenfolge in eine Zahl umzuwandeln und Berechnungen durchzuführen, erhalte jedoch nicht die erwarteten Ergebnisse. Hier ist mein HTML- und JavaScript-Code:
1 | <!DOCTYPE html>
|
2 | <html>
|
3 | <head>
|
4 | <title>String to Number Conversion</title> |
5 | </head>
|
6 | <body>
|
7 | <input type="text" id="numberInput" placeholder="Enter a number"> |
8 | <button onclick="calculate()">Calculate</button> |
9 | |
10 | <p id="result"></p> |
11 | |
12 | <script>
|
13 | function calculate() { |
14 | let input = document.getElementById("numberInput").value; |
15 | let convertedNumber = Number(input); |
16 | |
17 | let result = convertedNumber + 10; |
18 | document.getElementById("result").textContent = "Result: " + result; |
19 | }
|
20 | </script>
|
21 | </body>
|
22 | </html>
|
Wenn ich eine Zahl in das Eingabefeld eingebe und auf die Schaltfläche „Berechnen“ klicke, ist das Ergebnis nicht wie erwartet. Wenn ich beispielsweise „5“ eingebe, wird als Ergebnis „510“ statt „15“ angezeigt.Fehlt mir etwas in meinem Code? Wie kann ich sicherstellen, dass die Zeichenfolge korrekt in eine Zahl umgewandelt wird, bevor ich Berechnungen durchführe? Ich habe auf mehreren Websites gesucht, darunter auch auf Scaler, bin aber noch nicht auf eine Lösung gestoßen. Ich würde mich über eine klare Erklärung und einige Codebeispiele freuen, um die richtigen Verfahren zu zeigen. Ich freue mich schon jetzt über Ihre Hilfe! Scaler: https://www.scaler.com/topics/string-to-number-javascript/
Jr M. schrieb: > Ich arbeite an einer JavaScript-Funktion, die die Summe aller Elemente > in einem Array berechnen soll. Wenn ich den Code jedoch ausführe, wird > nicht das erwartete Ergebnis zurückgegeben. Ich habe versucht, es zu > debuggen, aber ich kann das Problem nicht herausfinden. Kann sich bitte > jemand meinen Code ansehen und mir helfen, herauszufinden, was das > Problem verursacht? > >
1 | function calculateSum(arr) { |
2 | > let sum = 0; |
3 | > for (let i = 0; i <= arr.length; i++) { |
4 | > sum += arr[i]; |
5 | > } |
6 | > return sum; |
7 | > } |
8 | > |
9 | > const numbers = [1, 2, 3, 4, 5]; |
10 | > const result = calculateSum(numbers); |
11 | > console.log(result); // Output should be 15, but it's not |
12 | > |
>
Früher hätte man in der Schleife auch noch
console.log(i);console.log(arr[i]);console.log(sum);
eingebaut. Und jeder Programmierer hätte seinen Fehler selber erkannt.
Hätte eine Minute gedauert.
Aber printf-Debugging ist ja sowas von 80er. Heute läßt man im Forum
seine Fehler suchen. Da bekommt man keine Lösung in 2 Stunden.
Jr M. schrieb: > let result = convertedNumber + 10; Das wirkt offensichtlich als concat für Strings statt als numerische Addition. Bin keine Javascript Spezi, aber das Ergebnis spricht dafür.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.