Visual Basic

Bonjour,

alors voilà j'ai un petit problème, je suis débutant en VB et j'ai un sujet à faire, et je ne comprend rien... Je ne demande pas à ce que l'on me le fasse, mais au moins qu'on m'aide dans la démarche

Problème à résoudre :
? Demander à l'utilisateur de saisir un nombre entier N compris entre 100 et 10000.
? Générer par la suite N nombres entiers pseudo-aléatoires compris entre 10 et 20.
? Afficher la liste de nombres générée
? Compter le nombre d'occurrences de chaque nombre de la suite générée et afficher ce nombre
? Trier la liste de nombre en ordre croissant et afficher la liste triée.
? Calculer et afficher la moyenne et l'écart-type des nombres générés
? Sauvegarder dans un fichier texte le nombre de données générées, leur moyenne, leur écart-type, ainsi que les nombres triés.

merci d'avance :)

29 réponses

Résumé de la discussion

La discussion porte sur un exercice VB demandant de saisir N entre 100 et 10000, puis de générer et afficher N nombres entiers pseudo-aléatoires compris entre 10 et 20, avec sauvegarde en fichier. Plusieurs réponses soulignent qu’il faut déclarer correctement N et suivre les étapes: affichage, comptage des occurrences, tri, puis calcul de la moyenne et de l’écart-type. Des conseils portent aussi sur la gestion des tableaux (UBound, ReDim Preserve), le rangement des résultats et les aspects pratiques pour rendre le tout lisible et prêt pour une publication Google.

Bobot (l’IA à votre service)
  1. Contributeur
    Et bien maintenant tu a un modèle pour remplir un tableau avec des nombre aléatoire.
    Un modèle pour trier un tableau.
    A toi de combiner les deux.
    Il me semble que j'ai assez donné sur ce topic qui ne m'inspire pas du tout.
    Il est vrai que tu n'est pas impoli, mais nous somme bénévole et tes réponses ou questions ressemble plutôt à des ordres plutôt qu'a un souhait, même pas un mot de remerciement ou une expression de reconnaissance du service rendu.
    Abandon du suivi.
    A++
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    1. le trie par ordre croissant fonctionne mais du coup maintenant j'ai des chiffres en plus :
      je génère 155 -->

      j'ai et le tri donne

      16 11
      16 11
      16 13
      13 13
      15 13
      17 14
      11 14
      16 15
      13 15
      14 16
      15 16
      15 16
      1. Contributeur
        un essais,
            Private Sub MaListeRND()    
                Dim i As Integer, B As Boolean, Buff As Integer    
                Dim TB(30) As Integer    
                Randomize()    
        'Initialise 31 nombres aléatoires entre 10 et 20  
                For i = 0 To 30    
                    TB(i) = CInt(Int((20 * Rnd()) + 1)) + 9    
                Next    
        'Trie le tableau par ordre croissant   
        'La méthode "Sorted" d'une listbox ne fonctionne pas sur des nombres   
        'même si ont les met en String   
                Do    
                    B = False    
                    For i = 1 To 30    
                        If TB(i) < TB(i - 1) Then    
                            B = True    
                            Buff = TB(i) : TB(i) = TB(i - 1) : TB(i - 1) = Buff 
                        End If    
                    Next    
                Loop Until Not B    
        'Affiche dans la listeBox   
                ListBox1.Items.Clear   
                For i = 0 To 30    
                    ' Add items to the ListBox.    
                    ListBox1.Items.Add(TB(i))    
                Next    
                ListBox1.TopIndex = 0    
            End Sub

        Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
        NOTE : Je ne répond pas aux MP pour les questions techniques.
        1. oui c'est ce que je cherche a faire en les triant, mais le problème est que le programme ne les trie pas, il affiche seulement la même des nombres que j'ai généré
          1. Contributeur
            tu voudrais pas plutôt dire les mettre par ordre croissant ?
            1. je ne veux pas générer des nombres entre 1 et 30, je veux générés des nombres pseudo-aléatoires entre 10 et 20.

              je comprends ce que tu veux dire.... il faut que je change de tableau pour les trier ?
              1. Contributeur
                A mon avis ..........tu veux rire un bon coup !!!!!!!!!!!!!!!!!!!!!!
                Comment veux-tu avoir des différences ??
                Si dans letableauinitial tu met des nombres entre 10 et 20
                ensuite filtre tout les nombres qui sont entre 10 et 20 dans et les mettre dans letableau
                c'est évident qu'il y seront tous et qu'il n'y aura pas de différence.
                Vraiment, tu m'épate là.
                dans letableauinitial met des nombres entre 1 et 30 et tu verra.
                ou bien filtre entre 3 et 6 par exemple
                1. Contributeur
                  Pour ma culture pourrais tu m'expliquer quelques trucs, notamment, à quoi correspond "UBound" et " ReDim Preserve letableau(T) " ?

                  Dans le code tu sélectionne Ubound (double clic dessus) il se met en bleu et tu tape F1.
                  Idem pour tout les mots que tu connais pas.

                  Et remplace la ligne
                  ListBoxsorted.Dispose()

                  par
                  ListBoxsorted.Items.Clear()

                  je me suis trompé.
                  A+
                  Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
                  NOTE : Je ne répond pas aux MP pour les questions techniques.
                  1. "Tu ne devrais pas répondre de cette façon", j'ai l'impression qu'il y de l'énervement alors que je ne suis pas agressif ....

                    j'ai testé ce code, mais j'ai un problème, lorsque je clique sur mon bouton "trier", ma listbox "ListBoxsorted" disparait, du coup impossible de savoir si c'est trier ^^

                    Pour ma culture pourrais tu m'expliquer quelques trucs, notamment, à quoi correspond "UBound" et " ReDim Preserve letableau(T) " ?

                    cdt
                    1. Contributeur
                      ou est ce que je met une condition qui ne sera jamais vrai ? ^^
                      Tu verras cela à l'usage..et en attendant, d'accord... met des lunettes.
                      Tu ne devrais pas répondre de cette façon alors que tu n'est pas en mesure de tester ton code vu que.. Exit While ÇA N'EXISTE PAS DANS LA SYNTAXE

                      Mais comme je suis pas rancunier, essaye ce code,
                          Dim letableau() 
                          Sub Transfert() 
                              Dim i As Integer, T As Integer = 0 
                              For i = 0 To UBound(letableauinitial) 
                                  If letableauinitial(i) > 9 And letableauinitial(i) < 21 Then 
                                      ReDim Preserve letableau(T) 
                                      letableau(T) = letableauinitial(i) 
                                      T = T + 1 
                                  End If 
                              Next 
                              ListBoxsorted.Dispose()
                              For i = 0 To UBound(letableau) 
                                  ListBoxsorted.Items.Add(CStr(letableau(i))) 
                              Next i 
                          End Sub

                      Toutes les valeurs de letableauinitial qui sont entre 10 et 20 se retrouve dans le tableau letableau
                      et dans la listeBox
                      A+
                      Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
                      NOTE : Je ne répond pas aux MP pour les questions techniques.
                      1. N est un valeur global déclarée au préalable

                        Alors soit je suis crevé, ou je change de lunette, ou est ce que je met une condition qui ne sera jamais vrai ? ^^

                        ton idée est la bonne
                        1. Contributeur
                          Aller, je vais reprendre malgré que j'avais pensé abandonner ce topic.
                          1°) N n'est pas déclarer et provient d'où ?
                          2°) Dans une boucle, si tu met une condition et quel ne serra jamais vraie tu bloque ton programme.
                          3°) Pourquoi transférer le tableau letableauinitial dans le tableau letableau ?
                          Explique ce que tu veux réaliser avec ce code sans faire référence au code.
                          J'ai bien une idée mais je ne sais pas si c'est la bonne, dans le tableau letableau tu veux mettre les valeurs comprises entre 10 et 20
                          Tu dis.

                          A+
                          1. je cherchais également à trier des nombres avec un bout de programme que j'avais déja fait :
                            Private Sub dosort() 'trier les nombres
                            Dim i, j As Integer
                            Dim nMoins1, valeur As Integer
                            Buttontrier.Enabled = False
                            For i = 0 To N - 1
                            letableau(i) = letableauinitial(i)
                            Next i
                            nMoins1 = N - 1
                            For j = 1 To nMoins1
                            i = j - 1
                            valeur = letableau(j)
                            While (i > 9) And (i < 21) And (valeur < letableau(i))
                            letableau(i + 1) = letableau(i)
                            i = i - 1
                            If (i < 0) Then
                            Exit While
                            End If
                            End While
                            letableau(i + 1) = valeur

                            Next j
                            For i = 0 To N - 1
                            ListBoxsorted.Items.Add(CStr(letableau(i)))

                            Next i

                            Buttontrier.Enabled = False
                            Buttoneffacer.Enabled = True

                            sauf que dans mon cas je veux trier seulement des nombres entre 10 et 20, comment dois je faire ?
                            • 1
                            • 2