Вывести множества А и В, упорядочив элементы в них по возрастанию - Visual Basic .NET
Формулировка задачи:
Здравствуйте, товарищи!
Помогите пожалуйста осилить задачку.
__________________________________
Задача.
1) Задать множества А и В, каждое из которых состоит из n элементов, сгенерировав целые случайные числа, равномерно распределенные на отрезке [a, b] (величины n, a, b должны вводиться с клавиатуры). Случайные числа могут повторяться как в разных множествах, так и внутри одного множества. Вывести множества А и В, упорядочив элементы в них по возрастанию.
2) Выделить подмножества XA, YB, состоящие из m последних элементов упорядоченных множеств А и В. Число m вводится с клавиатуры, причем должно выполняться условие: m<n. Вычислить и вывести декартово произведение X х Y (исключив при необходимости совпадающие элементы произведения).
3) Задать отношение R: АВ = {(xi, yi) xiA, yiB, i=1…n}, где пары (xi, yi) составляются случайным образом (но охватывают все элементы из множеств А и В соответственно). Вывести полученное множество пар. Вывести график данного отношения в виде точек (xi, yi) на плоскости OXY. Построить матрицу отношения R.
__________________________________________________________
C 1 заданием разобрался:
_____________________________
Со 2 только декартово произведение,и то плохо работает..
Решение задачи: «Вывести множества А и В, упорядочив элементы в них по возрастанию»
textual
Листинг программы
Imports System.Windows.Forms.DataVisualization.Charting
Public Class Form2
Private n, m, a, b As Integer
Private AA() As Integer, BB() As Integer
Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
ListBox1.Items.Clear()
ListBox2.Items.Clear()
ListBox3.Items.Clear()
ListBox4.Items.Clear()
Chart1.Visible = False
End Sub
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
If Not Integer.TryParse(TextBox1.Text, n) OrElse n = 0 Then
TextBox1.Focus()
TextBox1.SelectAll()
End If
End Sub
Private Sub TextBox2_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox2.TextChanged
If Not Integer.TryParse(TextBox2.Text, m) OrElse m = 0 Then
TextBox2.Focus()
TextBox2.SelectAll()
End If
End Sub
Private Sub TextBox3_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox3.TextChanged
If Not Integer.TryParse(TextBox3.Text, a) Then
TextBox3.Focus()
TextBox3.SelectAll()
End If
End Sub
Private Sub TextBox4_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox4.TextChanged
If Not Integer.TryParse(TextBox4.Text, b) Then
TextBox4.Focus()
TextBox4.SelectAll()
End If
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
ListBox1.DataSource = Nothing
ListBox2.DataSource = Nothing
If n = 0 Then Exit Sub
If a >= b Then Exit Sub
Dim rnd As New Random
ReDim AA(n - 1)
ReDim BB(n - 1)
For i = 0 To n - 1
AA(i) = rnd.Next(a, b + 1)
BB(i) = rnd.Next(a, b + 1)
Next
Array.Sort(AA)
Array.Sort(BB)
ListBox1.DataSource = AA
ListBox2.DataSource = BB
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
ListBox3.DataSource = Nothing
If m = 0 OrElse m >= n Then Exit Sub
Dim k As Integer = n - m
Dim x(m - 1) As Integer, y(m - 1) As Integer
Dim xy((m) * (m) - 1) As Point
Dim t, xi As Integer
For i = k To n - 1
x(t) = AA(i)
y(t) = BB(i)
t += 1
Next
t = 0
For i = 0 To m - 1
xi = x(i)
For j = 0 To m - 1
xy(t) = New Point(xi, y(j))
t += 1
Next
Next
ListBox3.DataSource = xy.Distinct().ToArray
End Sub
Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
ListBox4.DataSource = Nothing
Dim xx() As Integer = Enumerable.Range(0, n).ToArray
Dim yy() As Integer = Enumerable.Range(0, n).ToArray
Dim rr(n - 1) As Point
shuffleArray(xx)
shuffleArray(yy)
For i = 0 To n - 1
rr(i) = New Point(AA(xx(i)), BB(yy(i)))
Next
ListBox4.DataSource = rr
With Chart1
.Width = 390
.Height = 225
.ChartAreas.Clear()
.ChartAreas.Add("pnt")
.Series.Clear()
.Series.Add("R")
.Series(0).ChartType = SeriesChartType.Point
.Series(0).IsVisibleInLegend = False
.Series(0).Color = Color.Red
.Series(0).MarkerStyle = MarkerStyle.Circle
Dim dp(n - 1) As DataPoint
For i = 0 To n - 1
dp(i) = New DataPoint(rr(i).X, rr(i).Y)
dp(i).Label = rr(i).X.ToString & ";" & rr(i).Y.ToString
.Series(0).Points.Add(dp(i))
Next
.Visible = True
End With
End Sub
Private Sub shuffleArray(x() As Integer)
Dim rnd As New Random
Dim shf, tmp As Integer
For i = 0 To x.Length - 1
shf = i + rnd.Next(n - i - 1)
tmp = x(i)
x(i) = x(shf)
x(shf) = tmp
Next
End Sub
End Class