PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wieder programmierfrage



alper
28.04.2007, 01:21
hi jungs,

sorry es ist jetzt 2 uhr und ich habs aufgegen,da stimmt was im code nicht


also

ich gebe über eine tastatur meinem fahrzeug eine beliebige strecke ein
alles im array :-) habs ja jetzt gelernt
zum beispiel

1)erstmal geradeaus

geradeaus(merker)=2 '2 steht für entfernung

2)dann treff ich eine entscheidung
wenn taste 4 gedrückt wird linksdrehung
wenn taste 6 gedrückt wird rechtsdrehung

if taste=4 then
linksrechts(merker2)=0 ' 0 für entscheidung im hauptprogramm

if taste=6 then
linksrechts(merker2)=1 '1für entscheidung im hauptprogramm

3)dann wieder geradeaus

nach beenden der abfrageschleife ist mein merker index 2 und mein merker2 index 1 ,verständlich oder??

jetzt kommt mein hauptprogramm


for merker = 1 to 2
call geradeaus

for merker2 =1 to 1
if linksrechts(merker2) =0 then
call linksdrehung
end if
if linksrechts(merker2)=1 then
call rechtsdrehung
end if
next merker
next merker2

das fahrzeug sollte ja geradeaus,links oder rechts,dann wieder geradeaus fahren

aber nein, es fährt geradeaus, dann 2 mal links oder rechts, dann wieder geradeaus und dann wieder 2 mal links oder rechts

kann man überhaupt zwei for schleifen ineinander schachteln??
wenn nicht wie löse ich das?

ziel ist es eine beliebig lange strecke einzugeben, die werte sollen gespeichert und dann abgefahren werden.müsste doch eigentlich klappen

Ratber
28.04.2007, 08:35
kann man überhaupt zwei for schleifen ineinander schachteln??
wenn nicht wie löse ich das?

Doch das geht wunderbar und du hast das auch in deinem Beispiel richtig gemacht.

Die Schachtelung geht immer so



For Schleife1 = 1 to 5
For Schleife2 = 1 to 10 Step 2
For Schleife 3 = 7 to 1 Step -1
Next
Next
Next


Dazwischen klemmst du dann deine Anweisungen.
Bei "Next" kannst du die Schleifenvariablen nennen (zb. Next Schleife2) oder auch weglassen.
Bascom kommt auch ohne klar.

alper
28.04.2007, 13:52
klappt nicht!!! ](*,) ](*,)

das problem ist doch wenn ich 2 mal geradeaus fahre will aber nur einmal links abbiege. dann bekommt er doch im 2. schleifendurchlauf den call befehl zum links abbiegen wieder mit. deshalb biegt er wahrscheilich zweimal auch nach links ab.wie kann ich das verhindern?

PicNick
28.04.2007, 17:25
Du hast da eine Durcheinander:
Man kann zwar Schleifen in andere Schleifen EINBETTEN, aber ÜBERLAPPEN geht nicht,
ALSO


FOr merker = 1 to 2 ' Äussere Schleife
for merker2 = 1 to 1 ' innere Schleife
...
next merker2 'ende innere Schleife
Next merker ' Ende äussere Schleife


Bei dir heißt das aber



...
next merker '?§$%$
Next merker2 ' ?§$%$


Das bringst du den Bascom in die Bredouille

Ratber
29.04.2007, 00:20
Oha,jetzt wo du es sagst fällt es mir auch auf.

PicNick
29.04.2007, 10:18
Ein Touri zum anderern:
"Was sagen sie zu diesem Ambiente ?"
"Ja, jetzt. wo sie es sagen, riech' ich es auch"

Ratber
29.04.2007, 10:23
Geeenau

"Hört mal..........ich rieche was"
Raymond Stantz ;)

alper
29.04.2007, 15:33
was riecht ihr denn?? 8-[ 8-[ 8-[

PicNick
29.04.2007, 16:00
Laß' nur, alper. Das hat nix mit dir zu tun, is auch nix böses.
Da tun nur ein paar ältere Herren rumflachsen, laß sie doch.
:mrgreen:

alper
29.04.2007, 17:54
jungs helft mir er will einfach nicht!!!!!
habe die schleife jetzt geändert.
wenn ich sage geradeaus,links,geradeaus,rechts
macht er daraus 2*links,geradeaus,2*rechts
ich blick da nicht mehr durch,bitte sagt was


For merker = 1 To Merker4

call geradeaus

For variable = 1 To variablemax
If Linksrechts(merker) = 1 Then
Call Rechts90
end if
if Linksrechts(merker) = 0 Then
Call Links90
End If

Next variable
Next merker

PicNick
29.04.2007, 18:16
Schau, die äußere Schleife mit "merker" wird soundooft durchlaufen.
jedesmal fährt er auf jeden Fall mal gerade aus, dann die innere For-Schleife
In dieser Schleife wird "merker" nicht verändert, also macht er 1 -> variablemax das Gleiche, also rechts90 oder links90 oder eventuell garnix, je nachdem, was in "linksrechts(merker)" halt steht.

Zum "debuggen" mußt du sicherstellen, was VOR dem ersten "For" in den ganzen Variablen drinsteht und auch in dem linksrechts-Array

Und dann geh deine Routine mit dem Zeigefinger und ev. einem Bleistifft durch. Der Bascom-Simulator kann da gut helfen.