Базовые алгоритмы
Для реализации циклических вычислительных процессов в большинстве случаев используются следующие базовые алгоритмы:
- табулирование функций;
- организация счетчика;
- накопление суммы или произведения;
- поиск минимального или максимального члена последовательности.
Ниже приводятся примеры программирования задач на основе базовых алгоритмов.
Задача 1. Алгоритм организации счетчика.
Дана последовательность:
.
Определить количество положительных членов последовательности.
Решение
Представим последовательность в общем виде:
, где .
Для организации счетчика в памяти компьютера выделяется ячейка, содержимое которой увеличивается на 1 каждый раз, когда встречается положительный член последовательности. В программе ячейке (счетчику) соответствует переменная целого типа, например, переменная L. Работа счетчика реализуется с помощью оператора присваивания L:= L + 1;. В начальный момент содержимое ячейки должно быть равно нулю. С этой целью предварительно осуществляется очистка ячейки оператором L:= 0;.
Программа
Program Z_1;
Var
a: real;
n, L: integer;
Begin
L := 0;
for n := 1 to 50 do
begin
a := cos(2 * n - 1);
if a>0 then L := L + 1;
end;
writeln(‘L=’, L);
End.
Задача 2. Алгоритм накопления суммы.
Дана последовательность:
,
где
- заданное вещественное число.Вычислить сумму членов последовательности, которые по модулю больше 0.3.
Решение
Общий член последовательности имеет вид:
, где .
Для вычисления суммы в памяти компьютера выделяется ячейка
, к содержимому которой прибавляется член последовательности каждый раз, когда выполняется условие . Накопление суммы реализуется оператором . В начальный момент ячейка для суммирования должна быть очищена оператором .Программа
Program Z_2;
Var
a, x, S: real;
n: integer;
Begin
writeln(‘Введите число x’);
read (x);
S:=0;
for n := 1 to 8 do
begin
a := sin(2 * n * x);
if abs(a) > 0.3 then S := S + a;
end;
writeln(‘S=’, S:6:2);
End.
Задача 3. Алгоритм накопления произведения.
Дана последовательность:
.
Вычислить значение: , где - произведение отрицательных членов последовательности.
Решение
Общий член последовательности имеет вид:
где .
Для реализации алгоритма накопления произведения выделяется ячейка памяти , в которой осуществляется последовательное перемножение отрицательных членов последовательности с помощью оператора присваивания . В начальный момент в ячейку должна быть занесена единица оператором .
Программа
Program Z_3;
Var
x, y, P, PO: real;
Begin
PO := 1;
x := 0.1;
while x<=10 do
begin
y := cos(x);
if y<0 then PO := PO * y;
x := x + 0.1;
end;
P := abs(PO);
writeln(‘P=’, P:6:2);
End.
Задача 4. Алгоритм поиска минимального члена последовательности.
Дана последовательность:
; .
Найти минимальный член последовательности.
Решение
Для реализации алгоритма выделяется ячейка памяти MIN, в которую сначала заносится первый член последовательности. Затем, начиная со второго, производится сравнение вычисленных членов последовательности с содержимым ячейки MIN. Если текущий член последовательности меньше содержимого ячейки MIN, то он переписывается в эту ячейку. В противном случае содержимое ячейки MIN сохраняется. При завершении сравнения всех членов последовательности в ячейке MIN запоминается минимальное значение.
Замечание 1.
Алгоритм поиска максимального члена последовательности отличается лишь тем, что в ячейке (ей можно дать имя MAX) запоминается больший из сравниваемых членов последовательности.
Замечание 2.
В начальный момент в ячейку MIN можно занести число, которое было бы достаточно большим и превышало область определения сравниваемых чисел, например:
MIN := +1E6;
Тогда при сравнении с содержимым ячейки MIN первое число обязательно окажется меньше и переписывается в ячейку MIN.
При поиске максимального члена последовательности в ячейку MAX в начальный момент заносится, наоборот, достаточно малое число, которое должно быть меньше всех сравниваемых чисел, например:
MAX := -1E6;
В этом случае первое из сравниваемых чисел окажется больше содержимого ячейки MAX и переписывается в эту ячейку.
Программа
Program Z_4;
Var
a, min: real;
k: integer;
Begin
min := +1E6;
for k := 1 to 10 do
begin
a := exp(k) * sin(2*k+1)/cos(2*k+1);
if a<min then min := a;
end;
writeln(‘min=’, min:6:2);
End.