Рабочая область, Панель инструментов, Палитра
<span> Задача 5. “Кузнечик”
В одной стране жил-был волшебный кузнечик, умеющий прыгать на любое расстояние. А ко-
гда он изучил тему «числовые последовательности», то решил прыгать по дороге с нумерованны-
ми клетками по придуманному им правилу: 1 2 4 7 11 16 22 29 и так далее, дальше продолжи-
те сами. А другой кузнечик решил подкараулить его в какой-нибудь клетке N, чтобы не дать уска-
кать в бесконечность. Помогите ему, предложите алгоритм, проверяющий, попадет ли первый
кузнечик в клетку N?
Решение: Можно догадаться, что каждое n-ное число bn = bn-1 + n – 1, где b1 = 1. Можно также
догадаться, что каждое число нашей прогрессии bn = 1 + 1 + 2 + 3 + … + n – 1 = 1 + Sn , где Sn – это
сумма арифметической прогрессии с a1=0 и d=1. И по формуле прогрессии получаем:
bn = 1 + n(n-1)/2. Остается проверить, равно ли введенное N какому-нибудь bn. Решаем уравнение:
N = 1 + n(n-1)/2, квадратное уравнение: n2 – n + 2 – 2N = 0, D = 1 – 4(2-2N) = 8N – 7,
n = (1+sqrt(8N-7))/2 – берем только положительный ответ. Получился алгоритм: Подставляем N в
формулу для n и если n – целое, то кузнечик попадет в клетку с номером N. Вопрос только, как
проверить, целое ли n. Для этого проверяем, достаточно ли мало отклонение его от его округле-
ния: если abs( n – round( n ) ) < 0,000000000000001, то n – скорее всего целое. По крайней мере с
точностью до 0,000000000000001.</span>
Напишу только циклы, потому что
1) много заданий.
2) различия только в циклах
1. Создаешь переменную b:array[1..20] of real;
...
for i:=1 to 20 do
b[i]:= sqrt(a[i]);
...
2. Создаешь переменную sum: integer;
...
sum:=0;
for i:=11 to 15 do
sum:=sum+a[i];
...
3. Здесь без дополнительных переменных.
...
for i:=1 to 20 do
if a[i] mod 8 = 0 then
writeln('A[',i,'] = ',a[i]);
...
4. Создаешь переменную sum:integer:
...
sum:=0;
for i:= 1 to 20 do
if a[i] > 0 then sum:=sum+a[i];
sum:=sum*2;
...
5. Здесь без дополнительных переменных.
...
for i:= 2 to 20 do
if a[i] > a[i-1] then
writeln('A[',i,']');
...
6. Создаешь переменную k:integer;
...
k:=0;
for i:=1 to 19 do
if a[i] and a[i+1] > 0 or a[i] and a[i+1] < 0 then
k:=k+1;
if k>0 then writeln('Да'); else writeln('Нет');
...
7. Аналогично, переменная k:integer;
...
k:=0;
for i:=1 to 20 do
if a[i] > 0 then k:=k+1;
writeln(k,' элементов больше 0');
...
8. Без дополнительных переменных
...
for i:=1 to 20 do
if a[i]>0 then
a[i]:=a[i]-a[2];
else
a[i]:=a[i]+a[4];
for i:= 1 to 20 do
write(a[i]:4);
...
9. Переменную k:integer;
...
k:=1;
for i:=1 to 19 do
if a[i] mod 3 > 0 or a[i] mod 5 > 0 then
k:=k+1;
else a[k]:=a[i+1];
...
(Могу ошибаться, я пересмотрю это задание)
Есть крутая вещь - справка! Найти аналоги функций не такая уж большая проблема...
Рисунок 2:
program ggg;uses GraphABC;var xc,yc,y,x,r: integer;beginwriteln('введи центр окружности');readln(xc,yc);writeln('введи радиус окоружности');readln(r);x:= xc;y:= yc;Brush.Color:= clRandom;circle(x,y,r);circle(x-r,y-r div 4,r div 4);circle(x+r,y-r div 4,r div 4);circle(x,y-r,r div 2);
end.