Gast
#5387062
Hallo Leute, Ich habe folgendes Programm am laufen, welches auch funktioniert:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Nun wollte ich das optimieren:
1 | |
2 | |
3 | |
4 | |
5 | |
Aber warum funktioniert das nicht?????
|
Anzeige
|
Warum funktioniert dieses Zählerprogramm nicht?
Gast
#5387062
Hallo Leute, Ich habe folgendes Programm am laufen, welches auch funktioniert:
Nun wollte ich das optimieren:
Aber warum funktioniert das nicht?????
Beitrag #5387066 wurde von einem Moderator gelöscht.
Gast
#5387070
du musst in deiner if-Abfrage auch vergleichen und darfst keine werte setzen was ist denn das für eine Sprache? Was funktioniert denn nicht?
Gast
#5387074
Mikrobasic
Gast
#5387094
Ich umschreibe es mal universell: Wenn der Eingang eins ist und der Merkerflag null ist, dann Erhöhe den Wert Sonst Ist der Merkerflag gleich wie der Eingang
Gast
#5387116
Im zweiten Beispiel wird Flowhelper niemals 1. Gruß
Gast
#5387118
if (Flow1 == 1)... 2x == verwenden!
Gast
#5387127
Johannes hat deine intenzijon sicherlich erkannt. ;) er wollte sicher auf die beiden zu setzenden gleichheitszeichen hinweisen
https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/if-then-else-statement#example-1 in Basic scheint das aber mit einem Gleichheitszeichen völlig okay zu sein.
Gast
#5387164
Starlord schrieb: > if (Flow1 == 1)... > > 2x == verwenden! In BASIC?
Gast
#5387258
WarumNur schrieb: > If ((Flow1 = 1) and (Flow1Helper = 0)) then > inc(Flow1Counter) > else Es heißt: incr nicht inc
Gast
#5387259
Nachtrag: Jedenfalls in anderen Basic-Dialekten. Und die Klammern danach kann man normalerweise auch sparen. LCD schrieb: > Es heißt: > incr > nicht inc Doch! In MBasic heißt es inc(), genauso wie der Assembler-Befehl inc. Gruß J.R.
Gast
#5387539
Wenn du einfach du positiven Flanken an Flow1 zählen willst:
Gast
#5387567
Früher hat man print in den Code eingefügt, und dann selbst mal geschaut, was die Variablen machen. Dafür ist das Programm wohl schon zu groß. WarumNur schrieb: > Nun wollte ich das optimieren: In Anlehnung an den bekannten Spruch mit der übriggebliebenen Gemüsesuppe und dem saftigen Rindersteak: Ein Basic-Programm optimiert man am besten dadurch, indem man es durch ein hübsches C- oder Assembler-Programm ersetzt.
Gast
#5387580
Markus F. schrieb: > Ein Basic-Programm optimiert man am besten dadurch, indem man es durch > ein hübsches C- oder Assembler-Programm ersetzt. Das läst mich vermuten, das du keine andere höhere Programmiersprache kennst.
Gast
#5387620
Entschuldigung, C und Assembler sind zwar gut aber ganz sicher nicht "schön".
Gast
#5387621
WarumNur schrieb: > Aber warum funktioniert das nicht?????
Flow-Helper = 1 aus dem IF-Zweig wegoptimiert :-)
bleibt im "optimierten" Fall auf 0, wenn inkrementiert
wird
Gast
#5387626
Markus F. schrieb: > WarumNur schrieb: >> Nun wollte ich das optimieren: > > In Anlehnung an den bekannten Spruch mit der übriggebliebenen > Gemüsesuppe und dem saftigen Rindersteak: > > Ein Basic-Programm optimiert man am besten dadurch, indem man es durch > ein hübsches C- oder Assembler-Programm ersetzt. Naja so eine Abfrage sollte Basic schon noch können. Aber inc ist mir in Basic auch noch nicht unter gekommen. Vielelicht hilft es ja Flowcounter=Flowcounter+1 zu schreiben.
Gast
#5387636
Debugger starten und schauen wo es hackt.
Gast
#5387647
Ralf schrieb: > Debugger starten und schauen wo es hackt. Wo soll da eine Hacke sein? WarumNur schrieb: > If ((Flow1 = 1) and (Flow1Helper = 0)) then > Flow1Counter = Flow1Counter + 1 > Flow1Helper = 1 > end if > > If ((Flow1 = 0) and (Flow1Helper = 1)) then > Flow1Helper = 0 > end if ist eben nicht das selbe wie > If ((Flow1 = 1) and (Flow1Helper = 0)) then > inc(Flow1Counter) > else > Flow1Helper = Flow1 > end if Der else-Zweig deckt alle Fälle ab, die nicht der if-Bedingung entspricht. Das sind in deinem Fall: ((Flow1 = 1) and (Flow1Helper = 1)) ((Flow1 = 0) and (Flow1Helper = 0)) ((Flow1 = 0) and (Flow1Helper = 1)) du willst aber nur bei ((Flow1 = 0) and (Flow1Helper = 1)) die zweite Anweisung ausführen. Du siehst den Unterschied? Gruß Reinhard Andy schrieb: > Wenn du einfach du positiven Flanken an Flow1 zählen willst: ... Richtig, so und nur so wird das gemacht: eine Speichervariable merkt sich den alten Wert des Eingangs, damit dieser im Programmablauf mit dem aktuellen Wert verglichen werden kann. Und nach diesem Vergeleich wird der aktuelle Wert für den nächsten Durchlauf als alten Wert, und das Spiel beginnt von vorn. Diese Vorgehensweise ist vollkommen unabhängig von der Programmiersprache (über die übrigens nur die streiten, die nur eine oder zwei kennen und können). WarumNur schrieb: > Ich habe folgendes Programm am laufen, welches auch funktioniert Reduzieren wir das Programm einfach mal und nehmen die Steigende-Flanken-Zählergeschichte aus der Merker-Geschichte heraus, dann sieht der exakt funktionsgleiche Code vom ersten Post so aus:
Weil Flow1Helper eh' nur 1 oder 0 sein kann, könnte man das auch so schreiben (darüber einfach mal eine Minute ausgiebig nachdenken):
Und damit kann man es auch so schreiben:
q.e.d. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|