Multiplikationsdiagramm

Oct 13 2020

Ich versuche, ein Multiplikationsdiagramm wie das auf dem Bild zu erstellen. Ich bin ziemlich neu in der Codierung und habe keine Ahnung, wo ich überhaupt anfangen soll. Ich habe der Ausgabe, die ich bisher habe, ein Bild sowie den folgenden Code beigefügt. Jede Hilfe wäre dankbar.

Ausgabe bekomme ich

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

Antworten

CaiusJard Oct 14 2020 at 08:37

Starten Sie stückweise und bauen Sie es auf. Hier ist der Algorithmus für eine Schleife, die eine Zählung von 1 bis 10 ausgibt

'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

Hier ist ein Algorithmus, der eine Zeittabelle druckt:

'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

Hoffentlich können Sie sehen, dass dies nur eine kleine Weiterentwicklung des ersten Algo ist. Wenn Sie den Zeitstempel auf 1 setzen, wird das gleiche gedruckt wie beim ersten Mal. Sie setzen es auf 2, es druckt die 2-fache Tabelle usw.

Ändern Sie nun das Algo erneut, diesmal mithilfe einer Schleife, um die zeitstabable Variable zehnmal zu ändern:

'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

Dadurch werden jetzt die Stundenpläne von 1 bis 10 ausgedruckt

Sie müssen wahrscheinlich nicht nur ein paar Formatierungsaufgaben erledigen. Wenn Sie diese Anweisungen buchstäblich befolgt haben, sieht Ihre Ausgabe folgendermaßen aus:

12345678910
2468101214161820

Sie können ein Leerzeichen hinzufügen zwischen:

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

Immer noch nicht sehr gut ausgerichtet, oder? Wir könnten etwas Logik gebrauchen, weil dies ein bisschen simpel ist:

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

Vielleicht würde das besser funktionieren:

'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

Plötzlich bekommen wir:

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

Dann müssen Sie nur noch einige Flusen um die Druckkopfzeilen usw. hinzufügen.

Sie werden feststellen, dass ich keinen Code gepostet habe, da dies Ihre Hausaufgabe ist, nicht meine. Ich weiß, wie es geht, aber wenn ich es für Sie mache, wird Ihnen die Möglichkeit genommen, diesen Prozess selbst zu lernen. Ihr Endergebnis sollte unbedingt eine Reihe von Kommentaren enthalten, wie die Kommentare, die ich hier geschrieben habe (Ihre Version des Algorithmus, wie Sie ihn verstehen), mit Code darunter. Selbst wenn Sie es nie zum Laufen bringen, wie es die Spezifikation verlangt, sollten Sie den Code und die Kommentare einreichen, damit der Kursleiter sehen kann, wo Ihr Denken falsch war (das Algo in den Kommentaren ist falsch) oder wo Ihr Denken richtig war, aber Ihre Antwort (das Code, den Sie geschrieben haben) war falsch. Dies ist wie "Zeigen Sie Ihr Training" in Matheprüfungen

Mary Oct 16 2020 at 20:51

Es macht keinen Sinn, den falschen Schleifentyp zu verwenden. Erklären Sie dies Ihrem Ausbilder.

Es macht auch keinen Sinn, die falsche Art der Steuerung zum Anzeigen Ihrer Daten zu verwenden. A ListBoxsteht für Listen. Ihre Daten ähneln eher einer Tabelle als einer Liste. A DataGridViewsoll tabellarische Daten anzeigen. Fügen Sie DataGridViewIhrem Formular ein hinzu.

A DataTableist eine Klasse im .Net Framework, die als In-Memory-Darstellung einer Tabelle (Spalten und Zeilen) gedacht ist. Sie können es in den Speicher füllen und dann als DataSourcevon a verwenden DataGridView, um die Daten anzuzeigen. Dies ist effizienter, als die Anzeige beim Hinzufügen von Daten ständig zu ändern.

Diese Übung sollte eine gute Einführung sein, DataTabledie ein sehr nützliches Werkzeug ist, wenn Sie mit der Datenbankarbeit beginnen.

Die ForSchleife iwird standardmäßig um 1 erhöht (oder wie auch immer Sie Ihre Variable benennen).

Zuerst erstellen wir eine DataTableVariable wie jede andere Variable nur mit dem NewSchlüsselwort, da wir eine Instanz einer Klasse erstellen. Fügen Sie als Nächstes die gewünschten Spalten hinzu. Die erste Spalte ist X und dann die Zahlen 1 bis 10.

Fügen Sie nun die Daten (die Zeilen) hinzu. Die erste und zweite Spalte jeder Zeile ist gerecht i. Die dritte Spalte ist ix 2 und so weiter.

Zuletzt setzen wir die DataSourceEigenschaft von DataGridViewauf unsere gefüllte DataTable( dt) und räumen ein wenig auf, damit es schön aussieht. Es gibt eine Reihe von Eigenschaften, mit denen Sie das Erscheinungsbild von a anpassen können 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

Der Schlüssel zu diesem Problem liegt in der Zahlenberechnung und dem Umgang mit Leerzeichen. Sie können zwei ForSchleifen für numerische Berechnungen verwenden.

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

Aufgrund der ersten Zeile ist die erste Spalte außerdem eindeutig. Sie werden nicht berechnet. Wir müssen also eine Sonderbehandlung durchführen.

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

Platzhandhabung:
Bitte beurteilen Sie die Größe der aktuellen Nummer.
Beispiel:
7 7 14 21 28 ... 98 105 112
num (i) steht für die aktuelle Zahl, num(i)=(x-1)*y
num (i + 1) steht für die Zahl nach num (i),num(i+1)=(x-1)*(y+1)

Wenn num(i + 1)<10, gibt es 5 Leerzeichen nach der Nummer davor.
Wenn 10 <num(i + 1)<100, gibt es 3 Leerzeichen nach der Nummer davor.
Wenn num(i + 1)> 100, steht nach der Nummer ein Leerzeichen davor.

Detaillierter Code:

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

Klasse beenden

Ergebnis: