|
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 |
Rodney1989
Anmeldungsdatum: 18.03.2008 Beiträge: 2
|
Verfasst am: 18.03.2008, 19:49 Titel: QBasic Problem Binäarzufallszahlen Erstellung |
|
|
Moin,
ich erstelle gerade ein Programm, was mir 6000 Zufallszahlen aus 100000 Zahlen (von 1 - 100000) generiert.
Ich komme jedoch nicht weiter hier ersteinmal der code:
cls
open #1
Randomize timer
zwischen = STRING(12500, CHR$(0))
for i = 1 to 6000
nochmal:
Zahl = INT(RND * 100000)
if zahl = 0 then goto nochmal
zahlteil = zahl / 8
If zahlteil <> INT(zahlteil) then
zahlteil = INT(zahlteil)
neu = zahlteil * 8
ges = zahl - neu - 1
zahlteil = zahlteil +1
else
ges = 0
end if
hoch = 2 ^ ges
abtr$ = mid$(zwischen, zahlteil, 1)
ascii = ASC(abtr$)
undpruef = ascii AND hoch
If undpruef = hoch then
goto nochmal
end if
Print #1, zahl
next
Irgendetwas scheint mit den hoch nicht zu stimmen.
Das Problem ist ich soll diese Aufgabe so lösen.
Jedes Byte in 8 Bit aufteilen und wenn ein Bit schon einmal verwendet wurde, so soll das Programm erkennen, ob die Zahl schoneinmal gezogen wurde.
Der erste teil scheint ganz in Ordnung zu funktionieren aber
ab der Sache mit den Hoch komm ich nicht voran, ich hoffe ihr könnt helfen. |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.03.2008, 22:51 Titel: |
|
|
kannst du bitte beschreiben, was dein problem ist? ich würde spontan vermuten, dass die Zahl, die in die Variable "hoch" soll, zu groß für den Datentyp single (standard) ist. versuch mal als erste zeile
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 19.03.2008, 03:34 Titel: |
|
|
Hallo Rodney1989
Das
ist eine der wenigen Stellen des Programms, die keine Probleme macht, weil in ges nur ganze Zahlen zwischen -1 und 6 stehen können. Ansonsten finde ich das Ganze aber so wirr, dass ich keine Ahnung habe, was du vor hast. Kannst du nicht mal die genaue Aufgabenstellung posten?
Gruß & Willkommen im Forum
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
|
Rodney1989
Anmeldungsdatum: 18.03.2008 Beiträge: 2
|
Verfasst am: 19.03.2008, 11:40 Titel: |
|
|
Hi,
hier nocheinmal überarbeitet:
cls
open #1
Randomize timer
zwischen = STRING(12500, CHR$(0))
for i = 1 to 6000
nochmal:
Zahl = INT(RND * 100000)
if zahl = 0 then goto nochmal // 0 darf nicht gezogen werden.
zahlteil = zahl / 8 // zahl wird geteilt, denn 1 Byte = 8 bit
If zahlteil <> INT(zahlteil) then //Wenn sie nicht gerade ist
zahlteil = INT(zahlteil) // gerade machen
neu = zahlteil * 8 //neu = zahlteil * 8 um mit ges = ... nachher den rest herauszubekommen, welches
Byte die Zahl nachher belegt
ges = zahl - neu - 1 // wie vorherige zeile beschrieben, -1 weil ich ein byte weiterspringen muss
zahlteil = zahlteil +1 // zahlteil++
else
ges = 8 - 1 // wenn sie gerade ist ges = 0
end if
hoch = 2 ^ ges
abtr$ = mid$(zwischen, zahlteil, 1)
ascii = ASC(abtr$)
undpruef = ascii AND hoch
If undpruef = hoch then
goto nochmal
end if
// jetzt weiß ich ab hier nicht weiter , jetzt soll das bit im Byte auf eins gesetzt werden
Print #1, zahl
next
Das Problem ist ich soll diese Aufgabe so lösen.
Jedes Byte in 8 Bit aufteilen und wenn ein Bit schon einmal verwendet wurde, so soll das Programm erkennen, ob die Zahl schoneinmal gezogen wurde.
Das Problem liegt nun darin, das das bit auf 1 gesetzt werden muss. |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 19.03.2008, 23:07 Titel: |
|
|
Hallo
Es hat etwas gedauert, bis ich kapiert hatte, was du vor hast, aber ich glaube, ich habe es jetzt verstanden. Vielleicht hilft dir das hier weiter:
Code: | CLS
zwischen$ = STRING$(12500, CHR$(0))
RANDOMIZE TIMER
nochfinden = 6000
OPEN "zufall.txt" FOR OUTPUT AS #1
DO
DO
zahl& = INT(RND * 100000) + 1
stelle% = INT((zahl& - 1) / 8) + 1
bit% = zahl& MOD 8
bitwert% = 2 ^ bit%
byte% = ASC(MID$(zwischen$, stelle%, 1))
LOOP WHILE (byte% AND bitwert%) = bitwert%
neubyte$ = CHR$(byte% + bitwert%)
neuzwischen$ = LEFT$(zwischen$, stelle% - 1)
neuzwischen$ = neuzwischen$ + neubyte$
zwischen$ = neuzwischen$ + RIGHT$(zwischen$, 12500 - stelle%)
PRINT #1, zahl&
nochfinden = nochfinden - 1
LOOP UNTIL nochfinden = 0
CLOSE #1 |
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
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.
|
|