Autor Beitrag
jakra0007
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 05.10.08 14:00 
Hallo,
mein letztes Programm was ich geschrieben habe ist leider schon ein bischen her.
Bitte deshalb um Hilfe bei diesen einfachen Programm. Das sollte so aussehen.

Es gibt eine Datenbank wo Tätigkeiten drinn stehen und in einer zweiten Spalte die dafür vorgesehende Zeit.
Hier ein Beispiel:

Scheinwerfer ersetzt 1,2 Stunden
Inspektion 2,5 Stunden
Ruhestrommessung 3,4 Stunden
usw. usw.


So die eigentliche Programmebene sollte so aussehen. Habe mal die Datei als Bild hochgeladen. Am besten den Zoom auf
50 Prozent stellen.
www.bilder-space.de/...=goRNzz8bmpa03Yf.jpg

Es gibt zwei Eingabefelder das eine einmal der Wochentag und das andere die gearbeitete Zeit.
Das Ausgabefeld dort sollen dann die Tätigkeiten stehen.

Die Funktion des Programmes soll sein das ich sage mal 6.5 Stunden gearbeitet habe und er mir Tätigkeiten
nach dem Zufallsprinzip raussucht die zusammen 6,5 Stunden ergeben.
Hier nochmal als Zeichnung
www.bilder-space.de/...=FJu9iijOojazyHc.jpg


Ist dies in Delphi umzusetzen?
Bitte um Hilfe


Moderiert von user profile iconNarses: Topic aus Algorithmen, Optimierung und Assembler verschoben am So 05.10.2008 um 22:56
platzwart
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: So 05.10.08 14:08 
wo genau ist nun das problem?


und was ist das für ein programm? um arbeitsberichte zugenerieren? *g*
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.10.08 14:09 
Hallo und :welcome:
Die Frage ist, wo eigentlich dabei dein Problem ist?
Oberfläche? Algorithmus (wie ja die Sparte impliziert)? Datenzugriff? ...
Die Muhkuh
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 05.10.08 15:06 
jakra0007 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 05.10.08 15:28 
mein Problem ist den Zufall zu programmieren also so das der immer entsprechend der Zeit z.B habe 6,5 Stunden gewählt. Die Tätigkeiten aussucht. Und halt wie ich den Bezug auf die Tabelle bekomme. In welchen Programm lege ich die Tabelle am besten an?
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 05.10.08 15:53 
Hi,

Wäre es nicht praktischer, wenn du eine Liste mit zu erledigenden Aufgaben, Dringlichkeitsstufe("bis Mittwoch") und, ob die Arbeit an einem Stück erledigt werden muss, hast(Es kann ja auch etwas an einem tag begonnen un am nächsten fortgesetzt werden)?

Ein solches Programm würde ja gerade dann Vorteile haben, wenn die Arbeit so eingeteilt werden muss, dass alles möglichst früh vor Frist fertig ist.

ausblenden Mein Entwurf also:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
type
  TToDo = record
    Betrifft: String[255];  //Name(n) der betroffene(n) Mitarbeiter(in -en)
      //verknüpfbar mit "AND"(Teamwork), "OR"(alleine oder mit Hilfe(-> 2 Mitarbeiter -> Doppelte Geschwindigkeit)), "XOR"(nur einzeln möglich)
      //eventuell Schlüsselwörter wie "Team1", "Werkbank" definierbar machen zur schnellen Eingabe
    Name, Kommentare: String[255];
    Bis: TDateTime;
    AneinemStück: Boolean;  //bzw. "Aufteilbar", "Lückenfüllerarbeit"
    //und eventuell noch Material(könnte ja von anderen Blockiert sein)
  end;
  TWorkList = File of TToDo;  //Typisierte Datei


In welcher Sprache willst du das eigentlich schreiben?

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
jakra0007 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 05.10.08 15:59 
also eigentlich dauern die Aufgaben nie in den nächsten Tag.
Wie gesagt das ist immer nur kleine Stunden Anzahl und er soll sich halt per Zufall Aufgaben aus einer Tabelle raussuchen die zusammen z.B 6,5 Stunden dauern. Am besten in Delphi. Muss mich da erstmal wieder reinfinden. Hatte das letzte mal was vor einem Jahr gemacht.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 05.10.08 16:15 
Hi,

Zufall in Delphi: Suche in der Entwickler-Ecke RANDOM(), Suche in der Entwickler-Ecke RANDOMIZE() + F1

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
LexXis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 170
Erhaltene Danke: 3



BeitragVerfasst: So 05.10.08 17:48 
[OT]
Wäre es nicht sinnvoller einfach aufzuschreiben was du so an einem Tag alles gemacht hast, statt dir zufällig irgendwelche Tätigkeiten zusammen zu stellen? ;) IMHO ist das der Zweck eines Berichtsheftes :mrgreen:
[/OT]
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.10.08 17:54 
[OT Antwort :mrgreen:]
Vielleicht hat er ja nix gemacht :mrgreen: :P
[/OT]
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 05.10.08 18:22 
Lass dich mal nicht entmutigen von dem OT ;) Wäre allerdings schön, wenn du etwas längere Antworten geben könntest. Erfahrungsgemäß müssen wir hier sonst immer raten :zwinker:

E: :autsch: schon wieder Hinweis im falschen Thread geschrieben :autsch:

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)


Zuletzt bearbeitet von Hidden am Mo 06.10.08 18:32, insgesamt 1-mal bearbeitet
jakra0007 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 06.10.08 10:48 
ich hätte jetzt auch gedacht mit dem Random befehl. Aber das Problem ist ja das er immer verschiedene Tätigkeiten auswählen soll die Zusammen 6,5 STunden geben. Wie bringt man das denn in einem Random Befehl unter?
Hmm ich überlege gerade wie ich das am besten beschreiben soll, wie das Programm funktionieren soll.
Eigentlich war das schon so wie ich gesagt habe. Es soll einfach ein zufall generiert werden, der Tätigkeiten aussucht die Zusammen 6,5 Stunden ergeben bzw. halt die Anzahl von STunden die man oben eingibt.

Also sagen wir mal ich gebe oben 6,5 Stunden ein. Dann soll er mir per Zufall eine Tätigkeitenliste ausgeben die Zusammen 6,5 Stunden ergibt. Wie hier im Beispiel. Und diese Tätigkeiten soll er sich aus einer Tabelle holen und halt immer verschiedene also per Zufall

Generierte Tätigkeiten:
Inspektion 2,5
Ölwechsel 1,5
Neuwagenübergabe 2,5




Tabelle:
Inspektion 2,5
Ölwechsel 1,5
Neuwagenübergabe 2,5
Scheinwerfer ersetzt 2,0
Reifen gewechselt 1,0
Reifen ersetzt 1,5
Kotflügel ersetzt 1,0
Licht eingestellt 0,5




Und wenn ich das nächste mal auf generieren gehe das er mir per Zufall halt wieder für 6,5 Stunden Tätigkeiten aussucht
Inspektion 2,5
Reifen gewechselt 1,0
Reifen ersetzt 1,5
Kotflügel ersetzt 1,0
Licht eingestellt 0,5



Und die Tätigkeiten sind halt immer die selben also die Tabelle bleibt immer gleich und die Zeiten sind auch die selben also feste Variabeln. Er soll halt so viele Variablen auflisten die zusammen 6,5 Stunden ergeben und das halt im Zufalls Prinzip also mit Random. Und das weiß ich nicht wie das geht. Wie man halt in Random einbaut das er ausrechnet welche Tätigkeiten zusammmen 6,5 Stunden ergeben?
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Mo 06.10.08 11:36 
Du könntest das ganze iterativ machen.

Als erstes gibst du die Zeit ein (6,5 Std.).

Dann suchst du alle Sachen raus, die weniger als 6,5 Std dauern: SELECT * FROM Taetigkeiten WHERE Dauer <= 6.5

Das Ergebnis holst du dir ein ein Array/eine Liste und suchst dir per Liste[Rnd(Liste.Count-1)+1] einen der Einträge raus.
Die Dauer ziehst du dann von 6.5 ab (z.B. 2.0: 6.5 - 2.0 = 4.5) und gehst dann mit der Restzeit wieder in die Tabelle: SELECT * FROM Taetigkeiten WHERE Dauer <= 4.5.

Das machst du so lange, bis du zum Schluss noch genau 0 Std übrig hast. Solltest du nicht auf 0 Std. kommen, weil du z.B. nur noch 0.5 Std übrig hast, aber keine Tätigkeit, die 0.5 Std. dauert, dann musst du den letzten Vorgang rausnehmen und es erneut versuchen, etc.
Jerk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 251

Vista Ultimate, Ubuntu
Turbo Delphi 2006
BeitragVerfasst: Mo 06.10.08 13:03 
Wenn die Tätigkeiten nich grade in die Hunderte gehen denke ich, braucht er keine Datenbank. Man könnte das dann fast im Programm oder ner Textdatei unterbgringen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
 Type TTaetigkeit = Record
  Name : String;
  Time : Integer;
 End;

var Taetigkeiten : Array of TTaetigkeit;


...
 SetLength(Taetigkeiten, 3);
 Taetigkeiten[0].Name := 'Schlafen';
 Taetigkeiten[0].Time := 3;

 Taetigkeiten[1].Name := 'Faullenzen';
 Taetigkeiten[1].Time := 2;

 Taetigkeiten[2].Name := 'Pause';
 Taetigkeiten[2].Time := 1;
jakra0007 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 06.10.08 17:12 
ne das sind keine Hundert Tätigkeiten maximal 20-30 würde ich mal sagen. Und wenn ich die Tätigkeiten im Programm mit unterbringe wie verbinde ich das dann mit Random?
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 06.10.08 18:08 
Hi,

Es gibt zwei Möglichkeiten: Das, was du hier beschrieben hast ist *hust* komisch: Du erzeugst so lange zufällige Tätigkeitenlisten, bis eine genau den Zeitrahmen erfüllt.

Sauber: Rekursiv(Der Begriff sagt dir doch was?^^ sonst such mal bitte gerade :)). Mit jeder Rekursion hängst du einmal jede mögliche Tätigkeit an, bis die Vollzeit erreicht ist.

Dann listest du alle Rückgaben, die gleich nahe und am nächsten dran sind, und wählst unter diesen zufällig(bzw. gibst ein paar aus, damit gewählt werden kann).

Vorher noch Umstellungen finden(Permutationen(war sonst nicht eindeutig, was ich meinte)), damit du wirklich objektiv gleichwahrscheinlichen Zufall hast. Lässt du das hier weg, gibt es für längere Listen mehr Umstellungen(Varianten) und längere Listen werden ungewollt wahrscheinlicher.

Wenn du die Elemente gefunden hast, unter denen du zufällig wählen willst, geht das so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function GetRandomElement(Arr: Array of TTaetigkeit): TTaetigkeit;
begin
  result := Arr[Random(Length(Arr))];  //vorher unbedingt Randomize im FormCreate. Sonst hast du immer die selben Zufallszahlen ;)
end;


mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
jakra0007 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 06.10.08 18:36 
so werde das jetzt erstmal ausprobieren und wenn ich dann noch schwirigkeiten bei der Umsetzung habe Poste ich nochmal. Wovon ich mal ausgehen werde^^