УНИВЕРСИТЕТ ПО АРХИТЕКТУРА, СТРОИТЕЛСТВО и ГЕОДЕЗИЯ
КАТЕДРА „АВТОМАТИЗАЦИЯ НА ИНЖЕНЕРНИЯ ТРУД”
__________________________________________________________________________________________
КУРСОВА ЗАДАЧА
по ПИИС
на Иван Петров Иванов
студент от специалност Геодезия, I курс,
3 група, ф. № 5555
Дата: ..................... Проверил: .........................
/гл. ас. д-р арх. Стоянка Иванова/
Условие:
Дадена е матрица Х с М реда и N стълба, съставена от реални елементи, записани в текстов файл. Матрицата да се прочете от файла и да се изведе на екрана.
4.1. Да се разменят съответните елементи от първия и последния ред на матрицата.
4.2. Да се разменят съответните елементи от първия и последния стълб на матрицата.
Получената матрица да се изведе на екрана.
' Първи етап – цялата задача в една процедура
Module Module1
Sub Main()
Dim X(,) As Double
Dim M As Integer, N As Integer
Dim i As Integer, j As Integer
' въвеждане на брой редове
Do
Console.Write("M=")
M = Console.ReadLine()
Loop Until M > 1
' въвеждане на брой стълбове
Do
Console.Write("N=")
N = Console.ReadLine()
Loop Until N > 1
' предеклариране на масива за матрицата
ReDim X(M, N)
For i = 0 To M-1
For j = 0 To N-1
Console.Write("X(" & i & "," & j & ")=")
X(i, j) = Console.ReadLine()
Next
Next
Dim T As Double
' размяна на съдържанието на ред 0 и ред M-1
For j = 0 To N-1
T = X(0, j): X(0, j) = X(M-1, j): X(M-1, j) = T
Next j
' размяна на съдържанието на стълб 0 и стълб N-1
For i = 0 To M-1
T = X(i, 0): X(i, 0) = X(i, N-1): X(i, N-1) = T
Next i
' извеждане на матрицата на екрана
For i = 0 To M-1
For j = 0 To N-1
Console.WriteLine("X(" & i & "," & j & ")=" & X(i,j))
Next
Next
Console.ReadKey()
End Sub
End Module1
' Втори етап – използване на процедури и функции
Module Module1
' Процедурата чете матрица от клавиатурата
Private Sub InputMatrix(ByVal name$, ByRef X(,) As Double, ByVal M As Integer, ByVal N As Integer)
Dim i As Integer, j As Integer
For i = 0 To M-1
For j = 0 To N-1
Console.Write(name & "(" & i & "," & j & ")=")
X(i, j) = Console.ReadLine()
Next j
Next i
End Sub
' Процедурата показва матрица на екрана
Private Sub DisplayMatrix(ByVal name$, ByVal X(,) As Double, ByVal M As Integer, ByVal N As Integer)
Dim i As Integer, j As Integer
For i = 0 To M-1
For j = 0 To N-1
Console.WriteLine(name & "(" & i & "," & j & ")=" & X(i, j))
Next j
Next i
End Sub
' Процедурата разменя елементите на ред i1 и ред i2
Private Sub Exchange_Rows(ByRef X(,) As Double, ByVal N As Integer, _
ByVal i1 As Integer, ByVal i2 As Integer)
Dim j As Integer, T As Double
For j = 0 To N-1
T = X(i1, j): X(i1, j) = X(i2, j): X(i2, j) = T
Next j
End Sub
' Процедурата разменя елементите на стълб j1 и стълб j2
Private Sub Exchange_Columns(ByRef X(,) As Double, ByVal M As Integer, _
ByVal j1 As Integer, ByVal j2 As Integer)
Dim i as Integer, T As Double
For i = 0 To M-1
T = X(i, j1): X(i, j1) = X(i, j2): X(i, j2) = T
Next i
End Sub
' Главна процедура
Sub Main()
Dim M As Integer, N As Integer
Dim i As Integer, j As Integer
Dim X(,) As Double
' въвеждане на брой редове
Do
Console.Write("M=")
M = Console.ReadLine()
Loop Until M > 1
' въвеждане на брой стълбове
Do
Console.Write("N=")
N = Console.ReadLine()
Loop Until N > 1
ReDim X(M, N)
Call InputMatrix("X",X, M, N)
Call Exchange_Rows(X, N, 0, M-1)
Call Exchange_Columns(X, M, 0, N-1)
Call DisplayMatrix("X",X, M, N)
Console.ReadKey()
End Sub
End Module1
' Трети етап – използване на функции и файлове
Module Module1
Private Sub Load_Matrix(ByVal filename$, ByRef A(,) As Double, _
ByRef M As Integer, ByRef N As Integer)
Dim F1 As Short
F1 = FreeFile()
FileOpen(F1, filename, OpenMode.Input)
Input(F1, M)
Input(F1, N)
ReDim X(M, N)
Dim i, j As Integer
For i = 0 To M - 1
For j = 0 To N - 1
Input(F1, A(i, j))
Next j
Next
FileClose(F1)
End Sub
' Процедурата показва матрица на екрана
Private Sub DisplayMatrix(ByVal name$, ByVal X(,) As Double, _
ByVal M As Integer, ByVal N As Integer)
Dim i As Integer, j As Integer
For i = 0 To M - 1
For j = 0 To N - 1
Console.WriteLine(name & "(" & i & "," & j & ")=" & X(i, j))
Next j
Next i
End Sub
Private Sub Save_Matrix(ByVal filename$, ByVal X(,) As Double, _
ByVal M As Integer, ByVal N As Integer)
Dim F1 As Short
F1 = FreeFile()
FileOpen(F1, filename, OpenMode.Output)
PrintLine(F1, M, N)
Dim i, j As Integer
For i = 0 To M - 1
For j = 0 To N - 1
Print(F1, X(i, j))
Next j
PrintLine(F1)
Next
FileClose(F1)
End Sub
' Процедурата разменя елементите на ред i1 и ред i2
Private Sub Exchange_Rows(ByRef X(,) As Double, ByVal N As Integer, _
ByVal i1 As Integer, ByVal i2 As Integer)
Dim j As Integer, T As Double
For j = 0 To N - 1
T = X(i1, j) : X(i1, j) = X(i2, j) : X(i2, j) = T
Next j
End Sub
' Процедурата разменя елементите на стълб j1 и стълб j2
Private Sub Exchange_Columns(ByRef X(,) As Double, ByVal M As Integer, _
ByVal j1 As Integer, ByVal j2 As Integer)
Dim i As Integer, T As Double
For i = 0 To M - 1
T = X(i, j1) : X(i, j1) = X(i, j2) : X(i, j2) = T
Next i
End Sub
' Главна процедура
Sub Main()
Dim M As Integer, N As Integer
Dim X(,) As Double
Call Load_Matrix("D:\Temp\MyData1.txt", X, M, N)
Call DisplayMatrix("X", X, M, N)
Call Exchange_Rows(X, N, 0, M - 1)
Call Exchange_Columns(X, M, 0, N - 1)
Call DisplayMatrix("X", X, M, N)
Call Save_Matrix("D:\Temp\MyData2.txt", X, M, N)
Console.ReadKey()
End Sub
End Module
Файл с входни данни: D:\Temp\MyData1.txt
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Резултати във файл: D:\Temp\MyData2.txt
16 14 15 13
8 6 7 5
12 10 11 9
4 2 3 1
Сподели с приятели: |