Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
So, da ich leider nicht mehr in der Arbeit bin, habe ich nur noch eine alte Version von meinem Programm gefunden.
Im Grunde macht es dasselbe wie die neue Version, nur das ich die While-Schleifen durch eine For-Schleife ersetzt hab und jetzt für jeden Case von 2-71 alle Zahlen logge, bei dieser Version schreibt er nur 9999 rein, wenn mehr als 10 Positionen nicht gelesen werden konnten...
Im Grunde habe ich nur unterschieden, ob nach oben oder unten gezählt wird, der Rest in den Cases sind die Anzahl der zu loggenden Werte!
Das 2. File ist die V-Abfrage... hab ich als SubVi auch eingebaut.
Beide Files sowohl im 8.2er als auch im 8.0er Format (versteh sowieso nicht warum ich mit 8.2 nicht auch auf 7.1 oder andere Versionen downgraden kann...)
Lg,
Tommy
04.04.2007, 20:25 (Dieser Beitrag wurde zuletzt bearbeitet: 04.04.2007 20:33 von eg.)
Also wenn es gerade um etwas ähnliches wie Winkeloperationen geht. Ich hatte mal eine Aufgabe, in der ich Winkeldifferenz ausrechnen und mit einem Kompaß anzeigen sollte. Da er aber nur die Winkel zwischen 0 und 360 anzeigen kann und die Differenz diesen Bereich überschreiten kann, sollte ich das Ergebnis erstmal normieren. D.h. ich habe in einer While-Schleife vom Ergebnis solange 360 abgezogen, bis mein Ergebnis zwischen 0 und 360 lag. Und auch andersrum, wenn mein Ergebnis kleiner 0 war habe ich 360 solange dazuaddiert, bis ich die Zahl zwischen 0 und 360 hatte.
Wäre das ein Lösungsansatz für dich?
Was mir erstens auffällt: Du benutzt ganz grausam globale und lokale Variablen.
Du beschreibst und liest die Variablen mehrfach in deinem Programm. Das Problem daran ist, dass du keine zeitliche Synchronisation hast. Das kann sehr schnell zu Problemen führen.
- Deine Arrayvariable hast du doch schon in die Schleifen hineingezogen. Da brauchst du die lok. Variablen ja nicht mehr.
- Die glob. Variable würde ich mit einem Event "Value change" abgreifen. Da steht dir der alte und neue Wert zur Verfügung und dein Programm arbeitet nur, wenn auch wirklich sich was ändert.
Um dein Problem zu lösen sollte meine Lösung von oben funktionieren. Einfach aus Zahl1 und Zahl2 deinen alten, neuen Wert der glob. Variable nehmen. Der Array am Ende beeinhaltet dann die fehlenden Zahlen.
Probiers mal aus, sonst überarbeite ich es dir morgen, wenn ich auf der Arbeit bin und mein Vi zur Hand habe.
Gute Nacht, Gruß
A few weeks of developement and testing can save a WHOLE afternoon in the library!
05.04.2007, 08:12 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2007 08:22 von Lucki.)
' schrieb:Kann ich einer numerischen Eingabe irgendwie verdeutlichen, dass es keine Zahlen größer (bsp.) 100 und keine Zahlen kleiner 0 gibt?
Ich meine jetzt nicht eine Minimal- und Maximalwert angabe, sondern eine Art Kreislauf wie bei der Gradangabe in einem Kreis, sprich:
0, 1, 2, ..., 99, 100, 0, 1, ..., usw.
Ja, genau das gibt es, allerdings habe ich es mehr durch Zufall entdeckt, ich weiß nicht, ob das irgendwo beschrieben ist. Wenn Du bei einer Enum-Type die "+1"-Funktion anwendest und der aktuelle Wert war der höchste Wert, dann kommt es nicht etwa zu einer Fehlermeldung, sondern das Ergebnis ist das erste Element. Entsprechend funktioniert es auch mit der Dekrement-Funktion.
Wenn Du nicht 1, sondern z.B. 13 addieren willst, dann würde ich das so machen, das ich die 13 an das N einer For-Schleife anschließe, in der sich das Inkrement-Element an einem Schieberegister befindet. Verständlich?
Habe jetzt nicht viel Zeit, mach doch bitte mal selbst eine kleine Demo, wie das schön funktioniert , und poste uns das mal - dann muß ich es nicht machen.
Die Namen der Enum-Elemente kannst Du ja einfach nach dem entsprechendem Zahlenwert benennen. Tip: Mit Shift-Return geht das Erstellen der Elemente ganz schnell.
Oh ja, bitte entschuldige, aber in diesem Wust von komplizierten Vorschlägen und Beispielen geht Dein einzeiliger Beitrag, auch wenn er die ultimative Antwort ist, ja glatt unter....
Edit: Meine allgemeinen Vorwürfe wegen komplizierter Vorschläge nehme ich zurück, den Preis für die ultimativ beste Antwort gebe ich hiermit Jens. Allerdings hätte er seinen Vorschlag mit einem Beispiel noch besser "rüberbringen" können, und so hole ich das hiermit nach:
Es funktioniert auch bei negativen Werten einwandfrei, was noch meinen Erfahrungen in manchen Programmiersprachen bei der Modulo-Funktion nicht immer der Fall ist.
Das ganze ist aber nur ein Teil der Lösung, so wie ich das sehe.
Wenn ich Tommy richtig verstehe will er alle Zahlen zwischen 2 Werten sich ausgeben lassen.
Das Problem liegt dann bei einem Sprung in der Gradangabe. Z.B.: Werte zwischen 355 und 2: 356,357,358,359,0,1.
Da nutzt eure Lösung alleine noch nichts, weil er zuerst bestimmen muss, dass zwischen 355 und 2 nur 6 Werte liegen und nicht 353.
Aber die Modulofunktion hilft natürlich trotzdem beträchtlich. Ich wusste nicht, dass sie auch bei negativen Werten so gut geht. Habe nun meine Lösung entsprechend angepasst.
A few weeks of developement and testing can save a WHOLE afternoon in the library!
05.04.2007, 19:25 (Dieser Beitrag wurde zuletzt bearbeitet: 05.04.2007 19:26 von Lucki.)
' schrieb:Wenn ich Tommy richtig verstehe will er alle Zahlen zwischen 2 Werten sich ausgeben lassen
Wenn ich mir Tommys ersten Beitrag lese, dann verstehe ich das nicht so, sondern so: Die Zahlen 0..100 sind gleichmäßig auf einem auf einem Ring angeordnet, und bei Rechenoperationen wie z.B Addition um 40, bewegt man sich um 40 Werte entlang dieses Kreises, so daß man also bei 80 + 40 auf der 20 landet. Also ich denke, er will nur eine Zahl als Ergebnis und nicht ein ganzes Array.
Aber was ich noch sagen wollte:
Für eine optimale Lösung muß als Erstes gefragt werden, ob es hier um ganze Zahlen handelt oder nicht. Bei ganzen Zahlen ist es mit der Modulo-Funktion ganz einfach. Wenn es sich aber z.B um Winkelgrade handelt, dann sollte man von rellen Zahlen ausgehen, und dann ist man mit der Lösung, wie sie Eugen genannt hat, auf dem richtigem Weg. Dasselbe geht allerdings auch ohne while-Schleife:
Also, es geht um ganze Zahlen und zwar um Werte zwischen 0 und 71.
Außerdem brauche ich, wie Kvasir richtig erkannt hat, alle Werte zwischen den beiden Zahlen, also wenn er von 68 auf 2 hüpft, dann soll er 69, 70, 71, 0 und 1 in das Array schreiben!
Bin leider noch nicht dazu gekommen, das Problem mit dem Sprung von 71 auf 0 anzugehen...ich habe aber eine neue Version von meinem Programm. Das main-Programm ruft alle anderen auf!