Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Функция, вычисляющая наибольший общий делитель

Алгоритм решения задачи:

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

Программа на языке Паскаль:

var

k, l, n: integer;

function nod (var a,b: integer): integer;

var c: integer;

begin

repeat

if a > b then

a := a mod b

else

b := b mod a;

until (a = 0) or (b = 0);

nod := a + b;

end;

begin

writeln ('Введите два числа: ');

readln (k, l);

n := nod (k, l);

writeln ('НОД = ', n);

readln

end.

Фильтр строки

Задача:

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

Алгоритм решения задачи:

После того как строка считывается с ввода, измеряется ее длина (функция length).

Далее стока просматривается посимвольно во внешнем цикле while.

В переменную a записывается очередной символ из строки.

Внутренний цикл while начинает выполняться лишь в том случае, если очередным символом является цифра. При этом уже во внутреннем цикле происходит переход к следующему символу. Символы одного числа конкатенируются (соединяются) в строке str.

Внутренний цикл while останавливается, когда очередной символ не цифра.

Если (if) строка не пустая, то ее содержимое добавляется в массив, а сама стока стирается.

Программа на языке Паскаль:

var

arr: array[1..100] of string;

i, j: integer;

strinput, str: string;

a: char;

n: byte;

begin

i := 1;

j := 1;

readln(strinput);

n := length(strinput);

while i <= n do begin

a := strinput[i];

while (a >= '0') and (a <= '9') do begin

str := str + a;

i := i + 1;

a := strinput[i]

end;

i := i + 1;

if str <> '' then begin

arr[j] := str;

j := j + 1;

str := '';

end;

end;

for i := 1 to j - 1 do

writeln(arr[i]);

readln

end.

Заполнение массива и вычисление суммы элементов

Задача:

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

Алгоритм решения задачи:

Для решения подобного рода задач иногда бывает уместно использовать цикл с постусловием (repeat).

Программа на языке Паскаль:

const n = 10;

var

arr: array[1..n] of integer;

sum: integer;

i: byte;

begin

i := 1;

sum := 0;

repeat

write ('Число: ');

readln(arr[i]);

sum := sum + arr[i];

i := i + 1

until (arr[i-1] = 0) or (i > n);

for i := 1 to n do

write (arr[i],' ');

writeln;

writeln ('sum = ', sum);

readln

end.

Возведение числа в степень

Алгоритм решения задачи:

Чтобы возвести число в степень, его надо умножить само на себя количество раз, равное показателю степени. Т.е. возведение числа n в степень d будет выглядеть так:

nd = n1 * n2 * n3 * … * nd, где индексы внизу просто указывают очередное по счету n.

Если d равно нулю, то, какое бы число не стояло в основании степени, результат всегда будет равен единице:

n0 = 1.

Если показатель степени отрицателен (d < 0), то результат определяется такой формулой:

nd = 1 / (n1 * n2 * n3 * … * nd).

В примере программы на языке Паскаль количество итераций (повторений) цикла while равно модулю показателю степени числа (переменная deg).

Если deg равно нулю, то цикл while не выполнится ни разу, т.к. начальное значение переменной i равно нулю, а 0 < 0 ложное утверждение. В результате переменная res будет содержать значение 1.

Если показатель степени был отрицательным числом, то нужно в последствие разделить единицу на значение переменной res.

Программа на языке Паскаль:

var

num, deg: integer;

res: real;

i: byte;

begin

write ('Число: '); readln (num);

write ('Степень: '); readln (deg);

res := 1;

i := 0;

while i < abs(deg) do begin

res := res * num;

i := i + 1

end;

if deg < 0 then

res := 1 / res;

writeln (res:10:5);

readln

end.