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

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Juhn
Сообщения: 9
Зарегистрирован: 23 дек 2007, 22:16

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

Числа a и b заданы ?
Ни что так не ограничивает фантазию программиста, как компилятор...
Juhn
Сообщения: 9
Зарегистрирован: 23 дек 2007, 22:16

Ничего не задано, забыл написать что дан только ответ, что это число 1729, и надо что бы при включении программы она сразу выдавала 1729=что -то в 3ей + что то в 3ей = что то в 3ей + что то в 3ей
Vovchik
Сообщения: 196
Зарегистрирован: 28 фев 2008, 18:32
Контактная информация:

так тебе надо найти "чтото" ?????
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Например так:
[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]
Ни что так не ограничивает фантазию программиста, как компилятор...
Juhn
Сообщения: 9
Зарегистрирован: 23 дек 2007, 22:16

Надо её как - то написать только этим циклом, нельзя использовать то - что ещё не пройдено, раз через массив не засчитали, думаю через функцию тоже, её мы ещё не проходили :/
Juhn
Сообщения: 9
Зарегистрирован: 23 дек 2007, 22:16

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.

А надо как - то без массива, только циклом...
Dim...ON
Сообщения: 75
Зарегистрирован: 28 янв 2008, 01:10
Контактная информация:

>Помогите написать прогу (цикл repeat-until, while-do)
Juhn, стучись в аську 198-012-696... помогу написать прогу :)
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

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