แผนภูมิการคูณ

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 อีกครั้งคราวนี้ใช้ลูปเพื่อเปลี่ยนตัวแปรเวลาสิบครั้ง:

'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 ที่มีไว้เพื่อเป็นตัวแทนของตารางในหน่วยความจำ (คอลัมน์และแถว) คุณสามารถเติมลงในหน่วยความจำแล้วใช้เป็นDataSourcea DataGridViewเพื่อแสดงข้อมูล สิ่งนี้มีประสิทธิภาพมากกว่าการเปลี่ยนการแสดงผลอย่างต่อเนื่องในขณะที่คุณเพิ่มข้อมูล

แบบฝึกหัดนี้ควรเป็นคำแนะนำที่ดีDataTableซึ่งเป็นเครื่องมือที่มีประโยชน์มากเมื่อคุณเริ่มงานฐานข้อมูล

การForเพิ่มลูปi(หรืออะไรก็ตามที่คุณตั้งชื่อตัวแปรของคุณ) ตามค่าเริ่มต้นโดย 1

อันดับแรกเราสร้างDataTableเช่นเดียวกับตัวแปรอื่น ๆ โดยใช้Newคำหลักเท่านั้นเนื่องจากเรากำลังสร้างอินสแตนซ์ของคลาส จากนั้นเพิ่มคอลัมน์ที่คุณต้องการ คอลัมน์แรกคือ X ตามด้วยตัวเลข 1 ถึง 10

ตอนนี้เพิ่มข้อมูล (แถว) iคอลัมน์แรกและครั้งที่สองของแต่ละแถวเป็นเพียง คอลัมน์ที่สามคือix 2 เป็นต้นไป ..

สุดท้ายเราตั้งค่าDataSourceคุณสมบัติของเป็นDataGridViewเติมDataTable( dt) ของเราและจัดระเบียบเล็กน้อยเพื่อให้ดูดี มีคุณสมบัติมากมายในการปรับแต่งรูปลักษณ์ของไฟล์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 ... 98105 112
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

จบคลาส

ผลลัพธ์: