Задача по пиис на Иван Петров Иванов студент от специалност Геодезия, I курс, задочно обучение, ф. №5555



Дата28.01.2017
Размер44.98 Kb.


УНИВЕРСИТЕТ ПО АРХИТЕКТУРА, СТРОИТЕЛСТВО и ГЕОДЕЗИЯ

КАТЕДРА „АВТОМАТИЗАЦИЯ НА ИНЖЕНЕРНИЯ ТРУД”

__________________________________________________________________________________________

КУРСОВА ЗАДАЧА

по ПИИС

на Иван Петров Иванов



студент от специалност Геодезия, 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



База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

    Начална страница