Tabla de multiplicar

Oct 13 2020

Estoy intentando hacer una tabla de multiplicar como la de la imagen, soy bastante nuevo en la codificación y no tengo ni idea de por dónde empezar. He incluido una imagen con la salida que tengo hasta ahora, así como el código a continuación. Cualquier ayuda sería apreciada.

Salida que estoy obteniendo

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

Respuestas

CaiusJard Oct 14 2020 at 08:37

Empiece poco a poco y constrúyelo. Aquí está el algoritmo para un bucle que emite una cuenta de 1 a 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

Aquí hay un algoritmo que imprime una tabla de multiplicar:

'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

Con suerte, puede ver que esto es solo una evolución menor del primer algoritmo. Establece la tabla de tiempos en 1, imprime lo mismo que hizo la primera. Lo pones en 2, imprime la tabla de multiplicar del 2, etc.

Ahora modifique el algoritmo nuevamente, esta vez usando un bucle para cambiar la variable de tabla de tiempos diez veces:

'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

Esto ahora imprimirá las tablas de multiplicar del 1 al 10

Probablemente no solo tenga que ocuparse de algunas cosas de formato. Si ha seguido literalmente estas instrucciones, su salida se verá así:

12345678910
2468101214161820

Podría agregar un espacio entre:

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

Sin embargo, todavía no está muy bien alineado, ¿verdad? Nos vendría bien un poco de lógica, porque esto es un poco simplista:

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

Quizás esto funcionaría mejor:

'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

De repente obtenemos:

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

Entonces solo tiene algo de pelusa para agregar alrededor de encabezados de impresión, etc.

Notarás que no he publicado ningún código, porque esta es tu tarea, no la mía. Sé cómo hacerlo, pero si lo hago por ti, te roba la oportunidad de aprender este proceso por ti mismo. Su resultado final debería tener un montón de comentarios como los comentarios que he escrito aquí (su versión del algoritmo tal como lo entiende), con código debajo. Incluso si nunca logra que funcione como lo exige la especificación, debe entregar el código y los comentarios para que el instructor pueda ver dónde se equivocó su pensamiento (el algoritmo en los comentarios es incorrecto) o dónde su pensamiento era correcto pero su respuesta (el código que escribió) estaba mal. Esto es como "mostrar su ejercicio" en los exámenes de matemáticas.

Mary Oct 16 2020 at 20:51

No tiene sentido utilizar el tipo de bucle incorrecto. Explíquele esto a su instructor.

Tampoco tiene sentido utilizar el tipo de control incorrecto para mostrar sus datos. A ListBoxes para listas. Sus datos se parecen más a una tabla que a una lista. A DataGridViewestá destinado a mostrar datos tabulares. Agregue un DataGridViewa su formulario.

A DataTablees una clase en .Net Framework que está destinada a ser una representación en memoria de una tabla (columnas y filas). Puede llenarlo en la memoria y luego usarlo como DataSourcede a DataGridViewpara mostrar los datos. Esto es más eficiente que cambiar continuamente la pantalla a medida que agrega datos.

Este ejercicio debería ser una buena introducción a lo DataTableque es una herramienta muy útil cuando comienza a trabajar con la base de datos.

El Forciclo se incrementa i(o como sea que nombre su variable) de forma predeterminada en 1.

Primero creamos una DataTablevariable como cualquier otra solo con la Newpalabra clave ya que estamos creando una instancia de una clase. Luego agregue las columnas que necesita. La primera columna es X y luego los números del 1 al 10.

Ahora agregue los datos (las filas). La primera y la segunda columna de cada fila son solo i. La tercera columna es ix 2 y así sucesivamente.

Por último, establecemos la DataSourcepropiedad de DataGridViewen nuestro relleno DataTable( dt) y lo ordenamos un poco para que se vea bien. Hay una gran cantidad de propiedades para personalizar la apariencia de un 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 clave de este problema radica en el cálculo numérico y el manejo de espacios. Puede utilizar dos Forbucles para cálculos numéricos.

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

Además, debido a la primera fila, la primera columna es única. No se calculan. Entonces tenemos que llevar a cabo un trato especial.

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

Manejo del espacio:
juzgue el tamaño del número actual.
Por ejemplo:
7 7 14 21 28 ... 98105112
num (i) representa el número actual, num(i)=(x-1)*y
num (i + 1) representa el número después de num (i),num(i+1)=(x-1)*(y+1)

Si num(i + 1)<10, hay 5 espacios después del número al frente.
Si 10 <num(i + 1)<100, hay 3 espacios después del número al frente.
Si num(i + 1)> 100, hay un espacio después del número delante de él.

Código detallado:

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

Clase final

Resultado: