곱셈 차트

Oct 13 2020

저는 그림에있는 것과 같은 곱셈 차트를 만들려고합니다. 저는 코딩에 익숙하지 않으며 어디서부터 시작해야할지 모르겠습니다. 지금까지 출력 한 이미지와 아래 코드를 포함했습니다. 어떤 도움을 주시면 감사하겠습니다.

내가 얻는 출력

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

답변

CaiusJard Oct 14 2020 at 08:37

단편적으로 시작하고 구축하십시오. 다음은 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

다음은 시간 테이블을 출력하는 알고리즘입니다.

'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

바라건대 이것이 첫 번째 알고리즘의 작은 진화 일뿐임을 알 수 있습니다. 시간표를 1로 설정하면 첫 번째 작업과 동일한 작업이 인쇄됩니다. 2로 설정하면 2 배 표 등이 인쇄됩니다.

이제 algo를 다시 수정합니다. 이번에는 루프를 사용하여 타임 테이블 변수를 10 번 변경합니다.

'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

이제 1부터 10까지의 시간 테이블이 인쇄됩니다.

처리 할 몇 가지 서식 지정 사항이 없을 것입니다. 말 그대로이 지침을 따랐다면 출력은 다음과 같습니다.

12345678910
2468101214161820

다음 사이에 공백을 추가 할 수 있습니다.

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

그래도 여전히 잘 정렬되어 있지 않습니까? 이것은 약간 단순하기 때문에 몇 가지 논리로 할 수 있습니다.

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

아마도 이것이 더 잘 작동 할 것입니다.

'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

갑자기 우리는 다음을 얻습니다.

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

그런 다음 인쇄 헤더 등에 추가 할 보풀이 있습니다.

내가 코드를 게시하지 않았 음을 알 수 있습니다. 왜냐하면 이것은 내 것이 아니라 당신의 숙제이기 때문입니다. 나는 그것을하는 방법을 알고있다. 그러나 내가 당신을 위해 그것을한다면 그것은 당신이이 과정을 스스로 배울 기회를 빼앗긴 다. 최종 결과에는 내가 여기에 작성한 주석 (당신이 이해하는 알고리즘의 버전)과 같은 주석이 아래에 코드와 함께 포함되어야합니다. 사양에서 요구하는대로 작동하지 않더라도 코드와 주석을 제출하여 강사가 어디에서 생각이 잘못되었는지 (코멘트의 알고리즘이 잘못됨) 또는 생각이 옳았지만 대답이 어디인지 ( 작성한 코드)가 잘못되었습니다. 이것은 수학 시험에서 "운동을 보여주는 것"과 같습니다.

Mary Oct 16 2020 at 20:51

잘못된 유형의 루프를 사용하는 것은 의미가 없습니다. 강사에게 이것을 설명하십시오.

데이터를 표시하기 위해 잘못된 유형의 컨트롤을 사용하는 것도 의미가 없습니다. A ListBox는 목록입니다. 데이터는 목록 이라기보다 표와 비슷합니다. A DataGridView는 표 형식의 데이터를 표시하기위한 것입니다. DataGridView양식에를 추가 하십시오.

A DataTable는 테이블 (열 및 행)의 메모리 내 표현을 의미하는 .Net Framework의 클래스입니다. 메모리에 채운 다음 데이터를 표시 DataSource하기 DataGridView위해 로 사용할 수 있습니다 . 이는 데이터를 추가 할 때 디스플레이를 계속 변경하는 것보다 더 효율적입니다.

이 연습은 DataTable데이터베이스 작업을 시작할 때 매우 유용한 도구 인 좋은 소개 입니다.

For루프 단위 i(또는 당신이 당신의 변수 이름을 무엇이든) 1 기본적으로.

먼저 클래스의 인스턴스를 생성하므로 키워드 DataTable만으로 다른 변수와 마찬가지로 New생성합니다. 다음으로 필요한 열을 추가하십시오. 첫 번째 열은 X이고 숫자는 1에서 10입니다.

이제 데이터 (행)를 추가합니다. 각 행의 첫 번째와 두 번째 열은 i. 세 번째 열은 ix 2입니다.

마지막으로의 DataSource속성을 DataGridView채우기 DataTable( dt)로 설정하고 멋지게 보이도록 약간 정리합니다. .NET Framework의 모양을 사용자 정의 할 수있는 많은 속성이 있습니다 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

이 문제의 핵심은 숫자 계산과 공백 처리에 있습니다. For수치 계산에 두 개의 루프를 사용할 수 있습니다 .

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

또한 첫 번째 행으로 인해 첫 번째 열이 고유합니다. 계산되지 않습니다. 그래서 우리는 특별한 대우를해야합니다.

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

공간 처리 :
현재 숫자의 크기를 판단하십시오.
예 :
7 7 14 21 28 ...
98105112 num (i)은 현재 숫자를 나타내고 num(i)=(x-1)*y
num (i + 1)은 num (i) 이후의 숫자를 나타냅니다.num(i+1)=(x-1)*(y+1)

인 경우 num(i + 1)<10앞에있는 숫자 뒤에 5 개의 공백이 있습니다.
인 경우 10 <num(i + 1)<100앞에있는 숫자 뒤에 공백이 3 개 있습니다.
인 경우 num(i + 1)> 100앞에있는 숫자 뒤에 공백이 있습니다.

자세한 코드 :

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

수업 종료

결과: