IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

probleme d'algorithmique depuis un programme VB6


Sujet :

VB 6 et antérieur

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    J'aimerais faire un petit programme qui calcul le nombre de points par mot au scrabble. C'est à dire que le programme me calcul le score de ce mot au scrabble quelque soit la longueur du mot.
    Je débute en VB6 donc c'est difficile.
    J'ai réalisé mon interface graphique, mais pour la programmation je ne sais pas trop par ou commencer.
    Je n'ai pas encore entré de variable.
    J'ai rentré les lettres avec leurs nombres de point correspondant.
    Puis j'ai voulu interdire tous les autres sigles à part les lettres pour mes mots lorsque je rentre mon mot dans la case texte correspondant! Mais j'ai quelque difficulté! Je sais pas si je dois faire plusieurs conditionnelles ou si en une ligne de code je peux tous les interdire?
    Et pouvez vous m'aider pour la suite, me donner la trame à suivre, svp car je crois que je vais devoir employer les fonctions len et mid mais je sais pas les utilisées! Pouvez-vous m'aider?

    Merci

  2. #2
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Va falloir y aller par étape.
    Que veux tu faire en premier ? Simplement compter la valeur d'un mot posé sur une grille de Scrabble ? Vérifier si le mot est possible à partir des 7 lettres disponibles ? Vérifier si le mot est possible à partir des 7 lettres disponibles + les lettres déjà posées sur la grille en fonction de l'endroit où tu veux placer le mot (c'est plus dur à faire évidemment) ?
    Bref, si tu débutes en VB, voire en programmation tout court, tu t'attaques à un morceau qui peut devenir vite assez difficile.
    D'une manière générale ici, tu peux trouver des gens de bonne volonté, encore faut-il expliquer clairement ce qui te poses problème.
    Explique où tu as cherché des informations, ce que tu n'as pas compris.
    Donne éventuellement les bouts de code qui posent problème en détaillant l'erreur qui se produit quand c'est le cas (code d'erreur, emplacement, etc...).
    Il faut être le plus clair possible pour espérer avoir une réponse la plus claire possible.
    Tu peux même zipper ton projet et le mettre en pièce jointe à un de tes messages si nécessaire.
    A tout hasard je préfère signaler aussi qu'aucun d'entre nous ne répond à des questions techniques adressées par message privé
    Bienvenue en tout cas sur le forum.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut essayer d'être plus clair
    Merci

    Je ne fais pas le plateau de jeu.
    Je veux juste qu'à partir de 7 lettres au hasard que le programme me compte la somme de chaque point de chaque lettre.
    Je ne me soucis pas non plus des mots compte triple ou double puisque je n'ai pas le plateau.
    Ce qui est plus simple je pense!
    Est-ce que je dois déclarer les lettres comme des variables?
    Est-ce plus simple d'utilisé les lettres avec leurs valeurs comme un tableau pour la programation?

    J'enverrais ma feuille de code quand j'aurais avancé un peu plus! lol

  4. #4
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Je ne sais plus trop combien de valeurs diffétrentes sont disponibles au Scrabble mais ca doit etre du style 1,2,3,4,5,7,10 ?
    Donc ça ne te fait pas beaucoup de cas à traiter.
    Tu prends les letres de ton mot une par une, tu regarde à quelle groupe de lettre elle appartient (groupe des lettres à 1 point, groupe des lettres à 2 points, etc...), tu additionnes au total, tu regardes la lettre suivante, etc..
    Il y a differentes manières de faire ce test, je te laisse en chercher une.
    Reviens avec du code si tu as un soucis.

  5. #5
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Je pense que le plus simple est de passer par un tableau, partant du code ascii de la lettre tu arrive à un index dans le tableau et enfin tu réccupère sa valeur. Ainsi tu aurai un tableau de dimension 26.
    Pour ce qui est de la saisie, base toi encore sur le code ascii, dans l'événement KeyPress. Il te suffit de mettre Keyascii à 0 pour les valeur que tu ne veux pas et la touche sera annulée. Tu peux aussi faire que si l'utilisateur frappe une minuscule elle devienne majuscule. C'est assez simple et ca se fait en deux lignes, une pour les majuscule, une pour interdir les autres caractères.
    Jette un oeil à la table ascii, tu comprendra j'en suis sur
    Après une simple soustraction et tu as ton index pour le tableau.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut prob ave ASCII
    Bonjour

    Voila je métrise pas du tout ASCII. Mé j'essaye!
    Pour bloquer les caractères je c 'est pas quel fonction utilisé c'est sa le problème! Il faut que j'utilise KEY ou KEYPRESS, KEYDOWN? car apparement je peux bloquer tous les caractères que je ne veux pas dans mes mots en peu de ligne de code!
    Et je ne voit pas le lien que je pourrai faire entre ce code et mon tableau qui contient les lettres et leurs valeurs?

  7. #7
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Un label, un TextBox sur la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Label1 = KeyAscii & "  " & Chr(KeyAscii)
    'pour annuluer une entrée essais de taper la lettre A
    If KeyAscii = 65 Then KeyAscii = 0 'rend nul la lettre A
    End Sub
    Tu peux voir que l'on peut metriser les entrées pour empecher dans ton cas que les utilisateur entre des chiffres (les chiffres code ascii de 48 à 57)

  8. #8
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Un coup de pousse suplementaire.
    Comme le sugere OhMonBato et avigeilpro, un tableau semble une bonne solution.
    Une piste, en t'inspirant du code suivant tu devrais parvenir à tes fins.
    Dans un module standard (.bas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Option Explicit
     
    Public Type Letableau
     LeCaractere As String * 1
     CodeAsci As Integer
     ValeurCaract As Integer
    End Type
     
    Public MontTableau() As Letableau
    Public T As Integer
    Public Sub Main()
    ReDim MontTableau(26)
    For T = 0 To 25
     MontTableau(T).CodeAsci = T + 65
     MontTableau(T).LeCaractere = Chr(MontTableau(T).CodeAsci)
     MontTableau(T).ValeurCaract = 2
    Next T
    'pour un jocker " " espace
    MontTableau(26).CodeAsci = 32
    MontTableau(26).LeCaractere = Chr(MontTableau(26).CodeAsci)
    MontTableau(26).ValeurCaract = 0
    'donne pour valeur 4, aux lettre W à Z
    For T = 22 To 25
     MontTableau(T).ValeurCaract = 4
    Next
    'donne pour valeur 4, au K
    MontTableau(10).ValeurCaract = 4 'A
    'donne pour valeur 1, aux voyelles
    MontTableau(0).ValeurCaract = 1 'A
    MontTableau(4).ValeurCaract = 1 'E
    MontTableau(8).ValeurCaract = 1 'I
    MontTableau(14).ValeurCaract = 1 'O
    MontTableau(20).ValeurCaract = 1 'U
     
    Form1.Show
    End Sub
    Sur une feuille, un ListBox, un TextBox, un CommandButton et un Label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Option Explicit
    Private Sub Form_Load()
    Me.Height = 5205: Me.Width = 4830
    List1.Left = 60: List1.Top = 60
    List1.Height = 4155: List1.Width = 4575
    Text1.Left = 60: Text1.Top = 4290
    Text1.Height = 405: Text1.Width = 2475
    Command1.Left = 2580: Command1.Top = 4380
    Command1.Height = 255: Command1.Width = 975
    Command1.Caption = "total  --->"
    Label1.Left = 3630: Label1.Top = 4380
    Label1.Height = 225: Label1.Width = 525
    Label1 = "": Text1 = "VOILA UN EXEMPLE"
     
    'pour voir le detail Du tableau
    List1.Clear
    For T = 0 To 26
     List1.AddItem "index :" & CStr(T) _
                             & " Code ascii :" & MontTableau(T).CodeAsci _
                             & " Caractere :" & MontTableau(T).LeCaractere _
                             & " sa valeur :" & MontTableau(T).ValeurCaract
    Next T
    End Sub
     
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Select Case KeyAscii
     Case 8, 32, 65 To 90 'autorise le <-- suppr, l'espace et toutes les lettres en majuscules
     Case Else
    beep:  KeyAscii = 0 'pour annuluer toutes autres entrées
    End Select
    End Sub
    Private Sub Command1_Click()
    Dim Total As Integer
    Dim ValAsci As Integer
    For T = 1 To Len(Text1)
     ValAsci = Asc(Mid(Text1, T, 1)) 'retrouve le code ascii
     If ValAsci <> 32 Then 'si espace =0 donc ne rajoute rien
      'si non, recupere la valeur donnée a la lettre, et ajoute sa valeur à Total
      Total = Total + MontTableau(ValAsci - 65).ValeurCaract
     End If
    Next T
    'affiche le resultat
    Label1 = Total
    End Sub
    Ne pas oublier, dans l'editeur VB, Projet --> Propriétés de Projet1, onglet Général, Objet de démarage, choisir Sub Main

  9. #9
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    OULALA TRO COMPLIQUÉ TOUT CA !!!
    y'a beaucoup plus simple.
    Commencons par le début :
    N'avoir que des majuscules et que des lettres :
    Une boite texte nommé text1 (valeur par défaut) sur ta feuille et le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub Text1_Change()
        Dim i As Integer
     
        i = Text1.SelStart 'on mémorise l'emplacement du curseur
        Text1.Text = UCase(Text1.Text)  'on met tout en majuscule
        Text1.SelStart = i 'on remet le curseur à sa place
     
    End Sub
     
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        'Différent d'une majuscule
        ' et d'une minuscule (cf table ascii)
        ' et du BackSpace (permet d'effacer en arriere)
        If (KeyAscii < 65 Or KeyAscii > 90) _
            And (KeyAscii < 97 Or KeyAscii > 122) _
                And KeyAscii <> 8 Then
                    KeyAscii = 0 'on annule la touche
        End If
    End Sub
    Maintenant tous les caractères qui sont dans la boite on un code ascii compris entre 65 et 90 inclus.
    Tu déclare un tableau de 26 entiers (sous option explicit tout en haut de la page de code)
    Dans le Form_Load tu met les 26 valeur de lettre dans le tableau.
    Tu met un bouton sur ta feuille.
    tu déclare une variable qui contiendra le total des points
    Dedan tu fai une boucle qui parcours chaque caractère :
    regarde les fonction Len, Mid et Asc.
    pour chaque valeurs ascii de chaque caractère tu fai une petite soustraction pour ramener la valeur entre 1 et 26 (ou 0 et 25 c'est comme tu veu), ainsi le 65 devient 1 (ou 0), le 66 devient 2 (ou 1) ... (pas trop dur )
    tu prend la valeur du tableau à l'indice que tu viens de trouver et tu l'ajoute à ta variable total (n'oubli pas de l'initialiser avant tout)
    A la fin de ta boucle tu affiche la variable dans un Label par exemple.
    TADA le tour est joué !!!

    Je viens de le faire, bien compressé le code du bouton fait 6 lignes avec les déclarations, pour te dire que ce n'est pas compliqué je pense que tu devrait y arriver avec quelques petites recherches sur les fonctions que je t'ai donné

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Merci pour votre aide je vais pouvoir avancer maintenant.
    Je vous envoie le code si j'ai des difficultés.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut Prob de code
    Bonjour,

    J'ai une erreur dans le Form_Load quand je met la correspondance entre le code ASCII et les points des lettres. Il me dit qu'il y a une erreur avec Ttab. Je dois le remplacer par quoi? Et y a -t-il des erreurs autres parts?
    Je suis désoler, mais on ne veut pas prendre mon fichier joint: donc voici mon code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    Option Explicit
    Dim i As Integer
    Dim Ttab(26) As Integer
    Dim valeurcaract As Integer
    Dim total As Integer
    Dim ValAsci As Integer
    
    Private Sub Text1_Change()
      
    i = Text1.SelStart 'on mémorise l'emplacement du curseur
        Text1.Text = UCase(Text1.Text)  'on met tout en majuscule
        Text1.SelStart = i 'on remet le curseur à sa place
     
    End Sub
     
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        'Différent d'une majuscule
        ' et d'une minuscule (cf table ascii)
        ' et du BackSpace (permet d'effacer en arriere)
        If (KeyAscii < 65 Or KeyAscii > 90) _
            And (KeyAscii < 97 Or KeyAscii > 122) _
                And KeyAscii <> 8 Then
                    KeyAscii = 0 'on annule la touche
        End If
    End Sub
    
    
    Private Sub Form_Load()
    For Ttab = 74 To 75
     Ttab.valeurcaract = 8
    Next Ttab
    For Ttab = 87 To 90
     Ttab.valeurcaract = 8
     Next Ttab
    For Ttab = 81 To 81
     Ttab.valeurcaract = 8
     Next Ttab
    For Ttab = 72 To 72
    Ttab.valeurcaract = 5
     Next Ttab
    For Ttab = 66 To 66
    Ttab.valeurcaract = 4
     Next Ttab
    For Ttab = 86 To 86
    Ttab.valeurcaract = 4
    Next Ttab
    For Ttab = 70 To 71
    Ttab.valeurcaract = 3
    Next Ttab
    For Ttab = 84 To 84
    Ttab.valeurcaract = 3
    Next Ttab
    For Ttab = 67 To 68
    Ttab.valeurcaract = 2
    Next Ttab
    For Ttab = 76 To 78
    Ttab.valeurcaract = 2
    Next Ttab
    For Ttab = 80 To 80
    Ttab.valeurcaract = 2
    Next Ttab
    For Ttab = 82 To 83
    Ttab.valeurcaract = 2
    Next Ttab
    For Ttab = 65 To 65
    Ttab.valeurcaract = 1
    Next Ttab
    For Ttab = 69 To 69
    Ttab.valeurcaract = 1
    Next Ttab
    For Ttab = 73 To 73
    Ttab.valeurcaract = 1
    Next Ttab
    For Ttab = 79 To 79
    Ttab.valeurcaract = 1
    Next Ttab
    For Ttab = 85 To 85
    Ttab.valeurcaract = 1
    Next Ttab
    End Sub
    
    
    Private Sub Command1_Click()
    For Ttab = 1 To Len(Text1)
     ValAsci = Asc(Mid(Text1, T, 1))
      total = total + Ttab(ValAsci - 65).valeurcaract
    Next T
    'affiche le resultat'
    Text2.Text = total
    End Sub

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    attention au mélange, tu accédes au tableau par son indice
    Tu ne peut pas accoler une variable au tableau d'entier

    Il faut créer une structure dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Type correspondance
     lettre As String * 1
     valeur As Integer
    End Type
    puis dans ta form principale déclarer un tableau de cette structure,
    ensuite affecter les valeurs dans le "Form_Load"
    et utiliser dans "Command1_Click" pour calculer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Dim TabCorrespondance(25) As correspondance ' 26 éléments de 0 à 25
     
    Private Sub Form_Load()
     TabCorrespondance(0).lettre = Chr(65) ' A
     TabCorrespondance(0).valeur = 1 ' A vaut 1
     TabCorrespondance(1).lettre = Chr(66) ' B
     TabCorrespondance(1).valeur = 4 ' B vaut 4
     '...
    End Sub
     
    Private Sub Command1_Click()
    Dim total As Integer
    Dim ValAsci As Integer
    Dim i As Integer
    Dim j As Integer
      total = 0
      For i = 1 To Len(Text1) 'pour chaque lettre du mot
        ValAsci = Asc(Mid(Text1, i, 1)) 
        For j = 0 To 25 'pour chaque caractère de la table de correspondance
          If ValAsci = Asc(TabCorrespondance(j).lettre) Then ' trouvé ?
            total = total + TabCorrespondance(j).valeur ' oui, calcul
            Exit For ' trouvé nous sortons de la boucle for j
          End If
        Next
      Next
    'affiche le resultat'
      Text2.Text = total
    End Sub
    A+, Hervé

  13. #13
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Une sujestion pour améliorer l'initialisation de ton tableau
    Dans le module .BAS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    'j'ai rajouté le nombre de lettre pour une lettre donnée
    ' d'ou la propriété Nombre ajouté a la declaration de type
    Public Type Ttab
     Lettre As String * 1
     Valeur As Integer
     Nombre As Integer
    End Type
    je te propose d'essayer de remplacer le Form_Load par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Option Explicit
    Dim Correspondance(26) As Ttab
    Dim i As Integer
    Dim j As Integer
     
    Private Sub Form_Initialize()
    Dim ChaineLettres As String
    Dim DecoupeContenuChaine() As String
    'dans celui que j'ai construit tous les parametres lettres et cases de la grille
    ' (lettres compte double, mots compte triple ....) sont contenus dans un fichier .TXT
    'ici je met que les parametres des lettres
    'ChaineLettres = données provenant d'un jeu de scrabble, total 102 lettres compris les 2 jockers
    ChaineLettres = "9,A,1,2,B,3,2,C,3,3,D,2,15,E,1,2,F,4,2,G,2,2,H,4,8,I,1,1,J,8," _
                  & "1,K,10,5,L,1,3,M,2,6,N,1,6,O,1,2,P,3,1,Q,8,6,R,1,6,S,1,6,T,1," _
                  & "6,U,1,2,V,4,1,W,10,1,X,10,1,Y,10,1,Z,10,2,¤,0"
    '3 parametres par lettre, exemples
    '9,A,1    9= Nombre de lettres A dans un scrabble, A= lettre, 1=valeur de la lettre
    '1,Z,10   1= Nombre de lettres Z dans un scrabble, Z= lettre, 10=valeur de la lettre
    'le dernier (je ne sais pas si tu vas utiliser ?)
    '2,¤,0    2=Nombre de lettres blanches pour jocker,  0 valeur
     
    'decoupe de la chaine pour avoir chaque données séparées
    '(placé dans la variable tableau DecoupeContenuChaine)
    DecoupeContenuChaine = Split(ChaineLettres, ",")
     
     
    '27 éléments de 0 à 26, 27° element pour le jocker, indice 26
    j = 0 'variable pour incrémenter le tableau Correspondance
     
    'UBound(DecoupeContenuChaine) permet de connaitre le nombre d'item du tableau DecoupeContenuChaine
    'puisque 3 parametres par lettre, saute de 3 en 3 d'ou Step 3, 0..3..6..9..12 . . .
    For i = 0 To UBound(DecoupeContenuChaine) - 1 Step 3
     Correspondance(j).Nombre = DecoupeContenuChaine(i)
     Correspondance(j).Lettre = DecoupeContenuChaine(i + 1)
     Correspondance(j).Valeur = DecoupeContenuChaine(i + 2)
     j = j + 1 'incrémente l'index du tableau Correspondance
    Next i
    End Sub
    Le Private Sub Command1_Click() de rv26t reste tout a fait valable, mis a par qu'il n'est pas utile de redeclarer i et j, car deja declaré, puisque l'on s'en sert dans Private Sub Form_Initialize()
    Il y a beaucoup de commentaire pour infos, une fois supprimé, il ne reste plus qu'une dizaine de ligne.

  14. #14
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Que de complications pour pas grand chose !!! regarde :
    Sur une Form, un bouton, un TextBox et un Label (noms par défaut)
    Voici le code de la feuille (et pas plus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    Option Explicit
    Dim LVal(25) As Integer
     
    Private Sub Form_Load()
    'Attribution des points pour chaque lettre.
    LVal(0) = 1     'A
    LVal(1) = 3     'B
    LVal(2) = 3     'C
    LVal(3) = 2     'D
    LVal(4) = 1     'E
    LVal(5) = 4     'F
    LVal(6) = 2     'G
    LVal(7) = 4     'H
    LVal(8) = 1     'I
    LVal(9) = 8     'J
    LVal(10) = 10     'K
    LVal(11) = 1     'L
    LVal(12) = 2     'M
    LVal(13) = 1     'N
    LVal(14) = 1     'O
    LVal(15) = 3     'P
    LVal(16) = 8     'Q
    LVal(17) = 1     'R
    LVal(18) = 1     'S
    LVal(19) = 1     'T
    LVal(20) = 1     'U
    LVal(21) = 4     'V
    LVal(22) = 10     'W
    LVal(23) = 10     'X
    LVal(24) = 10     'Y
    LVal(25) = 10     'Z
     
     
    End Sub
     
    'Annulation des touches non autorisées : que les lettres majuscules et
    'minuscules (on mettra tout en majuscule après) et BackSpace pour effacer
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        'Différent d'une majuscule
        ' et d'une minuscule (cf table ascii)
        ' et du BackSpace (permet d'effacer en arriere)
        If (KeyAscii < 65 Or KeyAscii > 90) _
            And (KeyAscii < 97 Or KeyAscii > 122) _
                And KeyAscii <> 8 Then
                    KeyAscii = 0 'on annule la touche
        End If
    End Sub
     
    'Passage du mot en Majuscules
    Private Sub Text1_Change()
        Dim I As Integer
     
        I = Text1.SelStart 'on mémorise l'emplacement du curseur
        Text1.Text = UCase(Text1.Text)  'on met tout en majuscule
        Text1.SelStart = I 'on remet le curseur à sa place
     
    End Sub
     
    'Bouton de calcul
    Private Sub Command1_Click()
    Dim Total As Integer
    Dim I As Single
     
    'Ici c'est un peu compressé mais on parcours chaque lettre, on prend sa valeur
    'ascii (65<=X<=90), on enlève 65 (0<=X<=25), on prend dans le tableau à
    'l'index X la valeur que l'on ajoute à Total.
    For I = 1 To Len(Text1.Text)
    Total = LVal(Asc(Mid(Text1.Text, I, 1)) - 65) + Total
    Next
    'on affiche la valeur
    Label1.Caption = Total
     
    End Sub
    Fin, c'est simple comme bonjour

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Merci à vous tous pour votre aide! C'est sympa! Et vous m'avez bien fait avancer!

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut probleme d'algorithmique depuis un programme VB6
    Bonjour,
    Voici mon code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Option Explicit
    Dim LVal(25) As Integer
     
    Private Sub Form_Load()
    'Attribution des points pour chaque lettre.
    LVal(0) = 1     'A
    LVal(1) = 3     'B
    LVal(2) = 3     'C
    LVal(3) = 2     'D
    LVal(4) = 1     'E
    LVal(5) = 4     'F
    LVal(6) = 2     'G
    LVal(7) = 4     'H
    LVal(8) = 1     'I
    LVal(9) = 8     'J
    LVal(10) = 10     'K
    LVal(11) = 1     'L
    LVal(12) = 2     'M
    LVal(13) = 1     'N
    LVal(14) = 1     'O
    LVal(15) = 3     'P
    LVal(16) = 8     'Q
    LVal(17) = 1     'R
    LVal(18) = 1     'S
    LVal(19) = 1     'T
    LVal(20) = 1     'U
    LVal(21) = 4     'V
    LVal(22) = 10     'W
    LVal(23) = 10     'X
    LVal(24) = 10     'Y
    LVal(25) = 10     'Z
     
     
    End Sub
     
    'Annulation des touches non autorisées : que les lettres majuscules et
    'minuscules (on mettra tout en majuscule après) et BackSpace pour effacer
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        'Différent d'une majuscule
        ' et d'une minuscule (cf table ascii)
        ' et du BackSpace (permet d'effacer en arriere)
        If (KeyAscii < 65 Or KeyAscii > 90) _
            And (KeyAscii < 97 Or KeyAscii > 122) _
                And KeyAscii <> 8 Then
                    KeyAscii = 0 'on annule la touche
        End If
    End Sub
     
    'Passage du mot en Majuscules
    Private Sub Text1_Change()
        Dim I As Integer
     
        I = Text1.SelStart 'on mémorise l'emplacement du curseur
        Text1.Text = UCase(Text1.Text)  'on met tout en majuscule
        Text1.SelStart = I 'on remet le curseur à sa place
     
    End Sub
     
    'Bouton de calcul
    Private Sub Command1_Click()
    Dim Total As Integer
    Dim I As Single
     
    'Ici c'est un peu compressé mais on parcours chaque lettre, on prend sa valeur
    'ascii (65<=X<=90), on enlève 65 (0<=X<=25), on prend dans le tableau à
    'l'index X la valeur que l'on ajoute à Total.
    For I = 1 To Len(Text1.Text)
    Total = LVal(Asc(Mid(Text1.Text, I, 1)) - 65) + Total
    Next
    'on affiche la valeur
    Label1.Caption = Total
     
    End Sub

    J'ai un problème car je sais pas si mon algorithme est juste est surtout je ne sais pas comment traduire la partie ou je transforme les minuscule en majuscule avec selstart et Ucase! Pouvez m'aider.
    Et j'ai un probléme car la variable I est declarer 2 fois mais c'est 2 types différent. Que dois-je faire?

    Voici mon algo de ce programme :


    Algorithme :
    Début
    LVal(0) = 1 'A
    LVal(1) = 3 'B
    LVal(2) = 3 'C
    LVal(3) = 2 'D
    LVal(4) = 1 'E
    LVal(5) = 4 'F
    LVal(6) = 2 'G
    LVal(7) = 4 'H
    LVal(8) = 1 'I
    LVal(9) = 8 'J
    LVal(10) = 10 'K
    LVal(11) = 1 'L
    LVal(12) = 2 'M
    LVal(13) = 1 'N
    LVal(14) = 1 'O
    LVal(15) = 3 'P
    LVal(16) = 8 'Q
    LVal(17) = 1 'R
    LVal(18) = 1 'S
    LVal(19) = 1 'T
    LVal(20) = 1 'U
    LVal(21) = 4 'V
    LVal(22) = 10 'W
    LVal(23) = 10 'X
    LVal(24) = 10 'Y
    LVal(25) = 10 'Z

    ‘annulation des caractères spéciaux’
    si (KeyAscii < 65 ou KeyAscii > 90) et (KeyAscii < 97 ou KeyAscii > 122) et (KeyAscii <> 8)
    alors KeyAscii = 0 ‘on annule la touche’
    Finsi

    ‘transformation des minuscules en majuscule’

    ‘Initialisation’
    ECRIRE ( ‘entrez votre mot’ )
    LIRE (mot)
    Pour i de 1 à len (mot) faire
    Total  Lval(Asc(Mid(mot, I , 1)) – 65) + Total
    FinPour

    ECRIRE(‘le nombre de points est :’ Total)
    LIRE(Total)

    Finsi
    Fin

    lexique
    I = ?
    total= entier
    Lval[25] = entier

    Pouvez-vous m'aider? merci

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Points : 46
    Points
    46
    Par défaut
    Juste une petite question avigeilpro: dans ton programme tu déclares I deux fois, et c'est deux type différent! Comment je fais si je veux écrire mon Algorithme, faut-il que je change cette variable ?

    Et SelStart et Ucase se traduisent comment en algorithmique?
    merci

  18. #18
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    Citation Envoyé par lol88 1° post
    calcul le nombre de points par mot au scrabble
    Si je t’ai perturbé avec trop d’informations retenues pour chaque lettre de l’alphabet, je m’en excuse, mais pour le scrabble il est indispensable d’avoir ces renseignements pour chacune d’elle, je ne voulais pas que ton programme, au fur et a mesure de sa construction, t’oblige à revenir en arrière, pour modifier le type de variable qui n’aurait plus été adapté.

    déclares I deux fois, et c'est deux type différent!
    Ce n’est pas un problème, une fois dans la declaration de ta form (Dim) ou dans ton .BAS (Public) en Integer (32562 si je me souvient bien) est suffisant.

    Et SelStart et Ucase se traduisent comment en algorithmique?
    Sachant que :
    SelStart : Membre de VB.TextBox.
    Renvoie ou définit le point de départ du texte sélectionné.
    Ucase : Membre de VBA.Strings.
    Renvoie la chaîne spécifiée, convertie en majuscules

    SelStart est l’équivalant de Start si dans ton algorithme du utilise
    Function Mid(String, Start As Long, [Length])
    Membre de VBA.Strings
    Renvoie un nombre spécifié de caractères à partir d'une chaîne

    Reste à savoir qu'elle sont les éléments connus, et que doit te retourner cette alogarithme ?

    Alogarithme mot inconnu du dictionnaire papier Larousse, de Microsoft Word, dictionnaire du scrabble (369 085, mots).

  19. #19
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    euh ProgElecT ... il parle de mon code
    En effet je n'avait pas fait attention, j'ai fait ce code très très rapidement. Les deux variables peuvent être des Integer, et être déclarées en Public une seule fois (dans un module ou au début de la form bien sûr).
    Sache aussi qu'il y a quelque chose d'interressant dans le code de ProgElecT, c'est pour remplir le tableau, tu peux faire la technique qu'il utilise en mettant d'abord dans une chaine toutes les valeurs avec un séparateur (ex : "1;3;3;2;1;4...") puis utiliser la fonction Split, c'est plus court en code mais sa demande une variable supplémentaire (perso je trouve plus pratique cette solution, celle que j'ai utilisé est seulement plus rapide pour faire un essai). Attention : Si tu utilise le Split, tu ne dois pas donner de dimension au tableau lors de sa déclaration :
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim LVal(25) As Integer
    Ce que je reproche aux code de ProgElecT (n'y vois la rien de personnel ) c'est qu'il n'utilise pas le code ascii directement comme index de tableau, il doit donc faire une boucle afin de trouver l'entrée du tableau qui correspond à la lettre.
    Conclusion : prend dans les deux codes, tu auras un programme cours et performant, ne déclare la variable I qu'une seule fois en globale.

    Et SelStart et Ucase se traduisent comment en algorithmique?
    Que veux-tu dire? Est-ce que tu fais un Algorithme à coté du programme?

    Citation Envoyé par ProgElecT
    Alogarithme mot inconnu du dictionnaire papier Larousse, de Microsoft Word, dictionnaire du scrabble (369 085, mots).
    euh ... c'est Algorithme.

  20. #20
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 097
    Points : 16 606
    Points
    16 606
    Par défaut
    ProgElecT a écrit :
    Alogarithme mot inconnu du dictionnaire papier Larousse, de Microsoft Word, dictionnaire du scrabble (369 085, mots).
    Algorithme
    Citation Envoyé par avigeilpro
    Ce que je reproche aux code de ProgElecT
    Mais quand le reproche est justifié, pas de problème, moi aussi j'apprend

    Salutation a tous les deux

Discussions similaires

  1. Problème sur la commande COPY depuis un programme Java
    Par klereth dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 10/02/2006, 14h14
  2. Probleme menu démarré tous les programmes
    Par tiboooo dans le forum Windows XP
    Réponses: 3
    Dernier message: 17/11/2005, 14h48
  3. [Apache] Probleme d'acces depuis un poste du même LAN
    Par j14z dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 14/11/2005, 12h54
  4. Problemes d'importation depuis excel
    Par KANCRENAZ dans le forum Access
    Réponses: 3
    Dernier message: 17/02/2005, 09h57
  5. [Kylix] Problème au lancement d'un programme
    Par jeanbi dans le forum EDI
    Réponses: 7
    Dernier message: 19/01/2005, 23h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo