Программа
решения уравнения A*X
+ B*Y = C в целых числах
на
отрезке [P,O] методом
перебора.
|
Program
pr41(Input, Output);
|
Объявление
имени программы
|
Label
1, 2, 3;
|
Блок
объявления меток: задаем метки 1, 2 и 3
|
Var
|
Блок
объявления глобальных переменных
|
A,
B, C : Integer;
|
Переменные
A, B, C - коэффициенты уравнения
|
X,
Y
: Integer;
|
Переменные
X, Y - неизвестные аргументы уравнения
|
P,
O
: Real;
|
Переменные
P, O - границы интервала
|
k
: Integer;
|
Переменная
k - вспомогательная переменная,
накапливающая число решений
|
|
|
Begin
|
Начало
тела программы
|
|
|
WriteLn
('PASCAL: Решение уравнения A*X+B*Y=C в целых
числах на [P,O].');
|
Формулировка
цели алгоритма
|
WriteLn
('Введите коэффициенты:');
|
Запрос
ввода коэффициентов
|
Write('A
= '); ReadLn(A);
|
Вывод
запроса и ввод коэффициента A
|
Write('B
= '); ReadLn(B);
|
Вывод
запроса и ввод коэффициента B
|
Write('C
= '); ReadLn(C);
|
Вывод
запроса и ввод коэффициента C
|
WriteLn
('Введите концы отрезка:');
|
Запрос
ввода концов отрезка
|
Write('P
= '); ReadLn(P);
|
Вывод
запроса и ввод P - левого конца отрезка
|
Write('O
= '); ReadLn(O);
|
Вывод
запроса и ввод O - правого конца отрезка
|
|
|
If
Round (P) = P Then Goto 1;
|
Если
целая часть P равна самому P, то переход
на метку 1
|
If
P < 0 Then P := P + 1;
|
Если
P отрицательное, то увеличиваем P на
единицу
|
|
|
1:
If Round (O) = O Then Goto 2;
|
Метка
1: Если целая часть O равна самому O, то
переход на метку 2
|
If
O < 0 Then O := O + 1;
|
Если
O отрицательное, то увеличиваем O на
единицу
|
|
|
2:
k := 1;
|
Метка
2: Присваиваем k единицу
|
For
X := Round (P) To Round (O) Do
|
Цикл
для X от округленного значения P до
округленного значения O
|
For
Y := Round (P) To Round (O) Do
|
Цикл
для Y от округленного значения P до
округленного значения O
|
Begin
|
Начало
тела цикла
|
If
A * X + B * Y <> C Then Goto 3;
|
Если
значения X и Y удовлетворяют уравнению,
то выполнять...
|
WriteLn
('Решение номер ', k, ': X = ', X, '
Y = ', Y);
|
Выводим
значения X и Y - очередное решение
уравнения
|
k
:= k + 1;
|
Увеличиваем
k на единицу
|
3:
|
Метка
3
|
End;
|
Конец
тела цикла
|
|
|
If
k = 1 Then
|
Если
k = 1, т.е. не изменилось, то...
|
WriteLn
('Нет целых корней.');
|
Вывести
сообщение об отсутствии целых корней
|
|
|
ReadLn;
|
Ожидание
нажатия клавиши Enter для завершения
|
End.
|
Конец
программы.
|