faecher:informatik:oberstufe:graphen:zpg:hilfekarten:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:graphen:zpg:hilfekarten:start [14.11.2022 16:58] Frank Schiebelfaecher:informatik:oberstufe:graphen:zpg:hilfekarten:start [09.04.2025 10:54] (aktuell) – [Bearbeiten - Panel] Frank Schiebel
Zeile 1: Zeile 1:
 +~~NOTOC~~
 +
 ====== Hilfestellung zur Programmierung mit dem Graphentester ====== ====== Hilfestellung zur Programmierung mit dem Graphentester ======
  
Zeile 5: Zeile 7:
 </WRAP> </WRAP>
  
 +===== Grundsätzliche Strukur =====
 +
 +Damit deine Algorithmen überhaupt kompilieren können und vom Graphentester erkannt werden, muss jede Klasse ein paar bestimmte Befehle enthalten. Grundsätzlich gilt folgende Struktur. 
 +
 +<code java>
 +package eigeneAlgorithmen;
 +
 +import graph.*;
 +import algorithmen.*;
 +
 +public class GraphAlgo_MeineKlasse extends GraphAlgo
 +{
 +    Graph g;
 +
 +    public String getBezeichnung() {
 +        return "MeineKlasse";
 +    }
 +
 +    public void fuehreAlgorithmusAus() {
 +        g = getGraph();
 +        // ...
 +    }
 +}
 +</code>
 +
 +Folgende Punkte sind dabei wichtig:
 +  * Das ''package'' ergibt sich automatisch aus dem Verzeichnis
 +  * Die beiden import-Statements benötigt man, um die bereits vorgefertigten Graphen-Algorithmen nutzen zu können.
 +  * **Der Klassenname muss mit GraphAlgo_ beginnen**
 +  * Die Klasse muss die Elternklasse GraphAlgo erweitern
 +  * Wegen der Vererbung müssen die folgenden zwei Methoden geerbt werden:
 +    * ''public String getBezeichnung()'': Darin wird der leserliche Name definiert/zurückgegeben, der in der GUI auf deinen Algorithmus verweist.
 +    * ''public void fuehreAlgorithmusAus()'': Hierin schreibst du deinen Algorithmus (das ersetzt sozusagen die main-Methode).
 +
 +===== Wichtige Tasks =====
  
 <accordion id="hilfekarte"> <accordion id="hilfekarte">
Zeile 23: Zeile 60:
    aktuellerKnoten.setMarkiert(true);    aktuellerKnoten.setMarkiert(true);
    // Ausführung unterbrechen    // Ausführung unterbrechen
-   step();Hilfestellung zur Programmierung mit dem Graphentester+   step();
 } }
 </code> </code>
Zeile 110: Zeile 147:
  
   // füge alle nicht besuchten Nachbarknoten der Liste hinzu   // füge alle nicht besuchten Nachbarknoten der Liste hinzu
-  for(Knoten nachbar : g.getNachbarKnoten(k)) {+  for(Knoten nachbar : g.getNachbarknoten(k)) {
     if(!nachbar.isMarkiert() && !toDo.contains(nachbar)) {     if(!nachbar.isMarkiert() && !toDo.contains(nachbar)) {
       toDo.add(0, n); //füge am Anfang der Liste hinzu       toDo.add(0, n); //füge am Anfang der Liste hinzu
Zeile 150: Zeile 187:
  
     // Rekursiver Aufruf mit allen Nachbarknoten     // Rekursiver Aufruf mit allen Nachbarknoten
-    for(Knoten nachbar : g.getNachbarKnoten(k)) {+    for(Knoten nachbar : g.getNachbarknoten(k)) {
       rekursiveMethode(nachbar);       rekursiveMethode(nachbar);
     }     }
Zeile 194: Zeile 231:
     // hier alle nicht markierten, ausgehenden Kanten     // hier alle nicht markierten, ausgehenden Kanten
     ArrayList<Kante> ausgehend = g.getAusgehendeKanten(k);     ArrayList<Kante> ausgehend = g.getAusgehendeKanten(k);
-    ArrayList<Kante> nichtMarkiert =                            g.beschraenkeKantenAuf(ausgehend,                              Graph.NICHTMARKIERT, Graph.BELIEBIG);+    ArrayList<Kante> nichtMarkiert =  g.beschraenkeKantenAuf(ausgehend, Graph.NICHTMARKIERT, Graph.BELIEBIG);
  
     for(Kante ausgehendeKante : nichtMarkiert) {     for(Kante ausgehendeKante : nichtMarkiert) {
Zeile 216: Zeile 253:
 </code> </code>
 </panel> </panel>
 +<panel title="Ausgabe von Informationen/Ergebnissen">
 +Um Informationen oder Ergebnisse eigener Algorithmen auszugeben, bietet der Graphentester drei Möglichkeiten an:
  
 +==== Java Konsole ====
 +
 +Man kann mit ''System.out.println()'' Dinge auf die Konsole schreiben. Zu beachten ist dabei, dass die JavaFX-Applikation die Konsole nicht automatisch öffnet, wenn man etwas ausgibt - man muss diese im BlueJ-Menü ''Ansicht'' oder mit der Tastenkombination ''CTRL-T'' öffnen, um die Ausgabe sehen zu können.
 +
 +==== melde() ====
 +
 +Mit der Methode ''melde(String Ausgabe)'' erzeugt man ein Fenster mit O.K. Button, in dem der Ausgabestring angezeigt wird. Dabei kann man innerhalb des Ausgabestrings auch ''\n'' verwenden, um eine neue Zeile zu beginnen.
 +
 +   melde("Apfel\nBirne\nMango");
 +
 +{{:faecher:informatik:oberstufe:graphen:zpg:hilfekarten:okwindow.png|}}
 +
 +==== info() ====
 +
 +{{ :faecher:informatik:oberstufe:graphen:zpg:hilfekarten:help.png?320|}}
 +
 +Mit Hilfe der Methoden ''info(String s)'', ''resetInfo()'', ''infoIndentMore()'' und ''infoIndentLess()'' kann man Informationen -- auch während des Programmablaufs -- innerhalb des Hilfefensters ausgeben. Das Hilfe-Fenster kann man im Graphentester im Menü ''Hilfe->Hilfefenster anzeigen'' aktivieren
 +
 +Beispiel: 
 +
 +<code java>
 +info("Setze Eingangsgrad aller Knoten.");
 +infoIndentMore();
 +for(Knoten k: alleKnoten) {
 +    int Eingangsgrad = g.getEingehendeKanten(k).size();
 +    info("Setze Eingangsgrad von " + k.getInfotext());
 +    k.setWert(Eingangsgrad);
 +}
 +infoIndentLess();
 +info("Eingangsgrade gesetzt");
 +</code>
 +
 +{{:faecher:informatik:oberstufe:graphen:zpg:hilfekarten:hilfefenster.png |}}
 +</panel>
 </accordion> </accordion>
 +
 +==== Code-Beispiele ====
 +
 +=== Setze alle Knotenwerte ===
 +
 +Alle Knoten kann man direkt in einer Schleife verarbeiten:
 +
 +<code java>
 +// Setze alle Knotenwerte auf 0
 +for(Knoten k : g.getAlleKnoten()) {
 +    k.setWert(0);
 +}
 +</code>
 +
 +<code java>
 +// Setze alle Knotenwerte auf "unendlich"
 +for(Knoten k : g.getAlleKnoten()) {
 +    k.setWert(Double.POSITIVE_INFINITY);
 +}
 +</code>
  • faecher/informatik/oberstufe/graphen/zpg/hilfekarten/start.1668445099.txt.gz
  • Zuletzt geändert: 14.11.2022 16:58
  • von Frank Schiebel