Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПиОА_1 семестр_1 / ПОСОБИЕ_VB.Net

.pdf
Скачиваний:
658
Добавлен:
06.03.2016
Размер:
3.4 Mб
Скачать

15.Создайте проект для вычисления значения переменной по формуле, выбранной пользователем, для заданных значений исходных данных:

f = ax sin(2 * x) + (x + b)e 2 x

 

 

g = cos 2

(x 3 ) −

 

x

,

a = 0,5; b = 3.1; x = 1,4

 

 

 

 

 

 

 

 

 

 

a 2 + b 2

 

 

 

 

 

 

 

Используйте элемент управления Panel для размещения компонентов, PictureBox – для заданных формул, TextBox – для ввода исходных данных и вывода результата, RadioButton для выбора формулы вычисляемой переменной, CheckBox – для выбора формата вывода результата.

16. Вычислите y = f (x) , где f (x) задана графиком (рис. 3.14). Вычисление функции записать одним оператором.

Рис. 3.14 График кусочно-заданной функции

61

4. ЦИКЛИЧЕСКИЕ КОНСТРУКЦИИ

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

Алгоритм циклической структуры должен содержать:

1.подготовку цикла – задание начальных значений переменных цикла перед первым его выполнением;

2.тело цикла – операторы, которые выполняются при различных значениях переменных цикла;

3.изменение значений переменных цикла перед его новым повторением;

4.управление циклом – проверку условия окончания цикла или перехода на начало тела цикла.

ВVB.Net для этой цели существуют два вида элементарных циклических структур:

-циклы с параметром;

-циклы с условием.

4.1. Циклы с параметром

Если количество повторов тела цикла заранее известно, то обычно используют циклы с параметром (рис. 4.1).

Рис. 4.1 Схема цикла с параметром.

Здесь i – параметр (счетчик) цикла порядкового типа (целого, символьного, логического);

62

in и ik – выражения, определяющие начальное и конечное значение счетчика;

h – шаг изменения параметра цикла;

Тело цикла – многократно выполняемые операторы.

Цикл повторяется пока значение параметра (счетчика) цикла i лежит в интервале [in,ik]. Значения in,ik и h задаются только один раз в начале цикла и внутри цикла меняться не могут.

Формат оператора цикла с параметром

For Счетчик = in To ik [Step Шаг] Тело цикла

Next [Счетчик]

Параметр цикла i, начальное значение in и конечное ik должны быть одного типа.

Шаг может быть как положительным, так и отрицательным числом. Если Шаг равен единице, то конструкция Step Шаг может быть опущена.

Если Шаг положителен, то начальное значение счетчика должно быть меньше или равно конечного (in <=ik), иначе тело цикла не выполнится ни разу.

Если Шаг отрицателен, то начальное значение счетчика должно быть больше или равно конечного (in >= ik), иначе тело цикла не выполнится ни разу.

4.2. Циклы с условием

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

Если условие окончания цикла проверяется перед выполнением тела цикла, то такие циклические структуры называют циклами с пре- дусловием Выполнять пока») (рис. 4.2 а). Если проверка условия происходит после выполнения тела цикла, то – циклами с постусло-

вием Выполнять до тех пор, пока») (рис. 4.2 б).

63

а) Цикл с предусловием

б) Цикл с постусловием

Повторение действий происходит

Повторение действий происходит в

в зависимости от значения логиче-

зависимости от значения логическо-

ского выражения, которое прове-

го выражения, которое проверяется

ряется в начале цикла

в конце цикла

Рис. 4.2 Схема циклов с условием

В VB.Net такие циклы образуются с помощью конструкций

 

 

Do

 

….

 

Loop

 

 

 

Существует четыре вида

циклических конструкций типа

Do Loop, их формат определяется типом проверяемого условия и местом его расположения.

 

Формат

Описание

 

Do While Лог.выр

Цикл с предусловием типа «Пока».

 

Логическое выражение проверяется до того,

 

Операторы

как начнет выполняться тело цикла.

 

Loop

Цикл продолжает свою работу, пока значение

 

 

выражения остается истинным.

 

Do Until Лог.выр

Цикл с предусловием типа «До тех пор пока».

 

Логическое выражение проверяется до того,

 

Операторы

как начнет выполняться тело цикла.

 

Loop

Цикл продолжает свою работу, пока значение

 

 

выражения не станет истинным.

 

 

64

 

Формат

Описание

 

Do

Цикл с постусловием типа «Пока».

 

Логическое выражение проверяется

 

Операторы

после того, как выполнится тело цикла.

 

Loop While Лог.выр

Цикл продолжает свою работу, пока значение

 

 

выражения остается истинным.

 

Do

Цикл с постусловием типа «До тех пор пока».

 

Логическое выражение проверяется

 

Операторы

после того, как выполнится тело цикла.

 

Loop Until Лог.выр

Цикл продолжает свою работу, пока значение

 

 

выражения не станет истинным.

Использование элемента управления TextBox для многострочного ввода и вывода

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

Свойства элемента управления TextBox, обеспечивающие многострочный ввод и вывод:

Свойство

Описание

 

Окно редактирования и отображения текста ста-

MultiLine

новится многострочным при задании значения

 

этого свойства True

 

 

ScrollBar

Наличие или отсутствие полос прокрутки

4.3.Практическая часть. Создание приложений циклической структуры

Использование цикла с параметром для решения задач

Задача 4.1. Протабулировать функцию y = 2 cos(x) на отрезке [-π; π]

с шагом π/6.

Пояснение. При табулировании функция вычисляется для каждого значения аргумента, который изменяется на заданном отрезке с заданным шагом, т.е. в результате должна получиться таблица значений. Для организации многострочного вывода в объект класса TextBox необходимо на этапе проектирования интерфейса задать

65

значение свойства Multiline True, для свойства ScrollBars выбрать значение Vertical.

Фрагмент программного кода:

Dim x, y As Double TextBox1.Text = ""

For x = -Math.PI To Math.PI Step Math.PI / 6 y = 2 * Math.Cos(x)

TextBox1.Text &= String.Format _ ("{0,6:0.000} {1,10:0.0000}", x, y) _ & Chr(13) & Chr(10)

Next x

Пояснение 1. Здесь Chr(13) – это функция, которая возвращает управляющий символ Перевод курсора в начало текущей строки, а функция Chr(10)- возвращает управляющий символ

Переход на следующую строку. Поэтому Chr(13)& Chr(10) обеспечивает переход на новую строку при выводе в компонент TextBox, свойство MultiLine которого равно True.

Пояснение 2. Знак подчеркивания в исходном тексте кода программы означает, что оператор VB.Net продолжается на следующей строке.

Пояснение 3. В программном коде используется составное форматирование для вывода результатов: в фигурных скобках указывается шаблон форматирования:

"{ 0 ,6:0.000} { 1 ,10:0.0000}", x, y

Указание индексов выводимых переменных 0 для x, 1 для y.

"{ 0, 6 : 0.000} { 1 ,10 : 0.0000}", x, y

Общее количество знаков, отводимое под выводимое число

"{0,6:0.000} {1,10:0.0000}", x, y

Количество знаков, отводимое под дробную часть числа

Рис. 4.3 показывает выполнение данного программного кода.

66

Рис. 4.3 Результат выполнение программного кода задачи 4.1

Задача 4.2. Протабулировать кусочно-заданную функцию

1,5x sin(1,5x), x < 0,5

 

2 x + lg(1,5x), 0,5

 

y = 5sin

x ≤ 0,8

1,5x2

+ lg1,5x, x > 0,8

 

 

 

 

 

Диапазон табулирования [a, b] и шаг h задаются пользователем.

Пояснение. Переменная n в приведенном ниже программном коде отвечает за количество точек, которые попадают в заданный интервал при заданном шаге.

Фрагмент программного кода:

Dim x, y As Double

Dim a As Double = Convert.ToDouble(TextBox1.Text)

Dim b As Double = Convert.ToDouble(TextBox2.Text)

Dim h As Double = Convert.ToDouble(TextBox3.Text)

TextBox4.Text = " X Y" & Chr(13) & Chr(10)

'Расчет количества точек попавших в интервал изменения аргумента

Dim n As Byte = Convert.ToByte((b - a) / h) + 1 x = a 'Задание начального значения аргумента

For i As Byte = 1 To n

If x < 0.5 Then

y = 1.5 * x - Math.Sin(1.5 * x)

67

ElseIf x <= 0.8 Then

y = 5 * Math.Sin(x) ^ 2 + Math.Log10(1.5 * x)

Else

y = 1.5 * x ^ 2 + Math.Log10(1.5 * x)

End If

TextBox4.Text &= String.Format _

("{0,6:0.0} {1,10:0.0000}", x, y) _

&Chr(13) & Chr(10)

x += h 'Вычисление следующего значения аргумента

Next i

Результат выполнения программного кода представлен на рис. 4.4.

Рис. 4.4 Результат выполнения программного кода задачи 4.2

Задача 4.3. Вычислить факториал числа N.

Пояснение. Факториал числа N записывается как N! (читается N факториал).

68

Факториал 0 (0!) равен 1. Остальные значения определяются по формуле

N!= N ( N − 1) ( N − 2) K 2 1

Функция факториала растет чрезвычайно быстро:

N

1

2

3

4

5

6

7

8

9

10

N!

1

2

6

24

120

720

5040

40320

362880

3628800

При решении подобной задачи, необходимо задуматься, сколько памяти выделить под переменную, отвечающую за хранение значения факториала. Приведенный ниже код позволяет вычислять факториал числа не выше 20.

Результат выполнения программного кода представлен на рис. 4.5.

Фрагмент программного кода:

Dim p As UInt64 = 1

Dim n As Byte = Convert.ToByte(TextBox1.Text)

If n <= 20 Then

TextBox2.Text = ""

For i As Byte = 1 To n

p *= i

Next i

TextBox2.Text = Convert.ToString(p)

Else

TextBox2.Text = "Вычислить нельзя"

MsgBox("Число должно быть <= 20")

End If

Рис. 4.5 Результат выполнения программного кода задачи 4.3

69

Задача 4.4. Найти частичную сумму бесконечного ряда при заданном количестве слагаемых n:

k + 0.3

S = .

k =1 3k 2 + 5

Пояснение. Сумма бесконечной последовательности чисел a1, a2 ,K, an ,K называется бесконечным рядом, а сами числа – чле-

 

 

 

нами ряда an = a1 + a2 + an + K

 

 

 

n =1

 

 

 

Частичную сумму ряда можно найти, задав количество слагае-

мых.

 

 

 

Ряд из задачи 4.4 можно представить в виде:

 

+ 0.3 +

3 + 0.3 + K +

k + 0.3 + K

S = k + 0.3 = 1 + 0.3 + 2

k =1 3k 2 + 5 3 12 + 5 3 22 + 5 3 32 + 5

3 k 2 + 5

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

Переменная n отвечает за заданное количество слагаемых, переменная a хранит очередное слагаемое, переменная s – накопленную сумму.

Результат выполнения программного кода показан на рис. 4.6. Фрагмент программного кода:

Dim S,a As Double

Dim n As Byte = Convert.ToByte(TextBox1.Text) TextBox2.Text = ""

s = 0

'Организация цикла по количеству слагаемых

For k As Byte = 1 To n

а = (k + 0.3)/(3*k^2 + 5) 'Вычисление очередного слагаемого

s += а

'Добавление очередного слагаемого к сумме

Next k

 

'Вывод результирующей суммы

TextBox2.Text = Convert.ToString(s)

70

Рис. 4.6 Результат выполнения программного кода задачи 4.4

1

 

Задача 4.5. Найти сумму первых n слагаемых ряда S = (−1)k

.

 

k =1

k!

Фрагмент программного кода:

 

 

 

 

 

Dim S, a As Double

 

 

Dim n As Byte = Convert.ToByte(TextBox1.Text)

 

 

Dim f As Double = 1 ' f – факториал числа

 

 

S = 0

 

 

For k As Int16 = 1 To n

 

 

f *= k ' вычисление факториала очередного слагаемого

 

 

a = (-1) ^ k / f ' вычисление очередного слагаемого

 

 

S += a ' добавление слагаемого к сумме

 

 

Next k

 

 

TextBox2.Text = Convert.ToString(S)

 

 

 

 

 

Использование цикла с условием для решения задач

Задача 4.6. Использовать оператор цикла с предусловием при вычислении факториала n!

Фрагмент программного кода:

n = 5: p = 1: i = 1

Do While i <= n p *= i

i += 1

Loop

71

Задача 4.7. Использовать цикл с постусловием при вычислении факториала n!

Фрагмент программного кода:

n = 5

p = 1: i = 1

Do

p *= i i += 1

Loop Until i > n

Задача 4.8. Найти наибольшую и наименьшую цифры в записи заданного натурального числа.

Пояснение. Для определения цифр в числе можно воспользоваться следующими арифметическими операциями VB.Net: целочисленное деление (\) и нахождения остатка от деления нацело (mod). Операция mod поможет определить последнюю цифру, а операция \ уменьшит заданное число в 10 раз.

Например, для заданного числа 476892 ниже показано как происходит выделение цифр заданного числа:

Выделение последней цифры

Уменьшение разрядности числа

476892 mod 10 = 2

476892

\ 10

= 47689

 

 

 

 

47689 mod 10 = 9

47689

\ 10

= 4768

 

 

 

 

4768 mod 10 = 8

4768

\ 10

= 476

 

 

 

 

476 mod 10 = 6

476

\ 10

= 47

 

 

 

 

47 mod 10 = 7

47

\ 10

= 4

 

 

4 mod 10 = 4

4 \ 10 = 0

 

 

 

 

В приведенном ниже программном коде следует обратить внимание на следующее: цифры чисел в десятичной системе счисления изменяются в пределах от 0 до 9, значит для переменных, которые их хранят, не имеет смысла выделять памяти больше 1 байта, но результат операции mod имеет тип данных Int32, значит, результат операции придется конвертировать в тип byte.

Фрагмент программного кода:

Dim a As Int32 = Convert.ToInt32(TextBox1.Text) Dim n, min, max As Byte

72

min = 9 : max = 0

While a <> 0

'выделение последней цифры числа

n = Convert.ToByte(a Mod 10) If n < min Then min = n

If n > max Then max = n

'уменьшение числа в 10 раз (понижение разрядности) a = a \ 10

End While

TextBox2.Text = String.Format _

("Мин. цифра = {0} макс. цифра = {1}", _ min, max)

Интерфейс и результат работы программы показан на рис. 4.7.

Рис. 4.7 Результат работы программного кода для задачи 4.8

1

 

Задача 4.9. Найти сумму ряда y = (−1)k

при условии, что сум-

 

k =1

k!

мирование заканчивается, когда очередное слагаемое по модулю становится меньше заданного числа |ε| < 1 (ε – точность вычисления)

Пояснение. Задание аналогично примеру 4.5, но поскольку количество слагаемых не задано, то использование цикла с параметром здесь невозможно.

73

Рассматриваемый в примере ряд является убывающим, так как при k → ∞ , слагаемое ak → 0 . Значит, суммирование можно закон-

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

Фрагмент программного кода:

Dim S, a As Double

Dim eps As Double = Convert.ToDouble(TextBox1.Text)

Dim f As Int64 = 1 ' f - факториал числа

Dim k As Int32 = 1 S = 0

Do

f *= k

a = (-1) ^ k / f S += a

k += 1

Loop Until Math.Abs(a) <= eps

' Вывод результирующей суммы S и количества слагаемых k

TextBox2.Text = Convert.ToString(S)

TextBox3.Text = Convert.ToString(k-1)

Использование рекуррентного соотношения при вычислении суммы ряда

Рекуррентная формула – это формула, выражающая каждый следующий член последовательности через предыдущий.

Рекуррентная формула имеет вид: ak +1 = c ak . Здесь c – это тот коэффициент, на который нужно умножить ak , чтобы получить ak +1 .

Таким образом, вычислив первый член последовательности,

можно найти все остальные, используя формулу c = ak +1 . ak

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

74

Задача 4.10. Вычислить сумму бесконечного ряда:

1

 

 

S = (−1) k

 

с точностью ε = 0,0000001.

 

 

k!(k + 1)!

k =1

 

 

 

 

 

 

 

 

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

Найдем коэффициент с, разделив (k+1)-ое слагаемое на k–ое:

c =

(−1)k +1

 

k!(k + 1)!

= −

k!

= −

1

(k + 1)! (k + 2)!

(−1)k

 

(k + 2)!

(k + 1)(k + 2)

 

 

 

Вычислим первое слагаемое (k = 1):

a1 = − 1 . 2

Остальные слагаемые можно найти по формуле:

ak +1 = c ak , где c = −

1

.

 

 

 

(k + 1)(k + 2)

Фрагмент программного кода:

 

 

Dim

S,

a, c As Double

 

Dim

k As Int32 = 1

 

Dim

eps As Double = Convert.ToDouble(TextBox1.Text)

a = -1 / 2

 

S = 0

 

 

Do

 

' Организация цикла для суммированию

S

+= a

 

c

= -1 / ((k + 1) * (k + 2))

' Очередной коэффициент c

a

*= c

' Очередное слагаемое

k

+= 1

' Номер следующего слагаемого

Loop Until Math.Abs(a) < eps

'Вывод результирующей суммы и количества слагаемых

TextBox2.Text = Convert.ToString(S) TextBox3.Text = Convert.ToString(k - 1)

75

Задача 4.11. Создать приложение, которое может:

- Табулировать функцию sin(x) на отрезке [а, b] с шагом h.

-Табулировать сумму S бесконечного функционального ряда разложения функции sin(x) на отрезке [а, b] с шагом h. Функциональный

ряд

S

вычисляется

с

заданной

точностью

ε

с иcпользованием рекуррентной формулы.

-Вычислять абсолютную и относительную погрешность вычисления суммы ряда.

Пояснение. Основные тригонометрические функции и показательную функцию можно представить степенными рядами Тейлора. Например:

 

 

 

 

 

 

2

 

 

 

 

 

 

 

n

n

 

 

 

 

 

 

 

 

 

 

e x = 1 +

x

+

 

 

x

 

 

+ K+

x

 

=

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1!

2!

 

 

 

 

 

 

n!

n =1 n!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

3

 

 

 

x

5

 

 

 

 

 

 

 

 

 

x

2n−1

 

 

 

x

2n−1

sin( x) = x

 

 

+

 

 

− K+ (−1)n −1

 

 

 

 

+ K = (−1)n −1

 

 

 

 

 

 

(2n − 1)!

(2n − 1)!

 

 

3!

5!

 

 

 

 

 

 

 

 

n =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

2

 

 

x

4

 

 

 

 

 

 

x

2n

 

 

 

x

2n

 

cos( x) = 1 −

 

 

+

 

− K+ (−1)n

 

 

+ K = (−1)n

 

 

 

 

 

 

 

 

 

 

 

 

(2n)!

 

 

 

2!

4!

 

 

 

 

 

 

(2n)!

n =1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Абсолютная погрешность вычисляется по формуле:

= S Y ,

где S – сумма ряда Тейлора, представляющего разложение математической функции, для конкректного значения аргумента x;

Y – значение математической функции, вычисленное для того же аргумента x.

Относительная погрешность вычисляется по формуле:

∂ =

S

Интерфейс и результат работы программы показан на рис. 4.8. Фрагмент программного кода:

3

Dim S, a, c, x, y As Double Dim n, k As Int32

Dim xn As Double = Convert.ToDouble(TextBox1.Text)

Dim xk As Double = Convert.ToDouble(TextBox2.Text)

Dim h As Double = Convert.ToDouble(TextBox3.Text)

Dim eps As Double = Convert.ToDouble(TextBox4.Text) n = Convert.ToInt32((xk - xn) / h) + 1

x = xn ' Начальное значение аргумента x

For i As Int32 = 1 To n y = Math.Sin(x)

TextBox5.Text &= String.Format ("{0,6:0.00} ", x) _ & Chr(13) & Chr(10)

TextBox6.Text &= String.Format ("{0,10:0.00000}", y) _ & Chr(13) & Chr(10)

a =

x ' Первое слагаемое

 

k = 1

' Номер первого слагаемого

 

S = 0

 

 

 

Do

 

 

' Организация цикла для суммирования

S

+= a

 

 

c

= -1

/ (2 * k * (2 * k + 1))

' Очередной коэффициент c

a

= a * c * x ^ 2

' Очередное слагаемое

k

+=

1

' Номер следующего слагаемого

Loop Until Math.Abs(a) < eps

'Вывод суммы рядаS

TextBox7.Text &= String.Format _

("{0,10:0.00000}", S) & Chr(13) & Chr(10)

' Вывод абсолютной погрешности

TextBox8.Text &= String.Format _

("{0,10:0.0000000}", Math.Abs(S - y)) _

&Chr(13) & Chr(10)

'Вывод относительной погрешности

TextBox9.Text &= String.Format _

("{0,10:0.0000000}", Math.Abs(S - y) / S) _

&Chr(13) & Chr(10)

x += h ' Следующее значение аргумента x

Next i

4

Рис. 4.8 Результат работы программного кода для задачи 4.9

4.4. Контрольные вопросы и задания

1.Какие виды элементарных циклических структур вы знаете?

2.Когда используется цикл c параметром For (ДЛЯ) и каков его формат?

3.Когда используются циклы c условием?

4.Какие виды циклических конструкций с условием существуют? Каков их формат?

5.Когда выполняется тело оператора цикла с предусловием при использовании ключевого слова While (ПОКА)?

6.Когда осуществляется выход из цикла с предусловием при использовании ключевого слова Repeat?

5

7.Когда выполняется тело оператора цикла с постусловием при использовании ключевого слова Repeat (ДО)?

8.Когда осуществляется выход из цикла с постусловием при использовании ключевого слова While?

9.Как используется рекуррентная формула при вычислении суммы ряда?

10.С помощью какого свойства можно организовать многострочный вывод в элемент управления TextBox?

11.Как обеспечить Перевод курсора в начало текущей строки и Переход на следующую строку при выводе в компонент TextBox?

12. Протабулируйте функцию y = sin( x) * cos 2 ( x) на промежутке

[− 2π, 2π].

13. Дано действительное число x . Вычислить:

y = (x − 1)(x − 3)(x − 7)K(x − 63)

(x − 2)(x − 4)(x − 8)K(x − 64)

14.Найти наибольшую и наименьшую цифры в записи данного натурального числа.

15.Дано натуральное число n . Проверить, есть ли в записи числа три одинаковые цифры ( n ≤ 9999 ).

16.Найти все трехзначные числа, в которых есть две одинаковые цифры.

17.Найти все простые числа, лежащие в заданном диапазоне. Простые числа – это числа больше 1 и делящиеся нацело только на 1

ина само себя

18.Протабулируйте кусочно-заданную функцию:

a cos(a + πx),

x ≤ −4

 

 

 

a beax + 3

 

,

− 4 < x ≤ 4

 

 

 

 

y =

 

 

где a = 3, b = 4.

 

 

 

 

 

,

 

 

 

 

 

 

 

 

 

( x − 4), x > 4

 

 

 

 

 

 

 

6

 

Диапазон и шаг табулирования задается пользователем.

19.На интервале [2, N ] найти натуральное число с максимальной суммой делителей. Идея алгоритма: все делители числа x , меньшие x , лежат в интервале от 1 доx div 2 + 1. Наибольшим

делителем является само число x . Следовательно, для каждого из чисел [2KN ] нужно отобрать и просуммировать все делители из указанного множества. По ходу вычислений производить отбор наибольшего значения.

20.Создайте проект для вычисления частичной суммы бесконечного ряда

(−1) k + 1

k k +1

(2k − 1)!

=

k 1

 

при заданном количестве слагаемых и при заданной точности вычислений ( n = 5, ε = 0,0001).

Форма проекта должна содержать две событийные процедуры: одна процедура вычисляет частичную сумму ряда при заданном количестве слагаемых, другая – частичную сумму при заданной точности вычислений (для этой процедуры предусмотрите два выходных параметра: значение суммы и количество слагаемых, обеспечивающих заданную точность).

При вычислении очередного слагаемого используйте рекуррентную формулу.

Протестируйте созданный программный код, задавая разное количество слагаемых и разную точность вычислений. Сравнивайте полученные значения сумм ряда. Обратите внимание на значения сумм при равном количестве слагаемых для каждого ряда.

7