Расположение элементов в матрице
Задание
·
Расположить
в матрице A(N,N) элементы в порядке их возрастания в последовательности
указанной на рисунке.
Требования
к программе:
·
Составить
программу на алгоритмическом языке, выполняющую указанные преобразования с
матрицами;
·
Вывести
исходную матрицу с индексами её элементов;
·
Вывести
преобразованную матрицу с новым содержимым;
·
Программа
должна строиться таким образом, чтобы существовала возможность её использования
с массивами любой размерности, содержащими произвольные элементы;
·
В
программе должна быть предусмотрена выдача на печать исходных и преобразованных
матриц;
·
Полученные
результаты должны быть занесены в файл последовательного доступа и доступны для
просмотра из него.
Изменённые
свойства приложения
Begin VB.Form
Form1
BorderStyle =
1 'Fixed Single
Caption = "Задание
№46"
ClientHeight =
5550
ClientLeft = 45
ClientTop = 435
ClientWidth =
7575
LinkTopic = "Form1"
MaxButton = 0
'False
ScaleHeight =
5550
ScaleWidth = 7575
StartUpPosition
= 2 'CenterScreen
Begin
VB.TextBox txtOriginal
Height = 1875
Left = 90
Locked = -1 'True
MultiLine = -1
'True
ScrollBars = 2
'Vertical
TabIndex = 3
Top = 1350
Width = 7365
End
Begin
VB.Frame Frame1
Caption = "Управление
размерностью матрицы"
BeginProperty
Font
Name = "MS
Sans Serif"
Size = 8.25
Charset = 204
Weight = 700
Underline = 0
'False
Italic = 0 'False
Strikethrough
= 0 'False
EndProperty
Height = 885
Left = 90
TabIndex = 7
Top = 120
Width = 7365
Begin
VB.TextBox txtN
Alignment = 2
'Center
Height = 285
Left = 3150
MaxLength = 4
TabIndex = 0
Top = 390
Width = 1335
End
Begin
VB.CommandButton cmdRun
Caption = "&Решение"
Default = -1 'True
Enabled = 0 'False
Height = 375
Left = 4650
TabIndex = 1
Top = 360
Width = 1245
End
Begin
VB.CommandButton cmdExit
Cancel = -1 'True
Height = 375
Left = 5970
TabIndex = 2
Top = 360
Width = 1245
End
Begin
VB.Label Label2
Alignment = 2
'Center
BorderStyle =
1 'Fixed Single
Caption = "Введите
размерность матрицы"
Height = 255
Left = 150
TabIndex = 8
Top = 390
Width = 2895
End
End
Begin
VB.TextBox txtResult
Height = 1875
Left = 90
Locked = -1 'True
MultiLine = -1
'True
ScrollBars = 2
'Vertical
TabIndex = 4
Top = 3570
Width = 7365
End
Begin
VB.Label Label3
Alignment = 2
'Center
BorderStyle =
1 'Fixed Single
Caption = "Полученная
матрица"
BeginProperty
Font
Name = "MS
Sans Serif"
Size = 8.25
Charset = 204
Weight = 700
Underline = 0
'False
Italic = 0 'False
Strikethrough
= 0 'False
EndProperty
Height = 255
Left = 90
TabIndex = 6
Top = 3270
Width = 7365
End
Begin
VB.Label Label1
Alignment = 2
'Center
BorderStyle =
1 'Fixed Single
Caption = "Оригинальная
матрица"
BeginProperty
Font
Name = "MS
Sans Serif"
Size = 8.25
Charset = 204
Weight = 700
Underline = 0
'False
Italic = 0 'False
Strikethrough
= 0 'False
EndProperty
Height = 255
Left = 90
TabIndex = 5
Top = 1050
Width = 7365
End
End
Attribute
VB_Name = "Form1"
Attribute
VB_GlobalNameSpace = False
Attribute
VB_Creatable = False
Attribute
VB_PredeclaredId = True
Текст
программы на языке Microsoft Visual Basic 6.00
Option
Explicit
Private Sub
cmdExit_Click()
Unload Me
End Sub
Private Sub
cmdPrint_Click()
Me.PrintForm
End Sub
Private Sub
cmdRun_Click()
txtN.Enabled
= False
Dim pi As
Integer, pj As Integer
Dim i As
Integer, j As Integer
Dim t As
Integer, n As Integer
Dim k As
Integer, p As Integer
n =
Val(txtN.Text)
txtOriginal.Text
= Empty
ReDim a(n, n)
As Integer
For i = 1 To
n
For j = 1 To
n
a(i, j) =
Int(Rnd * 90) + 10
txtOriginal.Text
= txtOriginal.Text & Str(a(i, j)) & " "
Next j
txtOriginal.Text
= txtOriginal.Text & vbCrLf
Next i
ReDim x(n ^ 2)
As Integer
k = 0
p = n / 2 *
11
pi = Int(p /
10)
pj = p - pi *
10
k = k + 1
x(k) = a(pi,
pj)
For i = 1 To
n - 1
For t = 1 To
10 Step 9
For j = 1 To
i
p = p + (-1)
^ (i + 1) * t
pi = Int(p /
10)
pj = p - pi *
10
k = k + 1
x(k) = a(pi,
pj)
Next j
Next t
Next i
For i = 1 To
n - 1
p = p - 1
pi = Int(p /
10)
pj = p - pi *
10
k = k + 1
x(k) = a(pi,
pj)
Next i
For t = 1 To
n ^ 2
For i = 1 To
n ^ 2 - 1
If x(i) >
x(i + 1) Then
k = x(i)
x(i) = x(i +
1)
x(i + 1) = k
End If
Next i
Next t
k = 0
p = n / 2 *
11
pi = Int(p /
10)
pj = p - pi *
10
k = k + 1
a(pi, pj) =
x(k)
For i = 1 To
n - 1
For t = 1 To
10 Step 9
For j = 1 To
i
p = p + (-1)
^ (i + 1) * t
pi = Int(p /
10)
pj = p - pi *
10
a(pi, pj) =
x(k)
Next j
Next t
Next i
For i = 1 To
n - 1
p = p - 1
pi = Int(p /
10)
pj = p - pi *
10
k = k + 1
a(pi, pj) =
x(k)
Next i
txtResult.Text
= Empty
For i = 1 To
n
For j = 1 To
n
txtResult.Text
= txtResult.Text & Str(a(i, j)) & " "
Next j
txtResult.Text
= txtResult.Text & vbCrLf
Next i
cmdPrint.Enabled
= True
cmdSave.Enabled
= True
End Sub
Private Sub
cmdSave_Click()
Open App.Path
& "\Result.txt" For Output As #1
Print #1,
"Задание №46" & vbCrLf & vbCrLf
Print #1,
"Исходная матрица:" & vbCrLf
Print #1,
txtOriginal.Text & vbCrLf
Print #1,
"Полученная матрица:" & vbCrLf
Print #1,
txtResult.Text
Close #1
End Sub
Private Sub
txtN_Change()
If
Val(txtN.Text) > 8 Or Val(txtN.Text) = 0 Or Val(txtN.Text) Mod 2 <> 0
Then
cmdRun.Enabled
= False
Else
cmdRun.Enabled
= True
End If
End Sub
Private Sub
txtN_KeyPress(KeyAscii As Integer)
If KeyAscii
< 26 Then Exit Sub
If Not
IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
End Sub
Внешний
вид приложения:
Результат
работы приложения: