Générer aléatoirement des valeurs d'un tableau

Bonsoir Curulis57,

J'ai essayé de résoudre le 3 ème exercice mais je n'arrive pas à comparer une seule coordonnée(inb2 qu'est la couleur) d'un tableau sans l'autre (inb1 qu'est le numéro), je ne vois pas comment pourrai me servir du mod enfaite, merci d'avance, enfaite je révise d'autres matières en mm temps vu que les examens approchent c'est pour cela que je ne suis pas très actif !

Enfaite comment puis-je présenter une valeur d'une variable choisie, c'est à dire dans mon cas j'ai " inb2 ", je voudrai l'écrire par exemple pour la valeur i=1, ça crée un espace entre le 1 et le nb2 en s'écrivant ainsi 1 nb2, du coup ça ne marche pas, mon but est de fixer une valeur de inb2 ( une certaine couleur) et la comparer au reste des couleurs

Salut Usanas,

courage pour ta 'bloque' !

Mais... tu peux m'expliquer ?

ça crée un espace entre le 1 et le nb2


A+

Merci, d'habitude quand j'utilise les tableaux 1D : par exemple : nb(i), si pour i=1 j'ai une valeur de 10 par exemple, je peux l'écrire nb(1)= 10

mais si j'utilise inb au lieu de nb(i) je ne peux pas faire de même, c'est à dire pour i=1 j'ai 10, je ne peux pas écrire 1nb=10

Euh... rien compris...

Dim carte(1 To 13, 1 To 4) As Integer
Do
    iNb1 = Int(13 * Rnd) + 1            'tirage du n° de carte
    iNb2 = Int(4 * Rnd) + 1             'tirage de la couleur (1-3 = rouge, 2-4 = noir)...
Loop Until carte(iNb1, iNb2) = 0      'boucle jusqu'à (UNTIL) trouver une carte non tirée

Le tableau carte(x,y) a 2 dimensions :
- 1) de 1 à 13 = valeur de la carte : 1= As, 2, 3, 4, ..., 11 = Valet, 12= Dame, 13 = Roi
- 2) de 1 à 4 = couleur de la carte. Ici, c'est toi qui décide selon la logique que tu veux mettre en place : 1 = Coeur, 2 = Pique, 3 = Carreau, 4 = trèfle

Quand tu déclares le tableau, celui-ci est à zéro : carte(12, 2) = 0
Dans le cas particulier de cet exercice, les valeurs de ce tableau SONT DÉJÀ les cartes elles-mêmes !

Supposons, via RND() que iNb1= 12 et iNb2 = 2 -> carte(12, 2) = 0 du fait de la déclaration du tableau (DIM).
Ce qui nous intéresse, c'est de savoir si cette carte a déjà été tirée ou non du paquet : or, nous avons 0 = pas encore tirée.
Puisque cette carte vient d'être tirée, nous le signalons à la boucle DO...LOOP en inscrivant carte(12, 2) = 1.

Reste à tirer parti de ce tirage. Oublions le fait que je fais joujou avec MsgBox...
Ton prof te demande d'attribuer des points en fonction du nombre de cartes de même couleur

Tu dois donc additionner dans une variable quelconque cette addition : rouge ou noir.
Perso, j'utilise un tableau mais deux variables indépendantes auraient pu faire l'affaire aussi.

Donc, je déclare un tableau à 2 dimensions, 1 pour chaque couleur : Dim tColor(2) As Integer, donc = tColor(0 to 1)... Et oui...
Et pourquoi pas Dim tColor(1 to 2), penses-tu ?
C'est là que tes connaissances mathématiques (et, crois-moi, les miennes sont infinitésimales !) entrent en jeu car, c'est à toi, en toutes circonstances, à mettre au point des techniques de calcul aptes à tirer parti le plus efficacement possibles des données en ta possession.

Pour déterminer à quelle dimension de mon tableau tColor() va correspondre mes couleurs, j'utilise MOD(ulo).

Rappel : 1 et 3 = rouge - 2 et 4 = noir
- 1(=iNb2) MOD 2 = 1 - 3(=iNb2) MOD 2 = 1
- 2(=iNb2) MOD 2 = 0 - 4(=iNb2) MOD 2 = 0

Donc, si iNb2 = 2 -> 2 MOD 2 = 0, tColor(iNb2 MOD 2) = tColor(0) +1, simplement...

Comparaison finale : aïe, prépare les neurones !
5 cartes de même couleur = 15 pts, 4 = 10 pts et 3 = 5 pts.

iNb = IIf(tColor(0) > tColor(1), 0, 1)
"Bravo, vous avez gagné " & (tColor(iNb) - 2) * 5 & " points !"

Supposons que tu aies choisi 4 cartes rouges -> tColor(1) = 4
- iNb calcule quelle couleur est supérieure à l'autre : si tColor(0) > tColor(1), alors iNb = 0 sinon iNb = 1
-
alors (tColor(1) - 2) * 5 -> (4 - 2) * 5 = 10 points.

Le -2, il ne tombe pas du ciel ni des mystères de l'informatique, c'est bel et bien toi et toi seul qui l'instaure en fonction des données présentes.

Tu lis ça, tu essaies de bien comprendre et je t'envoie le fichier.


A+

Bonjour Curulis57,

J'espère que tu vas bien, désolé pour le dérangement encore mais franchement je n'ai pas réussi à saisir l'utilité du mod ici et quelques points aussi, pck d'habitude je fais la comparaison des valeurs d'un tableau 1D avec une autre méthode : je fixe la première valeur du tableau par exemple : couleur(1)=carte (1) et puis je fais 2 boucles imbriquées , afin de comparer le reste des valeurs à cette première valeur et à chaque fois que y'a égalité je compte le nombre de fois, mais là avec un tableau 2D je ne saurai pas le faire, encore moins avec le mod.

merci d'avance

Salut Usanas,

petite (grosse) erreur de ma part : tColor(2) est un tableau à 1 dimension et non 2 comme écrit précédemment....
Tu peux m'envoyer ton système de boucles imbriquées pour ce décompte des couleurs des cartes ?


A+

Bonjour,

Le voici, mais il manque quelque chose pck'il ne marche quand même pas :

Dim couleur(10) As Integer
Dim tot3 As Integer 'Nombre cartes de même couleur

couleur(1) = (inb2 = 1)
For i = 2 To q    'q étant les 5 cartes choisies par le joueur
    For j = 1 To q - 1
        If inb2 = couleur(j) Then
            tot3 = tot3 + 1
        End If
    Next j
Next i

MsgBox tot3

If tot3 = 4 Then
    MsgBox "vous avez marqué 15 points"
ElseIf tot3 = 3 Then
    MsgBox "vous avez marqué 10 points"
ElseIf tot3 = 2 Then
    MsgBox "vous avez marqué 5 points"
End If
End Sub

Usanas, tu ne tiens compte ni des consignes du prof ni des codes que je t'ai envoyé depuis le début !!
Libre à toi de n'en faire qu'à ta tête mais si tu penses réussir ainsi, bonne chance !

- tu dois tirer des CARTES À JOUER, donc un jeu de 4 couleurs X 13 valeurs ;
- de façon aléatoire ET différentes ;
- tirage de max 15 cartes hors desquelles le joueur doit en désigner 5 ;

Ce que m'as envoyé ne ressemble à rien ! Déso, c'est brutal, mais c'est ainsi !
- pas de boucle de 15 ;
- rien d'aléatoire : je te l'avais déjà dit précédemment !
- pas de compteur des 5 cartes choisies par le joueur ;
- que tu choisisses un système de tableau, comme moi, ou des variables indépendantes pour le compte des couleurs, pas de souci mais, ici , je ne vois rien de probant.

Déso, je ne t'aide pas plus si tu ne te bases pas un minimum sur l'exercice n°2...
Relis attentivement, avec papier, bic et calculatrice, si nécessaire, mon post de dimanche !


Joyeux Noël ! (quand même... )
A+

Bonjour,

Ah non, enfaite je réponds question par question sur mon code, le "q" enfaite, je l'ai déclaré dans la question précédente, pck dans mon programme il représente les 5 cartes que le joueur a choisi parmi les 15 qui lui ont été proposées aléatoirement, je t'envoie quand même ce que j'ai fait pour que tu sois sûr :

Sub jeudecartes()

'Etape 1.0 + 1.1

Dim X As Integer 'choix du joueur
Randomize

A = Int(13 * Rnd) + 1
B = Int(13 * Rnd) + 1

If A = B Then
    Do
        B = Int(13 * Rnd) + 1
    Loop Until A <> B
End If

MsgBox A
MsgBox B

X = InputBox("Choisissez-vous a ou b ?")

If X = A Then
    MsgBox "vous avez marqué " & A & " points"
ElseIf X = B Then
    MsgBox "vous avez marqué " & B & " points"
End If

'Etape 1.2 on demande de tirer un maximum de 15 cartes différentes ! Dès qu 'une carte est tirée, je l'annule pour la boucle suivante...

Dim C(15) As Integer

For i = 1 To 15
Do
    C(i) = Int(52 * Rnd) + 1
Loop Until C(i) = 0
C(i) = 1
    If MsgBox("voulez-vous le nombre numéro " & C(i) & " ?", vbYesNo) = vbYes Then
        k = k + 1
        tot1 = tot1 + C(i)
        MsgBox "vous avez marqué " & C(i) & "points" & Chr(10) & "Votre total : " & tot1
    End If
If k = 5 Then
    Exit For
End If
Next i
MsgBox "Bravo, vous avez obtenu " & tot1 & " points !"

'Etape 1.3

Dim carte(20, 10) As Integer

For i = 1 To 15
    Do
        inb1 = Int(13 * Rnd) + 1
        inb2 = Int(4 * Rnd) + 1
    Loop Until carte(inb1, inb2) = 0
    carte(inb1, inb2) = 1

    If MsgBox("voulez-vous le nombre numéro " & inb1 * inb2 & " ?", vbYesNo) = vbYes Then
        q = q + 1
        tot2 = tot2 + (inb1 * inb2)
        MsgBox "vous avez marqué " & (inb1 * inb2) & "points" & Chr(10) & "Votre total : " & tot2
    End If
If q = 5 Then
    Exit For
End If
Next i
MsgBox "Bravo, vous avez obtenu " & tot2 & " points !"

'Etape 2.0

Dim couleur(10) As Integer
Dim tot3 As Integer 'Nombre cartes de même couleur

couleur(1) = (inb2 = 1)
For i = 2 To q
    For j = 1 To q - 1
        If inb2 = couleur(j) Then
            tot3 = tot3 + 1
        End If
    Next j
Next i

MsgBox tot3

If tot3 = 4 Then
    MsgBox "vous avez marqué 15 points"
ElseIf tot3 = 3 Then
    MsgBox "vous avez marqué 10 points"
ElseIf tot3 = 2 Then
    MsgBox "vous avez marqué 5 points"
End If

End Sub

Salut Usanas,

avec ces agapes, je t'avais presque oublié !
Voici l'exercice 3 et le fichier complet !

'Etape 2.0
If Not Intersect(Target, [F4]) Is Nothing Then
    Erase carte
    k = 0
    iTot = 0
    For i = 1 To 15
        Do
            iNb1 = Int(13 * Rnd) + 1            'tirage du n° de carte
            iNb2 = Int(4 * Rnd) + 1             'tirage de la couleur (1-3 = rouge, 2-4 = noir)...
        Loop Until carte(iNb1, iNb2) = 0      'boucle jusqu'à (UNTIL) trouver une carte non tirée
        carte(iNb1, iNb2) = 1                 'annulation de la carte
        If MsgBox("Voulez-vous " & _
            IIf(iNb1 = 1, "cet ", _
            IIf(iNb1 < 11 Or iNb1 = 12, "cette ", "ce ")) & _
            IIf(iNb1 = 1, "As", _
            IIf(iNb1 < 11, "carte de " & iNb1, Choose(iNb1 - 10, "Valet", "Dame", "Roi"))) & _
            " ?", vbYesNo) = vbYes Then
                k = k + 1
                tColor(iNb2 Mod 2) = tColor(iNb2 Mod 2) + 1   'calcul du total
        End If
        If k = 5 Then Exit For
    Next i
    iNb = IIf(tColor(0) > tColor(1), 0, 1)
    MsgBox "Bravo, vous avez tiré " & tColor(iNb) & " cartes " & IIf(iNb = 0, "noires ", "rouges ") & "!" & Chr(10) & _
        "Vous avez gagné " & (tColor(iNb) - 2) * 5 & " points !"
End If

Bon travail et bons examens !

6usanas.xlsm (23.18 Ko)


A+

Bonsoir Curulis57,

Merci énormément pour votre toute aide c'était sympa :)

bonne soirée

Rechercher des sujets similaires à "generer aleatoirement valeurs tableau"