Hallo,
ich möchte eine Logik programmieren, die aus einem Datenstrom mit Messwerten die beiden kleinsten Werte speichert.
Wenn der kleinste Messwert zwei mal im Datenstrom kommt, dann sollen beide Speicher diesen Wert erhalten:
Nimm einen Debugger und guck es dir an, indem du alle möglichen Fälle durchspielst.
Zwei Vergleichsoperationen sollte reichen: Vergleich des neuen Wertes mit Min2 und danach Vergleich Min2 mit Min1.
Wenn man sich seine Wünsche und Anforderungen in reiner Textform
aufschreibt ...
Ja, nee. Die Textaufgabe muss man dann als erstes wieder als übersichtliche logische Struktur darstellen, z.B. in Form eines Nassi-Shneiderman-Diagramms.
Dort sieht man relativ klar, ob man alle Fälle abgedeckt hat und kann das dann ziemlich direkt in Programmcode umsetzen. Bevor man sich an den eigentlichen Programmcode macht, sollte man die Testszenarien klar formulieren, so dass man vollständige Tests für den Code vorliegen hat, bevor die erste Programmzeile für das eigentliche Programm im Editor landet.
z.B. in Form eines
Nassi-Shneiderman-Diagramms.
Dort sieht man relativ klar, ob man alle Fälle abgedeckt hat und kann
das dann ziemlich direkt in Programmcode umsetzen.
Finde ich gut.
Insbesondere für so komplexe Aufgaben wie die Ermittlung zweier MIN Werte. ;-)
Insbesondere für so komplexe Aufgaben wie die Ermittlung zweier MIN
Werte. ;-)
Wenn ich den Umfang des oben gezeigten Programmcodes sehe, sind solche grundlegenden Überlegungen, egal wie einfach das Problem ist, hier nicht fehl am Platz und offenbaren dann schnell mögliche Vereinfachungen.
In anderen Worten: Deine Lösung ist falsch und zu komplex. Zudem in einer unbekannten Pseudosprache, die vielleicht Sinn macht, in z.B. C aber nicht. Pseudocode ist zwar OK, aber x[i] sollte die Bedeutung eines Arrays haben, während spezielle Werte z.B. x_min heißen sollten.
Der übliche Weg wäre für mich: Ein Papier und ein paar Kritzeleien. Je weniger vertraut Du damit bist, umso mehr echte Worte/Gleichungen/Pseudocode sind notwendig.
Aber bei 200 MHz Prozessor und 2 MB Flash, 50 us Zykluszeit...........
was solls....
Welche Bedeutung solche Optimierung im Algorithmus hat, hängt immer davon ab, ob die Optimierung im Compiler solchen redundanten Code noch erkennen und rausschmeißen kann und welchen Anteil der Code an der Prozessorauslastung trägt. Wenn der zu 99% mit leeren Schleifen beschäftigt ist, spielt es natürlich keine Rolle. Dann ist es nur schade um die vergeudeten Resourcen.
Die Struktur deines Codes mit dem doppelten Ausgang aus der Funktion lässt diese Doppelabfrage sowieso nicht erkennen. Besser lesbar wäre, wenn die zweite Abfrage im else-Zweig der ersten stände und das 'return' nicht mitten drin.