Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kniga_Turbo_Pascal_7_0.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.18 Mб
Скачать

Пример 2

Дано х, принадлежащее интервалу от -1 до 1. Составить программу вычисления частичной суммы ряда х-(х2/2)+(х3/3-… с заданной точностью е. Нужная точность считается полученной, если очередное слагаемое оказалось по модулю меньше, чем е (это и все последующие слагаемые учитывать не надо).

Program Example_48;

Var x, st, sl, у, e: Real;

n, z: Integer;

Begin

Write('Введите х, принадлежащее

(-1,1)');

Readln(х);

Write('Введите погрешность

вычисления ');

Readln(е);

у:=0; n:=1; z:=1; st:=x; sl:=x;

Repeat

Inc(y, z*sl); Inc (n); z:=-z;

st:=st*x; sl:=st/n;

Until sl<e;

Writeln(y);

Readln;

End.

§19. Алгоритм Евклида

Алгоритм Евклида  это алгоритм нахождения наибольшего общего делителя (НОД) двух целых неотрицательных чисел.

Пусть х и y  одновременно не равные нулю целые неотрицательные числа, и пусть x>y. Если y=0, то НОД(х, у)=х, а если y0, то для чисел х, y и r, где r − остаток от деления x на y, выполняется равенство НОД(х,y)=НОД(x,r).

Например, пусть х=48, а у=18.

НОД(48,18)=НОД(18,12)=НОД(12,6)=

НОД(6,0)=6.

Пример 1

Написать программу нахождения наибольшего общего делителя двух неотрицательных чисел.

Решение

Для решения данной задачи воспользуемся циклом с постусловием:

Program Example_49;

Var x, у: Integer;

Begin

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

Readln(х,у);

Repeat {выполнять}

If x>y Then x:=x mod у Else y:=y mod х;

Until (x=0) or (y=0);

{до тех пор, пока одно из чисел не

станет равно нулю}

Writeln('НОД=', х+у); {вывод НОД.

Одно из чисел обязательно равно нулю}

Readln;

End.

Пример 2

Даны натуральные числа х и у, не равные нулю одновременно. Найти d=НОД(х, у) и такие целые q и w, что d=q*x+w*y.

Решение

Введем переменные р, q, r, s, m и n, такие, что m=p*a+q*b, n=r*a+s*b. Первоначально m=a=x, n=b=y.

Program Example_50;

Var x, y: Integer; {исходные данные}

p, q, r, s, m, n: Integer;

{введенные вспомогательные переменные}

к: Integer;

{для изменения значений P, q, r, s}

d: Integer;

{значение наибольшего общего делителя}

Begin

Read(x, у);

m:=x; n:=y; р:=1; q:=0; r:=0; s:=1;

Repeat

If m>n Then

Begin

k:=m div n; m:=m mod n;

p:=p-k*r; q:=q-k*s

End

Else Begin

k:=n div m; n:=n mod m; r:=r-k*p;

s:=s-k*q;

End;

Until (m=0) or (n=0);

If m=0 Then Begin d:=n; q:=r; w:=s; End

Else Begin d:=m; q:=p; w:=q; End;

Writeln(d, '=',q,'*',x,'+',w,'*',y);

End.

Значения переменных p, q, r, s изменяются следующим образом:

• как только значение переменной m уменьшается на k*n, значение р уменьшается на k*r, а q уменьшается на k*s;

• аналогично, как только значение n уменьшается на k*m, значения переменных r и s уменьшаются соответственно на k*p и на k*q.

§20. Вложенные циклы Пример 1

Даны натуральные числа n и k. Составить программу вычисления выражения 1k+2k+…+nk.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]