Какие циклы вы знаете? В каких случаях
применяется каждый из этих циклов?
Сколько раз выполняются следующие
операторы:
For i := 1 To 10 Do x := x + i;
For k := 2 To 22 Do If k Mod 2 = 0 Then s := s + 1;
For x := -5 To 5 Do
Begin
Writeln('введите число');
Readln(y);
Writeln('x + y = ',x+y);
End;
Составить фрагмент программы
возведения заданного числа в степень n.
Поясните своё решение.
Пример:
Даны натуральные числа n и k.
Составить программу вычисления выражения 1k
+ 2k +...+ nk.
Решение
Для вычисления указанной суммы
целесообразно организовать цикл с
параметром i, в котором, во-первых,
вычислялось бы очередное значение y = ik
и, во-вторых, осуществлялось бы накопление
суммы прибавлением полученного слагаемого
к сумме всех предшествующих (s = s + y).
Program Example_13;
Var n, k, y, i, s, m: Integer; Begin
Writeln ('Введите исходные данные n и k');
Readln(n,k);
s:=0;
For i:=1 To n Do
Begin y:=1;
For m:=1 To k Do y:=y*i; {нахождение степени k числа i}
s:=s+y;
End;
Writeln('Ответ: ',s); End.
Таким образом, для решения задачи
потребовалось организовать два цикла, один
из которых пришлось поместить внутрь
другого. Такие конструкции называют вложенными
циклами.
Пример:
Модифицировать предыдущую программу так,
чтобы она вычисляла сумму 11 + 22 +...+
nn.
Решение
Данная задача отличается от предыдущей
тем, что показатель степени очередного
слагаемого совпадает со значением её
основания, следовательно, параметры
внутреннего цикла (цикла, в котором
вычисляется очередное слагаемое) совпадают
с параметрами внешнего цикла.
Program Example_14;
Var n, y, i, s, m: Integer; Begin
Writeln('Введите начальное значение n ');
Readln(n);
s:=s;
For i:=1 To n Do
Begin y:=1;
For m:=1 To i Do y:=y*i; {нахождение степени k числа i}
s:=s+y;
End;
Writeln('Ответ: ',s); End.
Внутренний и внешний циклы могут быть
любыми из трёх рассмотренных ранее видов:
циклами с параметром, циклами с
предусловием или циклами с постусловием.
Правила организации как внешнего, так и
внутреннего циклов такие же, как и для
простого цикла каждого из этих видов. Но при
использовании вложенных циклов необходимо
соблюдать следующее условие: внутренний
цикл должен полностью укладываться в
циклическую часть внешнего цикла.
Пример:
Старинная задача. Сколько можно
купить быков, коров и телят, если плата за
быка 10 рублей, за корову - 5 рублей, за
телёнка - полтинник (0,5 рубля, если на 100
рублей надо купить 100 голов скота.
Решение
Обозначим через b - количество быков; k
- количество коров; t - количество телят.
После этого можно записать два уравнения: 10b
+ 5k + 0.5t = 100 и b + k + t = 100. Преобразуем их в 20b + 10k +
t = 200 и b + k + t = 100
На 100 рублей можно купить:
не более 10 быков, т.е. 0<=b<=10
не более 20 коров, т.е. 0<=k<=20
не более 200 телят, т.е. 0<=t<=200.
Таким образом, получаем:
Program Example_15;
Var b, k, t: Integer; Begin
For b:=0 To 10 Do
For k:=0 To 20 Do
For t:=0 To 200 Do
If (20*b+10*k+t=200) And (b+k+t=100) Then
Writeln('быков ',b,' коров ',k,' телят ',t); End.
Сколько раз будет проверяться условие в
данной программе?
Значение переменной b изменяется 11
раз (от 0 до 10), для каждого её значения
переменная k изменяется 21 раз, а для
каждого значения переменной k
переменная t изменяется 201 раз. Таким
образом, условие будет проверяться 11*21*201
раз. Но если известно количество быков и
коров, то количество телят можно вычислить
по формуле t = 100 - (b + k) и цикл по переменной t
исключается.
Program Example_16;
Var b, k, t: Integer; Begin
For b:=0 To 10 Do
For k:=0 To 20 Do
Begin
t:=100-(b+k);
If (20*b+10*k+t=200) Then
Writeln('быков,'b,' коров ',k,' телят',t);
End; End.
При этом решении условие проверяется 11*21
раз.
Примечание. Возникает вопрос,
можно ли ещё уменьшить количество проверок?
Решение задач
Что будет выведено на экране монитора
после выполнения следующего фрагмента
программы:
a := 1; b := 1;
For i := 0 To n Do
Begin
For j := 1 To b Do Write('*');
Writeln;
c := a + b; a := b; b := c;
End;
если n = 6? Решение какой задачи выражает
этот фрагмент программы?
Что будет выведено на экране монитора
после выполнения следующего фрагмента
программы:
b := 0;
While a<>0 Do
Begin
b := b*10 + a Mod 10;
a := a Div 10;
End;
Write(b);
если a = 13305? Решение какой задачи
выражает этот фрагмент программы?
Исходное данное - натуральное число q,
выражающее площадь. Написать программу
для нахождения всех таких
прямоугольников, площадь которых равна q
и стороны выражены натуральными числами.
Составить программу для графического
изображения делимости чисел от 1 до n
(n - исходное данное). В каждой строке
надо печатать число и сколько плюсов,
сколько делителей у этого числа. Например,
если исходное данное - число 4, то на
экране должно быть напечатано:
1+
2++
3++
4+++
Составить программу получения всех
совершенных чисел, меньших заданного
числа n. Число называется совершенным,
если равно сумме всех своих
положительных делителей, кроме самого
этого числа. Например, 28 - совершенно, так
как 28=1+2+4+7+14.
Из истории. Грекам были известны
первые четыре совершенных числа: 6, 28, 496,
8128. Эти числа высоко ценились. Даже в XII
веке церковь утверждала, что для спасения
души необходимо найти пятое совершенное
число. Это число было найдено только в XV
веке. До сих пор совершенные числа
полностью не исследованы - не известно,
имеется ли конечное число совершенных
чисел или их число бесконечно, кроме того,
неизвестно ни одного нечётного
совершенного числа, но и не доказано, что
таких чисел нет.
Дано натуральное число n. Можно его
представить в виде суммы трёх квадратов
натуральных чисел? Если можно, то:
указать тройку x, y, z, таких
натуральных чисел, что x2 + y2
+ z2 = n;
указать все тройки x, y, z таких
натуральных чисел, что x2 + y2
+ z2 = n.
Найти натуральное число от 1 до 10000 с
максимальной суммой делителей.
Даны натуральные числа a, b (a<b).
Получить все простые числа p,
удовлетворяющие неравенствам: a<=p<=b.
Даны натуральные числа n, m. Получить
все меньшие n натуральные числа,
квадрат суммы цифр которых равен m.
Даны натуральные числа n и m.
Найти все пары дружественных чисел,
лежащих в диапазоне от n до m. Два
числа называются дружественными,
если каждое из них равно сумме всех
делителей другого (само число в качестве
делителя не рассматривается).
В данном натуральном числе переставить
цифры таким образом, чтобы образовалось
наименьшее число, записанное этими же
цифрами.
Составить программу, печатающую для
данного натурального числа k-ю цифру
последовательности:
12345678910..., в которой выписаны подряд все
натуральные числа;
14916253649..., в которой выписаны подряд
квадраты всех натуральных чисел;
1123581321..., в которой выписаны подряд все
числа Фибоначчи.
Составить программу возведения
заданного числа в третью степень,
используя следующую закономерность:
13 = 1
23 = 3 + 5
33 = 7 + 9 + 11
43 = 13 + 15 + 17 + 19
53 = 21 + 23 + 25 + 27 + 29
Составить программу для нахождения всех
натуральных решений уравнения n2 + m2
= k2 в интервале [1, 10].
Примечание. Решения, которые
получаются перестановкой n и m,
считать совпадающими.