Pseudocode: if-then-else (Logikfrage) - Vereinfachung
-
@SeppJ sagte in Pseudocode: if-then-else (Logikfrage) - Vereinfachung:
Da musst du aufpassen: A kann mehrmals in Liste1 vorkommen, daher musst du in jedem Fall handeln:
Ich bin davon ausgegangen, dass es keine mehrfachen Elemente gibt, aber das stimmt natürlich, dass das einen Unterscheid machen kann - je nachdem wie die Anforderungen sind. Es könnte ja auch sein, dass man für jedes
A
nur einmal etwas machen will, auch wenn es mehrmals in der Liste steht. Hier wären auf jeden Fall ein paar mehr Details hilfreich, @Fragender. Auch was das "mehrmals aufgerufen" angeht.
-
Ne, ihr trefft zu viele Annahmen, die dort nicht stehen...
Also, erstmal ist "wertvoll" eine Methode ohne Nebeneffekte, sie bestimmt einfach nur, wie wertvoll oder nicht ein Element ist.
Zweitens ist nicht nebenläufig gemeint gewesen, sondern nur, dass es mehrere Durchläufe gibt (normale Schleife).
Und zum Sinn: Ob ein Element wertvoll ist oder nicht, kann sich nach jedem Durchlauf der Schleife ändern. Sobald aber ein Element wertvoll ist oder schonmal wertvoll war, soll es in der Liste 2 sein und es soll etwas damit getan werden...
Einfach eine zusätzliche Variable einfügen, finde ich iwie "doppelt gemoppelt".
-
@Fragender sagte in Pseudocode: if-then-else (Logikfrage) - Vereinfachung:
Ne, ihr trefft zu viele Annahmen, die dort nicht stehen...
Weil du sie nicht angibst!
Also, erstmal ist "wertvoll" eine Methode ohne Nebeneffekte, sie bestimmt einfach nur, wie wertvoll oder nicht ein Element ist.
Und zum Sinn: Ob ein Element wertvoll ist oder nicht, kann sich nach jedem Durchlauf der Schleife ändern.
So so.
-
Sorry, schreibe gerade mit dem Smartphone... (etwas umständlich). Ich melde mich morgen wieder.
-
Und bzgl. zu wenigen Angaben... Es gibt das https://de.m.wikipedia.org/wiki/Principle_of_Least_Surprise (oder so ähnlich), wonach man, wenn etwas nicht eindeutig ist, die naheliegendste Annahme treffen sollte...
Zum Beispiel: Wenn die Straße nass ist, dann hat es wahrscheinlich geregnet. Unwahrscheinlich ist es hingegen, dass ein Lkw, der Flüssigkeiten geladen hatte umgekippt ist...
Also, ihr versteht schon, was ich meine.
-
Guten Morgen. Noch einmal etwas genauer (hoffe ich):
Definiere Liste1 und Liste2 ... (Liste1 enthält "alle" Elemente, Liste2 ist "zu Beginn" leer) Wiederhole alle 30 Minuten sequenziell: Für jedes A in Liste1: Wenn wertvoll(A) und A nicht in Liste2: Füge A in Liste2 ein Wenn A in Liste2: Tue etwas mit A Die Gewichtigkeit (ob ein Element wertvoll ist) wird für alle Elemente in Liste1 aktualisiert ... Es kann also sein, dass Elemente nun nicht mehr wertvoll sind, oder umgekehrt.
Wenn ihr sagt, es kann nicht weiter vereinfacht werden, auch gut...
-
@Fragender sagte in Pseudocode: if-then-else (Logikfrage) - Vereinfachung:
Und bzgl. zu wenigen Angaben... Es gibt das https://de.m.wikipedia.org/wiki/Principle_of_Least_Surprise (oder so ähnlich), wonach man, wenn etwas nicht eindeutig ist, die naheliegendste Annahme treffen sollte...
Wenn keine weiteren Informationen vorliegen ist die richtige Vorgehensweise nicht, die "naheliegendste" Annahme zu treffen, sondern gar keine und die allgemeinste Lösung zu finden. D.h. @SeppJ hats hier besser gemacht, da seine Lösung mehr mögliche Listen (eben auch die mit mehrfachen Elementen) äquivalent zum ursprünglichen Code bearbeitet.
Guten Morgen. Noch einmal etwas genauer (hoffe ich):
Ich denke die Lösung von @SeppJ ist hier ganz gut. Einfach das Ergebnis der (potentiell teueren) Abfrage in einer Variable zwischenspeichern, so dass man sie nur einmal machen muss. Man muss dann "etwas mit
A
tun", wenn es vorher in der Liste war oder wenn man es eingefügt hat.Ansonsten würde ich persönlich immer noch 2 Schleifen bevorzugen. Eine "Update"-Schleife über
Liste1
, welcheListe2
aktualisiert und anschliessend eine Schleife überListe2
die "etwas mit den Elementen tut". Da spart man sich nämlich auch die zweite Prüfung, obA
inListe2
ist, da man ja über eben diese Liste iteriert und die Bedingung folglich für alle Elemente gilt.
-
Danke @Finnegan !
Also, zwei Schleifen und nicht in-situ vorgehen/bearbeiten.
-
@Fragender sagte in Pseudocode: if-then-else (Logikfrage) - Vereinfachung:
Danke @Finnegan !
Also, zwei Schleifen und nicht in-situ vorgehen/bearbeiten.
Überleg auch, ob du
Liste2
tatsächlich brauchst. Wenn du z.B. nur etwas mit Elementen machen willst, die aktuell wertvoll sind - und nicht auch mit denen, die in der Vergangenheit wertvoll waren - dann kann man es sich vielleicht sparen die zweite Liste überhaupt zu konstruieren. Nicht dass du da noch ein insert/delete-Overengineering machst, wenn am Ende lediglich sowas hier reichen würde:Für jedes A in Liste1: Wenn wertvoll(A): Tue etwas mit A
-
@Fragender sagte in Pseudocode: if-then-else (Logikfrage) - Vereinfachung:
Sobald aber ein Element wertvoll ist oder schonmal wertvoll war, soll es in der Liste 2 sein und es soll etwas damit getan werden
Hab ich zwar am Handy getippelt, aber ist deshalb nicht weniger richtig
-
@Fragender Dann müsstest du die Elemente aber auch aus Liste1 wieder entfernen, oder?
Definiere Liste1 und Liste2 ... (Liste1 enthält "alle" Elemente, Liste2 ist "zu Beginn" leer) Wiederhole alle 30 Minuten sequenziell: Für jedes A in Liste1: Wenn wertvoll(A): Entferne A aus Liste1 Füge A in Liste2 ein Für jedes A in Liste2: Tue etwas mit A Die Gewichtigkeit (ob ein Element wertvoll ist) wird für alle Elemente in Liste1 aktualisiert ... Es kann also sein, dass Elemente nun nicht mehr wertvoll sind, oder umgekehrt.
Da ein Element für immer in Liste 2 bleibt, bringt es ja nichts jedes mal aufs neue wertvoll zu überprüfen. (Edit 2: Außerdem musst du auch weniger Gewichte dann anpassen)
Edit: Sehe grade, das hat Finnegan auch schon weiter oben geschrieben
-
Diese Frage hat einen Bezug zu: https://www.c-plusplus.net/forum/topic/354198/multi-charts-wie-mit-0-werten-umgehen/2
Einmal wertvoll gewesene Elemente sollen für immer in der Liste 2 bleiben ... in Liste 2 sollen aber keine Elemente doppelt vorkommen.
-
@Fragender sagte in Pseudocode: if-then-else (Logikfrage) - Vereinfachung:
Diese Frage hat einen Bezug zu: https://www.c-plusplus.net/forum/topic/354198/multi-charts-wie-mit-0-werten-umgehen/2
Einmal wertvoll gewesene Elemente sollen für immer in der Liste 2 bleiben ... in Liste 2 sollen aber keine Elemente doppelt vorkommen.
Ja, dann passt doch, was ich bzw. Finnegan vor mir geschrieben hat. Wenn du die Elemente schrittweise von Liste1 in Liste2 überträgst, hast du beide Sachen erfüllt. Vorausgesetzt Liste1 enthält keine Duplikate ... das war jetzt mal meine annahme
-
@Leon0402 sagte in Pseudocode: if-then-else (Logikfrage) - Vereinfachung:
Vorausgesetzt Liste1 enthält keine Duplikate ... das war jetzt mal meine annahme
Das trifft zu.
OK, Thema