Subtrees hinzugefügt

This commit is contained in:
Dirk Zechnall 2025-01-05 21:22:02 +01:00
parent 155d0786a6
commit 3cc08a2004
443 changed files with 131415 additions and 0 deletions

View file

@ -0,0 +1,7 @@
**/*.sh
**/*.class
**/*.ctxt
repo.adoc
repo_subtree.adoc
/alt
/hide

View file

@ -0,0 +1,11 @@
/**
* Ihre Implementation eines Binärbaums
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class Binaerbaum<T>
{
}

View file

@ -0,0 +1,73 @@
/**
* Stellt das Fenster dar, in dem der Baum dargestellt wird.
* Sie müssen die abstrakten Methoden der Oberklasse mit Inhalt füllen.
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class EntscheidungsFrame extends EntscheidungsFrameBase
{
/**
* Der Entscheidungsbaum, der durchlaufen werden soll.
*/
private Binaerbaum<String> baum;
/**
* Erzeugt ein neues Fenster
* @param baum Der Entscheidungsbaum, der durchlaufen werden soll
*/
private EntscheidungsFrame(Binaerbaum<String> baum)
{
this.baum = baum;
displayCurrent();
}
/**
* Erzeugt einen Entscheidungsbaum und übergibt ihn an ein Fenster
* Dann wird das Fenster geöffnet
*/
public static void entscheidungsbaumTesten()
{
Binaerbaum<String> meinBaum = null;
//# Hier muss meinBaum auf einen Entscheidungsbaum gesetzt werden
//# der folgende Aufruf muss stehen bleiben
new EntscheidungsFrame(meinBaum);
}
/**
* Wird ausgeführt, wenn der Benutzer auf "Ja" klickt.
* Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
*/
protected void jaGeklickt()
{
}
/**
* Wird ausgeführt, wenn der Benutzer auf "Nein" klickt.
* Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
*/
protected void neinGeklickt()
{
}
/**
* Prüft, ob der aktuelle Knoten ein Blattknoten ist und wir damit bei einer Lösung angekommen sind.
* @return true, wenn es sich beim aktuellen Knoten um einen Blattknoten handelt; false sonst
*/
protected boolean istLoesung()
{
return true;
}
/**
* Gibt den Wert des momentan ausgewählten Knotens im Entscheidungsbaum zurück
* @return Die Beschreibung am aktuellen Knoten
*/
protected String aktuellerText()
{
return "<nächste Frage>";
}
}

View file

@ -0,0 +1,94 @@
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
* Das Fenster, in dem der Entscheidungsbaum durchlaufen wird
* Hier sollte nichts geändert werden.
*
* @version 1.0 vom 26.10.2020
* @author Rainer Helfrich
*/
public abstract class EntscheidungsFrameBase extends JFrame {
private JTextArea jTextArea1 = new JTextArea("");
private JScrollPane jTextArea1ScrollPane = new JScrollPane(jTextArea1);
private JButton bJa = new JButton();
private JButton bNein = new JButton();
public EntscheidungsFrameBase()
{
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 537;
int frameHeight = 312;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("Entscheidungsbaum");
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);
jTextArea1ScrollPane.setBounds(8, 8, 505, 217);
jTextArea1.setEditable(false);
cp.add(jTextArea1ScrollPane);
bJa.setBounds(8, 232, 249, 33);
bJa.setText("Ja");
bJa.setMargin(new Insets(2, 2, 2, 2));
bJa.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jaGeklickt();
displayCurrent();
}
});
cp.add(bJa);
bNein.setBounds(264, 232, 249, 33);
bNein.setText("Nein");
bNein.setMargin(new Insets(2, 2, 2, 2));
bNein.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
neinGeklickt();
displayCurrent();
}
});
cp.add(bNein);
setVisible(true);
}
protected void displayCurrent()
{
jTextArea1.setText(aktuellerText());
bJa.setEnabled(!istLoesung());
bNein.setEnabled(!istLoesung());
}
/**
* Gibt den Wert des momentan ausgewählten Knotens im Entscheidungsbaum zurück
* @return Die Beschreibung am aktuellen Knoten
*/
protected abstract String aktuellerText();
/**
* Wird ausgeführt, wenn der Benutzer auf "Ja" klickt.
* Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
*/
protected abstract void jaGeklickt();
/**
* Wird ausgeführt, wenn der Benutzer auf "Nein" klickt.
* Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
*/
protected abstract void neinGeklickt();
/**
* Prüft, ob der aktuelle Knoten ein Blattknoten ist und wir damit bei einer Lösung angekommen sind.
* @return true, wenn es sich beim aktuellen Knoten um einen Blattknoten handelt; false sonst
*/
protected abstract boolean istLoesung();
}

View file

@ -0,0 +1,5 @@
PROJEKTBEZEICHNUNG: Entscheidungsbaum
PROJEKTZWECK: Implementieren Sie einen Binärbaum und wenden Sie ihn an, um einen Entscheidungsbaum zu implementieren
VERSION oder DATUM: Oktober 2020
WIE IST DAS PROJEKT ZU STARTEN: Rufen Sie die statische Methode entscheidungsbaumTesten() der Klasse EntscheidungsFrame auf.
AUTOR(EN): Rainer Helfrich, ZPG Informatik

View file

@ -0,0 +1,49 @@
#BlueJ package file
dependency1.from=EntscheidungsFrame
dependency1.to=Binaerbaum
dependency1.type=UsesDependency
editor.fx.0.height=0
editor.fx.0.width=0
editor.fx.0.x=0
editor.fx.0.y=0
objectbench.height=93
objectbench.width=760
package.divider.horizontal=0.6
package.divider.vertical=0.8
package.editor.height=393
package.editor.width=649
package.editor.x=329
package.editor.y=161
package.frame.height=600
package.frame.width=800
package.numDependencies=1
package.numTargets=3
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=58
readme.name=@README
readme.width=47
readme.x=10
readme.y=10
target1.height=50
target1.name=Binaerbaum
target1.showInterface=false
target1.type=ClassTarget
target1.width=130
target1.x=240
target1.y=170
target2.height=50
target2.name=EntscheidungsFrame
target2.showInterface=false
target2.type=ClassTarget
target2.width=150
target2.x=380
target2.y=30
target3.height=50
target3.name=EntscheidungsFrameBase
target3.showInterface=false
target3.type=AbstractTarget
target3.width=180
target3.x=110
target3.y=30

View file

@ -0,0 +1,63 @@
/**
* Ein Knoten eines Binärbaums
*
* @author Rainer Helfrich
* @version Oktober 2020
*/
public class Binaerbaum<T>
{
/**
* Der Datenwert des Knotens
*/
public T daten;
/**
* Der linke Kindbaum
*/
public Binaerbaum<T> links;
/**
* Der rechte Kindbaum
*/
public Binaerbaum<T> rechts;
/**
* Erzeugt einen Blattknoten mit leerem Datenwert
*/
public Binaerbaum()
{
this(null, null, null);
}
/**
* Erzeugt einen Knoten mit Datenwert und Kindern
* @param daten Der Datenwert
* @param links Der linke Kindbaum
* @param rechts Der rechte Kindbaum
*/
public Binaerbaum(T daten, Binaerbaum<T> links, Binaerbaum<T> rechts)
{
this.daten = daten;
this.links = links;
this.rechts = rechts;
}
/**
* Erzeugt einen Blattknoten mit Datenwert
* @param daten Der Datenwert
*/
public Binaerbaum(T daten)
{
this(daten, null, null);
}
/**
* Gibt zurück, ob der Knoten ein Blatt ist
* @return true, wenn der Knoten ein Blatt ist; false sonst
*/
public boolean istBlatt()
{
return links == null && rechts == null;
}
}

View file

@ -0,0 +1,94 @@
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
* Das Fenster, in dem der Entscheidungsbaum durchlaufen wird
* Hier sollte nichts geändert werden.
*
* @version 1.0 vom 26.10.2020
* @author Rainer Helfrich
*/
public abstract class EntscheidungsFrameBase extends JFrame {
private JTextArea jTextArea1 = new JTextArea("");
private JScrollPane jTextArea1ScrollPane = new JScrollPane(jTextArea1);
private JButton bJa = new JButton();
private JButton bNein = new JButton();
public EntscheidungsFrameBase()
{
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
int frameWidth = 537;
int frameHeight = 312;
setSize(frameWidth, frameHeight);
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int x = (d.width - getSize().width) / 2;
int y = (d.height - getSize().height) / 2;
setLocation(x, y);
setTitle("Entscheidungsbaum");
setResizable(false);
Container cp = getContentPane();
cp.setLayout(null);
jTextArea1ScrollPane.setBounds(8, 8, 505, 217);
jTextArea1.setEditable(false);
cp.add(jTextArea1ScrollPane);
bJa.setBounds(8, 232, 249, 33);
bJa.setText("Ja");
bJa.setMargin(new Insets(2, 2, 2, 2));
bJa.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jaGeklickt();
displayCurrent();
}
});
cp.add(bJa);
bNein.setBounds(264, 232, 249, 33);
bNein.setText("Nein");
bNein.setMargin(new Insets(2, 2, 2, 2));
bNein.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
neinGeklickt();
displayCurrent();
}
});
cp.add(bNein);
setVisible(true);
}
protected void displayCurrent()
{
jTextArea1.setText(aktuellerText());
bJa.setEnabled(!istLoesung());
bNein.setEnabled(!istLoesung());
}
/**
* Gibt den Wert des momentan ausgew<EFBFBD>hlten Knotens im Entscheidungsbaum zur<EFBFBD>ck
* @return Die Beschreibung am aktuellen Knoten
*/
protected abstract String aktuellerText();
/**
* Wird ausgef<EFBFBD>hrt, wenn der Benutzer auf "Ja" klickt.
* Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
*/
protected abstract void jaGeklickt();
/**
* Wird ausgef<EFBFBD>hrt, wenn der Benutzer auf "Nein" klickt.
* Setzt den aktuellen Knoten des Entscheidungsbaums entsprechend weiter.
*/
protected abstract void neinGeklickt();
/**
* Pr<EFBFBD>ft, ob der aktuelle Knoten ein Blattknoten ist und wir damit bei einer L<EFBFBD>sung angekommen sind.
* @return true, wenn es sich beim aktuellen Knoten um einen Blattknoten handelt; false sonst
*/
protected abstract boolean istLoesung();
}

View file

@ -0,0 +1,5 @@
PROJEKTBEZEICHNUNG: Entscheidungsbaum
PROJEKTZWECK: Implementieren Sie einen Binärbaum und wenden Sie ihn an, um einen Entscheidungsbaum zu implementieren
VERSION oder DATUM: Oktober 2020
WIE IST DAS PROJEKT ZU STARTEN: Rufen Sie die statische Methode entscheidungsbaumTesten() der Klasse EntscheidungsFrame auf.
AUTOR(EN): Rainer Helfrich, ZPG Informatik

View file

@ -0,0 +1,49 @@
#BlueJ package file
dependency1.from=EntscheidungsFrame
dependency1.to=Binaerbaum
dependency1.type=UsesDependency
editor.fx.0.height=0
editor.fx.0.width=0
editor.fx.0.x=0
editor.fx.0.y=0
objectbench.height=93
objectbench.width=760
package.divider.horizontal=0.6
package.divider.vertical=0.8
package.editor.height=393
package.editor.width=649
package.editor.x=329
package.editor.y=161
package.frame.height=600
package.frame.width=800
package.numDependencies=1
package.numTargets=3
package.showExtends=true
package.showUses=true
project.charset=UTF-8
readme.height=58
readme.name=@README
readme.width=47
readme.x=10
readme.y=10
target1.height=50
target1.name=Binaerbaum
target1.showInterface=false
target1.type=ClassTarget
target1.width=130
target1.x=290
target1.y=150
target2.height=50
target2.name=EntscheidungsFrame
target2.showInterface=false
target2.type=ClassTarget
target2.width=150
target2.x=380
target2.y=30
target3.height=50
target3.name=EntscheidungsFrameBase
target3.showInterface=false
target3.type=AbstractTarget
target3.width=180
target3.x=110
target3.y=30

View file

@ -0,0 +1,11 @@
= Material :
|===
|Zuordnung|
|Klassenstufe|
|Bildungsplanbezug |
|Werkzeug|
|Autoren|
|===
== Inhalt