Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Algorithmus für einen Stundenplan


Mr.Retsim - So 12.12.10 20:55
Titel: Algorithmus für einen Stundenplan
Hallo ich bins wieder,

Das Problem mit der Listbox hat sich erledigt, doch nun haben wir eine neue Hürde zu meistern.

Folgendes Problem: Ich habe den Algorithmus mal auf Deutsch geschrieben, jedoch fehlt mir das nötige Fachwissen für Delphi :)


Schritt 1

>1 Suche Stunde, in der nur ein Lehrer verfügbar ist, wenn "Schritt 1 >1" nicht möglich, Springe zu "Schritt 2 >1"
>2 Setze Lehrer in diese Stunde ein
>3 Streiche Lehrer aus allen anderen Stunden
>4 Spring zurück zu "Schritt 1 >1"


Schritt 2

>1 Suche Stunde, in der nur 2 Lehrer verfügbar sind, wenn "Schritt 2 >1" nicht möglich, springe zu"Schritt 3 >1"
>2 Setze beide Lehrer in diese Stunde ein
>3 Streiche beide Lehrer aus allen anderen Stunden
>4 Spring zurück zu "Schritt 1 >1"


Schritt 3

>1 Suche Lehrer, der nur in einer Stunde verfügbar ist, wenn "Schritt 3 >1" nicht möglich, springe zu "Schritt 4 >1"
>2 Setze diesen Lehrer in diese Stunde ein
>3 Spring zurück zu "Schritt 1 >1"

Schritt 4

>1 Suche Lehrer, der nur in zwei Stunden verfügbar ist, wenn "Schritt 4 >1" nicht möglich, springe zu "Schritt 5 >1"
>2 Setze diesen Lehrer in eine der Stunden ein
>3 Lösche diesen Lehrer aus der anderen Stunde
>4 Spring zurück zu "Schritt 1 >1"

Schritt 5

>1 Suche Stunde, in der <= 3 Lehrer verfügbar sind, wenn "Schritt 5 >1" nicht möglich, beende den Prozess
>2 Setze die 2 Lehrer mit den wenigsten Bereitschaftsstunden ein
>3 Streiche die beiden eingesetzten Lehrer aus allen anderen Stunden
>4 Spring zurück zu "Schritt 1 >1"

Dieser Algorithmus soll dann durchgeführt, sobald ich einen Button drücke: Soweit habe ich es jetzt in Delphi gebracht, jedoch geht es nicht ganz....

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.BtstartClick(Sender: TObject);
var
dayindex, lesindex, anzahl, voranzahl : integer;
Stunde: string;
begin
Teachers.Clear;
    For   dayindex := 0 to 4 do

    begin
        For lesindex := 0 to 4 do
          Teachers.Clear;
 fn := IncludeTrailingBackSlash(ExtractFilePath('C:\temp\')) + Day.Items[Day.ItemIndex] + '-' + Lesson.Items[Lesson.Itemindex] + '.txt';
if FileExists(fn) then Teachers.Items.LoadFromFile(IncludeTrailingBackSlash(ExtractFilePath('C:\temp\')) + Day.Items[Day.ItemIndex] + '-' + Lesson.Items[Lesson.Itemindex] + '.txt')
else;
anzahl := Teachers.Items.Count;
                if anzahl = 1 then
                begin
                Case dayindex  of
                0:   Stunde := 'Monlesson[lesindex+1]' ;
                1:   Stunde := 'Tuelesson[lesindex+1]'  ;
                2:   Stunde := 'Wedlesson[lesindex+1]'   ;
                3:   Stunde := 'Thulesson[lesindex+1]'    ;
                4:   Stunde := 'Frilesson[lesindex+1]'     ;
                end;

                Stunde := Teachers.Items[1]
                end;
        end;


Vielen Dank im Voraus!!!


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am So 12.12.2010 um 20:23


Xion - So 20.02.11 18:53

user profile iconMr.Retsim hat folgendes geschrieben Zum zitierten Posting springen:
Folgendes Problem: Ich habe den Algorithmus mal auf Deutsch geschrieben, jedoch fehlt mir das nötige Fachwissen für Delphi :)

Uff...so viel Text schreckt die Leute ab :D

Erstmal zu deinem Quellcode:
user profile iconMr.Retsim hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
 fn := IncludeTrailingBackSlash(ExtractFilePath('C:\temp\')) + [...]                    

Das nenn ich mal sinnlos :P Nehm doch einfach gleich 'C:\temp\', da gibts nichts dran rum zu ändern ;)

user profile iconMr.Retsim hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
 if FileExists(fn) then Teachers.Items.LoadFromFile(IncludeTrailingBackSlash(ExtractFilePath('C:\temp\')) + Day.Items[Day.ItemIndex] + '-' + Lesson.Items[Lesson.Itemindex] + '.txt')                    

Das ist auch Quark. Schreib doch einfach Teachers.Items.LoadFromFile(fn);

Ok, zu diesem Zeitpunkt haben wir also die Datei geladen. Zwar Umständlich, aber soweit ok.

user profile iconMr.Retsim hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
anzahl := Teachers.Items.Count;                    

Jetzt steht die Anzahl der Zeilen in "Anzahl"

Jetzt kommt das seltsame:

user profile iconMr.Retsim hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
                if anzahl = 1 then
                begin
                Case dayindex  of
                0:   Stunde := 'Monlesson[lesindex+1]' ;
                1:   Stunde := 'Tuelesson[lesindex+1]'  ;
                2:   Stunde := 'Wedlesson[lesindex+1]'   ;
                3:   Stunde := 'Thulesson[lesindex+1]'    ;
                4:   Stunde := 'Frilesson[lesindex+1]'     ;
                end;

                Stunde := Teachers.Items[1]
                end;

Das ist mal komisch. Es darf nur eine Zeile in der Datei stehen. Soweit ok. Dann weißt du Stunde einen kryptischen String zu (sicher dass die Anführungszeichen dort sein sollen?'. Danach schmeißt du den Inhalt von Stunde aber eh weg, und überschreibst ihn mit Zeile 1 (also alles) aus der Datei ;) Da ist wohl was faul :D

Zu deinem Algorithmus den du oben beschreibst, kann ich überhaupt nichts sagen, da ich deine Datenstrukturen nicht kenne (wo steht welche Information in welchem Format).