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:

Zufällige Zahlen erstellen

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



Anmeldungsdatum: 17.06.2009
Beiträge: 6

BeitragVerfasst am: 17.06.2009, 15:35    Titel: Zufällige Zahlen erstellen Antworten mit Zitat

Hallo alle zusammen,

Ich habe eine erste Frage:

Ich will die Zahlen 1-26 zufällig erstellen. Und ich blicke leider nicht ganz hinter die Random- und Randomizebefehle.

Kann mir jemand nen kurzes Beispiel geben, wie ich das machen kann?

MfG Exitus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.06.2009, 15:43    Titel: Antworten mit Zitat

Hallo,

benötigst du nur eine Zufallszahl aus dem Intervall [1;26] oder benötigst du alle Zahlen des Intervalls in zufälliger Reihenfolge?

Wenn nur eine Zahl nötig ist, funktioniert das ganz einfach:
Code:
RANDOMIZE TIMER
DIM Zahl AS INTEGER
Zahl = INT(RND*26)+1
PRINT Zahl
SLEEP


Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Exitus91



Anmeldungsdatum: 17.06.2009
Beiträge: 6

BeitragVerfasst am: 17.06.2009, 15:47    Titel: Antworten mit Zitat

Ich habe vor, jedem Buchstaben als Variable zu speichern(also A-Z) und dann jedem eine zufällige Zahl von 1-26 zuzuteilen, ohne dass es eien Zahl 2 mal gibt.

Ich könnte natürlich immer wieder eine zufällige Zahl erstellen lassen, überprüfen ob eine der variablen die Zahl schon hat und dann jede Variable von a-z durchgehen, ob die schon eine Zahl haben.

Oder fällt dir grad was leichteres ein?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.06.2009, 15:53    Titel: Antworten mit Zitat

Hallo,

meinst du das so?
Code:
DIM Buchstaben(1 To 26) As UBYTE
DIM AS INTEGER i, j, fund
RANDOMIZE TIMER
For i = 1 to 26
    Do
        Buchstaben(i) = INT(RND*26)+1
        IF i > 1 Then 'Prüfen, ob die Zahl bereits vergeben ist:
            fund = 0
            For j = 1 TO (i-1)
                If Buchstaben(j) = Buchstaben(i) Then
                    fund = 1 'Ja, die Zahl gab es schon.
                    Exit For
                End If
            Next j
        End If
    Loop Until fund = 0 'Wiederholen, falls die Zahl bereits da war
Next i
Width 80,50
Print "Den Buchstaben wurden die folgenden Werte zugeordnet:"
For i = 1 To 26
    PRINT CHR(64+i) & " = " & Buchstaben(i)
Next i
Sleep
End


Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Exitus91



Anmeldungsdatum: 17.06.2009
Beiträge: 6

BeitragVerfasst am: 17.06.2009, 16:04    Titel: Antworten mit Zitat

Ich bin schwer beeindruckt geschockt
Jetzt habe ich die einzelnen Zahlen aber noch nicht in Variablen, oder?

Ich will am Schluss einen Code eingeben können (z.B. AZGBH) und dann alle Zahlen in den Variablen addieren und mit denen eines anderen Codes vergleichen. Wenn diese gleich sind soll er mir nur nen "Ja" oder sowas zeigen, wobei ich das selbst kann. Nur die Zahlen in Variablen speichern kann ich nicht.

MfG Exitus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.06.2009, 16:25    Titel: Antworten mit Zitat

Exitus91 hat Folgendes geschrieben:
Jetzt habe ich die einzelnen Zahlen aber noch nicht in Variablen, oder?

Doch, die Zahlen befinden sich in einem Array, nämlich in Buchstaben(). Eine Variable kannst du dir so vorstellen wie eine Schublade. Ein Array ist ein Schränkchen mit mehreren Schubladen übereinander, die alle den gleichen Namen haben und über einen sog. Index ausgewählt werden.

Mit
Code:
DIM Buchstaben(1 To 26) AS UBYTE

werden 26 Variablen angelegt: Buchstaben(1), Buchstaben(2), Buchstaben(3), ...

Zitat:
Ich will am Schluss einen Code eingeben können (z.B. AZGBH) und dann alle Zahlen in den Variablen addieren

So?
Code:
DIM Buchstaben(1 To 26) As UBYTE
DIM AS INTEGER i, j, fund, summe
DIM AS STRING Text
RANDOMIZE TIMER
For i = 1 to 26
    Do
        Buchstaben(i) = INT(RND*26)+1
        IF i > 1 Then 'Prüfen, ob die Zahl bereits vergeben ist:
            fund = 0
            For j = 1 TO (i-1)
                If Buchstaben(j) = Buchstaben(i) Then
                    fund = 1 'Ja, die Zahl gab es schon.
                    Exit For
                End If
            Next j
        End If
    Loop Until fund = 0 'Wiederholen, falls die Zahl bereits da war
Next i
Width 80,50
Print "Den Buchstaben wurden die folgenden Werte zugeordnet:"
For i = 1 To 26
    PRINT CHR(64+i) & " = " & Buchstaben(i)
Next i
Print
Input "Jetzt Text eingeben: ", Text
Text = UCASE(Text) 'Alles in Großbuchstaben verwandeln
summe = 0
For i = 1 To Len(Text)
    j = ASC(MID(Text,i,1))-64
    If j > 0 AND j < 27 Then
        summe += Buchstaben(j)
    Else
        Print "Fehlerhaftes Zeichen: " & chr(34) & MID(Text,i,1) & chr(34)
    End If
Next i
Print "Summe = " & summe
Sleep
End

_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Exitus91



Anmeldungsdatum: 17.06.2009
Beiträge: 6

BeitragVerfasst am: 17.06.2009, 16:31    Titel: Antworten mit Zitat

Okay, ich hab den Code etwas verändert und jetzt arbeitet es solange, bis die Werte für die bestimmten Codes gleich sind. Allerdings wird in der Befehlszeile jetzt angezeigt, dass bestimmte Zahlen bis 90 gehen.

hier der Code:
Code:
anfang:
DIM Buchstaben(1 TO 26) AS UBYTE
DIM AS INTEGER i, j, fund
DIM AS STRING Text
RANDOMIZE TIMER
FOR i = 1 TO 26
    DO
        Buchstaben(i) = INT(RND*26)+1
        IF i > 1 THEN 'Prüfen, ob die Zahl bereits vergeben ist:
            fund = 0
            FOR j = 1 TO (i-1)
                IF Buchstaben(j) = Buchstaben(i) THEN
                    fund = 1 'Ja, die Zahl gab es schon.
                    EXIT FOR
                END IF
            NEXT j
        END IF
    LOOP UNTIL fund = 0 'Wiederholen, falls die Zahl bereits da war
NEXT i
WIDTH 80,50
PRINT "Den Buchstaben wurden die folgenden Werte zugeordnet:"
FOR i = 1 TO 26
    PRINT CHR(64+i) & " = " & Buchstaben(i)
NEXT i
PRINT
Text = "FBLVVWEATMUN"
DIM AS Integer summe1, summe2
summe1 = 0
FOR i = 1 TO LEN(Text)
    j = ASC(MID(Text,i,1))-64
    IF j > 0 AND j < 27 THEN
        summe1 += Buchstaben(j)
    ELSE
        PRINT "Fehlerhaftes Zeichen: " & CHR(34) & MID(Text,i,1) & CHR(34)
    END IF
NEXT i
summe1 += 26
PRINT "Summe = " & summe1
PRINT
Text = "BUNDHEDVTRAR"
summe2 = 0
FOR i = 1 TO LEN(Text)
    j = ASC(MID(Text,i,1))-64
    IF j > 0 AND j < 27 THEN
        summe2 += Buchstaben(j)
    ELSE
        PRINT "Fehlerhaftes Zeichen: " & CHR(34) & MID(Text,i,1) & CHR(34)
    END IF
NEXT i
summe2 += 15
PRINT "Summe2 = " & summe2
IF summe1 <> summe2 Then
goto anfang
Else
Sleep
End IF
END


Wisst ihr, wieso? oder ist das nur ein Anzeigefehler?

MfG Exitus
PS: Dass den Summen 1 und 2 bestimmte Werte dazuaddiert werden stimmt schon zwinkern Und die vorgegebenen Buchstaben auch^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Ferdi



Anmeldungsdatum: 10.03.2007
Beiträge: 284
Wohnort: Berlin

BeitragVerfasst am: 17.06.2009, 17:52    Titel: Antworten mit Zitat

Exitus91 hat Folgendes geschrieben:
Allerdings wird in der Befehlszeile jetzt angezeigt, dass bestimmte Zahlen bis 90 gehen.

Verstehe ich nicht!

Mir zeigt er das:
Zitat:
Den Buchstaben wurden die folgenden Werte zugeordnet:
A = 11
B = 36
C = 16
D = 26
E = 63
F = 50
G = 71
H = 25
I = 10
J = 21
K = 19
L = 17
M = 24
N = 95
O = 23
P = 41
Q = 15
R = 17
S = 24
T = 13
U = 20
V = 14
W = 84
X = 18
Y = 12
Z = 22

Summe = 170

Summe2 = 170


Aber nirgendwo steht "90"

MfG
Ferdi

PS.: Ich liebe den WebFBC zwinkern
_________________
Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 17.06.2009, 19:05    Titel: Antworten mit Zitat

"Manche Zahlen gehen bis 90" heißt doch nicht, dass irgendwo genau 90 rauskommen muss ...

Keine Ahnung, was ich falsch mache, aber bei mir kommen immer nur Zahlen von 1 bis 26 raus.

edit: hmm, vielleicht ist das bei euch wirklich ein Darstellungsfehler; probiere mal immer vor der Ausgabe ein CLS, ob das dann immer noch passiert. Bei mir werden die Zeilen einfach weitergeschoben, das habe ich keine Probleme.
_________________
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
Exitus91



Anmeldungsdatum: 17.06.2009
Beiträge: 6

BeitragVerfasst am: 17.06.2009, 19:55    Titel: Antworten mit Zitat

Ich habe jetzt am Schluss nach dem Sleep nochmal ein

Code:
goto anfang

eingefügt. Damit sich des ganze praktisch immer wieder wiederholt. Und dann passiert das.
Und dann auch nicht beim ersten Durchlauf, sondern erst bei dem zweiten.

MfG Exitus
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.06.2009, 20:01    Titel: Antworten mit Zitat

Hallo,

dann mach doch das
Code:
WIDTH 80,50

ganz an den Anfang des Programms, gleich hinter die DIMs.
Die Sprungmarke anfang: würde ich erst vor RANDOMIZE TIMER einfügen (und nicht gleich ganz an den Anfang), also nach den DIMs und nach WIDTH.

Und nach der Sprungmarke würde ich
Code:
CLS

einfügen.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



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

BeitragVerfasst am: 17.06.2009, 20:09    Titel: Antworten mit Zitat

Exitus91 hat Folgendes geschrieben:
Und dann auch nicht beim ersten Durchlauf, sondern erst bei dem zweiten.

Da wird bei dir bestimmt einfach nur ein bereits geschriebener Wert mit einem anderen überschrieben; und wenn da schon z.B. 19 steht und mit 7 überschrieben wird, dann bleibt ein 79 übrig. Probiere mal das, was Sebastian geschrieben hat.
_________________
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
Exitus91



Anmeldungsdatum: 17.06.2009
Beiträge: 6

BeitragVerfasst am: 17.06.2009, 21:47    Titel: Antworten mit Zitat

Wow, es klappt grinsen Danke euch allen lächeln
Und besonders Sebastian zwinkern
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 FreeBASIC. 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