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

Использование циклов при решении задач целочисленной арифметики

Для решения задач целочисленной арифметики, таких как:

  • выделение цифр в числе;

  • определение делителей числа;

  • проверка числа на простоту;

  • нахождение наибольшего общего делителя (НОД) двух чисел.

практически всегда используются циклические структуры.

Выделение цифр в числе

Для выделения цифры из числа number будем использовать операции div (целочисленное деление) и mod (получение остатка от деления). Введем следующие обозначения: number – целое число, подлежащее обработке; temp – переменная для хранения цифры числа.

write('Введите целое число:');

readln(number);

while number<>0 do

begin

temp:=number mod 10; {выделение цифры из числа}

number:=number div 10; {уменьшение числа на один разряд}

end;

Делители числа

В данном типовом алгоритме будем определять делители числа number, отличные от 1 и самого числа. Поэтому значение делителей может изменяться от 2 до половины числа. Введем обозначения: delit – делитель числа number.

write('Введите целое число:');

readln(number);

write('Делители числа: ');

for delit:=2 to number div 2 do

if number mod delit = 0

then write(delit, ' ');

Проверка: является ли число простым

Простым является число, которое имеет ровно два делителя – 1 и само себя. В данном алгоритме необходимо инициализировать значение переменной flag; определить начальное значение делителя для числа number; организовать цикл с предусловием, который будет выполняться до тех пор, пока либо будет найден хотя бы один делитель (тогда flag станет ложным), либо до середины числа number. Введем обозначения: delit – делители числа number; flag – переменная логического типа, которая используется для досрочного выхода из цикла.

write('Введите целое число: ');

readln(number);

{предположим, что число простое}

flag:=true;

delit:=2;

while flag and (delit <= number div 2) do

if number mod delit = 0

then flag:=false

else delit:=delit+l;

if flag

then writeln('Число простое')

else writeln('Число составное');

Нахождение наибольшего общего делителя (нод) двух чисел

Существует несколько алгоритмов определения НОД двух чисел. Рассмотрим один из них. Алгоритм основан на сравнении двух чисел и уменьшении большего из них на значение меньшего до тех пор, пока числа не станут равными. Как только они становятся равными, поиск НОД заканчивается и в качестве значения НОД может быть принято любое из получившихся чисел. Введем обозначения: number1, number2 – целые числа, для которых определяется НОД.

write('Введите два целых числа:');

readln(number1, number2);

while number1<>number2 do

if number1>number2

then number1:=number1-number2

else number2:=number2-number1;

writeln('НОД чисел = ', number1);

Табулирование функции

Результатом решения этой задачи будет таблица значений функции у = f(x) для аргумента x, изменяющегося от некоторого начального до некоторого конечного значения с шагом h.

Для решения этой задачи будем использовать цикл с параметром. Так как в качестве параметра цикла в операторе for не может быть использована переменная действительного типа, например, переменная x, то введем дополнительную переменную i, значение которой будем изменять от 1 до Nx с постоянным шагом 1. Значение числа повторений цикла Nx определяется по формуле:

,

где x0, xnначальное и конечное значения переменной x (x0 < xn);

hx – шаг изменения переменной x (hx > 0);

[ ] – целая часть числа.

Program Tab;

V ar hx, x, y, x0, xn: real; i, nx: integer; g: string[30];

Begin

Write ('Введите через пробел значения x0, xn, hx ');

readln (x0, xn, hx);

g:=’-----------------‘;

writeln(‘ Таблица ‘); writeln (g:30);

writeln(‘I X I Y I’); writeln (g:30);

nx:= trunc((xn – x0)/hx) + 1;

x:= x0;

for i: = 1 to nx do

begin

y:= x*sin(x); {Здесь f(x) = x*sin(x)}

writeln(‘I’, x:8:4, ‘I’, y:8:4, ‘I’);

x:= x + hx;

end;

writeln (g:30);

Еnd.