Пример 2. Составить программу, которая вычисляет произведение первых N натуральных чисел.

В условии задачи известно количество повторений действий, поэтому целесообразно для ее решения использовать оператор For. Алгоритм вычисления произведения N натуральных чисел почти такой же, как и при вычислении суммы. Разница лишь в том, что в теле цикла необходимо заменить операцию сложения на операцию умножения, а начальное значение переменной, в которой будет накапливаться произведение, должно быть равным 1 (Умножение на 1 не влияет на произведение).

Программа решения задачи может иметь вид:

Program Proizv_N;

var i, n,P:integer;

begin

write ('n='); {ввод исходных данных с клавиатуры}

readln(n); {n - количество первых натуральных чисел}

P:=1; {начальное значение P, в которую будет

накапливаться произведение, равно первому натуральному числу}

for i:=2 to n do

P:=P*i; {тело цикла}

writeln('P =',P); {вывод результата}

end.

Результат выполнения программы при n=5:

n=5

P =120

Таблица 2. Трассировка программы примера 2.

Оператор

Результат проверки условия продолжения цикла

i

P

Вычисление

P:=1; N:=5;

Да

1

For i:=2 to 5 do

P:=P*i

Да

2

2

1*2=2

For i:=2 to 5 do

P:=P*i

Да

3

6

2*3=6

For i:=2 to 5 do

P:=P*i

Да

4

24

6*4=24

For i:=2 to 5 do

P:=P*i

Да

5

120

24*5=120

For i:=2 to 5 do

P:=P*i

Нет – выход из цикла

6

120

-

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

НЕ нашли? Не то? Что вы ищете?

Известно, что операция возведения числа в степень основана на произведении ее основания. Например, 25 = 2*2*2*2*2 или a4 = a*a*a*a.

Следовательно, на основе алгоритма программы Proizv_N можно легко решить задачу вычисления натуральной степени целого числа, сделав небольшие изменения в программе. Например, надо вычислить a5 либо 2n либо ab.

В первом случае (a5) в теле цикла p:=p*i переменную i следует заменить на основание степени a и в заголовке оператора for количество повторений n заменить на степень 5.

Во втором случае (2n) в теле цикла p:=p*i переменную i заменить на основание степени 2.

В третьем случае (ab) в теле цикла p:=p*i переменную i заменить на основание степени a и в заголовке оператора for количество повторений n заменить на степень b.

Согласно данным рекомендациям, изменим программу примера 2 так, чтобы она вычисляла а b, где а – целое число, b – натуральное.

Пример 3. Вычислить ab.

Программа решения задачи имеет вид:

Program Stepen;

var a, b,i, P:integer;

begin

write ('a='); {ввод исходных данных с клавиатуры}

readln(a); {ввод основания}

write ('b=');

readln(b); {ввод степени}

P:=1; {в P накапливается степень}

for i:=1 to b do

P:=P*a; {тело цикла}

writeln('P =',P); {вывод результата}

end.

Результат выполнения программы при a=2 и b=5:

a=2

b=5

P =32

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

Пример 4. Дано целое число а<5, при каком наименьшем n an >50.

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

program Poisk_N;

var a, n,St:integer;

begin

write ('основание a=');

readln (a);

n:=0; {n – показатель степени, любое число в нулевой

степени равно 1}

St:=1; {в переменной st будем накапливать степень}

while St<=50 do {проверка выполнения условия задачи}

begin

n:=n+1; {получение очередного показателя степени}

st:=st*a {возведение a в степень n и запись в st}

end;

writeln ('наименьшее n=',n) {результат - последнее значение

n, которое привело к выходу из цикла }

end.

Результат выполнения программы при а=2:

основание a=2

наименьшее n=6

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

Пример 5. Требуется найти наибольшее натуральное число Х, при котором 100-х*х>30.

Программа решения задачи может иметь вид:

Program Poisk_X;

var

x:integer;

begin

x:=1; {первое натуральное число = 1}

while 100-x*x>30 do {проверка выполнения условия задачи}

x:=x+1; {тело цикла - получение очередного числа х с

целью подстановки его в условие цикла и его проверки}

writeln ('наибольшее х=',x-1) {результат - последнее

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

end.

Результат выполнения программы:

наибольшее х=8

4.2 Реализация алгоритмов с повторением

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

Пример 6. Нарисовать пучок из 30 отрезков двух разных цветов, выходящих из центра экрана монитора.

Программа решения задачи может иметь вид:

Program Linii_v_centre;

uses graphabc;

var k:integer;

begin

setWindowSize(1280,1024);

clearWindow(clYellow); {устанавливает желтый цвет фона}

setPenWidth(5); {устанавливает ширину линии}

randomize;

for k:=1 to 30 do

begin

if k mod 2 = 0 then setPenColor(clFuchsia)

else setPenColor(clGreen);;

Line (640,512,random(1000),random(900));

{рисует линию зеленым либо розовым цветом}

end;

end.

После выполнения программы на экране монитора появится графическое окно с рисунком, который может выглядеть так (рис. 1.15):

Рис. 1.15

С помощью цикла с параметром можно нарисовать на экране цветовую гамму, представленную на рисунке 1.16, состоящую из 200 отрезков.

Рис. 1.16

Программа, реализующая представленный рисунок 2.16, имеет вид:

Program cvet_gamma;

uses graphabc;

var k:integer;

begin

setWindowSize(1280,1024);

clearWindow(clSilver);

setPenWidth(5);

for k:=1 to 200 do

begin

SetPenColor (RGB(k*10,k*30,k*50));

{стандартная функция RGB(r, g,b)возвращает цвет, который

содержит красную(r), зеленую(g)и синюю(b)составляющие

цветовую гамму в диапазоне от 0 до 255}

Line (200,k*5,600,k*5);

end;

end.

С помощью оператора for можно составить программу, которая рисует звездное небо (рис. 1.17).

Пример 8. Нарисовать ночное небо, состоящее из 300 звезд разных цветов.

Рис. 1.17

Программа, реализующая рисунок 1.17, имеет вид:

Program nebo_zvezd;

uses graphabc;

var x, y,k:integer;

begin

setWindowSize(1280,1024);

clearWindow(clblack); {устанавливает черный цвет фона}

setPenWidth(5); {устанавливает ширину линии}

setPenColor(clblack);{устанавливает черный цвет пера}

Randomize; {подключает датчик случайных чисел}

for k:=1 to 200 do

begin

setBrushColor(rgb(k*100,k*25,k*50)); {устанавливает

цвет кисти разных оттенков }

x:=random(1100); {выбор координаты центра круга}

y:=random (1000);{случайным образом}

circle(x, y,random(9)+2); {рисует круг (звезду)}

end;

end.

Немного геометрии. Будем строить графики функций по вычисленным точкам.

Пример 9. Вывести таблицу значений функции y=x+1 в диапазоне от -2 до 2 с шагом 0.5.

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

Программа решения задачи может иметь вид:

program tabulir;

var x, y:real;

begin

writeln ('-----------');

writeln (' x y '); {оформление вида вывода результата}

writeln ('-----------');

x:=-2; {начальное значение х}

while x<=2 do {проверка выполнения условия задачи}

begin

y:=x+1; {вычисление очередного значения у}

writeln (x:4,y:5); {вывод значений х и у}

x:=x+0.5 {получение очередной точки х}

end

end.

И вот что будет на экране монитора после выполнения данной программы:

Рис. 1. 18

Из рисунка 1.18 видно: в результате выполнения программы в окне вывода появилась таблица табулирования функции:

-----------

x y

-----------

-2 -1

-1.5 -0.5

-1 0

-0.5 0.5

0 1

0.5 1.5

1 2

1.5 2.5

2 3

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

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7