УНИВЕРСИТЕТ ПО АРХИТЕКТУРА, СТРОИТЕЛСТВО и ГЕОДЕЗИЯ
КАТЕДРА „АВТОМАТИЗАЦИЯ НА ИНЖЕНЕРНИЯ ТРУД”
__________________________________________________________________________________________
КУРСОВА ЗАДАЧА
по ПИИС
на Иван Петров Иванов
студент от специалност Геодезия, I курс,
3 група, ф. № 5555
Дата: ..................... Проверил: .........................
/гл. ас. д-р арх. Стоянка Иванова/
Условие:
Дадена е матрица Х с М реда и N стълба, съставена от реални елементи, записани в текстов файл. Матрицата да се прочете от файла и да се изведе в Sheet1.
4.1. Да се разменят съответните елементи от първия и последния ред на матрицата.
4.2. Да се разменят съответните елементи от първия и последния стълб на матрицата.
Получената матрица да се изведе в Sheet2.
' Първи етап – цялата задача в една процедура
Option Explicit
Sub Matrix()
Dim X() As Double
Dim M As Integer, N As Integer
Dim i As Integer, j As Integer
' зареждане на данни от Excel -> Sheet1
Dim W As Worksheet
Set W = Application.Worksheets("Sheet1") ' така може да се избират различни страници
W.Activate
' въвеждане на брой редове
Do
M = InputBox("M=")
Loop Until M > 1 And M <= 10
' въвеждане на брой стълбове
Do
N = InputBox("N=")
Loop Until N > 1 And N <= 10
' предеклариране на масива за матрицата
ReDim X(1 To M, 1 To N)
For i = 1 To M
For j = 1 To N
X(i, j) = W.Cells(i, j)
Next
Next
Dim T As Double
' размяна на съдържанието на ред 1 и ред M
For j = 1 To N
T = X(1, j): X(1, j) = X(M, j): X(M, j) = T
Next j
' размяна на съдържанието на стълб 1 и стълб N
For i = 1 To M
T = X(i, 1): X(i, 1) = X(i, N): X(i, N) = T
Next i
' извеждане на матрицата в Sheet2
Set W = Application.Worksheets("Sheet2") ' така може да се избират различни страници
W.Activate
For i = 1 To M
For j = 1 To N
W.Cells(i, j) = X(i, j)
Next
Next
End Sub
' Втори етап – използване на процедури и функции
Option Explicit
' Чете матрица от зададена страница на Ексел
Private Sub InputMatrix(SheetStr$, X, M As Integer, N As Integer)
Dim i%, j%
For i = 1 To M
For j = 1 To N
X(i, j) = Worksheets(SheetStr).Cells(i, j)
Next j
Next i
End Sub
' Показва матрица в зададена страница на Ексел
Private Sub DisplayMatrix(SheetStr$, X, M As Integer, N As Integer)
Dim i%, j%
For i = 1 To M
For j = 1 To N
Worksheets(SheetStr).Cells(i, j) = X(i, j)
Next j
Next i
End Sub
' Разменя елементите на ред i1 и ред i2
Private Sub Exchange_Rows(X, N As Integer, ByVal i1 As Integer, ByVal i2 As Integer)
Dim j%, T As Double
For j = 1 To N
T = X(i1, j): X(i1, j) = X(i2, j): X(i2, j) = T
Next j
End Sub
' Разменя елементите на стълб j1 и стълб j2
Private Sub Exchange_Columns(X, M As Integer, ByVal j1 As Integer, ByVal j2 As Integer)
Dim i%, T As Double
For i = 1 To M
T = X(i, j1): X(i, j1) = X(i, j2): X(i, j2) = T
Next i
End Sub
' Главна процедура
Sub Main()
Dim i%, j%, M%, N%
Dim X() As Double
Do
M = InputBox("M=")
Loop Until M > 1 And M <= 8
Do
N = InputBox("N=")
Loop Until N > 1 And N <= 8
ReDim X(1 To M, 1 To N)
Call InputMatrix("Sheet1", X, M, N)
Call Exchange_Rows(X, N, 1, M)
Call Exchange_Columns(X, M, 1, N)
Call DisplayMatrix("Sheet2", X, M, N)
End Sub
' Трети етап – използване на функции и файлове
Option Explicit
' Чете матрица от файл
Private Sub ReadMatrix(X, M As Integer, N As Integer)
Dim i%, j%
Dim Fname As String
Fname = InputBox("Въведете име на файла:")
Open Fname For Input As #1
Input #1, M, N
ReDim X(1 To M, 1 To N)
For i = 1 To M
For j = 1 To N
Input #1, X(i, j)
Next j
Next i
Close #1
End Sub
' Показва прочетената от файла матрица в зададена страница на Ексел
Private Sub DisplayMatrix(SheetStr$, X, M As Integer, N As Integer)
Dim i%, j%
For i = 1 To M
For j = 1 To N
Worksheets(SheetStr).Cells(i, j) = X(i, j)
Next j
Next i
End Sub
' Разменя елементите на ред i1 и ред i2
Private Sub Exchange_Rows(X, N As Integer, ByVal i1 As Integer, ByVal i2 As Integer)
Dim j%, T As Double
For j = 1 To N
T = X(i1, j): X(i1, j) = X(i2, j): X(i2, j) = T
Next j
End Sub
' Разменя елементите на стълб j1 и стълб j2
Private Sub Exchange_Columns(X, M As Integer, ByVal j1 As Integer, ByVal j2 As Integer)
Dim i%, T As Double
For i = 1 To M
T = X(i, j1): X(i, j1) = X(i, j2): X(i, j2) = T
Next i
End Sub
' Главна процедура
Sub Main()
Dim i%, j%, M%, N%
Dim X() As Double
Call ReadMatrix(X, M, N)
Call DisplayMatrix("Sheet1", X, M, N)
Call Exchange_Rows(X, N, 1, M)
Call Exchange_Columns(X, M, 1, N)
Call DisplayMatrix("Sheet2", X, M, N)
End Sub
Файл с входни данни: d:\matrix.txt
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Входни данни за матрицата в Sheet1:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Резултати в Sheet2:
16 14 15 13
8 6 7 5
12 10 11 9
4 2 3 1
Сподели с приятели: |