Tabla de multiplicar
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
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.
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
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: