Frage von Goleb04, 100

Gibt es einen Quellcode zu einem Programm zur Verteilung von Schülern auf Schulklassen (oder Gruppen) gemäß Wunschlisten von bis zu 5 Schülern?

Wenn es möglich wäre hätten ich gerne gerne den Quellcode eurer Programme. PS: Meine Lehrerin hat mich gebeten so ein Programm zu programmieren.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von DataJockey, 10

Man kann das rekursiv bruteforce lösen. Es wird eine Liste mit allen möglichen Komination erstellt und jeder Liste eine Bewertung zugeordnet.
Die Liste mit der besten Bewertung stellt das Ergebnis dar.

Pseudocode:
class Schüler
Name : String
Freunde: Liste mit Schülern
//gibt eine Wertung für die Klasse zurück
function Zufriedenheit( Klasse ): Integer
für jeden Schüler in Freunde
wenn Freund in Klasse
Zufriedenheit += 1000; //hier kann gewichtet werden
endfunction
endclass

class Klasse
Name : String
Schülerliste: Liste mit Schülern
//gibt eine Wertung Zurück
function Zufriedenheit: Integer
für jeden Schüler in Schülerliste
Zufriedenheit += Schüler.Zufriedenheit(Self)
endfunction
endclass

class Realität
Klassen : Liste mit Klasse
//gibt eine Wertung Zurück
function Zufriedenheit: Integer
für jede Klasse in Klassen
Zufriedenheit += Klasse.Zufriedenheit;
endfunction
endclass

function CreateReality( Realität): gibt neueRealität zurück
neueRealität : Realität
für jede Klasse in Realität
neueRealität.Klassen.Add(Klasse.Copy)
endfunction

function VerteileSchüler(Realitäten, Schülerliste, Realität)
neueRealitäten : Liste mit Realitäten

Schüler = Schülerliste.entnehmeSchüler //Liste wird kleiner
für jede Klasse in Realität.Klassen
neueRealitäten.Add( CreateReality(Realität).Klassen.FindeKlasse(Klasse).Schülerliste.Add(Schüler) )

für jeden neueRealität in neueRealitäten
VerteileSchüler(Realitäten, Schülerliste, neueRealität)
Realitäten.Add(neueRealität)
endfunction

Realitäten: Liste mit Realitäten
Schülerliste: Liste mit Schülern //muss geladen werden

//erste Realität erstellen
ersteRealität : Realität
Realitäten.Add(ersteRealität)

//Klassen erstellen
ersteRealität.Klassen.Add( neue Klasse('A'))
ersteRealität.Klassen.Add( neue Klasse('B'))
ersteRealität.Klassen.Add( neue Klasse('C'))

VerteileSchüler(Realitäten, Schülerliste, ersteRealität)
Realitäten.SortiereNachZufriedenheit

Realitäten.Erste.ZeigeAn
Kommentar von DataJockey ,

Ich hoffe das hilft.

in welcher Sprache möchtest du das denn programmieren?

gruss, dj

Antwort
von DataJockey, 19

Hi,

das ist nicht trivial. Ich habe mal so etwas ähnlich programmiert und müsste den Quellcode raussuchen. Ich glaub ich habe dass damals rekursiv gelöst.  Ich versuch dir im Laufe des Tages mal den Algorithmus aufzuschreiben.

..und an alle anderen hier: Entspannt euch. Ich denke nicht, dass das eine Hausaufgabe ist!

gruss, dj

Kommentar von Goleb04 ,

Vielen Dank 

Kommentar von DataJockey ,

Ich habe das Programm leider nicht mehr gefunden.
Aber ich beschreibe dir mal den Algorithmus in einer neuen Antwort. Das ist übersichtlicher.

Antwort
von Schachpapa, 39

Da hier offenbar niemand versteht, was du möchtest, wäre vielleicht ein konkretes Beispiel hilfreich.

Wie sehen die Wunschlisten aus, was wäre ein gewünschtes Ergebnis, nach welchen Kriterien ist eine Verteilung besser als eine andere?

Kommentar von Goleb04 ,

60 Schüler: S1: ich will mit s2 s3 s4 in eine Klasse

s2 will noch mit s 5 und 6 in eine Klasse.

Der Rest dann Random  

Pro Klasse dann 25 bis 30 Kinder

Antwort
von valvaris, 46

Also du gibst 5 Listen ein, auf denen eine Zusammenstellung von Gruppen steht und das Programm macht dir daraus eine, auf der alle 5 berücksichtigt sind ?

Hab ich das richtig verstanden ?

Hm Ist nicht in mal eben 5 Minuten geschrieben, aber durchaus möglich. Hat dich deine Lehrerin wirklich gebeten oder ist das eine Hausaufgabe ?

Kommentar von Goleb04 ,

Sie hat mich gebeten es war keine Hausaufgabe. Ich bin in der 6. Klasse.

Kommentar von Goleb04 ,

Keine Aufgabe!

Kommentar von valvaris ,

Hmm Welche Programmiersprache ? Vermute mal, Visual Basic ?

Expertenantwort
von funcky49, Community-Experte für Computer, 48

Wenn zur Aufgabe das Programmieren dazugehört, solltest Du das schon selbst schreiben.

Ggf. kann man das auch in Excel machen mit wenig oder gar keiner VBA-Programmierung.


Kommentar von Goleb04 ,

Es war einfach eine Bitte!!!

Kommentar von funcky49 ,

Ja, das habe ich verstanden.

Und ich habe einfach eine Antwort mit einem kleinen Tipp dazu gegeben....

Antwort
von qugart, 59

Du solltest erstmal erklären, was für ein Programm du überhaupt suchst, bevor du nach dem Quellcode fragst.

Kommentar von Goleb04 ,

es soll Schüler nach Wunschlisten auf Klassen verteilen.

Kommentar von qugart ,

Was sind Wunschlisten? Wieviele Schüler? Wieviele Klassen? Welches Betriebssystem? Welche Sprache?

Tipp: Schreib die einzelnen Schritte auf ein Blatt Papier und wandle dann diese Vorgänge in eine Programmiersprache um. Hilfreich ist da ein Ablaufdiagramm.

Kommentar von DataJockey ,

wer verwendet denn in der Realität Ablaufdiagramme?

Kommentar von qugart ,

Jeder Prozess kann durch ein Ablaufdiagramm dargestellt werden. Und so wird es auch bei (fast) jedem QS-zertifizierten Betrieb gehandhabt. Und der Rest macht das in der Regel unbewusstt auch.

Vor allem, wenn man nicht genau weiß, wie man etwas angehen soll und man sich das nicht vorstellen kann, sollte man ein Ablaufdiagramm aufskizzieren.

Antwort
von ceevee, 27

PS: Meine Lehrerin hat mich gebeten so ein Programm zu programmieren.

Deine Lehrerin hat mich aber nicht gebeten, so ein Programm zu programmieren. Deswegen brauchst du meinen Quellcode (den ich eh nicht habe) nicht. ;) Das Thema hatten wir aber schonmal im März diesen Jahres.

http://www.gutefrage.net/frage/gibt-es-ein-computerprogramm-oder-hat-einer-eine-...

Wie schon damals gesagt, die Aufgabe ist nicht ohne, das hat man nicht mal eben in 10 Minuten fertig programmiert. Vor allem muss man erstmal darüber nachdenken, wie man die Aufgabe löst (also mit welchem Algorithmus man da ran geht). Ein (etwas naiver) Ansatz wäre:

- Bilde zufällige Klassen, die die Größe erfüllen

- Prüfe, wie viele der Wünsche in dieser Klassenaufteilung erfüllt werden.

- Wenn das die bisher beste Klassenaufteilung ist, dann speichere sie ab - zusammen mit ihrer Qualität (also wie viele Wünsche erfüllt worden sind). Mit dieser besten Konstellation wird dann immer wieder verglichen.

- Fang wieder von vorne an (bilde also neue zufällige Klassen), lass das Programm lange laufen. 

Es gibt aber auch noch Wege, wie man diese Aufgabe eleganter lösen kannst, das hab ich mit dem Procoder in der anderen Frage ja ausdiskutiert.

Wenn du schon etwas programmiert hättest und damit nicht weiterkommen würdest, dann könntest du hier konkrete Fragen stellen und dann könnte man dir eher helfen. Oder du sagst deiner Lehrerin, dass die Aufgabe eine Nummer zu hoch für einen Sechstklässler ist.

Kommentar von RakonDark ,

warum den so umständlich , erstmal werden die 5 Schüler jeweils eingetragen . Und dann der rest verteilt . Fragt sich nur nach welchen kriterien ;)

Kommentar von ceevee ,

Fragt sich nur nach welchen kriterien ;)

Ich denke mal so, dass möglichst viele Wünsche erfüllt sind und man entscheiden muss, welche Wünsche man nicht erfüllen kann (z.B., weil eine Klasse zu groß werden würde, wenn man alle Wünsche erfüllen würde). Da steckt schon ein handfestes Optimierungsproblem in der Aufgabenstellung.

Keine passende Antwort gefunden?

Fragen Sie die Community