damit ich auch mal was gutes tu.
Hier meine Idee:
Die Wirtschaft bietet hier und da einige interessante Aufgaben, die ein bisschen kniffelig sind. Spiele haben natürlich auch ihren Reiz, aber hin und wieder mag ich die mathematische und logische Herausforderung.
Mein Vorschlag ist, dass wir hier einige CODE--Schnippsel (aber ausführbar) zusammentragen und damit ein spezialisiertes CODEARCHIVE schaffen.
Die Fachbereiche kann ja jeder selbst bestimmen. So haben wir dann auch das Publikum der Studentenscharr

Naja, wie auch immer. Hier mal ein Beispiel:
Wiki fragen: Johnson-Allgorithmus.
Code: Alles auswählen
Structure JA
P.s ; Bezeichnung des Autrags
M1.l ; Zeit auf Erster Stufe
M2.l ; Zeit auf Zweiter Stufe
EndStructure
Global Dim JAM.JA(1)
Global Dim SO.JA(1)
Global maxJAM.l
Procedure LoadList(F.s)
Dim A.s(2)
If ReadFile(0,F)
For i=0 To 2
A(i) = ReadString(0)
Debug A(i)
Next
CloseFile(0)
c=CountString(A(0),";")
Debug c
Redim JAM.JA(c)
For i=1 To c
JAM(i)\P=StringField(A(0),i,";")
JAM(i)\M1=Val(StringField(A(1),i,";"))
JAM(i)\M2=Val(StringField(A(2),i,";"))
Next
maxJAM=c
EndIf
EndProcedure
Procedure JAMToListGadget(Gad.l)
T.s="M1 (t in s)"
S.s="M2 (t in s)"
For i=1 To maxJAM
AddGadgetColumn(Gad,i,JAM(i)\P,30)
T+Chr(10)+Str(JAM(i)\M1)
S+Chr(10)+Str(JAM(i)\M2)
Next
;RemoveGadgetColumn(Gad,0)
Debug T
Debug S
AddGadgetItem(Gad,0,T)
AddGadgetItem(Gad,1,S)
EndProcedure
Procedure SOToListGadget(Gad.l)
T.s="M1 (t in s)"
S.s="M2 (t in s)"
For i=1 To maxJAM
AddGadgetColumn(Gad,i,SO(i)\P,30)
T+Chr(10)+Str(SO(i)\M1)
S+Chr(10)+Str(SO(i)\M2)
Next
;RemoveGadgetColumn(Gad,0)
Debug T
Debug S
AddGadgetItem(Gad,0,T)
AddGadgetItem(Gad,1,S)
EndProcedure
Procedure Johnson()
Dim JAB.JA(maxJAM)
Redim SO.JA(maxJAM)
If maxJAM>1
For i=1 To maxJAM ; Kopie erzeugen
JAB(i)\P=JAM(i)\P
JAB(i)\M1=JAM(i)\M1
JAB(i)\M2=JAM(i)\M2
Next
Q=-1
PV=0
PH=maxJAM+1
Repeat
Q+1
PX=0
P1=1
P2=1
PB=1
For i=2 To maxJAM-Q
If JAB(P1)\M1>JAB(i)\M1
P1=i
EndIf
If JAB(P2)\M2>JAB(i)\M2
P2=i
EndIf
Next
If JAB(P1)\M1<JAB(P2)\M2
PX=1
PV+1
Debug "vorn"
Else ; Wenn gleich groß egal
PX=2
PH-1
Debug "hinten"
EndIf
If PX=1
SO(PV)\P=JAB(P1)\P
SO(PV)\M1=JAB(P1)\M1
SO(PV)\M2=JAB(P1)\M2
;JAB(P1)\M1-1
PB=P1
ElseIf PX=2
SO(PH)\P=JAB(P2)\P
SO(PH)\M1=JAB(P2)\M1
SO(PH)\M2=JAB(P2)\M2
;JAB(P2)\M1-1
PB=P2
EndIf
For i=PB To maxJAM-Q-1
Swap JAB(i)\P, JAB(i+1)\P
Swap JAB(i)\M1, JAB(i+1)\M1
Swap JAB(i)\M2, JAB(i+1)\M2
Next
Until Q+1=maxJAM
EndIf
EndProcedure
If OpenWindow(0,100,100,500,600,"# Folker Linstedt : Johnson-Algorithmus #")
If CreateGadgetList(WindowID(0))
ButtonGadget(0,10,10,100,20,"Tabelle laden")
GadgetToolTip(0,"Tabelle laden")
ButtonGadget(3,120,10,100,20,"Sortieren")
GadgetToolTip(0,"Nach Johnson-Schema sortieren")
ListIconGadget(1,10,40,480,60,"Auftrag",100,#PB_ListIcon_GridLines)
ListIconGadget(2,10,120,480,60,"Aufatrag",100,#PB_ListIcon_GridLines) ;HeaderDrag ...
EndIf
Repeat
Event=WaitWindowEvent()
If Event=#PB_Event_Gadget
GadgetNr=EventGadget()
If GadgetNr=0
LoadList(OpenFileRequester("Tabelle laden","Johnson.csv","*.csv",0))
JAMToListGadget(1)
EndIf
If GadgetNr=3
Johnson()
SOToListGadget(2)
EndIf
EndIf
Until Event=#PB_Event_CloseWindow
EndIf
1;2;3;4;5;6;7;8;9;10;
5;9;7;9;4;3;5;10;6;8;
6;3;7;5;2;3;5;4;2;10;
>> Was noch anzufügen ist, wäre nun ein Gantt-Diagramm
und eine Erweiterung auch für 3 Maschinen.
Falls sich jemand mit dem Johnson-Algorithmus auskennt, bitte mal überprüfen, ob mein Programm richtig handelt.
>> Beispiele für andere Code-Schnippsel/kleinere Programme:
- Buchungssätze und T-Konten mit integriertem Rechner.
- Kostenrechnung
- Zinsrechnung, Abschreibungen ...
- Umrüstproblem
- Statistik ...
- Geometrie : Analysis, Vektoren (im Raum) ...
- Hausaufgabenheft (...

Eine Art Sammlung für Schüler, Lehrer und Studenten.
Damit vielleicht PB auch mal in Schulen zur Anwendung kommt und dort beigebracht wird.
Könnt natürlich auch gleich schreiben, dass euch diese Idee missfällt.

Hoffe jemandem hilf der CODE.
Es geht sicherlich auch mit LinkedLists. Aber immer ruhig mit den Pferden.
Oder so ähnlich.
Gruß, Folker
