|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 05.03.2019, 20:20 Titel: Spezielle Schleife /// variierender Anfang/Ende |
|
|
Guten Abend!
Ich suche nach einer (kurzern, schnellen) Lösung für die Programmierung einer besonderen Schleife.
Sie soll beim ersten Komplettdurchlauf mit X beginnen und jeweils um 1 bis Y hochzählen(das ist ja trivial: For X=1 toY)). Den zweiten Komplettdurchlauf soll die Schleife aber mit X+1 beginnen, hochzählen und nach der Y mit der X enden. Beim dritten Mal mit X+2 beginnen und über zB 4,5,6,7,X mit X+1 enden. Usw .
Wie macht man das?
Mir kommt es auf Einfachheit und Schnelligkeit des Codes an.
Ich habe da schon eine eine Formel gedacht, die aus einer oder mehrerer anderen Schleifen angesteuert wird.
freundlichst _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 05.03.2019, 23:01 Titel: |
|
|
Sollen die Schleifenaufrufe hintereinander kommen?
Für den Schleifenstart:
Code: | FOR start = 1 TO Y
FOR x = start TO y
' ...
NEXT
NEXT |
Ansonsten halt am Anfang die Variable start festlegen und nach dem Schleifendurchlauf um 1 erhöhen.
Für das Schleifenende:
Zitat: | [...] hochzählen und nach der Y mit der X enden. Beim dritten Mal mit X+2 beginnen und über zB 4,5,6,7,X mit X+1 enden. Usw . |
Sorry, keine Ahnung was du damit meinst.
Etwa das hier?
1. Durchlauf: 1, 2, 3, 4, 5, 6, 7
2. Durchlauf: 2, 3, 4, 5, 6, 7, 1
3. Durchlauf: 3, 4, 5, 6, 7, 1, 2
...
Wenn du das meinst, vergiss meinen ersten Ansatz; dann würde ich das ganz einfach über Modulorechnung machen.
EDIT
Nach nochmaligem Durchlesen denke ich, meine zweite Vermutung ist richtig. Ich habe mal zwei Vorschläge zusammengeschrieben; es ist in FreeBASIC, sollte aber nur ggf. Änderungen bei den Variablendeklarationen erfordern. Es ist nichts speziell FreeBASIC-artiges eingebaut.
Code: | DIM AS INTEGER x, y, start, i, j, k, modwert
x = 3
y = 7
' 1. Version
modwert = (y-x+1)
FOR i = 0 TO y-x ' eine komplette Umrundung
FOR j = 0 to y-x
k = x + ((i+j) MOD modwert) ' k ist jetzt der Wert, den du willst
PRINT k,
NEXT
PRINT
NEXT
PRINT : PRINT
' 2. Version
start = x
FOR i = x TO y
k = start
FOR j = x TO y
PRINT k,
k = k + 1
IF k > y THEN k = x
NEXT
PRINT
start = start + 1
NEXT |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 12.03.2019, 20:06 Titel: |
|
|
Hi nemored:
Code: | Sorry, keine Ahnung was du damit meinst.
Etwa das hier?
1. Durchlauf: 1, 2, 3, 4, 5, 6, 7
2. Durchlauf: 2, 3, 4, 5, 6, 7, 1
3. Durchlauf: 3, 4, 5, 6, 7, 1, 2
...
Wenn du das meinst, vergiss meinen ersten Ansatz; dann würde ich das ganz einfach über Modulorechnung machen.
|
Ja, genau das meinte ich!
Muss mal schauen, ob das so in QB läuft. Das dauert aber, da ich meinen Rechner zZ nicht mehr zur Verfügung habe.
Könntest Du denn eine Ergebnisrunde Deiner Routinen hier posten?
Beide Routinen wären wohl gleich schnell?
ZUSATZFRAGE:
Kann man auf einem Billigtablet auch QB laufenlassen und programmieren? Und falls ja, wie?
Vielen Dank für Deine Mühe! _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 12.03.2019, 20:21 Titel: |
|
|
Nils hat Folgendes geschrieben: | Könntest Du denn eine Ergebnisrunde Deiner Routinen hier posten? |
Naja, es liefert genau die Reihe, nach der ich gefragt habe.
Code: | 3 4 5 6 7
4 5 6 7 3
5 6 7 3 4
6 7 3 4 5
7 3 4 5 6
3 4 5 6 7
4 5 6 7 3
5 6 7 3 4
6 7 3 4 5
7 3 4 5 6 |
Zitat: | ZUSATZFRAGE:
[color=red]Kann man auf einem Billigtablet auch QB laufenlassen und programmieren? Und falls ja, wie?[/color |
QBasic stammt aus DOS-Zeiten; am Billigtablet sollte es nicht scheitern. Schwieriger wird es möglicherweise mit dem darauf installierten Betriebssystem. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Nils
Anmeldungsdatum: 24.03.2006 Beiträge: 191
|
Verfasst am: 12.03.2019, 20:48 Titel: |
|
|
Mei das geht ja fix bei Dir!
Ich gehe mal davon aus, dass mit x=1 statt 3 die Reihen mit 1 beginnen.
Dieses 'mod' in Routine Eins. Da könnte ich mir vorstellen, dass die ziemlich viel Performance schluckt. Womit Routine Zwei wohl schneller wäre. Wie siehst Du das?
Nils _________________ Kontrolliert die Politik! Laßt nicht die Politik Euch kontrollieren! Das sind Eure Angestellten! Lasst Sie das spüren!!! |
|
Nach oben |
|
|
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 13.03.2019, 00:49 Titel: |
|
|
wenn man anz genau weiss das der ergebene modwert eine zweierpotenz ist
kann man in der ertsen variante von nemored auch statt
Code: |
k = x + ((i+j) MOD modwert) ' k ist jetzt der Wert, den du willst
|
das hier shreiben
Code: |
k = x + ((i+j) AND (modwert-1)) ' k ist jetzt der Wert, den du willst
'nur gueltige wenn modwert werte wie 2,4,8,16,32... besitzt
|
das sollte dann auch etwas schneller sein als MOD.
bleib nur die frage ob du weist das nur zweierpotenzen auftreten koennen
fuer modwert?
man koennte auch das hier zusammenschustern
Code: |
dim xstart as integer=3
dim xende as integer=7
dim ystart as integer=13
dim yende as integer=17
dim as integer x,y
x=xstart
y=ystart
while x<=xende
for i as integer=ystart to yende
print (i+x),
next
x+=1
wend
|
das waere unter umstaenden etwas flexiebler.
edit: ach quatsch ziel verfehlt,letzter code macht garnich was er soll :/ |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|