Привожу пример решения задачи, описанной в статье, студентом Алексеем в среде Visual Studio 2017 Community, использовавшим пакет «Разработка классических приложений .Net» и язык Visual Basic.
Интерфейс программы почти совпадает c интерфейсом примера на C#. Отличия состоят в задании распределения пробоин, вместо круга задается прямоугольник на плоскости с координатам углов (Xmin, Ymin) и (Xmax, Ymax). Не рисуются концентрические окружности мишени. Отсутствует проверка параметров стрельбы на диапазон. Массив точек, в соответствии с условием задачи, одномерный.
Текст файла Form1.vb:
' В одномерном массиве с четным количеством элементов (2N) ' находятся координаты (x,y) N точек на плоскости. ' Они располагаются в следующем порядке x1, y1, x2, y2, и т.д. ' Определить максимальный радиус круга с центром в начале ' координат, который содержит все эти точки. ' (C) Алексей Public Class Form1 ' Точка входа для программы ' Shared Sub Main() ' Application.Run(New Form1()) ' End Sub Dim P(2000) As Integer ' массив точек - не более 1000 Dim Rmin As Integer = 0 ' Результат - минимальный радиус Dim Graph1 As Graphics ' Графический контент - холст ' Задание точек и нахождение минимального радиуса Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Задание числа точек Dim n As Integer n = Convert.ToInt32(TextBox1.Text) ' Диапазон координат Dim Xmin As Integer = Convert.ToInt32(TextBox2.Text) Dim Xmax As Integer = Convert.ToInt32(TextBox3.Text) Dim Ymin As Integer = Convert.ToInt32(TextBox4.Text) Dim Ymax As Integer = Convert.ToInt32(TextBox5.Text) ' Заполнение массива случайными числами Randomize() For i As Integer = 0 To 2 * n - 2 Step 2 P(i) = (Xmax - Xmin) * Rnd() + Xmin P(i + 1) = (Ymax - Ymin) * Rnd() + Ymin Next i ' Вывод массива точек (x,y) в ListBox1 ListBox1.Items.Clear() For i As Integer = 0 To 2 * n - 2 Step 2 ListBox1.Items.Add(Space12(P(i).ToString()) + P(i).ToString() + " " + Str(P(i + 1))) Next i ' Нахождение минимального радиуса и "номера" точки Dim R As Double = 0.0 ' минимальный радиус Dim R1 As Double ' радиус точки (x,y) Dim k As Integer = -1 ' номер точки, умноженный на 2 ' Цикл по всем точкам, нахождение радиуса R For i As Integer = 0 To 2 * n - 2 Step 2 R1 = Math.Sqrt(P(i) * P(i) + P(i + 1) * P(i + 1)) If R1 > R Then R = R1 k = i End If Next i Rmin = R ' Текстовый результат ' Вывод результата ListBox2.Items.Clear() ListBox2.Items.Add("Результат :") ListBox2.Items.Add("Радиус круга = " + Rmin.ToString()) ' Для контроля: ListBox2.Items.Add("точка № " + (k / 2 + 1).ToString() + " x = " + P(k).ToString() + " y = " + P(k + 1).ToString()) End Sub ' Для выравнивания вывода чисел Public Function Space12(s As String) As String Dim t As Integer = 12 - s.Length Dim s1 As String = String.Empty For j As Integer = 0 To t - 1 s1 = s1 + " " Next j Return s1 End Function ' Графическая иллюстрация Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Dim Pen1 As New Pen(Color.Black, 2) ' Линии Dim Pen2 As New Pen(Color.Red, 1) ' Окружность Dim Pen3 As New Pen(Color.Blue, 2) ' Точки Dim brush1 As New SolidBrush(Color.Black) ' Текст меток на осях Dim font1 As New Font("Arial", 10) ' Шрифт и размер меток Dim X, Y As Single Graph1 = Me.PictureBox1.CreateGraphics() ' Связывание холста с pictureBox 'Рисуем шкалу координат 'По оcи X For X = -200 To 200 Step 50 Graph1.DrawString(X, font1, brush1, X + 200, 200) Next X 'По оcи Y For Y = -200 To 200 Step 50 Graph1.DrawString(Y, font1, brush1, 200, 200 - Y) Next Y 'Преобразование компьютерной системы координат в математическую 'Поворот оси Y Graph1.ScaleTransform(1, -1) 'Сдвиг по осям X и Y Graph1.TranslateTransform(200, -200) 'Рисование осей математической системы координат 'Ось X Graph1.DrawLine(Pen1, -200, 0, 200, 0) 'Ось Y Graph1.DrawLine(Pen1, 0, -200, 0, 200) 'Делаем засечки по осям координат 'По оси X For X = -200 To 200 Step 50 Graph1.DrawLine(Pen1, X, -5, X, 5) Next X 'По оси Y For Y = -200 To 200 Step 50 Graph1.DrawLine(Pen1, -5, Y, 5, Y) Next Y 'Рисуем точки и окружность Dim n = Convert.ToInt32(TextBox1.Text) For i As Integer = 0 To 2 * n - 2 Step 2 Graph1.DrawEllipse(Pen3, P(i), P(i + 1), 2, 2) Next i Graph1.DrawEllipse(Pen2, -Rmin, -Rmin, 2 * Rmin, 2 * Rmin) End Sub ' Очистка поля рисования Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Graph1.Clear(Color.AliceBlue) End Sub End Class
Результаты:
Сравните тексты программ, особенно в части графической иллюстрации, и вы увидите почти полное совпадение. И это не удивительно, ведь используются одни и те же библиотеки .Net Ftamework.
Попробуйте перевести программы с языка C# на Visual Basic, руководствуясь представлениями об общих библиотеках.
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.