Tableau de multiplication
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
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
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
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: