Страница 1 из 2

Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 16:02
Juhn
Помогите пожалуйста кто может, написать эту программу.
Условие: Найти минимальное натуральное число N, которое можно изобразить в виде суммы кубов двух натуральных чисел в двух вариантах (N=a^3+b^3=c^3+d^3). Программу нужно написать используя цикл repeat-until, или while-do, именно так, потому что эта программа была написана с использованием массива и её мне не засчитали, надо именно через какой - то из этих двух циклов.
Спасибо, надеюсь кто - то поможет.

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 16:27
MOTOCoder
Числа a и b заданы ?

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 16:33
Juhn
Ничего не задано, забыл написать что дан только ответ, что это число 1729, и надо что бы при включении программы она сразу выдавала 1729=что -то в 3ей + что то в 3ей = что то в 3ей + что то в 3ей

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 18:04
Vovchik
так тебе надо найти "чтото" ?????

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 18:07
MOTOCoder
Например так:
[syntax='Delphi']
program sumkub_pas;

const
N=1729;

var
A,B,C,D:longint;
bb:boolean;

function pow(x,p:real):real;
begin
pow:=exp(p*ln(x));
end;

begin
bb:=false;
repeat
inc(A);
repeat
inc(B);
bb:=(pow(A,3)+pow(B,3)=N);
until bb or (B=N) ;
if not bb then B:=1;
until bb;

C:=A;
D:=B;
bb:=false;

repeat
inc(C);
repeat
inc(D);
bb:=(pow(C,3)+pow(D,3)=N);
until bb or (D=N) ;
if not bb then D:=1;
until bb;

writeln(A,'^3+',B,'^3=',C,'^3+',D,'^3=',N);
readln;
end.

[/syntax]

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 18:25
Juhn
Надо её как - то написать только этим циклом, нельзя использовать то - что ещё не пройдено, раз через массив не засчитали, думаю через функцию тоже, её мы ещё не проходили :/

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 18:34
Juhn
Vovchik надо что бы программа нашла это число 1729, я то его знаю, но надо что бы программа его выдала и раписала на какую сумму кубов это число раскладывается.

Условие: Найти минимальное натуральное число N, которое можно изобразить в виде суммы кубов двух натуральных чисел в двух вариантах

Тоесть надо писать код, как будто программа не знает это число и должна его вычислить

Вот пример решения этой задачи через массив:
const
N = 20;
var
i,j,k,m,min: LongInt;
a: array[1..N,1..N] of LongInt;
begin
for i:=1 to N do
for j:=1 to N do
a[i,j]:=i*i*i+j*j*j;
min:=high(integer);
for i:=1 to N do
for j:=1 to N do
for k:=1 to N do
for m:=1 to N do
if (a[i,j] = a[k,m]) and (i <> k) and (j <> m) and
(i <> m) and (j <> k) and (a[i,j] < min) then
begin
min:=a[i,j];
writeln(a[i,j],'/',i,',',j,'/',k,',',m);
end;
end.

А надо как - то без массива, только циклом...

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 02 мар 2008, 22:44
Dim...ON
>Помогите написать прогу (цикл repeat-until, while-do)
Juhn, стучись в аську 198-012-696... помогу написать прогу :)

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 03 мар 2008, 11:41
Хыиуду
2 MotoCoder:
Функция pow с двумя аргументами тут немного лишняя. Все равно в программе используется только возведение в куб. Так что проще
function cube(x:integer):integer; begin cube:=x*x*x; end;

По самой задаче: делаем цикл от 1 до кубического корня из N. Аргумент цикла возводим в куб, вычитаем из N, из полученной разности извлекаем кубический корень. Если он целый - значит, запоминаем эти два числа (индекс цикла и найденный корень). Продолжаем дальше цикл, если находим еще одно такое число, которое не равно предыдущему найденному корню, то искомое N найдено.

Сам код:
N:=1;
summa_kubov:=false;
repeat
inc(N);
if (все то, что я написал выше) then summa_kubov:=true;
until summa_kubov;

Re: Помогите написать прогу (цикл repeat-until, while-do)

Добавлено: 03 мар 2008, 18:10
MOTOCoder
Хыиуду писал(а):2 MotoCoder:
Функция pow с двумя аргументами тут немного лишняя. Все равно в программе используется только возведение в куб. Так что проще
function cube(x:integer):integer; begin cube:=x*x*x; end;
Пытался сделать так, но программа вырубается из-за runtime-ошибки.
К тому же, функцию я брал из другой своей программы.