Файл: Informatika_Chast_3_2009_Naumov.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 26.07.2024

Просмотров: 273

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Порядок выполнения работы

  1. Создать Excel-документ и сохранить его в бригадной папке под именем «Сумма чисел».

  2. Запустить редактор VBA и вставить в рабочее поле форму проекта.

  3. Задать имя проекта «Проба Do_Loop».

  4. Задать заголовок на форме «Суммирование ряда целых чисел от 1 до 5».

  5. Создать в форме командную кнопку с именем «CmdРешение» и надписью «Пуск».

  6. Создать в форме надпись (метку) «Сумма», а под ней – текстовое поле для вывода результата (имя поля оставить стандартным TextBox1).

  7. Создать следующий программный модуль:

Private Sub CmdРешение_Click( )

Dim s As Integer, i As Integer

s=0 ‘Начальное значение суммы

i=1 ‘Начальное значение ряда чисел

Do While i<=5

s=s+i ’Накопление суммы

i=i+1 ’Задание очередного числа

Loop

TextBox1.Text=s

End Sub

  1. Сохранить разработанный проект и выполнить созданную программу.

  2. Закрыть редактор VBA и подготовить для дальнейшей работы 3 копии исходного файла «Сумма чисел» под именами «While в конце», «Until в начале», «Until в конце».

  3. Открыть последовательно подготовленные копии исходного файла, выполнить необходимые изменения в тексте исходной программы, поставив как указано, служебные слова While и Until в имени файла, выполнить измененные программы и сохранить их при успешном выполнении.

  4. Создать два Excel-документа и сохранить их в бригадной папке под именами «Пробег дня 20 км» и «Сумма пробега 100 км».

  5. Начать реализацию расчёта двух показателей тренировок спортсмена-бегуна.

  6. В конце работы самостоятельно реализовать проект по варианту, заданному преподавателем.

  7. Завершить работу щелчком ЛКМ на пункте «Завершение сеанса <имя группы>».

Содержание отчета

Отчет должен содержать:

  • номер, название и цель работы;

  • краткую теоретическую часть, включающую описание формата оператора цикла с условием;

  • результаты выполнения работы согласно заданию, выданному преподавателем, а именно: текст составленных программ с пояснениями к ним, структуру окна формы задачи, описание действий по выполнению программ, результаты выполнения программы;

  • заключение по работе.


Контрольные вопросы

  1. Синтаксис оператора цикла с условием.

  2. До каких пор продолжается выполнение цикла Do While … Loop?

  3. До каких пор продолжается выполнение цикла Do Until … Loop?

  4. С помощью какого оператора реализуется преждевременный выход из цикла?

  5. Где в цикле Do While … Loop размещается условие?

ЛАБОРАТОРНАЯ РАБОТА № 5

Редактор VBA. Метод бисекции

Цель работы:

  • познакомиться с алгоритмом метода бисекции;

  • получить навыки создания программного модуля с использованием оператора цикла с условием Do-While-Loop.

Теоретическая часть

Алгоритм метода бисекции

Решение задачи выполняется в два этапа.

Этап 1. Локализация корня в интервале поиска [a, b]. Условие локализации: корень в интервале единственный, и значения функции на концах интервала имеют разные знаки (f(af(b)<0).

Этап 2. Реализация метода бисекции, а именно: выполнение цикла приближений к корню выделением из интервала поиска половины, содержащей корень. Для этого в середине начального интервала и каждой выделенной его половины берётся пробная точка с= (a+b)/2, и в ней вычисляется значение функции f(с). Далее выполняется сравнение знаков f(a) и f(с) по произведению значений f(a) и f(с) и переопределение той или иной границы интервала поиска:

если f(af(с)<0, то a; иначе b.

Основным условием окончания процесса (цикла) поиска является сокращение длины интервала поиска до задаваемой малой величины, определяющей допустимую погрешность вычисления корня, например, 0,01. Дополнительным условием окончания процесса поиска служит равенство нолю значения функции в пробной точке (в центре интервала поиска), когда длина интервала ещё большая.


Программная реализация метода бисекции

Function F (Byval x As Single) As Single

F=(x–1)^2–1

End Function

Private Sub Расчет (Byval xn As Single, Byval xk As Single, └┘

Byval e As Single, ByRef x As Variant)

Dim N As Integer, c As Single ‘Объявление локальных переменных

Dim mas () ‘Объявление динамического массива

If F(xn)*F(xk)>0 Then

x =”?”

MsgBox ”на данном интервале корня нет или четное кол-во корней.”└┘

+ Chr(13) └┘ &└┘

”Задайте интервал, содержащий один корень”

Exit Sub

End If

N=0

c=(xn+xk)/2

Do While xk-xn>℮ And Abs(F(c))> ℮

c=(xn+xk)/2

N=N+1

ReDim Preserve mas (1 Tо N)

mas (N) =C

If F(xn)*F(c)>0 Then xn=c Else xk=c

Loop

x=c

If N=0 Then

ReDim Preserve mas(1 To 1)

mas (1)=x

End If

List1.List=mas

End Sub

Private Sub Cmd Решение _Click( )

Dim a As Single, b As Single, eps As Single, └┘––

корень As Variant

a=CSng(Text1.Text)

b=CSng(Text2.Text)

eps=CSng(Text3.Text)

Расчет a, b, eps, корень

Text4.Text = корень

End Sub

Private Sub List1_Click()

Text5.Text=F(CSng(List1))

End Sub

Пояснения

Данный проект является реализацией одного из численных методов поиска корня нелинейного уравнения.

Проект реализован структурированной программой. В главной (командной) подпрограмме с именем «CmdРешение» выполняется считывание с полей формы (ввод) основных исходных данных, вызов вспомогательной подпрограммы с именем «Расчет» и передача в поле формы (вывод) вычисленного значения корня.

В структуре программы содержатся описания:

  • функции с именем «F», лежащей в основе уравнения;

  • вспомогательной подпрограммы с именем «Расчет»;

  • дополнительной подпрограммы с именем «List1», передающей в поле формы значения функции при последовательных приближениях к корню.

Алгоритм метода поиска корня формально описан во вспомогательной подпрограмме с именем «Расчет».

При записи в подпрограмме оператора цикла Do…Loop со служебным словом While (пока), помещённым вначале, составное условие для входа и продолжения цикла должно быть истинным, когда длина интервала поиска и значение функции в пробной (центральной) точке больше допустимой погрешности. Такое соединение условий реализуется логической операцией «And» («и»).


Нарушение хотя бы одного из указанных выше условий входа в цикл обращает составное условие в ложь и приводит к выходу из цикла. А если в самом начале пробная точка окажется в точке корня, то входа в цикл не будет.

Последняя ситуация (нет входа в цикл) приводит к неопределенности динамического массива с именем «mas», содержащего приближения к корню (координаты центральных точек интервала поиска) и наращиваемого по длине по мере надобности (количество элементов определяется счётчиком N). Если не было входа в цикл (N=0), то искусственно массив формируется из одного элемента, которому передается значение координаты первой пробной точки, являющейся точкой корня.

Динамический массив «mas» определяется в два этапа: сначала в инструкции «Dim» с помощью двух подряд круглых скобок (открывающей и закрывающей), помещаемых после имени массива, принципиально объявляется массив; далее в цикле с помощью инструкции «ReDim» (Return Dimension – возврат к определению размерности) задаются границы нумерации элементов массива. Служебное слово «Preserve» является обязательным, без этого слова значения элементов массива не сохраняются в памяти.

В подпрограмме «Расчет» (в самом её начале) проверяется условие локализации. В условном операторе, выполняющем эту проверку, фигурирует обратное условие. Если оно истинно, то выводится соответствующее сообщение и выполняется выход (Exit) из подпрограммы. А перед этим величине «x» (переменной универсального типа Variant, соответствующей фактическому параметру «корень»), присваивается значение некоторой символьной константы (символы помещаются в кавычки, например, «???»; возможна пустая строка – двое кавычек (открывающих и закрывающих) подряд; тогда на форме проекта поле значения корня будет пустым). Если определить формальную переменную «x» и соответствующую ей в главной подпрограмме фактическую переменную «корень» как числовую, а при отсутствии корня в интервале поиска не присвоить этой переменной никакого значения, то в поле вывода автоматически будет вывод значения «0» (ноль), что не соответствует истине.

Дополнительно в данный проект включена возможность наблюдать за процессом последовательных приближений к корню. Для этого в подпрограмме расчёта накапливается упомянутый выше массив «mas». В конце данной подпрограммы этот массив передается на форму в списковое поле с именем «List1» (стандартное имя ListBox).

В программу включена также возможность отображать на форме значения функции при отдельных значениях приближений к корню. Это реализуется в подпрограмме с именем «List1». Она выполняется при щелчке ЛКМ на выбранной строке в поле «List1». Значение, отображённое символами в строке, считывается и в преобразованном числовом виде передаётся как аргумент функции с именем «F», определяющей выражение уравнения, а вычисленное значение функции выводится на форму в поле с именем «Text5».


В качестве примера в данном проекте взято уравнение, выражающееся функцией f(x) = (x – 1)^2-1 и имеющее два корня: x1 = 0 и x2 = 2.

Оборудование, инструменты и приборы: ПЭВМ, программное обеспечение Microsoft Office (Excel 2007).

Таблица 5

Варианты заданий

Для всех вариантов допустимая погрешность вычисления корня нелинейного уравнения  = 0,01.

№ варианта

F(x)

[a;b]

№ варианта

F(x)

[a;b]

1

sin(x)

[2;5]

16

(x-2)^2-1

[0;1]

2

sin(x)

[7;10]

17

(x-2)^2-1

[2;4]

3

-sin(x)

[-1;2]

18

(x-2)^2-2

[0;2]

4

-sin(x)

[5;8]

19

(x-2)^2-2

[3;5]

5

cos(x)

[-1;3]

20

-(x-2)^2+3

[0;2]

6

cos(x)

[3;5]

21

-(x-2)^2+3

[3;5]

7

-cos(x)

[-2;1]

22

(x-3)^2-1

[0;3]

8

-cos(x)

[2;5]

23

(x-3)^2-1

[3;5]

9

ln(x)

[0,5;3]

24

sin(x)-x^2

[0,5;1]

10

ln(x-1)

[1,5;4]

2

cos(x)-ln(x)

[0,5;2]

11

ln(x-2)

[2,5;4]

26

-2(x-)+sin(x-1)

[0;3]

12

ln(x-3)

[3,5;5]

27

x-cos(x)

[0;3]

13

e^x-2

[0;1]

28

x+cos(x)

[-1;1]

14

e^x-10x

[0;1]

29

x-2-ln(x)

[0;1]

15

e^x-x^2

[0;1]

30

2x-sin(x)

[-1;2]