Пример 4.5.2-4. Написать процедуру-Function, которая вычисляет значение факториала заданного числа n.



По определению f=n!=1 ∙ 2 ∙ …∙ (n-1) ∙ n (при n≥1) и f=0!=1(при n=0).

Таким образом, вычисление факториала сводится к задаче вычисления произведения значений целых чисел, изменяющихся от 1 до n с шагом 1.

Накопление произведения будем производить по рекуррентной формуле: fi = fi-1 ∙ i; ; f0 = 1.

Схема алгоритма и код программы приведены на рис. 4.5.2-13

 

Function Pr52-13(ByVal n As Integer) As Long Dim f As Long Dim i As Integer f = 1 For i = 2 To n    f = f * i Next i Return f End Function    

 

Рис. 4.5.2-13. Схема алгоритма и программный код процедуры Pr5213() Примера 4.5.2-4

Dim nn As Integer Dim ff As Long      Nn = vvodInt4(TextBox1) ff = Pr5213(nn) vivodLngFx7(ff, TextBox2)

Рис. 4.5.2-14. Пример вызова процедуры Pr5213()

Процедура – функция Pr5213() может быть вызвана, например, как показано на рис. 4.5.2-14.

 

Пример 4.5.2-5. Написать процедуру-подпрограмму, которая находит наименьшее значение функции y=c∙e-dx∙sin(2x+5), где c, d – входные параметры, а x изменяется на отрезке [a; b] с шагом h.

Схема алгоритма и код программы приведены на рис. 4.5.2-15.

Алгоритм нахождения наименьшего (наибольшего) значения функции основан на последовательном сравнении очередного значения функции с текущим наименьшим (наибольшим) значением функции. В качестве начального наименьшего значения ymin следует использовать число, близкое к наибольшему числу из диапазона возможных значений того типа данных, который описывает рассматриваемую функцию, чтобы наверняка выполнилось условиеy<ymin при первом проходе цикла. То есть, за ymin можно принять число,близкое к наибольшему из диапазона значений данных типа Doublе, т.еDouble.MaxValue.

 

Sub Pr5215(ByVal n As Integer, _ ByVal a As Double, _ ByVal c As Double, _ ByVal d As Double, _ ByVal h As Double, _ ByRef xmin As Double, _ ByRef ymin As Double) Dim i As Integer Dim x, y As Double ymin = Double.MaxValue      x=a For i =1 To n y =c*Exp(-d*x)*Sin(2*x+5) If y<ymin Then    ymin=y : xmin=x End If x =x+h Next i End Sub

 

Рис. 4.5.2-15. Схема алгоритма и программный код процедурыPr5215() Примера 4.5.2-5

Соответственно, за начальное значениеymaxможно принять число
Double.MinValue, т.е. число, близкое к наименьшему числу из диапазона значений Double, для того чтобы при первом проходе цикла гарантированно выполнялось условие y>ymax. Для определения значения аргумента xmin (xmax), соответствующего найденному наименьшему (наибольшему) значению функции при каждом переопределении текущего наименьшего (наибольшего) значения функции надо одновременно переопределять текущее значение xmin (xmax).

Процедура – функция Pr5215() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.5.2-16.

 

Dim nn As Integer Dim aa, bb, hh, cc, dd, ym, xm As Double aa = vvodDbl2("Введите значение a=",TextBox1) bb = vvodDbl2("Введите значение b=",TextBox2) hh = vvodDbl2("Введите значение h=",TextBox3) cc = vvodDbl2("Введите значение c=",TextBox4) dd = vvodDbl2("Введите значение d=",TextBox5) nn = CInt((bb-aa)/hh)+1 Pr5215(nn, aa, cc, dd, hh,xm, ym) vivodDblFx6(xm, TextBox6) vivodDblFx6(ym, TextBox7)

 

Рис. 4.5.2-16. Пример вызова процедуры Pr5215()

Пример 4.5.2-7. Получить таблицу значений функции z(x,y)=x2+y2 в заданных диапазонах значений аргументов , если шаг изменения x равен hx, а шаг изменения y равен hy.

Схема алгоритма и код программы приведены на рис. 4.5.2-17.

 Sub Pr5217(ByVal n As Integer, _   ByVal m As Integer, _   ByVal a As Double, _   ByVal hx As Double, _   ByVal c As Double, _   ByVal hy As Double)  Dim x, y, z As Double  Dim j, i As Integer  x = a  For i = 1 To n y =c For j = 1 To m z = x^2 + y^2 vivodDblFx6(x, TextBox7) vivodDblFx6(y, TextBox8) vivodDblFx6(z, TextBox9)      y = y + hy Next j x = x + hx Next i End Sub  

 

Рис. 4.5.2-17.Схема алгоритма и программный код процедуры Pr5217() Примера 4.5.2-7

Процедура Pr5217() может быть вызвана из любой другой процедуры или из модуля формы, например, как показано на рис. 4.5.2-18.

 

Dim nn, mm As Integer Dim a, b, hx, c, d, hy As Double a = vvodDbl2("Введитезначение a", TextBox1) b = vvodDbl2("Введитезначение b", TextBox2) hx = vvodDbl2("Введите значение hx",TextBox3) c = vvodDbl2("Введите значение c", TextBox4) d = vvodDbl2("Введите значение d", TextBox5) hy = vvodDbl2("Введите значение hy",TextBox6) nn = CInt((b-a )/ hx) + 1 mm = CInt((d-c) / hy) + 1 Sub Pr5217(nn, mm, a, hx, c, hy)       

Рис. 4.5.2-18. Пример вызова процедуры Pr5217()

Пример 4.5.2-8. Создать проектПример 4.5.2-8, который выводит в текстовое окно значения функции y= +cosx3 на отрезке [a; b] с шагом h.

Форма должна содержать три элемента Label для записи подсказок вводимых переменных и три текстовых поля TextBox для ввода значений этих переменных. На форме должно быть также текстовое поле для вывода значений функции и аргумента. Для этого текстового поля необходимо задать свойство MultiLine, равное True, а свойство ScrollBars– в значении Verticalдля возможности прокрутки текстового поля по вертикали. Помимо этого, на форме должна быть кнопка Button1, с которой необходимо связать программный код.

Форма должна быть такой, как на рис. 4.5.2-19.

Результаты работы проекта представлены на рис. 4.5.2-19.

Программный код проекта приведен рис. 4.5.2-20.

 

 

Рис. 4.5.2-19. Форма проекта Пример 45.2-8с результатами

 

Option Explicit On Option Strict On Imports System.Math Public Class Form1 Function vvodDbl1(ByVal T As TextBox) As Double    Return Val(T.Text) End Function Sub vivodDblFxy8(ByVal x As Double, ByVal y As Double, _                 ByVal T As TextBox)   T.Text = T.Text + Format(x, "0.000 ") + Space(8) + _                     Format(y, "0.000 ") + vbCrLf End Sub Sub TabFun(ByVal a As Double, ByVal b As Double, _ ByVal h As Double)    Dim x, y As Double    Dim i, n As Integer    x = a    n = CInt(((b - a) / h) + 1)    For i = 1 To n        y = Sqrt(x + 5) + Cos(x ^ 3)        vivodDblFxy8(x, y, TextBox4)        x = x + h    Next i End Sub Private Sub Button1_Click(ByVal sender As System.Object,_      ByVal e As System.EventArgs) Handles Button1.Click    Dim aa, bb, hh As Double    aa = vvodDbl1(TextBox1) : bb = vvodDbl1(TextBox2)    hh = vvodDbl1(TextBox3) :  TabFun(aa, bb, hh) End Sub Private Sub Button2_Click(ByVal sender As System.Object,_       ByVal e As System.EventArgs) Handles Button2.Click    End End Sub End Class

 

Рис. 4.5.2-20. Программный код процедуры проекта Примера 5.2-8


Тестовые задания

 

1. Оператор For – это:1) оператор выбора;2) оператор регулярного цикла3) оператор итеративного цикла4) составной оператор2. Переменная, изменяющая свое значение при каждом новом вхождении в цикл, называется1) параметром цикла2) шагом цикла3) индексом4) размером3. Многократно повторяющаяся часть алгоритма называется1) телом цикла2) выбором3) перебором4) шагом цикла4. Циклическая алгоритмическая структура может быть1) регулярная, итеративная2) регулярная, разветвляющаяся3) итеративная, разветвляющаяся4) нет верного ответа5. В регулярной циклической структуре число повторений операторов тела цикла1) заранее известно или может быть предварительно вычислено2) может быть, известно или неизвестно заранее3) заранее неизвестно4) нет верного ответа6. Тело цикла в операторе For…Next1) может ни разу не выполниться2) обязательно выполнится хотя бы 1 раз3) выполняется несколько раз7. Для досрочного прекращения регулярного цикла используется оператор1) ExitFor2) Exit3) Break4) Exit For8. Для того чтобы операторы тела цикла выполнились необходимое число раз, параметр цикла1) должен быть переменной вещественного типа2) должен быть переменной целого типа3) должен быть переменной строкового типа4) должен быть переменной целого или вещественного типа9. Если в операторе регулярного цикла For…Next слово Step отсутствует, это означает, что после каждого выполнения тела цикла1) параметр цикла увеличивается на 12) параметр цикла уменьшается на 13) параметр цикла изменяется произвольно4) параметр цикла не изменяется10. Для нахождения наименьшего значения числовой функции от аргумента, значение которого изменяется на заданном интервале, за начальное наименьшее значение следует принять1) число, близкое к наибольшему числу из диапазона типа данных рассматриваемой функции2) число, близкое к наименьшему числу из диапазона типа данных рассматриваемой функции3) 04) нет верного ответа11. Для нахождения наибольшего значения числовой функции от аргумента, значение которого изменяется на заданном интервале, за начальное наибольшее значение следует принять1) число, близкое к наибольшему числу из диапазона типа данных рассматриваемой функции2) 03) нет верного ответа4) число, близкое к наименьшему числу из диапазона типа данных рассматриваемой функции12. Для нахождения значения произведения числовой функции от аргумента, значение которого изменяется на заданном интервале, за начальное значение произведения следует принять1) 12) число, близкое к наибольшему числу из диапазона типа данных рассматриваемой функции3) число, близкое к наименьшему числу из диапазона типа данных рассматриваемой функции4) 05) нет верного ответа13. Для нахождения значения суммы числовой функции от аргумента, значение которого изменяется на заданном интервале, за начальное значение суммы следует принять1) число, близкое к наибольшему числу из диапазона типа данных рассматривае       мой функции2) число, близкое к наименьшему числу из диапазона типа данных рассматривае- мой функции3) 04) 15) нет верного ответа14. Значение переменной M после выполнения фрагмента программы
M=0 For N=1 To 3For K=1 To 2    M=M+1 Next Next N
будет равно1) 62) 133) 124) нет верного ответа

4.5.4. Лабораторная работа по теме
«Программирование алгоритмов регулярных
циклических структур и
циклических структур цикл в цикле»

 

Цельданной работы состоит в получении навыков разработки проектов, использующих алгоритмы регулярных циклических структур, структур цикл в цикле и освоении стандартного элемента управления ListBox.

 

Вопросы, подлежащие изучению

 

1)Циклические алгоритмические структуры.

2)Операторы для программирования регулярных циклов.

3)Базовые алгоритмы регулярных циклических структур.

4)Базовые алгоритмы циклических структур цикл в цикле.

5)Элемент управления ListBox. Добавление, вставка и удаление элементов списка.

 


Дата добавления: 2018-05-09; просмотров: 627; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!