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:

QBasic Problem Binäarzufallszahlen Erstellung

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



Anmeldungsdatum: 18.03.2008
Beiträge: 2

BeitragVerfasst am: 18.03.2008, 18:49    Titel: QBasic Problem Binäarzufallszahlen Erstellung Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.03.2008, 21:51    Titel: Antworten mit Zitat

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
Code:
dim hoch as long

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 19.03.2008, 02:34    Titel: Antworten mit Zitat

Hallo Rodney1989

Das

Code:
hoch = 2 ^ ges


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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Rodney1989



Anmeldungsdatum: 18.03.2008
Beiträge: 2

BeitragVerfasst am: 19.03.2008, 10:40    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 19.03.2008, 22:07    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Spezielle Fragen 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