Çarpım tablosu

Oct 13 2020

Resimdeki gibi bir çarpım tablosu oluşturmaya çalışıyorum, kodlamada oldukça yeniyim ve nereden başlayacağımı bile bilmiyorum. Şimdiye kadar sahip olduğum çıktıya aşağıdaki kodun yanı sıra bir resim ekledim. Herhangi bir yardım memnuniyetle karşılanacaktır.

Çıktı alıyorum

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

Yanıtlar

CaiusJard Oct 14 2020 at 08:37

Parça parça başlayın ve geliştirin. İşte 1'den 10'a kadar bir sayı yayan bir döngü için algoritma

'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

İşte bir çarpım tablosu yazdıran bir algoritma:

'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

Umarım bunun ilk algo'nun küçük bir evrimi olduğunu görebilirsiniz. Zaman testini 1 olarak ayarlarsanız, ilkinin yaptığı aynı şeyi yazdırır. 2'ye ayarlarsanız, 2 çarpım tablosunu vb. Yazdırır

Şimdi algo'yu tekrar değiştirin, bu sefer zamana duyarlı değişkeni on kez değiştirmek için bir döngü kullanarak:

'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

Bu şimdi 1'den 10'a kadar çarpım tablolarını yazdıracaktır.

Muhtemelen ilgilenmeniz gereken birkaç biçimlendirme işiniz yoktur. Bu talimatları tam anlamıyla takip ettiyseniz, çıktınız şöyle görünecektir:

12345678910
2468101214161820

Arasına boşluk ekleyebilirsiniz:

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

Yine de çok iyi hizalanmamış, değil mi? Biraz mantıkla yapabiliriz çünkü bu biraz basit:

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

Belki bu daha iyi sonuç verir:

'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

Aniden şunu anlıyoruz:

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

O zaman, baskı başlıklarına vb. Eklemek için biraz tüyleriniz var.

Herhangi bir kod göndermediğimi fark edeceksiniz, çünkü bu sizin ödeviniz, benim değil. Nasıl yapılacağını biliyorum, ama eğer bunu sizin için yaparsam, bu süreci kendiniz öğrenme fırsatından yoksun kalırsınız. Nihai sonucunuz kesinlikle burada yazdığım yorumlar gibi (sizin anladığınız şekilde algoritma sürümünüz), altında kod bulunan bir sürü yorum içermelidir. Spesifikasyonun gerektirdiği şekilde çalışmasanız bile, kodu ve yorumları teslim etmelisiniz, böylece eğitmen düşüncelerinizin nerede yanlış gittiğini (yorumlardaki algo yanlıştır) veya düşüncenizin doğru olduğunu ancak cevabınız ( yazdığınız kod) yanlıştı. Bu matematik sınavlarında "çalışmanızı göstermek" gibidir

Mary Oct 16 2020 at 20:51

Yanlış döngü türünü kullanmanın bir anlamı yok. Bunu eğitmeninize açıklayın.

Verilerinizi görüntülemek için yanlış denetim türünü kullanmanın da bir anlamı yoktur. A ListBox, listeler içindir. Verileriniz bir listeden çok bir tablo gibidir. A DataGridView, tablo şeklindeki verileri görüntülemek içindir. DataGridViewFormunuza bir ekleyin .

A DataTable, bir tablonun (sütunlar ve satırlar) bellekte temsili olması amaçlanan .Net Framework'teki bir sınıftır. Hafızaya doldurabilir ve ardından verileri görüntülemek için DataSourcea olarak kullanabilirsiniz DataGridView. Bu, siz veri ekledikçe ekranı sürekli olarak değiştirmekten daha etkilidir.

Bu alıştırma, DataTableveritabanı çalışmasına başladığınızda çok yararlı bir araç olan iyi bir giriş olmalıdır .

ForDöngü artışlarla i(ya da değişken adı her neyse) 1 ile varsayılan olarak.

İlk olarak , bir sınıfın bir örneğini oluşturduğumuz için DataTable, sadece Newanahtar kelimeyle diğer değişkenler gibi bir tane oluşturuyoruz. Ardından ihtiyacınız olan sütunları ekleyin. İlk sütun X ve ardından 1'den 10'a kadar sayılardır.

Şimdi verileri (satırları) ekleyin. Her satırın birinci ve ikinci sütunu sadece i. Üçüncü sütun ix 2'dir ve böyle devam eder ..

Son olarak, 'nin DataSourceözelliğini DataGridViewdolu DataTable( dt)' mıza ayarlıyoruz ve güzel görünmesi için biraz düzenliyoruz. Bir .kitap dosyasının görünümünü özelleştirmek için çok sayıda özellik vardır 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

Bu sorunun anahtarı, sayı hesaplamasında ve boşlukların işlenmesinde yatmaktadır. ForSayısal hesaplamalar için iki döngü kullanabilirsiniz .

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

Ek olarak, ilk satır nedeniyle ilk sütun benzersizdir. Hesaplanmazlar. Bu yüzden özel muamele yapmalıyız.

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

Alan kullanımı:
Lütfen mevcut sayının boyutunu değerlendirin.
Örneğin:
7 7 14 21 28 ... 98
105112 num (i) mevcut sayıyı, num(i)=(x-1)*y
num (i + 1) ise num (i) 'den sonraki sayıyı temsil eder,num(i+1)=(x-1)*(y+1)

Eğer num(i + 1)<10, onun önünde sayısının ardından 5 boşluklar vardır.
Eğer 10 <num(i + 1)<100, onun önünde sayısının ardından 3 boşluk vardır.
Eğer num(i + 1)> 100, onun önünde sayısının ardından bir boşluk vardır.

Ayrıntılı Kod:

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

Sınıf Sonu

Sonuç: