Das Deutsche Casio-Taschenrechner Forum wurde zum 31.12.2013 geschlossen und kann weiterhin als Nachschlagewerk verwendet werden.
Wer mehr erfahren möchte: Ein sehr guter Beitrag von Elias

Wo ist der Fehler?

Ideen sammeln, umsetzen, Fehler ausmerzen, Tipps holen und geben, Fragen stellen, Programmierprobleme lösen...

Wo ist der Fehler?

Beitragvon Alex » Mo 27. Okt 2003, 23:17

Hi,
Jungs und Mädlz. Ich verzwiefle. Ich hab mir heute was ganz unsinniges einfallen lassen. Ein Prog soll 2 Zufallszahlen gleichsetzen und ne Meldung ausgeben, wenn sie gleich sind. Hier mein Code:
ClrText
0->I
"Zahl A"?->A
"Zahl B"?->B
Lbl 1
Int ARan#->C
Int BRan#->D
I+1->I
If C=D Then Goto 2
Else Goto 1
Lbl 2
"A gleich B"
"Benoetigte Versuche:"I

Fehler in Zeile 5 beim Label. Das gibts doch net. Ich verzeifel!! Hilfe*gg*
Alex
 

Re: Wo ist der Fehler?

Beitragvon BCGSR » Di 28. Okt 2003, 00:15

ClrText
0->I
"Zahl A"?->A
"Zahl B"?->B
Lbl 1
Int ARan#->C
Int BRan#->D
I+1->I
If C=D Then Goto 2
Else Goto 1
Lbl 2
"A gleich B"
"Benoetigte Versuche:"I

1. Du hast ein IfEnd vergessen. Der TR springt immer wieder in die gleiche If-Abfrage, ohne das diese beendet wird. Nach 10 Ebenen ist damit Schluss und es müsste ein Stack-Error kommen. Allerdings kann der Fehler sich auch anders äußern... also mehr ne Vermutung.

Ersetzte Zeile 9 und 10 durch
C=D=>Goto 2
Goto 1
Macht genau das gleiche und du bist auf der sicheren Seite, weil du die Verschiedenen Ebenen nicht verletzt.


BCGSR
 

Re: Wo ist der Fehler?

Beitragvon ph » Di 28. Okt 2003, 20:17

goto~lbl stinken sowieso ein wenig, ersetz die struktur doch durch eine do~lpwhile-schleife nach dem motto:

Do
...
LpWhile D=C

und so weiter

ph
ph
 

Re: Wo ist der Fehler?

Beitragvon Alex » Mi 29. Okt 2003, 20:08

Zitat:Orginal von ph

Do
...
LpWhile D=C


Wie? Und danach? wieder goto Lbl, oder? Aber was soll der dann "loopen"? Wenn D=C soll er doch weiter machen. Meinst Du D=/C
Alex
 

Re: Wo ist der Fehler?

Beitragvon ph » Mi 29. Okt 2003, 20:24

Jepp, meine Do:LpWhile D<>C dann kannst du das Lbl 1 ~ Goto 1 weglassen:

Do
Int ARan#->C
Int BRan#->D
I+1->I
LpWhile C<>D

"<>" is ungleich, ne?!

Das müsste gehen, ist scheller und eleganter.
ph
 

Re: Wo ist der Fehler?

Beitragvon BCGSR » Do 30. Okt 2003, 10:08

Und da du ja sicher sehr viele Durchläufe machen willst, lohnt es sich noch mehr zu optimieren. Z.B. so:

1->I
Do
Isz I
LpWhile Int ARan#<>Int BRan#

Kannst dann zwar die beiden gleichen Zahlen nicht auslesen, aber sollte merklich schneller sein, weil die Zahlen ja nicht erst in den Variablen-Speicher geschrieben werden müssen.


BCGSR
 

Re: Wo ist der Fehler?

Beitragvon BCGSR » Fr 31. Okt 2003, 00:33

Der zählt die Variable um eins hoch. Wird diese dadurch Null, wird der folgende Befehl übersprungen. Ist ja aber hier nicht der Fall, wenn du mit 1 anfängst, und somit isses ein klasse Hochzählbefehl :)

BCGSR
 

Re: Wo ist der Fehler?

Beitragvon Alex » Fr 31. Okt 2003, 10:08

Zitat:Orginal von BCGSR
...klasse Hochzählbefehl...

Sprich I+1->I?



[Editiert durch Alex am Freitag, Oktober 31, 2003 @ 10:08]

Alex
 

Re: Wo ist der Fehler?

Beitragvon Max » Fr 31. Okt 2003, 10:22

Zitat:Orginal von Alex

Sprich I+1->I?


genau!
Und Dsz ist das Gegenteil, also runterzählen.


[Editiert durch Max am Freitag, Oktober 31, 2003 @ 10:23]

Max
 


Zurück zu Graphikrechner (CFX 9850 G/GB/GC; FX 9860 G/ GSD; FX 9750G; FX 7400G) ohne CAS

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 23 Gäste