VB : Zufall Zahlen (keine Doppelten)

  • #1
A

Alexander16

Bekanntes Mitglied
Themenersteller
Dabei seit
26.08.2002
Beiträge
473
Reaktionspunkte
0
Hi Leute :D

Ich habe mal wieder ein Problem !!

Ich will mir ein Quiz-Spiel basteln.
Die (15)Fragen werden per Zufall gewählt.
Wenn alle durchgefragt sind werden die Ergebnisse ausgerechnet.

Das Problem:
Wie kann ich das machen das sie per Zufall gewählt werden, aber im Spiel keine doppelten Fragen auftauchen?.

Rufe um Hilfe !!!! *gg*

Mfg Alexander
 
  • #2
Hmm... ich weiß nicht wie einfach oder kompliziert man das machen kann, aber ansich ist das ganz einfach.

Du erzeugst einfach deine Zufallszahl und lässt dann die Frage anzeigen. Dabei packst du die Zahl einfach in einen String.

Dim gestellteFragen as String

Und dann erweiterst du den String einfach mit der jeweils gestellen Fragennummer

gestellteFragen=gestellteFragen + nummer

Alles was du jetzt nur ncoh machen musst ist eine If-Bedingung schreiben in der du prüfst, ob die erzielte Zufallszahl bereits in deinem String enthalten ist.

If Instr.... then

Das wars dann schon.
 
  • #3
Mit nem String wäre es evtl. zu kompliziert bzw. das Progi könnte Probleme damit bekommen. Und zwar, wenn:
1. Frage hat die ID 12 --> String=12
2. Frage hat die ID 21 --> String=1221;

Wenn du jetzt die Frage mit der ID 22 hinzufügen willst, wird das - wenn ich dich richtig verstanden habe - aber nicht gehen, da in dem String 1221 die 22 ja vorhanden ist.

Pack die IDs besser in ein Array, das du dann immer durchläufst und die aktuelle Frage-ID mit den Feldern im Array vergleichst.

Ich hab zwar keine Ahnung von VB, aber Syntaxmäßig dürfte das folgende auf jeden Fall zu verstehen sein:
Code:
passt = true;
anzahl=0;
while (anzahl<15)    //Du willst 15 Frage generieren
{
 zahl=random(...);      //Hier halt die zufällige Zahl ermitteln
 for (j=0; j<laenge_des_arrays; j++)
 {
  //Zahl mit Array-Feld an der Stelle j vergleichen. 
  //Wenn eine Übereinstimmung ist, dann passt auf false setzen
  //und innere FOR-Schleife beenden
  if (zahl == das_array[j])   
  {
   passt = false;
   break;
  }
 }
 //Wenn keine Übereinstimmung
 if (passt == true)
 {
  //Die zahl an das Ende des Arrays einfügen, um spätere
  //Fragen auch mit dieser vergleichen zu können
  das_array[laenge_des_arrays]=zahl;
  ...    //Hier die Frage ausgeben und so weiter
 }
 anzahl++
}
Ich hoffe es war verständlich...

Greetz
Michael
 
  • #4
Hi,

Wenn du jetzt die Frage mit der ID 22 hinzufügen willst, wird das - wenn ich dich richtig verstanden habe - aber nicht gehen, da in dem String 1221 die 22 ja vorhanden ist.

das ist aber kein Problem, sondern nur, wenn man eins draus macht ;D

Es ist ja nun kein Ding ncoh nen Komma dazwischen zu packen ;D
 
  • #5
da hast du dann auch wieder recht... ;D
 
  • #6
Sorry ich versteh nicht ganz wie das jetzt gehen soll bin noch Anfänger in Sachen programmieren

Gibt es vielleicht noch einfachere Lösungen?

Mfg Alexander
 
  • #7
Verstehst du es vom Prinzip her nicht oder weisst du nicht wie du das in VB umsetzen sollst?

Ich habe nämlich leider keinen Schimmer von VB.
 
  • #8
Hi

Sorry für die späte Antwort. ;D

Also ich weiß nicht wie ich es in Visual Basic schreiben soll. ???

Mfg Alexander
 
  • #9
Da kann ich dir dann leider auch net helfen...
Sorry
 
  • #10
'//Deklaration:
private Type sPP
Frage as String
Antwort as String
used as Boolean
end type
private Fragen(1 to 15) as sPP

for i=1 to 15
if Fragen(i).used=False then
fragen(i).used=true
exit for
end if
next i

Der klappt 100 %
mfg
Xivender
 
  • #11
Vielen Dank Xivender :)

Das Problem wurde jedoch schon im Jahre 2002 gelöst ;D ;)

Mfg Alexander
 
  • #12
Guten Tag zusammen, ich entschuldige mich vorweg für meine (eventuelle) Dummheit!

Google und SuFu haben mich leider nicht weiter gebracht, deswegen versuche ich es bei euch, in der Hoffnung, es kann mir jemand helfen.

Hab gestern versucht eine externe Festplatte in Fat32 formatieren zu wollen, da es schnell gehen musste habe ich mich einfach so durchgeklickt. :(
Da es mit Fat32 unter Win 7 so einfach nicht mehr möglich ist habe ich im Netz schnell ein Programm gesucht und bin auf Partition Magic 8 gestoßen, war auch glaub ich nur eine Testversion. Dabei ist mir auf die Schnelle garnicht aufgefallen, das es nicht für Win 7 geeignet ist.
Hab mich da auch leider (auf Grund von Zeitnot) nicht von beirren lassen und den Kompatiblitätsmodus von Win 7 aktiviert und das Ganze auf Win XP Sp3 gestellt, und das Programm lief.
Leider konnte das Progamm nur in exFat formartieren, was für meine Zwecke ungeeignet war. - Hab dann auch eigentlich nicht weiter damit rumgespielt und das Programm geschlossen.

Heute morgen kam das böse erwachen, als ich meinen PC angemacht habe war nur noch eine Partition von dreien meiner internen Festplatte vorhanden!?!
Die Datenträgerverwaltung unter Windows zeigt mir nur noch die größen der beiden Platten an - einmal 100 GB und einmal 700 GB. Laufwerkbuchstaben und Pfade ändern bleibt ohne Erfolg, da erscheint eine Fehlermeldung. (Der Vorgang konnte nich abgeschlossen werden, weil die Ansicht des Datenträgerverwaltungs-Snap-Ins nicht aktuell ist... - Aktualisieren oder Neustart ohne besserung).

Wenn ich heute wieder Partition Magic starten möchte sagt er mir direkt beim laden "Init failed:Error 117. - Partitions's drive letter cannot be identified." und das Programm schließt sich.

Liegt es an dem Programm oder ist es ein andere Fehler der aufgetreten ist?
Gibt es eine möglichkeit die beiden Partitionen wieder zurück zu gewinnen mit möglichst keinem Datenverlust?
Hoffe auf Hilfe von Euch.
Vielen Dank im Voraus.


Gruß
Smutje

Betriebssystem: Windows 7 Pro 64bit
1000 GB S-ATA Festplatte
für weitere Auskünfte immer gerne
 
  • #13
  • Du kannst dir eine Linux-Live-CD runterladen - z.B. "PartedMagic".
  • Von dieser kannst du dann booten und dort das Programm "TestDisk" starten (im Menü "System Tools")
  • Mit "TestDisk" solltest du "verlorene" Partitionen wieder rekonstruieren können
 
Thema:

VB : Zufall Zahlen (keine Doppelten)

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben