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:

"Karten"-mischen

 
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
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 17.08.2007, 00:05    Titel: "Karten"-mischen Antworten mit Zitat

Ich will ein programm basteln, das so etwas kann wie karten mischen...
die karten sind in dem fall zahlen von 1-36 bzw. 1-32 die in unterschiedlicher reihenfolge im screen/ text fenster angezeigt werden sollen (gleichzeitig).
Norm. würde ich sagen randomize timer (int(rnd*32)+1)
aber wenn alle gleichzeigig dargestelltwerden sollen, ist das problem da, das bestimmte karten doppelt auftauchen würden, wie kann ich das ohne viel aufwand (und code) lösen?
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 17.08.2007, 00:13    Titel: Antworten mit Zitat

Code:

Randomize Timer

Dim test(1 to 10) as integer
locate 1,1
for l as integer=1 to 10
    test(l)=l
    ?l;test(l)
next l

'' hier wird gemischt!!
Dim Shuf1 as Integer
Dim Shuf2 as Integer

for l as integer=0 to int(rnd*100)+1
    Shuf1=int(rnd*UBound(test))+1
    Shuf2=int(rnd*UBound(test))+1
    swap Test(Shuf1),Test(Shuf2)
next l
''mischen ende...


for l as integer=1 to 10
    locate l,40:?l;test(l)
next l

sleep

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 17.08.2007, 00:16    Titel: Antworten mit Zitat

Rein zufällig, aber der Code funzt lachen
Code:
randomize timer
const karten = 32
dim karte_gelegt(1 to karten) as integer
dim as integer karte,gelegte_karten

do
    karte=int(rnd *karten)+1
    if karte_gelegt(karte)=0 then
        print karte
        gelegte_karten + = 1
    end if
   
    karte_gelegt(karte)=1
loop until gelegte_karten = karten
sleep


//Edit
Wenn noch etwas fehlt wird der code dementsprechend optimiert
Aber ich denke, dass die fehlenden sachen man da leicht hinzufügen kann.
Mit der constante Karten kann selber entschieden werden ob es nun 32 oder doch 36 sind zwinkern

Wie das geht, ist wohl klar..
Dieser Code sollte es verdeutlichen zwinkern
Code:
randomize timer
const karten = 10
dim karte_gelegt(1 to karten) as integer
dim as integer karte,gelegte_karten

do
    karte=int(rnd *karten)+1
    if karte_gelegt(karte)=0 then
        print "neue karte = ";karte
        gelegte_karten + = 1
    else
        print "doppelte karte = ";karte
    end if
   
    karte_gelegt(karte)=1
loop until gelegte_karten = karten
sleep

Es werden einfach bereits vorhandene Zahlen gefiltert.
Das ist Zwar nicht die schnellste Methode, aber für bis zu 1000 Zahlen die einfachste zwinkern, ab dann die die Geschwindigkeit merklich nachlässt. (Insbesondere, wenn noch weiterer Code mit einflisst.)
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 17.08.2007, 00:53    Titel: Antworten mit Zitat

ich denke mal das genau an solchen stellen die schwachstellen einer programmiersprache erkennbar sind...
nicht jedes problem lässt sich schnell UND einfach lösen... entweder man beansprucht die CPU ODER hat 200 zeilen mehr code, um das ganze mal drastisch darzustellen...
danke für die hilfe, ich werd morgen mal das programm zuende basteln damit meine mutter watt zum "spielen" hat
(sie legt karten... deswegen die 36 happy)
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 17.08.2007, 00:57    Titel: Antworten mit Zitat

AndT wenn Du Dir mein Beispiel angesehen haettest, haettest Du gemerkt das es genau das Tut, was erfragt wurde, und zwar mischen ohne das ich irgendwo pruefen muss ob irgendwo was doppelt ist ect.. einfacher gehts nun wirklich nicht mehr...

Edit:
http://forum.qbasic.at/viewtopic.php?t=4588
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
nemored



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

BeitragVerfasst am: 17.08.2007, 21:41    Titel: Antworten mit Zitat

Im Übrigen hatten wir vor kurzem schon eine Diskussion über Mischverfahren am Laufen. zwinkern
_________________
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
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