Решение нелинейных и трансцендентных уравнений графическим и численным методами с применением технологии процедурного программирования

Страницы работы

Содержание работы

Федеральное государственное учреждение высшего профессионального образования «Ставропольский государственный аграрный университет»

Экономический факультет

Кафедра Прикладной информатики

Курсовая работа

На тему: Решение нелинейных и трансцендентных уравнений графическим и численным методами с применением технологии процедурного программирования

По дисциплине: Языки и системы программирования

Выполнил: студент II курса, 10 группы,

специальности «Профессиональное обучение (информатика, вычислительная техника и компьютерные технологии)»

Горлов Виктор Викторович

Проверил: ассистент

Криворучко Георгий Юрьевич

Дата сдачи:______________________

Дата защиты:____________________

Оценка:_________________________

Подпись:________________________

Ставрополь 2009

Содержание:

Введение

1.  Листинг программы на языке программирования Microsoft Visual Basic for Applications

2.  Проект программы в текстовом процессоре Microsoft Excel

3.  Листинг программы на языке программирования Microsoft Small Basic

4.  Проект программы на языке программирования Microsoft Small Basic

Заключение

 


Введение

Одним из лидеров по популярности в программировании среди языков программирования является Basic. Он представляет собой мощную систему различных возможных вариантов программирования. Созданный ещё в шестидесятых и впоследствии активно используемый будущим мультимиллионером Биллом Гейтсом язык за свою жизнь сорвал настоящий фурор. Именно во многом он принёс Биллу такие прибыли.

В то время разнообразие языков программирования не имело конца и края, написание своего языка превращалось в популярное хобби. Но именно простой и достаточно понятный Бейсик завоевал любовь и доверие миллионов профессиональных программистов и любителей. Конечно, можно спорить и говорить, что велика была пропаганда, но из всех языков того времени сейчас живым и бурно развивающимся остался только он. Интересно то, что в курсовой работе, помимо необходимого для написания офисных программ Visual Basic for Applications, будет использоваться и новый Small Basic, перспективный язык программирования.

Взяв на вооружение эти два языка, я постараюсь создать интересные проекты решения функции y = Sin(Sqr(1 – 0.4x2)) – x на отрезке [0; 1] методом дихотомии. Известно, что в начальной точке отрезка y = 0,841471.

1.  Листинг программы на языке программирования Microsoft Visual Basic for Applications

Dim a, b, c, d, i As Double

Public Function F(x)

F = Sin(Sqr(1 - 0.4 * (x ^ 2))) - x

End Function

Private Sub CommandButton1_Click()

a = Val(ActiveSheet.Cells(1, 4))

b = Val(ActiveSheet.Cells(2, 4))

d = Val(ActiveSheet.Cells(3, 4))

Do

c = (a + b) / 2

If (Sgn(F(c)) = Sgn(F(a))) Then

  a = c

Else

  b = c

End If

Loop While (b - a) > d

ActiveSheet.Cells(2, 14) = c

a = Val(ActiveSheet.Cells(1, 4))

b = Val(ActiveSheet.Cells(2, 4))

d = (b - a) / 20

c = a

For i = 5 To 25

ActiveSheet.Cells(i, 2) = c

ActiveSheet.Cells(i, 3) = F(c)

c = c + d

Next

ActiveSheet.Cells(3, 9) = F(a)

If (Val(ActiveSheet.Cells(3, 9)) = Val(ActiveSheet.Cells(2, 9))) Then                                                           

  ActiveSheet.Cells(4, 9) = "Yes"

Else

  ActiveSheet.Cells(4, 9) = "No"

EndIf

If F(Val(ActiveSheet.Cells(2, 14))) = 0 Then

  ActiveSheet.Cells(4, 14) = "Yes"

Else

  ActiveSheet.Cells(4, 14) = "No"

EndIf

ActiveSheet.Cells(3, 14) = F(Val(ActiveSheet.Cells(2, 14)))

End Sub

2.  Проект программы в текстовом процессоре      Microsoft Excel

Рисунок 1. Интерфейс проекта в Microsoft Excel 2007.

3.  Листинг программы на языке программирования Microsoft Small Basic

GraphicsWindow.Title = "Victor Gorlov y = Sin(Sqr(1 - 0.4 * (x ^ 2))) - x"

GraphicsWindow.BackgroundColor = “Khaki”

GraphicsWindow.Title = “Function y = Sin(Sqr(1 – 0.4(x ^ 2))) – x”

a = 0

b = 1

d = 0.001

x = a

c = a

Sub F

  Function = Math.Sin(Math.SquareRoot(1 – 0.4 * Math.Power(x, 2))) – x

EndSub

Calculate()

GraphicsWindow.FontBold = “False”

GraphicsWindow.BrushColor = “Black”

GraphicsWindow.DrawText(10, 10, “Левая граница отрезка (a):”)

GraphicsWindow.DrawText(10, 30, “Правая граница отрезка (b):”)

GraphicsWindow.DrawText(10, 50, “Необходимая точность:”)

GraphicsWindow.DrawText(10, 70, “Численное решение:”)

GraphicsWindow.FontBold = “True”

GraphicsWindow.BrushColor = “Blue”

GraphicsWindow.DrawText(200, 10, a)

GraphicsWindow.DrawText(200, 30, b)

GraphicsWindow.DrawText(200, 50, d)

GraphicsWindow.DrawText(200, 70, c)

GraphicsWindow.FontBold = “False”

GraphicsWindow.BrushColor = “Black”

GraphicsWindow.DrawText(450, 8, “x=”)

GraphicsWindow.DrawText(500, 8, “F(x)=”)

d = (b – a) / 20

x = a

For i = 0 To 20

  GraphicsWindow.BrushColor = “Green”

  GraphicsWindow.DrawBoundText(450, 20+11*i, 50, x)

  F()

  GraphicsWindow.BrushColor = “Navy”

  GraphicsWindow.DrawBoundText(500, 20+11*i, 50, Function)

  x = x + d

EndFor

inx = a

maxX = b

x = inx

F()

minY = Function

x = maxX

F()

maxY = Function

If minY > maxY Then

x = maxY

maxY = minY

minY = x

EndIf

xScale = 400 * ((maxX – inx)/20)

yScale = 150 * (maxY – minY)

GraphicsWindow.DrawRectangle(8, 98, 404, 304)

GraphicsWindow.PenColor = “Green”

GraphicsWindow.BrushColor = “Green”

x = c

F()

aY = maxY – Function

GraphicsWindow.DrawLine(10, 100+aY*yScale, 410, 100+aY*yScale)

GraphicsWindow.DrawText(400, 100+aY*yScale, “X”)

x = a

For i = 0 To 20

  F()

  y = maxY – Function

  GraphicsWindow.BrushColor = “Navy”

  GraphicsWindow.FillEllipse(8+i*xScale, 98+y*yScale, 4, 4)

  GraphicsWindow.PenWidth = 1

  GraphicsWindow.PenColor = “Blue”

  GraphicsWindow.BrushColor = “Black”

  If Math.Remainder(i, 2) = 0 Then

    GraphicsWindow.DrawText(10+i*xScale, 400, x)

    GraphicsWindow.DrawLine(10+i*xScale, 100+y*yScale, 10+i*xScale, 400)

  Else

    GraphicsWindow.DrawText(10+i*xScale, 410, x)   

    GraphicsWindow.DrawLine(10+i*xScale, 100+y*yScale, 10+i*xScale, 410)

  EndIf

  x = x + d

EndFor

Sub Sgn

  If Function > 0 Then

    SgnTest = 1

  ElseIf Function < 0 Then

    SgnTest=-1

  Else

    SgnTest = 0

  EndIf

EndSub

Sub Calculate

  al = a

  bl = b

  While (bl – al) > d

    c = (al + bl) / 2

    x = c

    F()

    Sgn()

    F1 = SgnTest

    x = al

    F()

    Sgn()

    F2 = SgnTest

    If F1 = F2 Then

      al = c

    Else

      bl = c

    EndIf

  EndWhile

GraphicsWindow.DrawText(270, 430, “© 2009 by Victor Gorlov for permission by Landgraph.ru”)

EndSub

4.  Проект программы на языке программирования Microsoft Small Basic

Рисунок 2. Численное решение на языке Small Basic.

Заключение

В ходе разработки программы было выявлена суть различий между двумя языками программирования. VBA – объектно-ориентированный язык, поэтому мне не приходилось расписывать долго свойства объекта. Он, с помощью средств Excel, помог создать понятный график функции. Small Basic возможно более красив в работе с графикой, но система решения уравнений в нём, по-моему, слабовата. В общем, Small Basic создан для решения, наверно, не таких задач, но, не смотря на это, Small Basic успешно справился с поставленной задачей.

Ещё следует сказать, что из-за того, что в Microsoft Excel десятичные дроби пишутся через запятую, то не получилось правильно проверять совпадение значений функций, потому что в Бейсике в десятичных дробях ставится точка.

Похожие материалы

Информация о работе