Лабораторная работа № 7. Операторы цикла

Теоретические сведения

Цикл многократное повторение последовательности действий по некоторому условию. Известны три типа циклических алгоритмических структур: цикл с пред­условием, цикл с постусловием и цикл с параметром. В VBA существуют операторы, реализующие все три типа циклов.

Цикл с предусловием (цикл-пока) наиболее универсаль­ная циклическая структура. Он организует выполнение операторов, составляющих тело цикла, неизвестное заранее число раз. Реализуется оператором While. Формат оператора:

Do While <условие>

<тело цикла>

Loop

Здесь Do, While, Loop зарезервированные слова;

<условие> выражение логического типа;

<тело цикла>  операторы VBA.

Алгоритм работы оператора следующий. Вначале вычисляется значение выражения <условие>. Если <условие> имеет значение True, выполняется <тело цикла>; после чего вычисление значения выражения <условие> повторяется. Если <условие> имеет значение False, оператор прекращает свою работу.

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

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

Цикл с постусловием может быть записан в одном из следующих видов:

Do Until <условие>

<тело цикла>

Loop

или

Do

<тело цикла>

Loop Until <условие>

Здесь Do, Until, Loop зарезервированные слова;

<условие> выражение логического типа;

<тело цикла>  операторы VBA.

Оператор работает по следующему алгоритму. Вначале выполняется <тело цикла>, после чего вычисляется значение логического выражения  <условие>. Если его значение есть False, операторы, образующие <тело цикла>, повторяются. В противном случае оператор завершает свою работу.

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

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

Синтаксис оператора:

For <параметр> = <начальное значение> To <конечное значение> [Step <шаг>]

<тело цикла>

Next

Здесь For, To, Step, Next зарезервированные слова VBA;

<параметр> простая переменная порядкового типа ;

<начальное значение> выражение того же типа что и <параметр>, определяющее начальное значение параметра;

<конечное значение> выражение того же типа, определяющее конечное зна­чение параметра;

<шаг> некоторое значение типа <параметр>, задающее, на сколько изменяется значение параметра при каждом проходе цикла;

<тело цикла> операторы VBA.

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

При выполнении оператора вначале вычисляется значение выражения <начальное значение>  и осуществляется присваивание <параметр> = <начальное значение>. После этого циклически повторяется:

-          проверка условия <параметр> <= <конечное значение>, если значение выражения <шаг> задано и имеет положительное значение, или <параметр> >= <конечное значение>, если значение выражения <шаг> задано и имеет отрицательное значение;

-          выполнение <тела цикла>;

-          изменение значения переменной <параметр> на величину, указанную после слова Step; если <шаг> не указан, он полагается равным 1.

В виде блок-схем эти циклы изображаются следующим образом.

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

Демонстрационные примеры:

1. Найти сумму десяти случайных чисел.

Напишем программу, воспользовавшись циклами различных видов.

Sub Сумма()

Dim sum1 As Integer, sum2 As Integer, i As Integer

Randomize

‘решение задачи с помощью цикла с предусловием

i = 10

Do While i > 0                                       ‘цикла выполненяется, пока логическое условие истинно

sum1 = sum1 + Int((10 * Rnd) + 1)

i = i - 1

Loop

MsgBox "Сумма чисел=" & sum1

‘решение задачи с помощью цикла с постусловием

i = 10

Do                                                           ‘цикла выполненяется, пока логическое условие ложно

sum2 = sum2 + Int((10 * Rnd) + 1)

i = i - 1

Loop Until i = 0

MsgBox "Сумма чисел=" & sum2

End Sub

Заметим, что особенностью интерпретатора VBA является то, что значения переменных числовых типов перед выполнением процедуры полагаются равными 0. Поэтому в программе отсутствуют команды присваивания вида: sum1 = 0 и sum2=0.

2. 'Найти максимальное из n введенных с клавиатуры чисел.

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

Option Explicit

Sub Max_n_while()

Dim n As Byte, k As Single, i As Byte, Max As Single

n = Val(InputBox("Введите количество чисел"))

i = 1

Do While i <= n

k = Val(InputBox("Введите число", "Ввод чисел"))

If i = 1 Then Max = k

If k > Max Then Max = k

i = i + 1

Loop

MsgBox "Наибольшее из чисел " & Max

End Sub

Option Explicit

Sub Max_n_until()

Dim n As Byte, k As Single, i As Byte, Max As Single

n = Val(InputBox("Введите количество чисел"))

i = 1

Do Until i > n

k = Val(InputBox("Введите число", "Ввод чисел"))

If i = 1 Then Max = k

If k > Max Then Max = k

i = i + 1

Loop

MsgBox "Наибольшее из чисел " & Max

End Sub

Если из текста программ удалить строку: If i = 1 Then Max = k, то программа будет работать корректно только в случае, когда хотя бы одно вводимое число неотрицательно. Это объясняется тем, что начальное значение переменной Max считается равным 0.

3. Найти cумму n первых членов ряда 1, 1/2, 1/3, ... 1/n,…

Option Explicit

Sub Summ_n()

Dim n As Byte, i As Byte, sum As Single

n = Val(InputBox("Введите количество членов ряда"))

For i =1 To n

sum = sum + 1 / i

Next

MsgBox "Сумма " & sum

End Sub

4: Найти сумму всех четных чисел в первой десятке:

Option Explicit

Sub Summa ()

Dim j As Integer, sum As Integer

For j = 2 To 10 Step 2

sum = sum + j

Next

MsgBox "Сумма равна " & sum

End Sub

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

Sub Пример()

Dim d As Integer

Do

d = Val(InputBox("Введите положительное чиcло", "Ввод числа"))

Loop Until d > 0 And (IsNumeric(d))

MsgBox "Введеное число  " & d

End Sub

Задачи для самостоятельного решения

Каждый студент должен решить одну задачу из блока А, две задачи из блока Б, две задачи из блока В, две задачи из блока Г.

А

1.     Имеется серия измерений элементов треугольника. Группы элементов пронумерованы. В серии в произвольном порядке могут встречаться такие группы элементов треугольника:
- основание и высота;
- две стороны и угол между ними (угол задан в радианах);
- три стороны.
Разработать программу, которая запрашивает номер группы элементов, вводит соответствующие элементы и вычисляет площадь треугольника. Вычисления прекратить, если в каче­стве номера группы введен 0.

2.     Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Какой суммарный путь пробежит спорт­смен за 7 дней?

3.     Одноклеточная амеба каждые 3 часа делится на 2 клетки. Оп­ределить, сколько амеб будет через 3, б, 9, 12, .... 24 часа.

4.     Около стены наклонно стоит палка длиной х м. Один ее конец находится на расстоянии y м от стены. Определить значение синуса угла между палкой и полом для значений y, изме­няющихся от 2 до 3 м с шагом h м.

5.     У гусей и кроликов вместе 64 лапы. Сколько могло быть кро­ликов и гусей (указать все сочетания, которые возможны)?

6.     Составить алгоритм решения задачи: сколько можно купить быков, коров и телят, платя за быка 10 р., за корову — 5 р., а за теленка — 0,5 р., если на 100 р. надо купить 100 голов скота?

7.     Доказать (путем перебора возможных значений), что для любых величин А, В, С типа Boolean следующие пары логи­ческих выражений имеют одинаковые значения (эквивалент­ны):
A OR В и В OR A;
-
 A AND В и В AND A;
-
 (A OR В) OR С и A OR С;
- (
A AND В) AND С и A ANDAND С);
A ANDOR В) и А;
A OR (A AND В) и А;
A ANDOR С) и (A AND В) OR (A AND С);
A ORAND С) и (A OR В) AND (A OR С).

8.     Составить программу для проверки утверждения: “Результа­тами вычислений по формуле х2 + х + 17 при 0 < х < 15 явля­ются простые числа”. Все результаты вывести на экран.

9.     Составить программу для проверки утверждения: “Результа­тами вычислений по формуле х2 + х + 41 при 0 < х < 40 явля­ются простые числа”. Все результаты вывести на экран.

10.  Составить программу – генератор чисел Пифагора а, b, с (с2 = а2 + b2). В основу положить формулы: а = m2 - n2, b = 2m•n, с = m2 + n2 (m, n натуральные, 1 < m < k, 1 < n < k, k данное число). Результат вывести на экран в виде таблицы из пяти столбцов: m, n, а, b, с.

11.  Покупатель должен заплатить в кассу S р. У него имеются 1, 2, 5, 10, 50, 100, 500 р. Сколько купюр разного достоинства отдаст покупатель, если он начинает платить с самых круп­ных?

12.  Ежемесячная стипендия студента составляет А р., а расходы на проживание превышают стипендию и составляют В р. в месяц. Рост цен ежемесячно увеличивает расходы на 3%. Со­ставьте программу расчета необходимой суммы денег, кото­рую надо единовременно попросить у родителей, чтобы можно было прожить учебный год (10 месяцев), используя только эти деньги и стипендию.

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

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

15.  Найти сумму всех n-значных чисел (1 £ n £ 4).

16.  Найти сумму всех n-значных чисел, кратных k (1 £ n £ 4).

17.  Покажите, что для всех n = 1, 2, 3, … N
(12+25+ ... +n5)+(17+27+ ... +n7)=2 (1 +2+ ... +n)4.

18.  Замените буквы цифрами так, чтобы соотношение оказалось верным (одинаковым буквам соответствуют одинаковые цифры, разным разные):

ХРУСТ ГРОХОТ = РРРРРРРРРРР.

19.  Составить программу, которая запрашивает пароль (напри­мер, четырехзначное число) до тех пор, пока он не будет пра­вильно введен.

Б


Следующие задачи решить двумя способами: с использовани­ем цикла с параметром и одного из двух других типов цикла.

1.     Дано натуральное число n. Вычислить:

2.    

Дано натуральное число N. Вычислить:

3.     Дано натуральное число N. Вычислить произведение первых N сомножителей:

4.    
Дано натуральное число N. Вычислить:

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

6.    
Даны натуральное n, действительное x. Вычислить:

7.    
Даны действительное число a, натуральное число n. Вычис­лить:

8.    
Даны действительное число a, натуральное число n. Вычис­лить:

9.     Даны действительное число a, натуральное число n. Вычилить:

10. 

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

11.  Вычислить:

12. 

Даны натуральное n, действительное x. Вычислить:

13. 

Дано натуральное n. Вычислить:

14. 

Дано натуральное число n. Вычислить:

15. 

Дано натуральное число n. Вычислить:

16. 
Дано натуральное число n. Вычислить:

17.  Дано натуральное число n. Вычислить:

18. 
Числа Фибоначчи (fn) определяются формулами
Определить f40.

19. 

Дано натуральное n. Вычислить:

20. 

Дано натуральное n. Вычислить:

21. 

Вычислить:

22.  Вычислить:

23. 
Даны натуральные числа n и k. Вычислить:

24. 

Дано натуральное n. Вычислить:

B

Составить программу вычисления значений функции F(x) на отрезке [а; b] с шагом h. Результат представить в виде таблицы, первый столбец которой значения аргумента, вто­рой соответствующие значения функции:

1.        F(x) = х- sinx

2.       

3.        F(x) = 2cosx – 1

4.       F(x)=tgx

5.        F(x)=ctgx+ 1

6.       F(x)=sinx-cosx

7.        F(x) = х sinx

8.       

9.       

10.    

11.    

12.    F(x)=sinx+tgx

13.    F(x)=cosx+ctgx

14.    

15.    

16.    

17.    

18.    

19.    

20.    

21.    

22.    

23.    F(x)=-cos2x

24.    F(x)=tg2x-3x

25.    F(x)=sinx-0,5cosx

26.    

Г

1.     Даны два натуральных числа m и n (m £ 9999, n £ 9999). Про­верить, есть ли в записи числа m цифры, одинаковые с цифра­ми в записи числа n.

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

3.     Даны натуральные числа n, k, m. Проверить, есть ли в записи числа nk цифра m.

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

5.     Произведение n первых нечетных чисел равно p. Сколько со­множителей взято? Если введенное n не является указанным произведением, сообщить об этом.

6.     Найти на отрезке [n;m] натуральное число, имеющее наи­большее количество делителей.

7.     Задумано некоторое число x < 100). Известны числа k, m, n  остатки от деления этого числа на 3, 5, 7. Найти х.

8.     Дано натуральное число п. Проверить, будут ли все цифры числа различными.

9.     Найти все целые корни уравнения ax3 + bx2 + сх + d = 0, где а, b, с и заданные целые числа, причем а ¹ 0 и¹ 0. Замечание: целыми корнями могут быть только положитель­ные и отрицательные делители коэффициента d.

10.  Дано натуральное число n. Поменять порядок следования цифр в этом числе на обратный или сообщить, что это невоз­можно в силу переполнения.

11.  Найти все делители натурального числа n.

12.  Натуральное число М называется совершенным, если оно равно сумме всех своих делителей, включая единицу, но ис­ключая себя. Напечатать все совершенные числа, меньшие за­данного числа N.

13.  Натуральные числа a, b, c называются числами Пифагора, если выполняется условие a2 + b2 = c2. Напечатать все числа Пифагора, меньшие N.

14.  Дано натуральное число n. Среди чисел 1, ..., n найти такие, запись которых совпадает с последними цифрами записи их квадратов (например, 62 = 36, 252 = 625).

15.  Составьте программу, которая по номеру дня в году выводит число и месяц в общепринятой форме (например, 33-й день года — 2 февраля).

16.  Долгожитель (возраст не менее 100 лет) обнаружил однажды, что если к сумме квадратов цифр его возраста прибавить число дня его рождения, то как раз получится его возраст. Сколько лет долгожителю?

17.  Дано целое n> 2. Напечатать все простые числа из диапазона [2, n].

18.  Даны натуральные числа n, m. Найти все натуральные числа, меньшие n, квадрат суммы цифр которых равен m.

19.  Найти натуральное число в диапазоне от 1 до n с максималь­ной суммой делителей.

20.  Даны натуральные числа p и q. Получить все делители числа q, взаимно простые с р.

21.  Для заданных натуральных n и k определить, равно ли число n сумме k-x степеней своих цифр.

22.  Найти все двузначные числа, сумма квадратов цифр которых кратна М.

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

24.  Задано натуральное число n. Найти количество натуральных чисел, не превышающих n и не делящихся ни на одно из чисел 2, 3, 5.

25.  Пусть fn n-й член последовательности, определяемой следу­ющим образом:
fn = - fn-1 - 2fn-2 ,    f1 = 1,     f2 = - 1
Покажите, что 2n+1
- 7f2n-1 есть полный квадрат.

26.  Последовательность Хэмминга образуют натуральные числа, не имеющие других простых делителей, кроме 2, 3 и 5. Найти:
первые N элементов этой последовательности;
сумму первых N элементов;
N-й элемент по заданному номеру
N;
первый элемент, больший данного числа М, а также номер этого элемента в последовательности;
сумму всех элементов с номера N по номер М.

27.  Игрок А объявляет двузначное число от 01 до 99. Игрок В ме­няет местами его цифры и полученное число прибавляет к сумме его цифр. Полученный результат он объявляет игроку А. Игрок А проделывает с этим числом ту же процедуру, и так они продолжают поступать поочередно, объявляя числа. От суммы чисел берется остаток от деления на 100, поэтому объ­являются лишь двузначные числа. Какие числа может объ­явить игрок А на начальном шаге, чтобы игрок В в некоторый момент объявил число 00?

28.  Дано натуральное k. Напечатать k-ю цифру последовательнос­ти 12345678910111213, в которой выписаны подряд все нату­ральные числа.

29.  Дано натуральное k. Напечатать k-ю цифру последовательнос­ти 149162536, в которой выписаны подряд квадраты всех на­туральных чисел.

30.  Составить программу перевода натурального числа из деся­тичной системы счисления в двоичную.

31.  Составить программу перевода данного натурального числа n в шестнадцатеричную систему счисления.

32.  Дано натуральное число n. Переставить его цифры так, чтобы образовалось максимальное число, записанное теми же циф­рами.

33.  Дано натуральное число n. Переставить его цифры так, чтобы образовалось наименьшее число, записанное теми же цифра­ми.

34.  Для записи римскими цифрами используются символы I, V, X, L, С, D, М, обозначающие соответственно числа 1, 5, 10, 50, 100, 500, 1000. Составить программу, которая запись любого данного числа n (n £. 3999) арабскими цифрами переводила бы в запись римскими цифрами.

35.  Используя все цифры от 1 до 9 по одному разу в различных комбинациях и операции сложения и вычитания, получить в сумме 100.

36.  Используя все цифры от 1 до 9 по одному разу и операции сло­жения и вычитания, получить в сумме 100, при условии, что цифры появляются в возрастающем или убывающем порядке.
Например, 123 -45-67+89 = 100, 98-76+54+3 +21 = 100.

37.  Найдите целые числа, которые при возведении в квадрат дают палиндромы, например, 262 = 676.

38.  Найдите целые числа-палиндромы, которые при возведении в квадрат также дают палиндромы (222 = 484).

39.  Найдите целые числа, которые при возведении в 3, или 4, или 5 степень дают палиндромы, например, 113 = 1331.

40.  Дано натуральное число n. Если это не палиндром, реверси­руйте его цифры и сложите исходное число с числом, полу­ченным в результате реверсирования. Если сумма не палин­дром, то повторите те же действия и выполняйте их до тех пор, пока не получите палиндром. Например, для исходного числа 78 это выглядит так:
78 + 87 = 165; 165 + 561 = 726;
726 + 627 = 1353; 1353 + 3531 = 4884.

Замечание к задачам 37 – 40. Палиндром — это сочетания символов, которые читаются одинаково туда и обратно. Элементом палиндрома может быть буква (например, КОК, ПОП, А РОЗА УПАЛА НА ЛАПУ АЗОРА), цифра (4884, 121) или слово (STRAP ONNO PARTS).