VB.net algorithme

Signaler
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Bonjour j'aimerais savoir comment je pourrais procéder pour faire un algorithme qui fait en sorte que quand l'utilisateur tape un chiffre, exemple 5, il apparraisse quelque chose comme ceci :
54321
_4321
__321
___21
____1

P.S je travaille sur visual basic en console et non en windows form.

6 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,

M'a tout l'air d'être un exercice imposé !
Mais bon ...
C'est un algo, hein, que tu cherches.
Voilà ce que je viens de faire sous VB6 ===>> analyse, comprends et transpose donc ===>>
dans l'évènement keypress d'une textbox :
Dim x As Integer, i As Integer, j As Integer
 x = KeyAscii - 48
 For i = x To 1 Step -1
   TextBox1.SelText = i
   For j = i - 1 To 1 Step -1
     TextBox1.SelText = j
   Next
   TextBox1.SelText = vbCrLf & String(2 + (x - i) * 2, " ")
 Next
 KeyAscii = 0

J'ai fait exprès de choisir une textbox. Cela va te forcer, toi, à utiliser l'algo seul et donc à travailler avec autre chose


________________________
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Excuses (t'ai refilé mon mauvais test) ===>> corrige :
Dim x As Integer, i As Integer, j As Integer
 x = KeyAscii - 48
 For i = x To 1 Step -1
   TextBox1.SelText = i
   For j = i - 1 To 1 Step -1
     TextBox1.SelText = j
   Next
   TextBox1.SelText = vbCrLf & String(1 + (x - i), " ") '====>>> correction ici.
 Next
 KeyAscii = 0

Il va de soi que la police utilisée doit être à échappement fixe (courrier, par exemple).
Précisions :
- c'est le raisonnement, qu'il te faut extraire et dont tu dois te servir. Tout le reste n'est que pipeau.
- j'aurais pu aussi bien utiliser Mid, tout bêtement.
- j'aurais pu également utiliser Val au lieu de Keyascii

Maintenant : quelle que serait la police (espacements proportionnels ou pas) : cet alignement serait également possible. Comment ? ===>> tout simplement en calculant à chaque fois la largeur graphique de la chaîne "résiduelle"). Ce n'est qu'à peine un tout petit peu plus complexe.
Je suis persuadé qu'il s'agit là d'un exercice qui t'est imposé et ne veux donc pas aller plus loin dans cette démarche sans avoir vu ton propre effort.
Bonne chance

________________________
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Un autre exemple, toujours sous VB6.
J'utilise là Mid et Val, comme dit plus haut.
Cet exemple est peut-être plus facile à suivre (algo auto-explicite). Egalement plus "proche" de ton exercice (impression sur le Form)
Private Sub Command1_Click()
  Me.FontName = "Courier" ' ou une autre police à espacement fixe
  toto "8" '>> simulation de ton chiffre frappé
  titi = Val(toto)
  Dim x As Integer, i As Integer, j As Integer
   x = KeyAscii - 48
   For i = 1 To titi
     chaine = chaine & Val(titi) + 1 - i
   Next
   Me.Print chaine
   For i = 1 To titi - 1
     Mid$(chaine, i) = " "
     Me.Print chaine
   Next
End Sub

Mais là encore : exemple simplifié par l'utilisation d'une police à espacement fixe (Courier)
Commence par analyser, comprendre et adapter cet exemple simple.
Ce ne sera que cette étape passée, que tu pourras envisager d'aller plus loin (avec n'importe quelle police et par calcul de la largeur graphique réelle).
________________________
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Il est sur ce forum d'usage, lorsque l'on a eu sa solution, de libérer le sujet en cliquant sur le tag "Réponse acceptée".


________________________
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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour à tous

En net
Private Sub ALGO(ByVal N As Integer)
        Dim acc As Int64
        Dim iter As Integer
        Dim result As String
        For iter = 0 To N - 1
            acc = 0
            For j As Integer = (N - iter) To 1 Step -1
                acc = acc * 10 + j
            Next
            result = acc.ToString.PadLeft(N, "_"c)
        Next
Console.WriteLine(result)
    End Sub