VB.net algorithme

paAlpha23 - 10 oct. 2012 à 00:03
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 11 oct. 2012 à 23:00
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2012 à 05:59
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2012 à 06:56
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 oct. 2012 à 10:46
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
0
Merci.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 oct. 2012 à 21:00
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
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
11 oct. 2012 à 23:00
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
0
Rejoignez-nous