Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Exitus91
Anmeldungsdatum: 17.06.2009 Beiträge: 6
|
Verfasst am: 17.06.2009, 15:35 Titel: Zufällige Zahlen erstellen |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Exitus91
Anmeldungsdatum: 17.06.2009 Beiträge: 6
|
Verfasst am: 17.06.2009, 15:47 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 17.06.2009, 15:53 Titel: |
|
|
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 |
|
 |
Exitus91
Anmeldungsdatum: 17.06.2009 Beiträge: 6
|
Verfasst am: 17.06.2009, 16:04 Titel: |
|
|
Ich bin schwer beeindruckt
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 17.06.2009, 16:25 Titel: |
|
|
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 |
|
 |
Exitus91
Anmeldungsdatum: 17.06.2009 Beiträge: 6
|
Verfasst am: 17.06.2009, 16:31 Titel: |
|
|
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 Und die vorgegebenen Buchstaben auch^^ |
|
Nach oben |
|
 |
Ferdi

Anmeldungsdatum: 10.03.2007 Beiträge: 284 Wohnort: Berlin
|
Verfasst am: 17.06.2009, 17:52 Titel: |
|
|
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  _________________ Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit! |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 17.06.2009, 19:05 Titel: |
|
|
"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 |
|
 |
Exitus91
Anmeldungsdatum: 17.06.2009 Beiträge: 6
|
Verfasst am: 17.06.2009, 19:55 Titel: |
|
|
Ich habe jetzt am Schluss nach dem Sleep nochmal ein
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 17.06.2009, 20:09 Titel: |
|
|
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 |
|
 |
Exitus91
Anmeldungsdatum: 17.06.2009 Beiträge: 6
|
Verfasst am: 17.06.2009, 21:47 Titel: |
|
|
Wow, es klappt Danke euch allen
Und besonders Sebastian  |
|
Nach oben |
|
 |
|