Tableau de multiplication

Oct 13 2020

J'essaie de faire un tableau de multiplication comme celui de l'image, je suis assez nouveau dans le codage et je n'ai aucune idée par où commencer. J'ai inclus une image avec la sortie que j'ai jusqu'à présent, ainsi que le code ci-dessous. Toute aide serait appréciée.

Sortie que je reçois

Public Class frmL24
    Private Sub btnCreateChart_Click(sender As Object, e As EventArgs) Handles btnCreateChart.Click
        Dim j As Integer = 1
        Dim i As Integer = 1

        While (j <= 5)
            While (i <= 5)

                lstChart.Items.Add(String.Format(i * j))

                i += 1

            End While

            i = 1

            j += 1
        End While
    End Sub
End Class

Réponses

CaiusJard Oct 14 2020 at 08:37

Commencez au coup par coup et construisez-le. Voici l'algorithme pour une boucle qui émet un compte de 1 à 10

'Start with a variable inited to 1
'while that variable is less than or equal to 10
  'print out the variable (by print I mean "add it onto the end of a textbox text")
  'increment the variable
'loop

Voici un algorithme qui imprime une table de temps:

'have a variable for the times table we're doing, start with the 1 times table, call the variable "timestable"

'Start with a variable inited to 1, call it "number"
'while "number" is less than or equal to 10
  'print out the result of "number" multiplied by "timestable"
  'increment the value of "number"
'loop

J'espère que vous pouvez voir que ce n'est qu'une évolution mineure du premier algo. Vous définissez timestable sur 1, il imprime la même chose que le premier. Vous le définissez sur 2, il imprime le tableau de 2 fois, etc.

Maintenant, modifiez à nouveau l'algo, cette fois en utilisant une boucle pour changer la variable temporelle dix fois:

'have a variable for the times table we're doing, start with the 1 times table, call the variable "timestable"

'while "timestable" is less than or equal to 10

  'Start with a variable inited to 1, call it "number"
  'while "number" is less than or equal to 10
    'print out the result of "number" multiplied by "timestable"
    'increment the value of "number"
  'loop

  'increment the "timestable" variable
'loop

Cela imprimera maintenant les tableaux de temps de 1 à 10

Vous n'avez probablement pas que quelques éléments de formatage à prendre en charge. Si vous avez littéralement suivi ces instructions, votre sortie ressemblera à ceci:

12345678910
2468101214161820

Vous pouvez ajouter un espace entre:

1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20

Pas encore très bien aligné, n'est-ce pas? Nous pourrions faire avec un peu de logique, car c'est un peu simpliste:

'print out the result of "number" multiplied by "timestable"

Peut-être que cela fonctionnerait mieux:

'calculate the result of "number" multiplied by "timestable"
'if the result is less than 10, print 2 spaces then the result
'else print 1 space then the result

Soudain, nous obtenons:

  1  2  3  4  5  6  7  8  9 10
  2  4  6  8 10 12 14 16 18 20

Ensuite, vous avez juste quelques peluches à ajouter autour des en-têtes d'impression, etc.

Vous remarquerez que je n'ai posté aucun code, car ce sont vos devoirs, pas les miens. Je sais comment le faire, mais si je le fais pour vous, cela vous prive de l'opportunité d'apprendre ce processus vous-même. Votre résultat final devrait absolument contenir un tas de commentaires comme les commentaires que j'ai écrits ici (votre version de l'algorithme tel que vous le comprenez), avec du code en dessous. Même si vous ne le faites jamais fonctionner comme l'exige la spécification, vous devez remettre le code et les commentaires afin que l'instructeur puisse voir où votre pensée a mal tourné (l'algo dans les commentaires est faux) ou où votre pensée était juste mais votre réponse (le code que vous avez écrit) était erroné. C'est comme "montrer votre entraînement" aux examens de mathématiques

Mary Oct 16 2020 at 20:51

Cela n'a aucun sens d'utiliser le mauvais type de boucle. Expliquez cela à votre instructeur.

Il est également insensé d'utiliser le mauvais type de contrôle pour afficher vos données. A ListBoxest pour les listes. Vos données ressemblent plus à un tableau qu'à une liste. A DataGridViewest destiné à afficher des données tabulaires. Ajoutez un DataGridViewà votre formulaire.

A DataTableest une classe dans le .Net Framework qui est censée être une représentation en mémoire d'une table (colonnes et lignes). Vous pouvez le remplir en mémoire puis l'utiliser comme DataSourceun DataGridViewpour afficher les données. C'est plus efficace que de changer continuellement l'affichage à mesure que vous ajoutez des données.

Cet exercice devrait être une bonne introduction à DataTablece qui est un outil très utile lorsque vous démarrez le travail sur la base de données.

La Forboucle s'incrémente i(ou ce que vous nommez votre variable) par défaut de 1.

Tout d'abord, nous créons une DataTablevariable comme toute autre variable uniquement avec le Newmot - clé puisque nous créons une instance d'une classe. Ajoutez ensuite les colonnes dont vous avez besoin. La première colonne est X, puis les nombres de 1 à 10.

Ajoutez maintenant les données (les lignes). La première et la deuxième colonne de chaque ligne sont justes i. La troisième colonne est ix 2 et ainsi de suite.

Enfin, nous définissons la DataSourcepropriété de la DataGridViewsur notre fill DataTable( dt) et rangons un peu pour le rendre joli. Il existe de nombreuses propriétés permettant de personnaliser l'apparence d'un fichier DataGridView.

Private Sub OPCode()
    Dim dt As New DataTable
    dt.Columns.Add("X", GetType(Integer))
    For i = 1 To 10
        dt.Columns.Add(i.ToString, GetType(Integer))
    Next
    For i = 1 To 10
        dt.Rows.Add(i, i, i * 2, i * 3, i * 4, i * 5, i * 6, i * 7, i * 8, i * 9, i * 10)
    Next
    DataGridView1.DataSource = dt
    DataGridView1.AutoResizeColumns()
    DataGridView1.AutoResizeRows()
    'To make the numbers line up nicely
    For Each col As DataGridViewColumn In DataGridView1.Columns
        col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    Next
End Sub
Arya Oct 15 2020 at 10:01

La clé de ce problème réside dans le calcul des nombres et la gestion des espaces. Vous pouvez utiliser deux Forboucles pour les calculs numériques.

For x As Integer = 1 To 10
   For y As Integer = 1 To 10
   Next
Next

De plus, en raison de la première ligne, la première colonne est unique. Ils ne sont pas calculés. Nous devons donc effectuer un traitement spécial.

Dim arr(10) As String
For x As Integer = 1 To 10
If x = 1 Then
                i = x - 1
                arr(i) += arr(i) + "x" + space5
            Else
                i = x - 1
                arr(i) += arr(i) + i.ToString + space5
            End If
…….
Next

Gestion de l'espace:
veuillez juger de la taille du numéro actuel.
Ex:
7 7 14 21 28 ... 98105112
num (i) représente le nombre actuel, num(i)=(x-1)*y
num (i + 1) représente le nombre après num (i),num(i+1)=(x-1)*(y+1)

Si num(i + 1)<10, il y a 5 espaces après le nombre devant lui.
Si 10 <num(i + 1)<100, il y a 3 espaces après le nombre devant lui.
Si num(i + 1)> 100, il y a un espace après le nombre devant lui.

Code détaillé:

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load    
    Dim i As Integer
    Dim arr(10) As String 
    For x As Integer = 1 To 10

        Dim space5 As String = "     "
        Dim space3 As String = "   "
        If x = 1 Then
            i = x - 1
            arr(i) += arr(i) + "x" + space5
        Else
            i = x - 1
            arr(i) += arr(i) + i.ToString + space5
        End If
        For y As Integer = 1 To 10

            If x = 1 Then
                If y = 9 Then
                    arr(i) += (x * y).ToString + space3
                Else
                    arr(i) += (x * y).ToString + space5
                End If

            Else
                If ((x - 1) * (y + 1)) < 10 Then
                    arr(i) += ((x - 1) * y).ToString + space5
                Else
                    arr(i) += ((x - 1) * y).ToString + space3
                End If
            End If
        Next
        ListBox1.Items.Add(arr(i))
    Next

End Sub

Fin de classe

Résultat: