Завдання № 37
Розмістити у матриці A (N, N) елементи в послідовності зазначеної на малюнку.
Вимоги до програми:
Скласти програму на алгоритмічній мові, виконує зазначені перетворення з матрицями;
Вивести вектор, отриманий випадково;
Вивести перетворену матрицю з новим вмістом вектора;
Програма повинна будуватися таким чином, щоб існувала можливість її використання з масивами будь-якої розмірності, що містять довільні елементи;
У програмі повинна бути передбачена видача на друк вихідних і перетворених матриць;
Отримані результати повинні бути занесені у файл послідовного доступу і доступні для перегляду з нього.
Змінені властивості програми
Begin VB. Form frmMain
BorderStyle = 1 'Fixed Single
Caption = "Завдання № 37"
ClientHeight = 4365
ClientLeft = 45
ClientTop = 435
ClientWidth = 6180
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 4365
ScaleWidth = 6180
StartUpPosition = 2 'CenterScreen
Begin VB.Frame Frame2
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 = 4125
Left = 4590
TabIndex = 7
Top = 120
Width = 1485
Begin VB.CommandButton cmdSave
Caption = "& Збереження"
Enabled = 0 'False
Height = 375
Left = 120
TabIndex = 11
Top = 1530
Width = 1245
End
Begin VB.CommandButton cmdPrint
Caption = "& Друк"
Enabled = 0 'False
Height = 375
Left = 120
TabIndex = 10
Top = 930
Width = 1245
End
Begin VB.CommandButton cmdExit
Cancel = -1 'True
Caption = "& Вихід"
Height = 375
Left = 120
TabIndex = 9
Top = 3630
Width = 1245
End
Begin VB.CommandButton cmdRun
Caption = "& Рішення"
Default = -1 'True
Enabled = 0 'False
Height = 375
Left = 120
TabIndex = 8
Top = 330
Width = 1245
End
End
Begin VB.TextBox txtOriginal
Height = 675
Left = 90
Locked = -1 'True
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 1
Top = 1350
Width = 4485
End
Begin VB. Frame Frame 1
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 = 5
Top = 120
Width = 4515
Begin VB.TextBox txtN
Alignment = 2 'Center
Height = 285
Left = 3150
MaxLength = 4
TabIndex = 0
Top = 360
Width = 1215
End
Begin VB.Label Label2
Caption = "Парна розмірність матриці"
Height = 255
Left = 150
TabIndex = 6
Top = 390
Width = 2895
End
End
Begin VB.TextBox txtResult
Height = 1875
Left = 90
Locked = -1 'True
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 2
Top = 2370
Width = 4485
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 = 4
Top = 2070
Width = 4485
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 = 3
Top = 1050
Width = 4485
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Текст програми на мовою Microsoft Visual Basic 6.00 Ext
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 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 = Empty
Dim MV As Integer
MV = n ^ 2 / 2 + n
ReDim a (n, n) As Integer
ReDim x (MV) As Integer
Randomize Timer
For i = 1 To MV
x (i) = Int (Rnd * 90) + 10
txtOriginal = txtOriginal & Str (x (i)) & ""
Next i
k = 0
For i = n To n / 2 - 1 Step -1
If i / 2 = Int (i / 2) Then
For j = n - i + 1 To i
k = k + 1: a (i, j) = x (k)
Next j
Else
For j = i To n - i + 1 Step -1
k = k + 1: a (i, j) = x (k)
Next j
End If
Next i
For i = n / 2 To 1 Step -1
If i / 2 = Int (i / 2) Then
For j = n - i + 1 To i Step -1
k = k + 1
a (i, j) = x (k)
Next j
Else
For j = i To n - i + 1
k = k + 1
a (i, j) = x (k)
Next j
End If
Next i
For i = 1 To n
For j = 1 To n
txtResult = txtResult & Format (a (i, j), "00") & ""
Next j
txtResult = txtResult & vbCrLf
Next i
cmdPrint.Enabled = True
cmdSave.Enabled = True
End Sub
Private Sub cmdSave_Click ()
On Error GoTo Err_Lbl:
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
Exit Sub
Err _ Lbl:
MsgBox "Сталася помилка запису", vbCritical, "Увага"
End Sub
Private Sub txtN_Change ()
If Val (txtN)> 8 Or Val (txtN) = 0 Or Val (txtN) 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
Зовнішній вигляд програми:
Результат роботи програми:
Додаток 1
Form1
VERSION 5.00
Begin VB.Form frmMain
BorderStyle = 1 'Fixed Single
Caption = "Завдання № 37"
ClientHeight = 4365
ClientLeft = 45
ClientTop = 435
ClientWidth = 6180
LinkTopic = "Form1"
MaxButton = 0 'False
ScaleHeight = 4365
ScaleWidth = 6180
StartUpPosition = 2 'CenterScreen
Begin VB.Frame Frame2
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 = 4125
Left = 4590
TabIndex = 7
Top = 120
Width = 1485
Begin VB.CommandButton cmdSave
Caption = "& Збереження"
Enabled = 0 'False
Height = 375
Left = 120
TabIndex = 11
Top = 1530
Width = 1245
End
Begin VB.CommandButton cmdPrint
Caption = "& Друк"
Enabled = 0 'False
Height = 375
Left = 120
TabIndex = 10
Top = 930
Width = 1245
End
Begin VB.CommandButton cmdExit
Cancel = -1 'True
Caption = "& Вихід"
Height = 375
Left = 120
TabIndex = 9
Top = 3630
Width = 1245
End
Begin VB.CommandButton cmdRun
Caption = "& Рішення"
Default = -1 'True
Enabled = 0 'False
Height = 375
Left = 120
TabIndex = 8
Top = 330
Width = 1245 End
End
Begin VB.TextBox txtOriginal
Height = 675
Left = 90
Locked = -1 'True
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 1
Top = 1350
Width = 4485
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 = 5
Top = 120
Width = 4515
Begin VB.TextBox txtN
Alignment = 2 'Center
Height = 285
Left = 3150
MaxLength = 4
TabIndex = 0
Top = 360
Width = 1215
End
Begin VB.Label Label2
Alignment = 2 'Center
BorderStyle = 1 'Fixed Single
Caption = "Парна розмірність матриці "
Height = 255
Left = 150
TabIndex = 6
Top = 390
Width = 2895
End
End
Begin VB.TextBox txtResult
Height = 1875
Left = 90
Locked = -1 'True
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 2
Top = 2370
Width = 4485
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 = 4
Top = 2070
Width = 4485
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 = 3
Top = 1050
Width = 4485
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
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 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 = Empty
Dim MV As Integer
MV = n ^ 2 / 2 + n
ReDim a (n, n) As Integer
ReDim x (MV) As Integer
Randomize Timer
For i = 1 To MV
x (i) = Int (Rnd * 90) + 10
txtOriginal = txtOriginal & Str (x (i)) & ""
Next i
k = 0
For i = n To n / 2 - 1 Step -1
If i / 2 = Int (i / 2) Then
For j = n - i + 1 To i
k = k + 1
a (i, j) = x (k)
Next j
Else
For j = i To n - i + 1 Step -1
k = k + 1
a (i, j) = x (k)
Next j
End If
Next i
For i = n / 2 To 1 Step -1
If i / 2 = Int (i / 2) Then
For j = n - i + 1 To i Step -1
k = k + 1
a (i, j) = x (k)
Next j
Else
For j = i To n - i + 1
k = k + 1
a (i, j) = x (k)
Next j
End If
Next i
For i = 1 To n
For j = 1 To n
txtResult = txtResult & Format (a (i, j), "00") & ""
Next j
txtResult = txtResult & vbCrLf
Next i
cmdPrint.Enabled = True
cmdSave.Enabled = True
End Sub
Private Sub cmdSave_Click ()
On Error GoTo Err_Lbl:
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
Exit Sub
Err_Lbl:
MsgBox "Сталася помилка запису", vbCritical, "Увага"
End Sub
Private Sub txtN_Change ()
If Val (txtN)> 8 Or Val (txtN) = 0 Or Val (txtN) 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
Додаток 2
Завдання № 46
Вихідна матриця:
39 41 16 98 68 47 13 87 94 12 12 69 59 46 52 85 71 38 18 19 77 81 92 26 23 94 66 83 28 23 23 15 39 50 51 78 58 22 73 41
Отримана матриця:
39 50 51 78 58 22 73 41
00 15 23 23 28 83 66 00
00 00 92 26 23 94 00 00
00 00 00 81 77 00 00 00
00 00 00 19 18 00 00 00
00 00 52 85 71 38 00 00
00 46 59 69 12 12 94 00
39 41 16 98 68 47 13 87
Type = Exe Form = Form1.frm Reference =* \ G {00020430-0000-0000-C000-000000000046} # 2.0 # 0 # .. \ .. \ .. \ WINDOWS \ system32 \ stdole2.tlb # OLE Automation IconForm = "frmMain" Startup = "frmMain" Command32 = "" Name = "prj37" HelpContextID = "0" CompatibleMode = "0" MajorVer = 1 MinorVer = 0 RevisionVer = 0 AutoIncrementVer = 0 ServerSupportFiles = 0 VersionCompanyName = "G-GII Company" CompilationType = 0 OptimizationType = 0 FavorPentiumPro (tm) = 0 CodeViewDebugInfo = 0 NoAliasing = 0 BoundsCheck = 0 OverflowCheck = 0 FlPointCheck = 0 FDIVCheck = 0 UnroundedFP = 0 StartMode = 0 Unattended = 0 Retained = 0 ThreadPerObject = 0 MaxNumberOfThreads = 1 [MS Transaction Server] AutoRefresh = 1
frmMain = 17, 12, 750, 513, C, 148, 49, 730, 495, C