 |
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 |
agentxi

Anmeldungsdatum: 09.01.2006 Beiträge: 3 Wohnort: Hamburg
|
Verfasst am: 09.01.2006, 02:30 Titel: Zufallszahlen & Zeichenketten Sortieren |
|
|
Guten Abend erstmal,
ich habe da so einige kleinere Problemchen mit meinem FreeBasic Programm. Ich habe Folgendes Geschrieben:
Code: |
DIM zahlenarray(1 TO 6) AS INTEGER
RANDOMIZE TIMER
zahlenarray(1) = INT(RND*6+1)
DO
RANDOMIZE TIMER
zahlenarray(2) = INT(RND*6+1)
LOOP UNTIL zahlenarray(1) <> zahlenarray(2)
DO
RANDOMIZE TIMER
zahlenarray(3) = INT(RND*6+1)
LOOP UNTIL zahlenarray(1) <> zahlenarray(2) <> zahlenarray(3)
'...
PRINT zahlenarray(1)
PRINT zahlenarray(2)
PRINT zahlenarray(3)
PRINT zahlenarray(4)
PRINT zahlenarray(5)
PRINT zahlenarray(6)
SLEEP
|
4,5,6 sind natürlich Null. meine Frage ist Warum er mir bei 2 und 3 die gleichen Zahlen Anzeigt. Ich habe auch schon ein anderes Beispiel gesucht im Forum um Dublikate zu verhindern. Bin aber daraus nicht so recht schlau geworden also wollte ich es so lösen
Insgesamt geht es darum das ich eine txt datei habe mit bestimten Zeichenketten 6 Stellig. Ich möchte wenn ich z.B. wenn ich CEHIST
eingebe, das er mir TISCH
aus dieser txt lesen kann. Da bin ich noch recht überfordert. Ich dachte mir eine Kombination aus Zufallsstellungen die dann in Arrays gespeichert werden und wenn er nicht mehr findet sucht er die txt durch.
Soll ein Programm sein um bei textspielen ein bischen zu schummeln. Und weil ich mal wieder meinen Dickkopf durchkriegen will.
Hab auch http://mitglied.lycos.de/agentxi/logger.xls Sowas schon mal gemacht. Nur mit Excel läßt sich mein Problem nur mit zu viel Schreibarbeit lösen, da es auch kürzere Wörter gibt und die dann recht häufig vorkommen, darum will ich das nicht in einer Tabelle machen
Ob das mit dem Programm einfacher wird - mal sehen. Und sry wenn ich so viel nun geschreibselt hab, ist mein erster Beitrag. Freue mich schon aufs ausprobieren. *g*
Wer das spiel mal sehen will sollte mal auf lycos.de -> Spiele -> alle Spiele -> Text Express gehen. Schönen Abend noch  _________________ MSI K8N Neo Platinum, Athlon 64 3200 Newcastel Sockel 754, 756 MB RAM, Radeon 9600pro 256 MB, 200 GB HDD, Windows XP PRO
(c) agentxi  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 09.01.2006, 13:09 Titel: |
|
|
Zu deinem Random-Teil: Dass er das immer macht ist komisch, lass die ganzen Randomize Timer doch mal weg, nur einmal am Anfang reicht.
Zu den Wortkombinationen: http://fb.exp-soft.de/fbnp/?view=26  _________________ "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 |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 09.01.2006, 15:37 Titel: Re: Zufallszahlen & Zeichenketten Sortieren |
|
|
agentxi hat Folgendes geschrieben: |
4,5,6 sind natürlich Null. meine Frage ist Warum er mir bei 2 und 3 die gleichen Zahlen Anzeigt. |
Hallo. Ich kenne mich da nicht so aus, aber wenn man "a=2=3" schreibt, ist das was anderes, als würde da "a=2" und in der nächsten zeile"a=3" stehen. Schreib dochmal
Code: |
Loop Until zahlenarray(1)<>zahlenarray(2) and zahlenarray(1)<> zahlenarray(3) |
So müsste das dann klappen. Ich hoffe, dass ich jetzt nicht zuviel Mist erzählt habe.
Michael _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
agentxi

Anmeldungsdatum: 09.01.2006 Beiträge: 3 Wohnort: Hamburg
|
Verfasst am: 09.01.2006, 15:56 Titel: |
|
|
Also Das mit dem Wortkombis funktioniert super. Wüßte nur gerne wie es funktioniert. Ist mir ein bischen zu hoch *g*
Die Kommentare bringen mir nicht viel.
Und wie groß dürfen die Sachen Maximal sein ?!
Also ich hab einen 13 stelligen versucht. Er sucht und sucht und sucht. Da schwitzt meine CPU *g*
Und Ich habe das mit dem Zufall ohne Randomize Timer versucht. Kommt nun nicht immer vor das ich doppelte habe, aber doch noch recht oft.
Ich bin zu blöd dafür
@ programmierer
Ich möchte halt das er die anweisung so lange wiederholt bis alle unterschiedlich sind. *g*
Und für meine Wörterdatenbank dachte ich das ich das in Dezimalzahlen umwandlte um eine höhere Kompressionsrate zu erreichen. Ich weiß es gibt schon etwas integriertes in FreeBasic, aber ich würde es extern über Dos Winrar machen *fg* (SHELL ...)
Aber erstmal wird es zeit die datenbank zu füllen. Danke erstmal  _________________ MSI K8N Neo Platinum, Athlon 64 3200 Newcastel Sockel 754, 756 MB RAM, Radeon 9600pro 256 MB, 200 GB HDD, Windows XP PRO
(c) agentxi  |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.01.2006, 18:50 Titel: |
|
|
Der Ansatz von Programmierer ist korrekt, aber nicht zu Ende gedacht, korrekt heisst es:
Code: | LOOP UNTIL zahlenarray(1) <> zahlenarray(2) and zahlenarray(1) <> zahlenarray(3) and zahlenarray(2) <> zahlenarray(3) |
Und nun alles auf einmal:
Code: | DIM zahlenarray(1 TO 6) AS INTEGER
RANDOMIZE TIMER
zahlenarray(1) = INT(RND*6+1)
DO
zahlenarray(2) = INT(RND*6+1)
LOOP UNTIL zahlenarray(1) <> zahlenarray(2)
DO
zahlenarray(3) = INT(RND*6+1)
LOOP UNTIL zahlenarray(1) <> zahlenarray(2) and zahlenarray(1) <> zahlenarray(3) and zahlenarray(2) <> zahlenarray(3)
'...
PRINT zahlenarray(1)
PRINT zahlenarray(2)
PRINT zahlenarray(3)
PRINT zahlenarray(4)
PRINT zahlenarray(5)
PRINT zahlenarray(6)
SLEEP |
Wobei es sicher noch einfacher ginge ... _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
agentxi

Anmeldungsdatum: 09.01.2006 Beiträge: 3 Wohnort: Hamburg
|
Verfasst am: 09.01.2006, 19:44 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Der Ansatz von Programmierer ist korrekt, aber nicht zu Ende gedacht, korrekt heisst es:
Code: |
RANDOMIZE TIMER
zahlenarray(1) = INT(RND*6+1) |
|
Hier kann es Passieren das 7 Angezeigt wird. ((RND 1 *6+1=7)Da ich diese schleife ein paar tausend mal durchlaufen lassen werde, müßte man das mit einem IF rausfiltern.
Da ich immernoch nicht ganz verstehe wie die "Wortkombinationen.bas" funktioniert (siehe oben) frage ich mal so. Wie kann ich all diese Kombinationen in arrays speichern. Oder wird dies bereits gemacht nur sehe ich das nicht.
Außerdem ist das UnterProgramm fak und kombinationen falsch. Bei Mögliche Kombinationen werden mir immer 24 angezeigt, was ja schlecht stimmen kann.
Besonders da ich mit 6 und mehr zahlen das getestet habe. Fakulität von 6 = 720 z.B.... (=1*2*3*4*5*6)
Ich habe sie somit auskommentiert und es geht besser _________________ MSI K8N Neo Platinum, Athlon 64 3200 Newcastel Sockel 754, 756 MB RAM, Radeon 9600pro 256 MB, 200 GB HDD, Windows XP PRO
(c) agentxi  |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 09.01.2006, 20:06 Titel: |
|
|
"moin" hat ein Länge von 4 Zeichen und 4! ist nun mal 24..
fak rechnet richtig, laß' dir doch mal 6! ausgeben:
das ist wie du schon vermutet(sry) hast 720
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
vspickelen

Anmeldungsdatum: 12.06.2005 Beiträge: 13 Wohnort: Holland
|
Verfasst am: 11.01.2006, 18:20 Titel: |
|
|
So kann man's leicht & einwandfrei machen:
Code: | DEFINT A-Z
max = 6
DIM Zahl(max)
FOR i = 1 TO max
Zahl(i) = i
NEXT i
RANDOMIZE TIMER
FOR i = 1 TO max
j = 1 + INT(RND * max)
SWAP Zahl(i), Zahl(j)
NEXT i
CLS
FOR i = 1 TO max
PRINT Zahl(i);
NEXT i
SLEEP |
Und:
Code: | 'Subject: Variationen rekursiv berechnen, Anzahl = n! / (n - r)!
'Author : vspickelen
'Date : 01-11-2006
'Code : FreeBasic und alle Q-Basics
DEFINT A-Z
DECLARE SUB Perm (k)
DIM SHARED n, r, Vari$, Wort$
CLS
Wort$ = "CHEIST" ' Eingabe
Vari$ = "TISCH"
n = LEN(Wort$)
r = LEN(Vari$)
IF r > n THEN END
DIM SHARED p(n)
FOR i = 1 TO n ' Zeigern initialisieren
p(i) = i
NEXT i
Perm 1
END
SUB Perm (k)
STATIC t
FOR j = k TO n
SWAP p(k), p(j)
IF k < r THEN
Perm k + 1 ' Rekursion
ELSE
g$ = STRING$(r, " ")
FOR i = 1 TO r
MID$(g$, i, 1) = MID$(Wort$, p(i), 1)
NEXT i
t = t + 1 ' nPr Zahler
g$ = STR$(t) + ":" + g$
PRINT g$; ' Variation
IF INSTR(g$, Vari$) THEN SLEEP 'Funde
END IF
SWAP p(k), p(j)
NEXT j
END SUB
|
Gruß,
vspickelen |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 11.01.2006, 18:40 Titel: |
|
|
Klasse, das zieh ich mir gleich mal(erst runter, dann) rein
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
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.
|
|