На заданном числовом промежутке требуется найти все натуральные числа, которые имеют два разных представления - Free Pascal
Формулировка задачи:
На заданном числовом промежутке требуется найти все натуральные числа, которые имеют два разных представления в виде суммы: квадратов двух натуральных чисел (представления a2+b2 и b2+a2 считать одинаковыми)
Program summa_kubov;
uses crt;
var a,b,i,f,j,p,r,q:longint;
begin
clrscr;
repeat
write('Введите концы отрезка (Неотрицательные числа):');
readln(a,b)
until (a<b) and (a>0) and (ioresult=0);
f:=0;
writeln('На отрезке [',a,',',b,'] числа представимые в виде суммы квадратов:');
for i:=1 to b-1 do
for j:=i+1 to b do
begin
p:=i*i;
q:=j*j;
r:=p+q;
if (r>a)and(r<b) then begin
writeln(r,'=',p,'+',q);
f:=f+1;end;end;
if f=0 then writeln('Отсутствуют');
repeat until keypressed
end.
Нужно переделать эту программу ,что бы искала несколько представлений суммы кубов,а не так как в программе-одно.
Решение задачи: «На заданном числовом промежутке требуется найти все натуральные числа, которые имеют два разных представления»
textual
Листинг программы
uses crt;
var a,b,i,k,x1,y1,x2,y2:integer;
begin
clrscr;
repeat
writeln('Введите диапазон натуральных чисел a<b');
readln(a,b);
until(a>0)and(a<b);
k:=0;
for i:=a to b do
begin
for y1:=1 to trunc(sqrt(i)) do
for x1:=y1 to trunc(sqrt(i)) do
if (x1*x1+y1*y1=i) then
begin
for y2:=y1 to trunc(sqrt(i)) do
for x2:=y2 to trunc(sqrt(i)) do
if (x2*x2+y2*y2=i)
and(x1<>x2)and(y1<>y2)and(x1<>y2)and(y1<>x2)then
begin
writeln(i:5,'=',x1:2,'^2+',y1:2,'^2 ',x2:2,'^2+',y2:2,'^2');
k:=k+1;
if k mod 20=0 then
begin
write('Press enter');
readln;
end;
end;
end;
end;
if k=0 then write('Таких чисел нет');
readln
end.
Объяснение кода листинга программы
- Объявление переменных: a, b, i, k, x1, y1, x2, y2: integer.
- Очистка экрана с помощью функции clrscr.
- Повторяющийся блок, который продолжается до тех пор, пока пользователь не введет корректный диапазон чисел (a > 0 и a < b).
- Установка счетчика k в 0.
- Два вложенных цикла, которые перебирают все числа в заданном диапазоне от a до b.
- Внутренний цикл проверяет все возможные значения x1 и y1, которые являются квадратами целых чисел, на то, является ли их сумма равной текущему числу i.
- Если внутренний цикл находит совпадение, то проверяется внешний цикл на наличие другого совпадения.
- Если внешнее совпадение найдено, то число i выводится на экран вместе с двумя представлениями, и счетчик k увеличивается на 1.
- Если k становится кратным 20, то программа выводит сообщение
Press enterи ожидает нажатия клавиши Enter. - Если после прохождения всех циклов счетчик k равен 0, то выводится сообщение
Таких чисел нет. - Конец программы с помощью функции readln.