УНИВЕРСИТЕТ ПО АРХИТЕКТУРА, СТРОИТЕЛСТВО и ГЕОДЕЗИЯ
КАТЕДРА „АВТОМАТИЗАЦИЯ НА ИНЖЕНЕРНИЯ ТРУД”
__________________________________________________________________________________________
КУРСОВА ЗАДАЧА
по ПИИС
на Иван Петров Иванов
студент от специалност Геодезия, I курс,
задочно обучение, ф. № 5555
Дата: ..................... Проверил: .........................
/ ас. инж. Михаил Матеев /
Условие:
Дадени са N точки в равнината с координатите си по оси X и Y. Данните да се прочетат от файл, а резултатите да се изведат на екрана.
4.1. Да се намери общата дължина на контура, който се образува от всички последователно свързани точки.
4.2. Да се определи между кои две последователни точки разстоянието е най-голямо.
' Първи етап – цялата задача в една процедура
Module Module1
Sub Main()
Dim X(), Y() As Double
Dim N, i As Integer
' въвеждане на брой точки
Do
Console.Write("Брой точки N=")
N = Console.ReadLine()
Loop Until N > 1
' предеклариране на масивите за координати на точките
ReDim X(N), Y(N)
' въвеждане на координатите на точките от клавиатурата
For i = 0 To N-1
Console.Write("X(" & i & ")=")
X(i) = Console.ReadLine()
Console.Write("Y(" & i & ")=")
Y(i) = Console.ReadLine()
Next
' първо подусловие
' деклариране на масив за дължини на отсечките и на тяхната сума
Dim L(N-1) As Double, Sum As Double
Sum=0
' изчисляване на дължини на отсечките и сумиране
For i = 0 To N-2
L(i) = Math.Sqrt( (X(i)-X(i+1))^2 + (Y(i)-Y(i+1))^2 )
Sum = Sum + L(i)
Next i
Console.WriteLine("Дължина на контура Sum = " & Sum)
' второ подусловие – да се намери максимумът на масива L
Dim MaxL As Double, imax As Integer
MaxL = L(0): imax=0
For i = 1 To N-2
If L(i) > MaxL then MaxL = L(i): imax=i
Next i
Console.WriteLine("Най-дългата отсечка е между точки " & imax & " и " & imax+1 & _
" с дължина " & MaxL)
Console.ReadKey()
End Sub
End Module1
' Втори етап – използване на процедури и функции
Module Module1
' Процедурата въвежда координати на точки от клавиатурата
Private Sub InputCoordinates(ByRef X() As Double, ByRef Y() As Double, ByVal N As Integer)
Dim i As Integer
For i = 0 To N-1
Console.Write("X(" & i & ")=")
X(i) = Console.ReadLine()
Console.Write("Y(" & i & ")=")
Y(i) = Console.ReadLine()
Next
End Sub
' функцията изчислява разстояние между 2 точки
Private Function Dist(ByVal x1 as Double, ByVal y1 as Double, _
ByVal x2 as Double, ByVal y2 as Double) As Double
Dist = Math.Sqrt( (x2-x1)^2 + (y2-y1)^2 )
End Function
' Процедурата изчислява дължината на контура
Private Sub LengthContour(ByVal X() As Double, ByVal Y() As Double, ByRef L() As Double, _
ByVal N As Integer)
Dim Sum As Double, i As Integer
Sum=0
' изчисляване на дължини на отсечките и сумиране
For i = 0 To N-2
L(i) = Dist( X(i), Y(i), X(i+1), Y(i+1) )
Sum = Sum + L(i)
Next i
Console.WriteLine("Дължина на контура Sum = " & Sum)
End Sub
' Процедурата намира най-дългата отсечка
Private Sub MaxLength(ByVal L() As Double, ByVal N As Integer)
Dim MaxL As Double, i, imax As Integer
MaxL = L(0): imax=0
For i = 1 To N-2
If L(i) > MaxL then MaxL = L(i): imax=i
Next i
Console.WriteLine("Най-дългата отсечка е между точки " & imax & " и " & imax+1 & _
" с дължина " & MaxL)
End Sub
' Главна процедура
Sub Main()
Dim N As Integer
Dim X(), Y(), L() As Double
' въвеждане на брой точки
Do
Console.Write("N=")
N = Console.ReadLine()
Loop Until N > 1
ReDim X(N), Y(N), L(N-1)
Call InputCoordinates(X, Y, N)
Call LengthContour(X, Y, L, N)
Cal MaxLength(L, N)
Console.ReadKey()
End Sub
End Module1
' Трети етап – използване на процедури, функции и файлове
Module Module1
' Процедурата въвежда данни за координати на точки от файл
Private Sub LoadCoordinates(ByVal filename$,
ByRef X() As Double, ByRef Y() As Double, ByRef N As Integer)
Dim i As Integer, F1 As Short
F1 = FreeFile()
FileOpen(F1, filename, OpenMode.Input)
Input(F1, N)
ReDim X(N), Y(N)
For i = 0 To N - 1
Input(F1, X(i)): Input(F1, Y(i))
Next
FileClose(F1)
End Sub
' функцията изчислява разстояние между 2 точки
Private Function Dist(ByVal x1 as Double, ByVal y1 as Double, _
ByVal x2 as Double, ByVal y2 as Double) As Double
Dist = Math.Sqrt( (x2-x1)^2 + (y2-y1)^2 )
End Function
' Процедурата изчислява дължината на контура
Private Sub LengthContour(ByVal X() As Double, ByVal Y() As Double, ByRef L() As Double, _
ByVal N As Integer)
Dim Sum As Double, i As Integer
Sum=0
' изчисляване на дължини на отсечките и сумиране
For i = 0 To N-2
L(i) = Dist( X(i), Y(i), X(i+1), Y(i+1) )
Sum = Sum + L(i)
Next i
Console.WriteLine("Дължина на контура Sum = " & Sum)
End Sub
' Процедурата намира най-дългата отсечка
Private Sub MaxLength(ByVal L() As Double, ByVal N As Integer)
Dim MaxL As Double, i, imax As Integer
MaxL = L(0): imax=0
For i = 1 To N-2
If L(i) > MaxL then MaxL = L(i): imax=i
Next i
Console.WriteLine("Най-дългата отсечка е между точки " & imax & " и " & imax+1 & _
" с дължина " & MaxL)
End Sub
' Главна процедура
Sub Main()
Dim N As Integer
Dim X(), Y(), L() As Double
Call LoadCoordinates("D:\Temp\MyData1.txt", X, Y, N)
ReDim L(N-1)
Call LengthContour(X, Y, L, N)
Cal MaxLength(L, N)
Console.ReadKey()
End Sub
End Module1
Входни данни – във файл D:\Temp\MyData1.txt
5
1 1
1 2
5 5
9 5
9 3
Резултати:
Дължина на контура Sum = 12
Най-дългата отсечка е между точки 1 и 2 с дължина 5
Сподели с приятели: |