Problem mit Variablen

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Phil
Beiträge: 53
Registriert: 23 Jan 2013, 20:25

Problem mit Variablen

Beitrag von Phil » 28 Mär 2013, 15:33

Hallo zusammen :)

ich stehe gerade total verzweifelt vor einem Problem: Am Flipper, den ich zur Zeit baue, kann man sehr hohe Punkte bekommen, so im Millionenbereich. Da die Werte in den Variablen in RoboPro aber nicht größer als 32767 sein können, habe ich jeder Stelle eine Variable zugeordent.

Jetzt brauche ich ein Programm, das, wenn z. B. die 10er-Variable größer als 10 ist, der 100er-Variable 1 hinzufügt und dann der 10er-Variable die 10 abzieht.

Wenn ich im Programm mit einer Verzweigung darauf warte, dass die 10er-Variable größer ist als 10, ihr dann 10 abziehe und der 100er-Variable 1 addiere, führt das dazu, dass der 100er-Variable 2 addiert werden. Mit einem Vergleichselement erhalte ich das gleiche Ergebnis. Wie kann ich das Programm so machen, dass es wie oben beschrieben läuft?

Ich hoffe, ihr versteht, was ich meine und könnt mir helfen... :)

Gruß
Phil ;)

Zwergnase
Beiträge: 161
Registriert: 01 Nov 2010, 19:45
Wohnort: Düsseldorf
Kontaktdaten:

Re: Problem mit Variablen

Beitrag von Zwergnase » 28 Mär 2013, 16:18

Hallo,
Könntest du ein Screenshot von der Problemstelle in deinem Programm machen und hochladen?
Mit Freundlichen Grüßen:
Manuel Neumann

Zwergnase
Beiträge: 161
Registriert: 01 Nov 2010, 19:45
Wohnort: Düsseldorf
Kontaktdaten:

Re: Problem mit Variablen

Beitrag von Zwergnase » 28 Mär 2013, 16:48

Hallo
Ich habe mal versucht so einen Zähler zu Programmieren.
Bild
Mit Freundlichen Grüßen:
Manuel Neumann

Max Z.
Beiträge: 53
Registriert: 01 Jan 2012, 12:36

Re: Problem mit Variablen

Beitrag von Max Z. » 28 Mär 2013, 17:02

Hallo!
Der Screenshot wäre nützlich. Aber versuch schon mal dies hier, vielleicht hilft es schon:
1. Anstelle der Verzweigung "Falls grösser als 10" würde ich "Falls =10" nehmen.
2. Anstelle eines "-10" Befehls, nimm lieber einen "=0" Befehl. So bist du sicher dass die Variable wieder auf Null steht.
So gehst du folgendem Problemaus dem Weg: Wenn das Programm läuft und die 10er Variable erreicht den Wert "10", passiert noch nichts! Erst wenn die 10er Variable den Wert "11" erreicht wird "10" abgezogen. Dadurch steht sie nicht wieder auf "0" sondern auf "1".

Ich weiss nicht wie dein Program genau aufgebaut ist, aber vielleicht behebt dies dein Problem schon: Nachdem die 10er Variable den Wert "10" erreicht hat, wird der 100er Variable 1 hinzugefügt. Dann setzt du die 10er Variable auf Null und direkt dahinter setzt du ein "Warten auf 0" Element. So gehst du sicher dass das Programm erst fortfährt wenn die Variable auch wirklich auf "0" steht. Das mag vielleicht etwas absurd klingen, aber ich hatte scho so ähnliche Probleme, dass ein Programm schneller als eine Variable war und das Programm eben auf das Eintreten der Veränderung der Variable "warten" musste.

EDIT: Zwergnase hat bereits die meissten meiner Vorschläge umgesetzt. Versuch sein Programm mal.

LG
Max Z.

Phil
Beiträge: 53
Registriert: 23 Jan 2013, 20:25

Re: Problem mit Variablen

Beitrag von Phil » 28 Mär 2013, 17:56

Hallo,

ich habe nach dem Ausprobieren von Zwergnase's Programm meinen peinlichen Fehler gefunden: Dieses Programm befindet sich in einem Unterprogramm - und das hatte ich doppelt :oops: kein Wunder, dass das Programm 2 addiert... :oops:

Zwergnase's Programm ist aber nur ein reiner Zähler, das heißt, man kann z. B. die 100er-Variable größer 10 machen, ohne dass sie wieder auf 0 gesetzt wird.
Max Z. hat geschrieben:2. Anstelle eines "-10" Befehls, nimm lieber einen "=0" Befehl. So bist du sicher dass die Variable wieder auf Null steht.
Klar, dass die Variable auf 0 steht, aber dann gehen Punkte verloren: wenn man z. B. 9 Mio. hat und 3 Mio. gewertet werden (2 Mio. in diesem Fall)

Der aktuelle Programmablauf ist jetzt so:
- Warten bis 10er-Variable größer oder gleich 10 ist
- der 10er-Variable 10 abziehen
- der 100er-Variable 1 addieren
- und wieder warten.

Gruß
Phil

PS: bitte entschuldigt meinen Fehler :oops:

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: Problem mit Variablen

Beitrag von funmca » 28 Mär 2013, 19:05

HI !

Warum arbeitest Du nicht einfach mit Kommazahlen und zählst immer nur 0,000001 z.B. hinzu ? dann sparst Du Dir doch viel Arbeit.

1000001 oder 1,000001

Gruß Marco.
;-)

Max Z.
Beiträge: 53
Registriert: 01 Jan 2012, 12:36

Re: Problem mit Variablen

Beitrag von Max Z. » 28 Mär 2013, 23:10

Phil hat geschrieben:
Max Z. hat geschrieben:2. Anstelle eines "-10" Befehls, nimm lieber einen "=0" Befehl. So bist du sicher dass die Variable wieder auf Null steht.
Klar, dass die Variable auf 0 steht, aber dann gehen Punkte verloren: wenn man z. B. 9 Mio. hat und 3 Mio. gewertet werden (2 Mio. in diesem Fall)
Ups... Wie blöd! Hab bisschen gebraucht um zu verstehen... Aber stimmt, wenn du mehr als jeweils ein Punkt hinzu zählst stimmt das. Ich hatte im Sinne eines Zählers überlegt, wo also immer nur 1 hinzu kommt.

@funmca: Natürlich! (Warum bin ich nicht selbst drauf gekommen...?) Aber wenn wir von Millionen reden (also über sechs Stellen hinder dem Komma), wäre es doch eine interessante Frage was die maximale Stellenzahl hinter dem Komma ist. "48-Bit Gleitkomma" dazu steht in der Hilfe nur dass das für das allermeißte ausreichend ist. Aber wie viele Stellen sind es schlussendlich? Weiß jemand das?

LG
Max Z.

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: Problem mit Variablen

Beitrag von funmca » 29 Mär 2013, 11:00

.... ich wollte das grad ausprobieren, kriege die variable aber nicht im textfeld angezeigt, so, als wenn die anzeige keine kommas abkann????
;-)

Phil
Beiträge: 53
Registriert: 23 Jan 2013, 20:25

Re: Problem mit Variablen

Beitrag von Phil » 29 Mär 2013, 11:41

Hallo,

offenbar kann ein Textfeld keine Kommazahlen direkt von einer Variable anzeigen. Wenn du zwischen der Variable einen Textbefehl einfügst mit z. B. ###,### kannst du auch Kommazahlen anzeigen.
Max Z. hat geschrieben:Aber wie viele Stellen sind es schlussendlich? Weiß jemand das?
In der RoboPro Hilfe ist von 9 Dezimalstellen die Rede...

Ich würde auch gerne nach jeder dritten Stelle (also nach 100, 100.000, 100.000.000, usw.) einen Punkt oder ein Komma anzeigen lassen, damit die Punkte etwas "aufgeräumter" dargestellt werden. Das habe ich jetzt so gelöst (der erste Versuch :) ):
Bild
Die führenden Nullen muss ich noch irgendwie beseitigen.

Gruß
Phil
Grüße ausm Badnerland
P

Kabelsalat ist gesund! ;)

Max Z.
Beiträge: 53
Registriert: 01 Jan 2012, 12:36

Re: Problem mit Variablen

Beitrag von Max Z. » 29 Mär 2013, 17:52

Sieht gut aus!
Die "führenden Nullen" kannst du mit einem Textbefehl loswerden mit dem du den Befehl " " (Leertaste) gibst.
Du könntest das Programm zum Beispiel so schreiben: Die Anzeie "100er" steht so lange auf " " (Leertaste) bis die Variable nicht mehr gleich null ist. Wenn das bis einmal passiert ist, kann diese Anzeige nicht mehr den " " (Leertaste" - Befehl erhalten. So werden nur die führenden Nullen ausgeblendet.

LG
Max Z.

Phil
Beiträge: 53
Registriert: 23 Jan 2013, 20:25

Re: Problem mit Variablen

Beitrag von Phil » 29 Mär 2013, 19:12

Hallo,

das hab ich mal ausprobiert (aber statt Leerzeichen ein "\c"), die Anzeigen bleiben leer, bis da eine Zahl erscheint. Eine Null bleibt da auch stehen. Ein Test hat ergeben, dass wenn z. B. 1 Mio. Punkte gewertet werden, alle niedrigeren Stellen leer bleiben. Allerdings besteht 1 Million nicht aus einer Eins und 6 Leerstellen ;) ;) ;) ;)
Das heißt, ich muss wohl irgendwie die anderen Anzeigen dazu bringen, 0 zu zeigen, wenn noch keine andere Zahl drinsteht ....

Gruß
Phil
Grüße ausm Badnerland
P

Kabelsalat ist gesund! ;)

Max Z.
Beiträge: 53
Registriert: 01 Jan 2012, 12:36

Re: Problem mit Variablen

Beitrag von Max Z. » 29 Mär 2013, 19:30

Hallo!
Ich komm nicht gänzlich nach in deinem letzten Kommentar...
Aber wenn du diesen "\c" Befehl nur einmalig erteilst, dürfte er doch nicht erneut erscheinen. Oder habe ich dich wirklich nicht verstanden?

LG
Max Z.

Phil
Beiträge: 53
Registriert: 23 Jan 2013, 20:25

Re: Problem mit Variablen

Beitrag von Phil » 29 Mär 2013, 19:40

Hallo,

nein, so meine ich das nicht (ganz).
Wenn jetzt in der Millionen-Variable 1 erscheint, hat das keinen Einfluss auf die Stellen davor. Das liegt aber am Programm. Ich muss das Programm nur so abändern, dass bei +1 Mio. in den anderen Stellen eine Null angezeigt wird. Nur wie? Wenn ich einfach einen =0 Befehl sende, bleiben die Anzeigen der anderen Stellen leer bzw. werden auf 0 gesetzt. Dass die Anzeigen von einer Zahl auf 0 gesetzt werden, kann ich mit einer Verzweigung verhindern. Aber wie dass die Anzeige leer bleibt?

Gruß,
Phil
Grüße ausm Badnerland
P

Kabelsalat ist gesund! ;)

Max Z.
Beiträge: 53
Registriert: 01 Jan 2012, 12:36

Re: Problem mit Variablen

Beitrag von Max Z. » 29 Mär 2013, 20:14

Phil hat geschrieben:Wenn ich einfach einen =0 Befehl sende, bleiben die Anzeigen der anderen Stellen leer bzw. werden auf 0 gesetzt.
Meinst du damit dass wenn die Anzeigen eine Zahl anzeigen, dass sie nur dann auf Null springen und nicht wenn noch nichts angezeigt wird?
In dem Fall würde ich nicht einen =Befehl nehmen, sondern einen Textbefehl. Vielleicht hilft das, weil ROBOPro "nichts" ev. als (mathematisch) gleich Null ansieht und deshalb nichts ändert (Kompliziert ausgedrückt... hoffen du verstehst). Allerdings hat der Textbefehl ja nichts damit zu tun, sondern stellt einfach nur Zeichen dar, egal was vorher dort stand.

LG
Max Z.

Phil
Beiträge: 53
Registriert: 23 Jan 2013, 20:25

Re: Problem mit Variablen

Beitrag von Phil » 02 Apr 2013, 19:07

Hallo,

wird Zeit, dass ich mich mal wieder melde.... :)

Die Anzeigen sollen, wenn noch nichts angezeigt wird, Null anzeigen, aber wenn bereits eine Ziffer angezeigt wird, soll nichts passieren. Wenn ich einen Textbefehl sende und in der angesprochenen Anzeige steht bereits eine Zahl, zeigt diese Anzeige ihre Punkte falsch an...

Gruß
Phil
Grüße ausm Badnerland
P

Kabelsalat ist gesund! ;)

Klub_Robotik_G-COM
Beiträge: 14
Registriert: 19 Jul 2012, 12:15

Re: Problem mit Variablen

Beitrag von Klub_Robotik_G-COM » 04 Apr 2013, 15:51

Hello all

This was a good exercise to generate code to handle numbers more than 32767.

Below is our attempt where we split the score into tens of thousands 10^4
Score1 = nominal value
Score2 = above 10,000 (less than 10,000,000)

Main Program
Bild

Subprogram 1
Bild

Subprogram 2
Bild


The "minor" score (var = score1) still shows only three digits for value < 1000, so one probably still has to add the Text command with format #### to fill the extra digit.

This also assumes that the additional score is less than 32767, and the above example just keeps adding 31554 and this part can be substituted with the actual score/points added in your game code.

The code is probably not maximised for efficiency and if anyone has better ideas, we would be glad to hear from you with some expert tips.

Thanks.

Max Z.
Beiträge: 53
Registriert: 01 Jan 2012, 12:36

Re: Problem mit Variablen

Beitrag von Max Z. » 04 Apr 2013, 18:07

Hallo!

Klub_Robotik_G-COM war etwas schneller, aber ich habe auch ein Programm ausgearbeitet, das sich mehr an den vorherigen Ideeen orientiert.

Bild
Das Programm dient nur der Vorführung, deshalb kann man eine Zufallszahl generieren, die die erzielten Punkte darstellen soll (erste Programmschleife). Diese können dann über einen zweiten Knopf zu den Gesamtpunkten hinzugezählt werden (zweite Schleife)

Hier die Bedienung:
Bild

Das sind die für dein Programm relevante Unterprogramme:
Bild
Dieser Teil rechnet die Punkte nach dem schon oben beschriebenem Prinzip (bei Zehnerüberschreitung -10 für diese Stelle und +1 für die Nächstgrössere). In diesem Programm werden sofort die Zufallszahlen (Rand10^x) addiert. Das Programmprinzip lässt sich dabei für beliebig viele Stellen anwenden.
Bild
Dieser Teil sorgt für die Beseitigung der "führenden Nullen": Vorne angefangen, werden alle Nullen Stelle für Stelle gelöscht, bis dass eine Ziffer auftaucht. Alle danach folgenden Nullen werden nicht mehr ausgeblendet.
Die allererste Null wird nicht ausgeblendet.

Hier das ganze Programm nun (Steuerung unter Hauptprogramm/Bedienfeld):
Flipperpunkte.rpp


LG
Max Z.

Antworten