
- •Программирование в интегрированной среде Turbopascal. Циклический вычислительный процесс
- •Оператор цикла с предусловием
- •While выражение_условия_повтора do оператор;
- •Оператор цикла с постусловием
- •Пример программы «Решение задачи с использованием операторов цикла»
- •Использование циклов при решении задач целочисленной арифметики
- •Выделение цифр в числе
- •Делители числа
- •Проверка: является ли число простым
- •Нахождение наибольшего общего делителя (нод) двух чисел
- •Табулирование функции
- •Вычисление значения функции с заданной точностью
- •Вложенные циклы
- •Сочетание оператора цикла и условного оператора
- •Задания для самостоятельного выполнения
- •Список рекомендуемой литературы
- •Содержание
- •Программирование в интегрированной среде Turbopascal. Циклические алгоритмы
- •654007, Г. Новокузнецк, ул. Кирова, 42
Использование циклов при решении задач целочисленной арифметики
Для решения задач целочисленной арифметики, таких как:
выделение цифр в числе;
определение делителей числа;
проверка числа на простоту;
нахождение наибольшего общего делителя (НОД) двух чисел.
практически всегда используются циклические структуры.
Выделение цифр в числе
Для выделения цифры из числа 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.