Schleife in der Schleife
Übersicht

![]() |
C64-FloBetreff: Schleife in der Schleife |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, Ich bins mal wieder! ![]() Folgendes.... Ich habe eine dynamische anzahl von TYPES, die eine FOR..EACH -Schleife ihre Entfernung zu allen anderen dieser TYPES ermitteln sollen (um, wenn sie nahe genug sind beeinflusst zu werden). Also praktisch so ungefähr: (nur dass es eben so nicht geht ![]() Code: [AUSKLAPPEN] for pol=each polle xrangemax=pol\xpos+100 xrangemin=pol\xpos-100 for pol=each polle if xrangemin<pol\xpos<xrangemax then ;Bedingung erfüllt endif next next Das Problem ist klar..? ich kann nicht alle TYPES in einer Schleife, welche alle TYPES abfrägt abfragen.... ..kennt jemand eine elegante Lösung für dieses Dilemma? ![]() |
||
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.) |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich könnte dich jetzt ein bisschen nerven von wegen "suche" oder "tutorials" aber damit das Prob vom Tisch ist:
Code: [AUSKLAPPEN] for pol=each polle
xrangemax=pol\xpos+100 xrangemin=pol\xpos-100 for pol2.polle=each polle if xrangemin<pol2\xpos<xrangemax then ;Bedingung erfüllt endif next next viel Spass noch! EDIT: Deine Abfrage wird so nicht ganz funzen.... wie wärs mit Code: [AUSKLAPPEN] if xrangemin<pol2\xpos And pol2\xpos<xrangemax then
|
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
- Zuletzt bearbeitet von Eingeproggt am Mi, Okt 31, 2007 22:49, insgesamt einmal bearbeitet
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Versuchs mal so:
Code: [AUSKLAPPEN] For pol=Each polle
xrangemax=pol\xpos+100 xrangemin=pol\xpos-100 wert=Handle(pol) For pol=Each polle If xrangemin<pol\xpos<xrangemax Then ;Bedingung erfüllt EndIf Next pol=Object.polle(wert) Next Ist zwar vll nicht die beste Lösung, aba was besseres fällt mir nich ein. ![]() *edit* Zu langsam mal wieder Hätte ich auch drauf kommen können |
||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
Marek |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@flona damit ist gar nix besser. Das Problem ist das 2x die Variable pol deklariert wird.
Das pol bei der 2. For-Schleife muss ganz einfch zu einem pol2 umbenannt werden. |
||
Wer lesen kann ist klar im Vorteil... |
![]() |
flona |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab doch im edit schon gesagt ähh... geschrieben, dass die andere Version besser ist. ![]() Ich hätte auch gemeint, dass man pol in pol2 umbenennen muss, aba hab nicht daran gedacht dass ich dann .polle dahinterschreiben muss. |
||
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um mit 2 verschachtelten Schleifen zu arbeiten gibt es paar Sachen die man beachten muss....
1. die Zeiger variablen müssen unterschiedliche Namen haben Code: [AUSKLAPPEN] For pol1=Each polle
For pol2=Each polle ;machwas Next Next 2. beim ersten Durchgang sind Pol1 und Pol2 identisch, bzw der gleiche erste Eintrag. Das bedeutet das man verhindern muss das sich der selbe Eintrag nicht mit sich selbst prüft Code: [AUSKLAPPEN] For pol1=Each polle
For pol2=Each polle If Pol1 <> Pol2 Then ; nur unterschiedliche prüfen ;machwas End If Next Next 3. diese Art mit 2 For Schleifen prüft immer doppelt und eignet sich normal nicht dazu! bei 3 Type Einträgen z.B. werden geprüft Zitat: 1 mit 1 ; überflüssig
1 mit 2 1 mit 3 2 mit 1 ; überflüssig 2 mit 2 ; überflüssig 2 mit 3 3 mit 1 ; überflüssig 3 mit 2 ; überflüssig 3 mit 3 ; überflüssig also 9 mal.... wobei 6 überflussig sind da doppelt oder mit sich selbst abgefragt wird Um das zu umgehen sollte man die innere Schleife ändern Code: [AUSKLAPPEN] For pol1.polle = Each polle
pol2.polle = After pol1 While pol2 <> Null ;prüfe was pol2 = After pol2 Wend Next Diese Schleife prüft bei 3 Einträgen Zitat: 1 mit 2 1 mit 3 2 mit 3 also keine überflüssigen dabei Um den Abstand auf der X achse zu berechnen braucht man aber nicht mit +100 oder -100 die werte zwischenspeichern, sondern man kann das direkt ohne Umwege realisieren in dem die Werte der 2 einfach subtrahiert. Dabei kommt es allerdings auch zu negativen Zahlen. Mit Abs() kann man die Vorzeichen löschen Die Abfrage sieht dann so aus.. Code: [AUSKLAPPEN] Pixelabstand = Abs(pol1\x -pol2\x)
If Pixelabstand < 100 then ; mach was alles zusammen sieht dann etwa so aus Code: [AUSKLAPPEN] For pol1.polle = Each polle
pol2.polle = After pol1 While pol2 <> Null Pixelabstand = Abs(pol1\x -pol2\x) If Pixelabstand < 100 Then ;mach was End If pol2 = After pol2 Wend Next Sehe gerade das es ein wenig mehr geworden ist, aber vielleicht hat es ja was gebracht ![]() |
||
[BB2D | BB3D | BB+]
|
![]() |
C64-Flo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja! Super!
..mensch ich stand die ganze Zeit auf sowas von nem riesen Schlauch! ![]() For pol1=Each polle For pol2=Each polle .... Jau, dass man einfach verschiedene Variablen nimmt, klar ![]() (wie war das mit dem Wald und den Bäumen?) und thx rallimen für die sehr erschöpfende Auskunft, da bleibt keine Frage offen! ![]() |
||
"Die Situation ist aussichtslos - aber nicht kritisch!"
(S.Effenberg.) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group