Doppelte For-Schleife (eher nur Mathe)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Doppelte For-Schleife (eher nur Mathe)

Beitrag von Delle »

Hallo,

es sollen 5 Bilder nebeneinander dargestellt werden, es geht mir lediglich erstmal um die Bestimmung der horizontalen Positionierung.

Code: Alles auswählen

bilder = 4 ; anzahl der bilder (-1)
breite = 100 ; breite der bilder
abstand = 10 ; abstand zwischen den bildern

For i=0 To bilder

q=q+1

Debug "Bild "+Str(i)+" ID "+Str(q)+" X="+Str((breite+abstand)*i)
                        
Next i
Soweit ist das klar, nun sollen in einer weiteren (eingebetteten) For-Schleife diese Positionen gleich noch 3 x nebeneinander dupliziert werden.

Würde dann also so aussehen (Zahlen sind die BildID):

1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5

Das Bild 1 kommt in der 2. Schleife also an Position 550, Bild 2 an 660 usw.

Code: Alles auswählen

bilder = 4 ; anzahl der bilder (-1)
breite = 100 ; breite der bilder
abstand = 10 ; abstand zwischen den bildern

For i=0 To bilder

For d=1 to 3

q=q+1

Debug "Bild "+Str(i)+" ID "+Str(q)+" X="+Str((breite+abstand)*i) <--- hier muss die neue Berechnung hin

Next d
                        
Next i
Hat jemand eine Lösung? Ich mein genügend Variablen sind ja zur Berechnung vorhanden...

Leider muss es in diesem Schema mit den 2 For-Schleifen ablaufen, bitte daher keine anderen Schleifen anbieten ;)
PB 6.21 | Win 11
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Code: Alles auswählen

Debug "Bild "+Str(i)+" ID "+Str(q)+" X="+Str((breite+abstand)*(i*3+d-1))
Hm, wo war das Problem dabei?
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Deeem2031 hat geschrieben:

Code: Alles auswählen

Debug "Bild "+Str(i)+" ID "+Str(q)+" X="+Str((breite+abstand)*(i*3+d-1))
Hm, wo war das Problem dabei?
Meine Dummheit! ;) Nein hab mir wohl gestern einen Sonnenstich geholt und krieg die einfachsten Sachen nicht mehr hin ;)
PB 6.21 | Win 11
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hu? das macht aber doch 1-1-1-2-2-2-3-3-3-4-4-4-5-5-5...

Code: Alles auswählen

Debug "Bild "+Str(i)+" ID "+Str(q)+" X="+Str((breite+abstand)*(i+5*(d-1)))
würde ich sagen....

wenn dir die springenden IDs so nicht gefallen,
vertausche die beiden schleifenköpfe.
wenn die ID nur 1-5 sein soll, lass die schleifenköpfe so,
aber nimm das q+1 raus in die äußere schleife.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Also das liefert bei mir jetzt:

Code: Alles auswählen

Bild 0 ID 1 X=0
Bild 0 ID 2 X=550
Bild 0 ID 3 X=1100
Bild 1 ID 4 X=110
Bild 1 ID 5 X=660
Bild 1 ID 6 X=1210
Bild 2 ID 7 X=220
Bild 2 ID 8 X=770
Bild 2 ID 9 X=1320
Bild 3 ID 10 X=330
Bild 3 ID 11 X=880
Bild 3 ID 12 X=1430
Bild 4 ID 13 X=440
Bild 4 ID 14 X=990
Bild 4 ID 15 X=1540
Aussehen müßte es wohl eher so:

Code: Alles auswählen

Bild 0 ID 1 X=0
Bild 0 ID 2 X=110
Bild 0 ID 3 X=220
Bild 0 ID 4 X=330
Bild 0 ID 5 X=440

Bild 1 ID 6 X=550
Bild 1 ID 7 X=660
Bild 1 ID 8 X=770
Bild 1 ID 9 X=880
Bild 1 ID 10 X=990

Bild 2 ID 11 X=1100
...
PB 6.21 | Win 11
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Aussehen müßte es wohl eher so:
hm... also hab ich deine aussage
1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5 | 1 | 2 | 3 | 4 | 5
wohl mißverstanden... dann halt nich...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Nein das hast Du schon richtig verstanden, ich verdreh jetzt alles... irgendwie liegt da der Wurm drin ;)

Code: Alles auswählen

bilder = 4 ; anzahl der bilder (-1)
breite = 100 ; breite der bilder
abstand = 10 ; abstand zwischen den bildern

wiederholungen = 3

For i=0 To bilder

For d=1 To wiederholungen

q=q+1

Debug "Bild "+Str(i)+" ID "+Str(q)+" X="+Str((breite+abstand)*(i+wiederholungen*(d-1)))

Next d
                       
Debug ""
                       
Next i
Das liefert vom Aufbau richtig aber mit Fehlern bei den Positionen zurück:

Code: Alles auswählen

Bild 0 ID 1 X=0
Bild 0 ID 2 X=330
Bild 0 ID 3 X=660

Bild 1 ID 4 X=110
Bild 1 ID 5 X=440
Bild 1 ID 6 X=770

Bild 2 ID 7 X=220
Bild 2 ID 8 X=550
Bild 2 ID 9 X=880

Bild 3 ID 10 X=330 <--- aber hier Überschneidungen mit anderen Bildern oben
Bild 3 ID 11 X=660
Bild 3 ID 12 X=990

Bild 4 ID 13 X=440
Bild 4 ID 14 X=770
Bild 4 ID 15 X=1100
PB 6.21 | Win 11
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

nicht

Code: Alles auswählen

(i+wiederholungen*(d-1))
sondern

Code: Alles auswählen

(i+(bilder+1)*(d-1))
und damit du dir keinen wolf rechnest

Code: Alles auswählen

bilder = 5 ; anzahl der bilder
;....
For i=0 To bilder-1
und wenn du dann noch

Code: Alles auswählen

For d=0 To wiederholungen-1
nimmst, dann kannst du dir das -1 im faktor sparen und es bleibt

Code: Alles auswählen

(i+bilder*d)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Delle
Beiträge: 1130
Registriert: 10.05.2005 22:48

Beitrag von Delle »

Thanks! Endlich funktioniert es so wie es soll :praise:
PB 6.21 | Win 11
Antworten