Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Spezielle Schleife /// variierender Anfang/Ende

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 185

BeitragVerfasst am: 05.03.2019, 19:20    Titel: Spezielle Schleife /// variierender Anfang/Ende Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4264
Wohnort: ~/

BeitragVerfasst am: 05.03.2019, 22:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 185

BeitragVerfasst am: 12.03.2019, 19:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4264
Wohnort: ~/

BeitragVerfasst am: 12.03.2019, 19:21    Titel: Antworten mit Zitat

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. grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden
Nils



Anmeldungsdatum: 24.03.2006
Beiträge: 185

BeitragVerfasst am: 12.03.2019, 19:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
Haubitze



Anmeldungsdatum: 14.10.2009
Beiträge: 131

BeitragVerfasst am: 12.03.2019, 23:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz