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


Каталог: filebank
filebank -> Тема на дипломната работа
filebank -> Доклад на национален дарителски фонд „13 века българия
filebank -> 1 3 в е к а б ъ л г а р и я“ Утвърдил
filebank -> Доклад на национален дарителски фонд „13 века българия
filebank -> Доклад на национален дарителски фонд „13 века българия
filebank -> Зимна сесия – уч. 2015– 2016 г. Начало на изпитите 00 ч. Теоретична механика ІІ ч. Динамика
filebank -> Упражнение №1
filebank -> О т ч е т на проф. Д-р инж. Борислав маринов – декан на геодезическия факултет при уасг пред общото събрание на факултета
filebank -> Техническа механика
filebank -> Дати за поправителната сесия септември 2013 г катедра “Техническа механика”


Поделитесь с Вашими друзьями:


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

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