Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Tobber

Anmeldungsdatum: 01.07.2005 Beiträge: 62 Wohnort: Freudenstadt
|
Verfasst am: 01.07.2005, 11:12 Titel: Zählspringer |
|
|
Hallo.
Ich bräuchte eine schnellere Möglichkeit für Folgendes:
-----------------------------------------------
for x=1234567 to 7654321
x$=str$(x)
max=len(x$)
for z=1 to max
z$=mid$(x$,z,1)
if val(z$)>max or z$="0" then goto weiter:
next
print x$
weiter:
next
------------------------------------------------------
Die Sache ist nämlich die, das die Schleife auch die Zahlen mitzählt, die garnicht erwünscht sind (hier 8, 9 und 0). Gibt es da eine Abkürzung oder ein Turboverfahren ? |
|
Nach oben |
|
 |
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 01.07.2005, 14:43 Titel: |
|
|
Hi,
am besten du machst das Goto raus. Dann sollte das Programm schon etwas schneller laufen.
Code: |
for x=1234567 to 7654321
x$=str$(x)
max=len(x$)
for z=1 to max
z$=mid$(x$,z,1)
if val(z$)>max or z$="0" then print x$:exit for
next z
next x
|
Ich habe leider nicht ganz verstanden, was das Programm macht.
Wenn du das etwas erklären würdest, könnt ich dir vielleicht helfen.
Gruß
Dominik |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 01.07.2005, 15:01 Titel: |
|
|
Wenn's ein Geschwindigkeitsproblem ist, dann steige auf freeBASIC um! Dort dürfte das Prog um
einiges schneller laufen.
jb |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 01.07.2005, 16:47 Titel: |
|
|
naja, aber das Ziel eines Programmieres sollte es ja sein den Algorithmus zu verbessern, abstatt immer auf bessere Sprachen umzusteigen.
Also so ganz erschließt sich mir der Sinn deines Programm nicht, aber ich verstehe ihn erstmal so, dass alle Zahlen x >= 1234567 und x <= 7654321 ohne die Ziffer 0, 8 und 9 gefunden werden sollen.
auf jeden Fall würde es schonmal schneller laufen, wenn du 7 Schleifen für jede Ziffer hast, dann kannst du schonmal von vorneherein ausschließen, dass eine 0, 8 oder 9 mit dabei ist, dann brauchst du nur noch überprüfen, ob die dann zusammengefügte Zahl im zulässigen Bereich ist. |
|
Nach oben |
|
 |
stef
Anmeldungsdatum: 13.01.2005 Beiträge: 102
|
Verfasst am: 01.07.2005, 17:11 Titel: |
|
|
Ich wollte nur mal daran erinnern, das beim Befehl str$(x) vor die Zahl noch ein Leerzeichen eingefügt wird, das als Platzhalter für ein Minuszeichen bei Negativen Zahlen dient.
Code: | FOR x = 1234567 TO 7654321
x$ = STR$(x)
max = LEN(x$)
FOR z = 2 TO max
v = VAL(MID$(x$, z, 1))
IF v >= max OR v = 0 THEN GOTO weiter:
NEXT
PRINT x$
weiter:
NEXT |
Aber es stimmt schon, daß es schneller wäre einfach 7 FOR-Schleifen zu verwenden. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 01.07.2005, 20:58 Titel: Permutationsgenerator |
|
|
Schau Dir am besten einmal mein Mastermind-Knackerprojekt unter
http://www.dreael.ch/Deutsch/Download/Mastermind-Knacker.html
an - dort musste ich dieses Problem ebenfalls möglichst effizient lösen. Bestimmt willst Du auch einfach sämtliche Kombinationen mit 7 Elementen finden, wobei keine Ziffer doppelt vorkommen darf, sonst würdest Du ja nicht von 1234567 bis 7654321 zählen wollen, sondern typischerweise von 1111111 bis 7777777.
Dieses Problem kann man eigentlich sehr schön mit Rekursion lösen:
http://beilagen.dreael.ch/QB/PERM_GEN.BAS _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Tobber

Anmeldungsdatum: 01.07.2005 Beiträge: 62 Wohnort: Freudenstadt
|
Verfasst am: 04.07.2005, 18:29 Titel: |
|
|
Hey dreael !
Das ist ja wundervoll !!! Die Variante mit der Rekursion ist haargenau das, wonach ich gesucht habe. Dankeschön. Jetzt muß ich mir nur noch ein wenig die Technik verinnerlichen. Geil Mann.  _________________ "Es wurde schon alles gesagt, nur noch nicht von jedem !" |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.07.2005, 19:19 Titel: |
|
|
Dazu hab ich grad was gebastelt, weil mich jemand gefragt hatte:
http://fb.exp-soft.de/fbnp/?view=13
Das arbeitet mir Wörtern, kannst aber genausogut Zahlen als Strings einsetzen, evtl hilft dir das auch. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 04.07.2005, 19:56 Titel: |
|
|
Tobber hat Folgendes geschrieben: | Hey dreael !
Das ist ja wundervoll !!! Die Variante mit der Rekursion ist haargenau das, wonach ich gesucht habe. Dankeschön. |
Wolltest du wirklich die Permutationen? Weil dann hast du uns mit deinem Beispielprogramm erst ganz schön in die Irre geführt. |
|
Nach oben |
|
 |
|