Claroma (Classroom Management) ist ein Programm zur manuellen und halbautomatischen Sitzplanerstellung in einer Schulklasse.
Lehrkräfte können eine Liste ihrer Schülerinnen und Schüler anlegen und diese zusammen mit Tischen und anderen Gegenständen in einem Raster grafisch anordnen. In der anschließenden Optimierungsphase ist es dann sehr leicht, Schülerinnen und Schüler manuell „umzusetzen”, um persönlichen Wunschbedingungen der Form
• Elias möchte neben Julian sitzen
• Lena darf auf gar keinen Fall neben Sarah sitzen
• Marcel sollte möglichst in Türnähe sitzen
• Laura muss möglichst weit hinten sitzen
gerecht zu werden.
Wenn sie mit ihrem manuell erstellten Sitzplan noch nicht ganz zufrieden ist, kann die Lehrkraft ihre Wünsche im Programm abbilden und den Sitzplan vom programminternen Optimierer nachoptimieren lassen, der manchmal tatsächlich eine Sitzanordnung findet, die die vorgegebenen Randbedingungen noch besser erfüllt.
Inhaltsverzeichnis
I Bedienungsanleitung
1 Einführung
2 Anwendung des Programms
2.1 Die Oberfläche
2.2 Drucken
2.3 Optimieren
2.3.1 Nicht-personenbezogene Wünsche
2.3.2 Beispiel
II Unter der Haube
3 Blockschaltbild
4 claroma.html
4.1 <head>
4.2 <body>
4.2.1 seite_claroma
4.2.2 seite_speichern
4.2.3 seite_laden
4.2.4 seite_impressum
4.2.5 seite_optimieren
5 claroma.js
5.1 window.onload
5.2 initialisierung
5.3 alle_menschen_loeschen
5.4 leeren_raum_anlegen
5.5 neuen_menschen_anlegen
5.6 a_nach_b_kopieren
5.7 aussenwaende_ziehen
5.8 name_geaendert
5.9 leere_namen_auswerten
5.10 auf_ding_geklickt
5.11 auf_menschen_geklickt
5.12 in_zelle_eingetreten
5.13 in_zelle_geklickt
5.14 aus_zelle_ausgetreten
5.15 aktuellen_menschen_loeschen
5.16 menschen_in_zelle_loeschen
5.17 menschen_in_zelle_finden
5.18 speichern_anzeigen
5.19 datei_lesen
5.20 menschen_sortieren
5.21 tabelle_sortieren
5.22 zeile_verschieben
5.23 laden_anzeigen
5.24 impressum_anzeigen
5.25 claroma_anzeigen
5.26 document.onkeydown
5.27 sitzplan_optimieren
5.28 menschen_struktur_erstellen
5.29 beziehungen_einsortieren
5.30 festlegungen_einsortieren
5.31 neue_beziehung_erstellen
5.32 neue_festlegung_erstellen
5.33 zeile_loeschen
5.34 optimieren_anzeigen
5.35 finde_name_zu_id
5.36 optimierung_durchfuehren
5.37 beziehungen_aus_tabelle_lesen
5.38 festlegungen_aus_tabelle_lesen
5.39 obere_dreiecksmatrix_erzeugen
5.40 elemente_vertauschen
5.41 kostenfunktion
5.42 zwei_aus_n
6 claroma.css
A claroma.json
Teil I Bedienungsanleitung
1 Einführung
Claroma (Classroom Management) ist ein Programm zur manuellen und halbautomatischen Sitzplanerstellung in einer Schulklasse. Lehrkräfte können eine Liste ihrer Schülerinnen und Schüler anlegen und diese zusammen mit Tischen und anderen Gegenständen in einem Raster grafisch anordnen. In der anschließenden Optimierungsphase ist es dann sehr leicht, Schülerinnen und Schüler manuell „umzusetzen”, um persönlichen Wunschbedingungen der Form
- Elias möchte neben Julian sitzen.
- Lena darf auf gar keinen Fall neben Sarah sitzen.
- Marcel sollte möglichst in Türnähe sitzen.
- Laura muss möglichst weit hinten sitzen. gerecht zu werden.
Wenn sie mit ihrem manuell erstellten Sitzplan noch nicht ganz zufrieden ist, kann die Lehrkraft ihre Wünsche im Programm abbilden und den Sitzplan vom programminternen Optimierer nachoptimieren lassen, der manchmal tatsächlich eine Sitzanordnung findet, die die vorgegebenen Randbedingungen noch besser erfüllt.
Datenschutz Claroma speichert keine Daten im Internet. Alle Informationen (Pläne, Namen, . . . ) werden ausschließlich auf dem eigenen Rechner gehalten und auf Wunsch dort abgespeichert oder ausgedruckt.
2 Anwendung des Programms
In diesem Kapitel wollen wir die typische Vorgehensweise beim Arbeiten mit Claroma kennenlernen.
2.1 Die Oberfläche
In Abbildung 2.1 ist exemplarisch eine typische Arbeitsoberfläche dargestellt, auf der wir den Sitzplan erstellen.
Abbildung 2.1: Sitzplanerstellung mit Claroma
Abbildung in dieser Leseprobe nicht enthalten
In der linken oberen Ecke der Oberfläche finden wir den Programmnamen. Direkt darunter gibt es ein Feld, in das wir den Namen der Klasse eintragen können. Dies ist insbesondere dann sinnvoll, wenn wir den Plan später abspeichern wollen, da der Klassenname dann - zur Unterscheidung - als Teil des Dateinamens verwendet wird.
Alsdann folgt eine Liste der Gegenstände, die wir durch Anklicken aufnehmen und durch erneutes Klicken im rechts daneben liegenden Raum beliebig oft absetzen können. Die ersten sieben Einträge (Wand . . . Ablage) sind reale Objekte, die wir frei im Raum positionieren können. Dabei können wir jedes Objekt auch auf ein schon vorhandenes Objekt ablegen, das dadurch automatisch entfernt wird. Auf diese Weise können wir beispielsweise einfach ein Fenster oder eine Tür direkt an passender Stelle in eine Wand einbauen.
Der letzte Eintrag (Leer) dient zum Löschen. Wenn wir ihn anklicken, nehmen wir quasi einen Löschstempel auf, mit dem wir im Raum vorhandene Gegenstände (oder Schülerinnen und Schüler) durch Anklicken wieder entfernen können.
Durch Anklicken der Schaltfläche Speichern gelangen wir auf eine Seite, auf der uns der aus Klassenname und aktuellem Datum zusammengesetzte Name der Datei angezeigt wird, unter der der momentane Plan gerade abgespeichert wird.
Die Schaltfläche Laden führt uns auf eine Seite, auf der wir sowohl einen neuen, leeren Raum mit gewünschten Abmaßen (Standardwert: 20 × 20 Kästchen) erstellen, als auch einen vorher abgespeicherten Plan laden können. In beiden Fällen wird der gerade bearbeitete Plan unwiderruflich und ohne Nachfrage gelöscht.
Die Schaltfläche Hilfe öffnet dieses Dokument.
Jede Website braucht nach § 5 des Telemediengesetzes eine Impressum-Seite, auf der die Kontaktdaten der Verantwortlichen (Telefonnummer, E-MailAdresse, . . . ) aufgelistet sind.
Das Anklicken der Schaltfläche Sortieren sortiert die Listen der Schülerinnen und Schüler alphabetisch. Die Sortierreihenfolge lautet dabei:
1. Sonderzeichen (*, #, . . . )
2. Zahlen
3. Großbuchstaben
4. Kleinbuchstaben
Durch Anklicken der gleichnamigen Schaltfläche gelangen wir zur Seite Optimieren, auf der wir angeben können, welche Schülerinnen und Schüler gerne (oder nicht gerne) nebeneinander sitzen möchten bzw. sollten. Ein Optimierungsprogramm versucht dann, durch Umsetzen einzelner Schülerinnen und Schüler, diese Wünsche zu erfüllen.
In der Mitte von Abbildung 2.1 ist der Raum dargestellt, in dem wir Gegenstände (Tisch, Tafel, . . . ), Schülerinnen und Schüler positionieren können. Dazu klicken wir erst auf die Objekte, die wir einfügen wollen und dann an der passenden Stelle in den Raum. Neue Objekte überschreiben dabei alte Objekte. Nachdem wir auf Leer geklickt haben, können wir mit einem Löschstempel Objekte wieder aus dem Raum entfernen. Wenn wir im Raum auf schon gesetzte Schülerinnen und Schüler klicken, werden sie beweglich - sie kleben quasi am Mauszeiger - und wir können sie sehr einfach durch erneutes Klicken an einer anderen Position wieder absetzen.
Abbildung in dieser Leseprobe nicht enthalten
Auf der rechten Seite von Abbildung 2.1 können wir eine Lehrerin und/oder einen Lehrer und die Schülerinnen und Schüler namentlich in eine Liste eintragen. Während wir den Namen einer Schülerin oder eines Schülers eintragen, wird unter dem aktuellen Eintrag sofort ein neues leeres Feld ergänzt.
Links neben dem Namen gibt es ein kreisförmiges Symbol (rot für weiblich, blau für männlich), in das automatisch eine Abkürzung des Namens eingetragen wird. Wir können einen Menschen entweder nur mit seinem Vornamen oder mit seinem Vor- und Nachnamen benennen. Vom Vornamen werden die ersten beiden Buchstaben in das Symbol kopiert; wenn wir einen Vor- und einen Nachnamen verwenden, werden beide Anfangsbuchstaben ins Symbol übertragen.
Abbildung in dieser Leseprobe nicht enthalten
So können wir Maja Petersen und Maria Paulsen, die ja beide die Abkürzung „Ma” bzw. „MP” hätten, beispielsweise auch durch eine „1” und „2” im „Nachnamen” unterscheiden.
Wenn wir ein Symbol anklicken und es durch erneutes Klicken im Raum absetzen, wird das Symbol in der Liste farblos. Wenn wir ein farbloses Symbol in der Liste anklicken, wird das entsprechende Symbol wieder aus dem Raum entfernt. Auf diese Weise können wir sehr schnell alle Menschen aus dem Raum entfernen, indem wir in der Liste der Reihe nach alle Symbole anklicken.
2.2 Drucken
Um einen fertigen Plan auszudrucken, verwenden wir die Druckvorschau unseres Browsers, die wir in modernen Browsern rechts oben hinter drei Strichen oder einem Zahnrad finden. In manchen Browsern müssen wir zur Anzeige eines Druckmenüeintrags die AltTaste drücken. Wenn wir einen „normalen” Raumplan ausdrucken wollen, ist es sinnvoll, in der Druckvorschau als Layout das Querformat auszuwählen, damit die Objekte nicht seitlich gestaucht werden. Falls dies doch der Fall sein sollte, erlauben es manche Browser (beispielsweise Firefox), den Seiteninhalt zu skalieren und damit zum Beispiel automatisch auf die Seitengröße anzupassen.
Außerdem sollten wir die Option „Hintergrundfarben und -bilder drucken” auswählen, die sich manchmal hinter „Weitere Einstellungen” oder „Seite einrichten” versteckt. Nur durch diese Option werden die Planobjekte (Gegenstände und Menschen) farbig gedruckt. Durch die auf die Planobjekte aufgedruckten Abkürzungen ist der Plan zwar auch ohne Farbe noch lesbar; mit Farbe ist er aber natürlich übersichtlicher.
Wenn wir unseren Browser selbst nicht zu einem vernünftigen Ausdruck überreden können, bleibt uns immer noch die Möglichkeit, das Browserfenster auf den ganzen Bildschirm zu vergrößern, die Skalierung so anzupassen, dass der gesamte Plan sichtbar ist (probieren Sie mal die Strg-Taste zu drücken und gleichzeitig das Mausrad zu drehen), mit dem Snipping Tool (oder durch Drücken der Druck-Taste auf der Tastatur) ein Bildschirmfoto zu erzeugen und dieses dann beispielsweise in eine leere Word-Seite einzufügen, die wir dann „normal” ausdrucken können.
2.3 Optimieren
Nach dem Drücken der Optimieren-Schaltfläche[1] auf der Hauptseite landen wir auf der Optimierungsseite (Abbildung 2.2), auf der wir Randbedingungen wie
- Stefan möchte neben Maria sitzen.
- Stefan sollte Fyn nicht gegenüber sitzen.
- Stefan sollte während der Optimierung nicht verschoben werden.
vorgeben können. Ein Optimierungsprogramm versucht dann, diese Wünsche möglichst alle zu erfüllen, bzw. einen optimalen Kompromiss zu finden.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.2: Optimierungsseite
Unter der Überschrift Wer soll (nicht) neben wem sitzen? können wir, nach Drücken der Neue Beziehung erstellen-Schaltfläche, beispielsweise Stefan und Maria mit einem Pluszeichen verknüpfen, um dem Optimierer mitzuteilen, dass die beiden gerne nebeneinander sitzen möchten. Entsprechend verknüpfen wir Stefan und Fyn mit einem Minuszeichen, um zu fordern, dass diese möglichst weit voneinander entfernt sitzen sollen.
Manchmal gibt es keine Möglichkeit, alle Forderungen gleichzeitig zu erfüllen. Wenn beispielsweise Stefan und Fyn beide gerne neben Maria sitzen wollen, neben Maria aber nur ein Platz frei ist, können wir die Dringlichkeit eines Wunsches durch ein doppeltes (oder sogar dreifaches) Pluszeichen ausdrücken. Auf diese Weise wird dann beispielsweise Stefan durch ein doppeltes Pluszeichen mit größerer Wahrscheinlichkeit direkt neben Maria platziert und Fyn durch ein einfaches Pluszeichen auf den dann nächstliegenden Platz gesetzt.
Durch ein o kennzeichnen wir eine zu ignorierende Beziehung. Sie wird beim nächsten Optimierungslauf[2] automatisch gelöscht. Alternativ können wir eine Beziehung auch unmittelbar mit der Schaltfläche Diese Beziehung löschen entfernen.
Unter der Überschrift Wer soll nicht verschoben werden? markieren wir alle Lehrkräfte[3], Schülerinnen und Schüler, die während der Optimierung nicht verschoben werden sollen. Sie können natürlich trotzdem in Beziehungen auftreten, solange ihr Beziehungspartner[4] verschoben werden darf.
Das Drücken der Optimierung durchführen-Schaltfläche unter der Überschrift Jetzt optimieren? startet dann den Optimierer. Alternativ schließt die Schaltfläche Optimierung abbrechen die Optimierungsseite und verwirft alle neu definierten Forderungen.
2.3.1 Nicht-personenbezogene Wünsche
Manchmal gibt es auch nicht-personenbezogene Wünsche wie
- Marcel sollte möglichst in Türnähe sitzen.
- Laura muss möglichst weit hinten sitzen.
Da aber in der Beziehungsliste nur Personen (aber keine Gegenstände oder abstrakte Eigenschaften wie vorne, links oder in der Mitte) auftreten, können wir in diesen Fällen einfach virtuelle Schülerinnen oder Schüler definieren, denen wir möglichst sinnvolle Namen wie Tafel, Fenster oder hinten links geben, die wir an geeigneter Stelle als nicht verschiebbar im Sitzplan platzieren, um dann Beziehungen zwischen ihnen und den Personen zu definieren.
Wir können sogar beispielsweise mehrere „virtuelle Fenster” (F 1, F 2, . . . ) einführen und jeweils vor jedes reale Fenster fest im Sitzplan platzieren. Wenn wir dann eine Person in gleichrangigen Beziehungen mit jedem Fenster verknüpfen, kann sich der Optimierer sogar aussuchen, vor welches Fenster er die Person platziert.
2.3.2 Beispiel
Das in Abbildung 2.3 dargestellte sehr einfache[5] Beispiel soll die Vorgehensweise beim Optimieren deutlich machen.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.3: Vor der Optimierung
Wir haben in Abbildung 2.3a vier Schülerinnen und Schüler (Stefan, Fyn, Lena und Maria) ohne besondere Berücksichtigung von Zu- oder Abneigungen an einem Vierertisch gesetzt. Damit haben wir festgelegt, wo im Raum die vier Sitzplätze sein sollen; die Verteilung der Schülerinnen und Schüler auf die Plätze wollen wir jetzt aber dem Optimierer überlassen.
Nach dem Aufruf der Optimierungsseite sehen wir in Abbildung 2.3b, dass noch keine Wünsche definiert sind.
Um nun den Optimierer anzuweisen, Stefan und Maria möglichst nebeneinander zu setzen, wählen wir auf der Optimierungsseite (Abbildung 2.4a) in der linken Liste[6] Stefan und in der rechten Liste Maria aus und verbinden beide mit einem Pluszeichen.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.4: Pluszeichen: Platzierung möglichst nahe zusammen
Nach der Optimierung hat dann in der Tat Stefan seinen Platz mit Fyn getauscht und sitzt wunschgemäß neben Maria (Abbildung 2.4b).
Im nächsten Schritt[7] soll jetzt verhindert werden, dass Stefan und Fyn einander direkt gegenüber sitzen. Dazu wird eine zweite Beziehung erstellt, in der Stefan und Fyn mit einem Minuszeichen verknüpft werden (Abbildung 2.5a).
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.5: Minuszeichen: Platzierung möglichst weit voneinander entfernt
Der Optimierer versucht dann, die beiden möglichst weit voneinander entfernt zu platzieren, was in diesem trivialen Beispiel an einem Vierertisch natürlich nur dazu führt, dass Fyn seinen Platz mit Lena tauscht und damit wunschgemäß maximal weit von Stefan entfernt sitzt (Abbildung 2.5b).
Wenn wir, wie in Abbildung 2.6 dargestellt, sicherstellen möchten, dass Stefan seinen Platz während der Optimierung behält, können wir dies in der entsprechenden Liste auswählen (Abbildung 2.6a).
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.6: Verschiebungsunterdrückung
Wenn wir jetzt wieder mit der Ursprungsanordnung gemäß Abbildung 2.3a beginnen und zusätzlich zu Stefans Fixierung die beiden Bedingungen gemäß Abbildung 2.5a stellen, rückt der Optimierer Maria an Stefan heran und entfernt Fyn möglichst weit von Stefan, ohne - bezogen auf Abbildung 2.3a - Stefan selbst zu bewegen (Abbildung 2.6b).
Teil II Unter der Haube
3 Blockschaltbild
Abbildung 3.1 zeigt das Claroma-Blockschaltbild ohne die Optimierung.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 3.1: Blockschaltbild ohne Optimierung
Dabei sind die roten Blöcke globale Event-Handler, die immer dann aufgerufen werden, wenn ein externes Ereignis eintritt. Die grünen Blöcke werden aufgerufen, wenn die Lehrkraft die Maus bewegt oder eine Schaltfläche anklickt. Die blauen Blöcke sind Hilfsunterprogramme, die von den roten und grünen (und von den anderen blauen) aufgerufen werden. Im Folgenden geben wir einen kurzen Überblick über das Zusammenspiel der Unterprogramme.
document.onkeydown wird immer dann aufgerufen, wenn die Lehrkraft eine Taste auf der Tastatur drückt. Es dient dazu, zu verhindern, dass eine versehentlich gedrückte Zurück-Taste die Claroma-Seite verlässt.
window.onload wartet, bis die Hauptseite vollständig geladen ist und ruft dann das Unterprogramm initialisierung auf. Dort entfernen wir alle möglicherweise schon in den Namenslisten vorhandenen Menschen (alle_menschen_loeschen), legen einen neuen, leeren Raum (leeren_raum_anlegen) mit Außenwänden an (aussenwaende_ziehen), tragen jeweils eine Lehrerin, einen Lehrer, eine Schülerin und einen Schüler ohne Namen ein (neuen_menschen_anlegen) und machen die Hauptseite sichtbar (claroma_anzeigen). Beim Ziehen der Außenwände verwenden wir das Unterprogramm a_nach_b_kopieren, um Wandobjekte in den Raum zu kopieren.
Wenn die Lehrkraft auf einen der vorgegebenen Gegenstände (Tisch, Tür, ...) in der linken Spalte klickt (auf_ding_geklickt), machen wir diesen zum aktuellen Objekt. Wenn die Lehrkraft in eine Zelle im Raum klickt (in_zelle_geklickt), tauschen wir das dort möglicherweise vorhandene Objekt mit dem aktuellen. Beim Klicken auf einen Menschen in der rechten Spalte (auf_menschen_geklickt) löschen wir mit menschen_in_zelle_loeschen (das wiederum mit menschen_in_zelle_finden den Menschen im Raum sucht und dann mit a_nach_b_kopieren durch einen leeren Eintrag ersetzt) den Menschen im Raum. Beim Eintreten der Maus in eine neue Zelle (in_zelle_eingetreten) und beim Verlassen der Zelle (aus_zelle_ausgetreten) kopieren wir den aktuellen Zellinhalt mit a_nach_b_kopieren in einen Zwischenspeicher beziehungsweise wieder zurück in die Zelle.
Wenn die Lehrkraft den Namen eines Menschen verändert, wird name_geaendert aufgerufen. Im Unterprogramm untersuchen wir mit Hilfe von menschen_in_zelle_finden, ob der Mensch schon in den Raum gesetzt wurde, ändern gegebenenfalls seinen Aufdruck und werten mittels leere_namen_auswerten aus, ob wir in der Namensliste einen neuen Eintrag hinzufügen (neuen_menschen_anlegen) oder einen leeren Namenseintrag löschen müssen (aktuellen_menschen_loeschen). Beim Löschen müssen wir sowohl den Eintrag in der Liste als auch gegebenenfalls das Symbol in der Raumzelle entfernen (menschen_in_zelle_loeschen).
Beim Anklicken der Schaltfläche Sortieren wird das Unterprogramm menschen_sortieren aufgerufen, das seinerseits für beide Tabellen tabelle_sortieren aufruft. Dabei haben wir das Verschieben einer Tabellenzeile auf Grund der gewöhnungsbedürftigen Syntax nach zeile_verschieben ausgelagert.
Die Unterprogramme speichern_anzeigen, laden_anzeigen und impressum_anzeigen werden beim Anklicken der „gleichnamigen” Schaltflächen aufgerufen und machen einfach die entsprechenden Seiten sichtbar.
Wenn die Lehrkraft das Hochladen einer Datei angefordert hat, wird datei_lesen aufgerufen. Es liest die in der Datei gespeicherten Informationen, löscht alle momentan vorhandenen Einträge in der Liste (alle_menschen_loeschen), legt einen leeren Raum (mit den in der Datei geforderten Maßen) an (leeren_raum_anlegen) und zeigt das Hauptfenster an (claroma_anzeigen).
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 3.2: Blockschaltbild der Optimierung
Nach dem Drücken der Schaltfläche Optimieren wird das Unterprogramm sitzplan_optimieren aufgerufen, in dem ein Optimierer versucht, die Sitzplätze der Schülerinnen und Schüler zu variieren, um die von der Lehrkraft vorgegebenen Wünsche bestmöglich zu erfüllen. Das entsprechende Blockschaltbild ist in Abbildung 3.2 dargestellt.
Das Unterprogramm sitzplan_optimieren ruft vier weitere Unterprogramme auf:
- menschen_struktur_erstellen erzeugt ein Strukturfeld aller im Plan gesetzten Lehrkräfte, Schülerinnen und Schüler, da nur diese bei der Optimierung berück sichtigt werden. Dabei verwenden wir das Unterprogramm finde_name_zu_id, um die in den Tabellen der Hauptseite definierten Namen der Menschen aus ihren IDs zu ermitteln.
- beziehungen_einsortieren sortiert die gegebenenfalls aus einer Datei gelesenen Beziehungen in die entsprechende Tabelle auf der Optimierungsseite ein. Das Er zeugen einer neuen Beziehungszeile in der Tabelle haben wir dabei in das Unter programm neue_beziehung_erstellen ausgelagert, das wiederum das Löschen einer Zeile mit Hilfe von zeile_loeschen als onclick-Ereignis der Schaltfläche Die se Beziehung löschen beinhaltet.
- festlegungen_einsortieren sortiert die gegebenenfalls aus einer Datei gelese nen Festlegungen in die entsprechende Tabelle auf der Optimierungsseite ein. Das Erzeugen einer neuen Festlegungszeile in der Tabelle haben wir dabei in das Unter programm neue_festlegung_erstellen ausgelagert, das wiederum das Löschen einer Zeile mit Hilfe von zeile_loeschen als onclick-Ereignis der Schaltfläche Diese Festlegung löschen beinhaltet.
- optimieren_anzeigen versteckt die Hauptseite und macht die Optimierungsseite sichtbar.
Durch Drücken der Schaltfläche Optimierung durchführen auf der Optimierungsseite wird das Unterprogramm optimierung_durchfuehren aufgerufen. Es ruft dann selbst sechs weitere Unterprogramme auf:
- beziehungen_aus_tabelle_lesen liest die von der Lehrkraft in der Tabelle auf der Optimierungsseite angegebenen Beziehungen und sortiert sie in eine obere Dreiecksmatrix ein. Dazu wird vorher das Unterprogramm obere_dreiecksma trix_erzeugen aufgerufen.
- festlegungen_aus_tabelle_lesen liest die von der Lehrkraft in der Tabelle auf der Optimierungsseite angegebenen Festlegungen und sortiert sie in ein eindimen sionales Feld ein. Als komplementäre Menge ermitteln wir daraus die Menschen, die während der Optimierung verschoben werden dürfen.
- obere_dreiecksmatrix_erzeugen gibt eine obere Dreiecksmatrix zurück, in der alle nordöstlichen Elemente eines Feldes mit einer numerischen 0 und die übri gen Elemente mit dem Literal null, das das Fehlen eines Elementes symbolisiert, gefüllt sind.
- kostenfunktion berechnet aus den Beziehungen und dem aktuellen Sitzplan des sen Kostenwert. Je besser ein Sitzplan die Wünsche der Lehrkraft erfüllt, desto kleiner ist sein Kostenwert.
- zwei_aus_n gibt ein zweidimensionales Feld (mit zwei Spalten) zurück, in dem alle Kombinationen (ohne Wiederholung) aufgelistet sind, die sich ergeben, wenn man jeweils zwei Elemente aus einer Urne zieht.
- elemente_vertauschen erweitert den Prototyp Array um die Methode, zwei Ele mente des Feldes zu vertauschen.
[...]
[1] Vor dem Optimieren sollten wir unbedingt den aktuellen Sitzplan abspeichern, damit wir ihn gegebenenfalls wieder laden können, wenn uns das Ergebnis der Optimierung - wider Erwarten - doch nicht gefällt.
[2] Auch unsinnige Beziehungen, bei denen ein Partner mit sich selbst verknüpft wird, werden vom Optimierer automatisch gelöscht.
[3] Der Optimierer verwendet nur die im Sitzplan gesetzten Plätze. Alternativ können wir also die Lehrkräfte vor der Optimierung einfach aus dem Sitzplan entfernen, um zu verhindern, dass der Optimierer sie „versetzt” und ihren Platz mit einer Schülerin oder einem Schüler besetzt.
[4] Natürlich wäre es ebenso sinnlos, eine Beziehung zwischen zwei Partnern zu definieren, die beide nicht verschoben werden dürfen. Der Optimierer ignoriert eine solche Beziehung, löscht sie aber nicht.
[5] In der Praxis werden auch umfangreiche Pläne mit mehr als 30 Schülerinnen und Schüler innerhalb weniger Sekunden optimiert.
[6] Die Reihenfolge in der Liste ist dabei nicht alphabetisch, sondern spiegelt die Anordnung der Schülerinnen und Schüler im Raum wieder: Wie beim Lesen eines Textes wird der Raum zeilenweise von oben nach unten durchsucht.
[7] Natürlich können wir alle Wünsche auch auf einen Schlag definieren und abarbeiten lassen.
-
-
-
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen. -
-
Laden Sie Ihre eigenen Arbeiten hoch! Geld verdienen und iPhone X gewinnen.