[Déplacé VB6 -> VB.NET]Programme pour étude , Hasard ...

Résolu
MRJulienROCK - 25 sept. 2012 à 18:26
 MRJulienROCK - 27 sept. 2012 à 14:41
Bonjour :-)

Je suis débutant en visual basic et jusqu'a maintenant j'ai toujours réussi a me débrouiller , Et je commence même a aider les plus débutant que moi ...

Une amie m'a demander ( et malheureusement je lui refuse rien )

si je pouvais creer un programme qui lui permettrais d'étudier le vocabulaire d'une langue étrangère ...

Alors j'avais dans l'idée de creer , une première colonne qui contiendrais plein de textbox dans lequel elle insérerais les mot en français et une deuxiême colonne de textbox dans lequel elle insérerais les mot en anglais ( par exemple )

Bon jusque la c'est facile ...

Pour la suite je voudrais creer en bas de cette colonne , un label qui lorsque on clique sur un bouton , se transformerais en un des mots de la premiere colonne , au hasard bien entendu ... ( c'est ça que je ne sais pas faire ... ) et aussi que le programme vérifie que le mot correspond bien a son homologue anglais ...

L'idéal serais que le programme propose de moins en moins les mots auquel on trouve facilement la réponse ...

Un grand merci si vous pouvez m'éclairer :)

45 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 sept. 2012 à 18:49
Bonjour,
Quel que soit ton outil :
Il te faudra commencer par
- une base de données : un champ pour les mots français et un autre pour leur traduction.
Commence par cela.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
Utilisateur anonyme
25 sept. 2012 à 20:23
Bon allez un petit exemple vite fait :
Option Strict On
Public Class Form1
    Dim rd As New Random

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim dico As New Dictionary(Of String, String)
        dico.Add("chat", "cat")
        dico.Add("chien", "dog")
        dico.Add("souris", "mouse")
        Dim alea As KeyValuePair(Of String, String) = dico.ElementAt(rd.Next(0, dico.Count))

        MessageBox.Show(alea.Key & Environment.NewLine & alea.Value)
    End Sub
End Class
3
Utilisateur anonyme
25 sept. 2012 à 21:08
Bon, je te donne un code tout fait (oui je sais il faut pas le faire) à tester avec un textbox1 et un label1.
Tu peut l'étudier et l'adapter ensuite à ton projet.
Option Strict On
Public Class Form1
    Dim rd As New Random
    Dim dico As New Dictionary(Of String, String)
    Dim solution As String
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        dico.Add("chat", "cat")
        dico.Add("chien", "dog")
        dico.Add("souris", "mouse")
        NouveauMot()
    End Sub

    Private Sub NouveauMot()
        Dim alea As KeyValuePair(Of String, String) = dico.ElementAt(rd.Next(0, dico.Count))
        Label1.Text = alea.Key
        solution = alea.Value
    End Sub

    Private Sub TextBox1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
        If e.KeyCode = Keys.Enter Then
            If TextBox1.Text = solution Then
                MessageBox.Show("bravo!")
            Else
                MessageBox.Show("pas bon!")
            End If
            TextBox1.Text = ""
            NouveauMot()
        End If
    End Sub

End Class
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 sept. 2012 à 22:26
Ce n'est toutefois pas au hasard que, faute d'une craie base de données, j'avais proposé l'utilisation d'une listview (qui, elle, permet d'enregistrer d'autres données).
Je suggère qu'on relise jusqu'au bout le tout premier message du demandeur, en particulier sa dernière phrase.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
25 sept. 2012 à 23:17
@ucfoutu
en particulier sa dernière phrase
J'ai la fâcheuse tendance de lire en diagonale.

On peut faire avec une simple List(Of dans laquelle on ajoute des instances d'une classe (mais ceci sort d'une discussion pour débutants).

Mais je te laisse lui expliquer à ta manière.

Voici quand même un code pour illustrer mon propos :
Option Strict On
Public Class Form1
    Dim rd As New Random

    Dim MaListe As New List(Of MaClasse)

    Dim solution As MaClasse

    'classe mots
    Public Class MaClasse
        Public MotFrancais As String
        Public MotAnglais As String
        Public Rang As Integer
        'bien sur, on peut rajouter des tas d'informations dans cette classe (nom, verbe, conjonction...)
    End Class


    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'faire une boucle ici pour le chargement des mots
        'ici j'ajoute les mots manuellement dans MaListe
        MaListe.Add(New MaClasse With {.MotFrancais "chien", .MotAnglais "dog", .Rang = 0})
        MaListe.Add(New MaClasse With {.MotFrancais "chat", .MotAnglais "cat", .Rang = 0})
        MaListe.Add(New MaClasse With {.MotFrancais "souris", .MotAnglais "mouse", .Rang = 0})

        'premier mot à afficher
        NouveauMot()
    End Sub

    Private Sub TextBox1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
        If e.KeyCode = Keys.Enter Then
            If TextBox1.Text = solution.MotAnglais Then
                MessageBox.Show("bravo!")
                'quand la solution est bonne, on décrémente par exemple le rang de 1
                solution.Rang -= 1
            Else
                'quand la solution n'est pas trouvée, on incrémente de 1
                MessageBox.Show("pas bon!")
                solution.Rang += 1
            End If
            TextBox1.Text = ""
            NouveauMot()
        End If
    End Sub


    Private Sub NouveauMot()
        'on peut ici inventer un algorithme qui sélectionne (ou pas) un mot en fonction de son rang

        'sélection au hasard d'une instance de MaClasse de la liste
        solution = MaListe.Item(rd.Next(0, MaListe.Count))
        Label1.Text = solution.MotFrancais

    End Sub
End Class
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 sept. 2012 à 08:19
Bonjour, Banana32,
Expliquer quelle partie sans que MRJulienROCK n'ait préalablement acquis une aisance minimum ?
Ce serait peine perdue à ce stade, d'une part, et, d'autre part, cela relèverait pratiquement totalement de la conception (avant de parler développement) !
A ce stade, donc, il va falloir se contenter de lui exposer la logique d'un mécanisme.
- une listvieaw ou un tableau dynamique à 3 colonnes : colonne 1 mot français - colonne 2 traduction - colonne 3 = nombre de tirage de ce mot
- pour proposer un mot : tirage aléatoire d'un rang dans la listview (ou le tableau) == >> montrer ce nom dans un label et demander à l'utilisateur sa proposition de traduction (dans une textbox)
- chaque fois que réponse bonne : augmenter de 1 la valeur en colonne 3
En rappelant qu'il suffit d'avoir mémorisé le rang pour tout gérer convenablement.
Voilà pour ce qui est de la partie "élémentaire".
Ce ne sera que lorsqu'il aura passé ce cap-là (maîtrise de tout cela), qu'il pourra aller au-delà !
Je lui conseille dans un premier temps de se montrer moins "gourmand" et de se contenter de ne plus tirer un mot au hasard s'il a déjà fait l'objet de plus de x bonnes réponses (il suffit alors de supprimer de la listview ( plus facile qu'avec un tableau dynamique ) l'article du rang traité si le nombre en colonne 3 est( supérieur ou égal à x). Il ne risquera alors plus d'être tiré aléatoirement de nouveau.

Le passage à l'étape plus "ambitieuse", par contre (celle qui consisterait en une "chance dégressive" de tirage d'un mot (en fonction de la connaissance de ce mot déjà acquise par l'"élève") est une affaire bien plus complexe, qu'il ne saurait comprendre ni aborder tant qu'il n'aura pas d'abord su passer l'étape "simple" proposée.
Il lui faudra alors nécessairement tirer au hasard, mais dans une liste (à chaque fois reconstituée) constituée d'une répétition des mots, chaque mot un nombre de fois à calculer individuellement pour lui donner son pourcentage de chances (décroissant, donc) d'être "tiré" ensuite.
Voilà voilà !
Il est clair que l'on ne peut aller plus loin sans que MRJulienROCK ne se soit familiarisé avec la gestion d'une listview.
Amitiés.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
Utilisateur anonyme
25 sept. 2012 à 18:41
Bonsoir,

Je suis débutant en visual basic

Tu as posté dans la section vb6 du forum. C'est peut-être une erreur ?
vb6 est obsolète depuis 12 ans.

NB: Je pose cette question prudemment car j'ai eu un problème hier.
0
MRJulienROCK
25 sept. 2012 à 18:50
Oh mince ... il s'agit en effet d'une erreur ... je vais recreer un poste dans la bonne section
0
MRJulienROCK
25 sept. 2012 à 18:58
Bonjour , merci de m'avoir répondu malheureusement j'étais dans la mauvaise section ...

J'ai creer les deux liste pour les base de donnée , sans problème , c'est après que je bloque ... Je me suis rendu sur une 20 aine de site différent sans trouver de réponse :s a tu une idée ?
0
Utilisateur anonyme
25 sept. 2012 à 19:07
Un admin redirigera ce fil à la bonne place et supprimera le nouveau que tu as créé.

Y a-t-il une correspondances entre les deux listes ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 sept. 2012 à 19:16
Ce ne sont pas des textboxes, qu'il te faut alors utiliser, mais, plus astucieusement, une listview (car permettent deux colonnes alors qu'une listbox n'en permet qu'une sous VB6)
Ensuite :
- dans la première colonne : les mots en français
- dans la seconde : leur traduction
- cache simplement la seconde colonne (largeur = 0)
commence par faire cela et reviens pour la suite.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 sept. 2012 à 19:19
Ou encore un tableau à deux dimensions.
Mais d'où viennent donc les données, exactement ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
MRJulienROCK
25 sept. 2012 à 19:26
En faite les donnée je ne les connais pas , l'idée serait que l'utilisateurs note lui même chaque mot en français et leurs traduction dans l'autre langue ...

Après un mot de la colone serait tiré au hasard , et il faudrais noter la traduction , pour s'exercer ...
0
Utilisateur anonyme
25 sept. 2012 à 19:28
Bonsoir ucfoutu,

Ce ne sont pas des textboxes, qu'il te faut alors utiliser, mais, plus astucieusement, une listview

Si j'ai bien lu, c'est l'utilisateur qui doit saisir lui même les mots dans des 'textbox'.

et aussi que le programme vérifie que le mot correspond bien a son homologue anglais
Charger ces mots dans des contrôles est, me semble t-il inutile dans ce cas.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 sept. 2012 à 19:39
Bonsoir, Banana32,
et comment alors faire cela ?
et aussi que le programme vérifie que le mot correspond bien a son homologue anglais ...

Il faudra bien qu'existe une liste (ou un tableau) des mots et de leur traduction.
Ce que j'ai, moi, compris, c'est qu'il veut y tirer ensuite un mot français au hasard, demander à l'utilisateur la traduction et en vérifier l'exactitude (par rapport à la liste).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
25 sept. 2012 à 19:48
Bonjour,

Un admin redirigera ce fil à la bonne place et supprimera le nouveau que tu as créé.

Banana32 est un devin :D

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 sept. 2012 à 19:48
Bonjour, NHenry,
Toi également si c'est toi qui a déplacé vers VB.Net
A partir de quel indice qui m'a échappé ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
25 sept. 2012 à 19:50
Bonjour,

Ucfoutu, nouveau (et défunt) message dans la catégorie .NET, c'est tout :)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
MRJulienROCK
25 sept. 2012 à 19:54
Lerci pour vos réponse !!! et encore désoler pour l'erreur , je vous join une capture d'écran de l'interface graphique de mon programme ...



Dans ce programme , j'aimerais que le Label 3 prennent le nom d'une des textbox au hasard et le label 5 se transforme en Faux ou vrai en fonction de si l'utilisateur a bien mis la bonne réponse .
0
Utilisateur anonyme
25 sept. 2012 à 19:55
NHenry
On peut charger les mots dans un dictionary(of par exemple sans pour autant les afficher dans un contrôle. La clef étant le mot français et la valeur le mot anglais. La machine génère un nombre aléatoire compris entre 0 et la taille du dico - 1 et affiche la clef du dico correspondant à ce nombre. Lorsque l'utilisateur tape son mot, on compare la saisie avec la 'Value' du dico.
0
Rejoignez-nous