Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Можно ли заданное натур. число М представить в виде суммы 2-х ква   Найти похожие ветки 

 
Германн ©   (2012-09-09 23:17) [40]


> да не... способ есть

Я знаю. Я про то что в задании этого нет. :)


 
Inovet ©   (2012-09-09 23:19) [41]

> [38] брат Птибурдукова   (09.09.12 23:03)
> что при теперешнем распространении калькуляторовпользоваться им нет надобности

Даже кубические извлекают без калькуляторов
http://husa.su/media/cache/be/9b/be9bf521b1a9ffb3c3582142196fc2ed.jpg


 
Юрий Зотов ©   (2012-09-10 00:16) [42]


> брат Птибурдукова   (09.09.12 23:03) [38]

Спасибо. Ник можно возвращать - оливье и шашлычок под бутылочку пивца были очень кстати.
:o)

> Inovet ©   (09.09.12 22:21) [36]

Не комильфо писать стихи о пицце -
И всем давно известно, даже в Ницце,
Что Всеволод Вишневский так сказал.

Но если голодом желудок мой томится -
Не все ль ему равно, чем утолиться?
И восемь пицц я, как одну, умял.

Теперь не естся мне, не пьется и не спится,
Битком набит живот и вновь томится.
Зачем? Зачем я на ночь ел ту пиццу?
Ведь знал, что так и будет. Вот тупица!

(Здесь должна быть последняя строчка с рифмой на -ал, -ял, но не могу ее придумать - объелся. Придумайте за меня, добрые люди, сами мы не местные!)
:o)


 
Sha ©   (2012-09-10 00:19) [43]


> брат Птибурдукова   (09.09.12 23:03) [38]


как знал, брал новый ник


 
Inovet ©   (2012-09-10 00:58) [44]

Удалено модератором


 
Sha ©   (2012-09-10 01:08) [45]

1  Салат увидел. Вилку в руки взял...

2  В дверь постучали. Я бумагу мял...

3  А завтра напишу о плове. Сегодня аппетит унял.


 
Германн ©   (2012-09-10 01:22) [46]


> Юрий Зотов ©   (10.09.12 00:16) [42]
> оливье и шашлычок под бутылочку
> пивца были очень кстати.

Ну с оливье понятно нет проблем. Но шашлык небось изрядно остыл пока его везли?


 
Sha ©   (2012-09-10 02:00) [47]

4  Мозг слипся, силясь мысли о халве прогнать.


 
Германн ©   (2012-09-10 02:21) [48]

Удалено модератором


 
Германн ©   (2012-09-10 02:55) [49]

Удалено модератором


 
Inovet ©   (2012-09-10 03:00) [50]

Удалено модератором


 
Германн ©   (2012-09-10 04:20) [51]

Удалено модератором


 
Опять я   (2012-09-10 08:02) [52]

Я опять по 1-й задаче:

Там оказывается нужно найти не просто 1 комбинацию из возможных,
а ВСЕ комбинации.

Вот накатал код, но он почему то виснет.

Что не так?

P.S. Делалось в Delphi, но с учетом специфики Turbo Pascal"я.


{

  Пояснение решения:

  Дана формула: X^2 + Y^2 = M.
  M - Известно, поэтому вычисляем Y по формуле:
  Y = SQRT(M - X^2).

  В цикле наращиваем счётчик X,
  до тех пор, пока Y не окажется целым числом,
  значит комбинация цифр удовлетворяющих условию - существует.

 
}

var
 Count  : LongWord;         { Кол-во комбинаций }
 Results: array [1..255] of { В Turbo Pascal"е нет динамических массивов, }
 record                     { поэтому возьмем размерность массива большую чем кол-во возможных комбинаций }
   X, Y: Integer;
 end;

{ Функция проверяет, есть ли уже такая комбинация цифр }
function IsCombination(X, Y: LongWord): boolean;
var
 i: LongWord;
begin
 If (Count > 0) then
 For i:= 1 to Count do
   If ((Results[i].X = X) and (Results[i].Y = Y)) or   { К примеру:(7^2 - 1^2) и }
      ((Results[i].Y = X) and (Results[i].X = Y)) then {           (1^2 - 7^2) - считаются за 1 комбинацию. }
   begin
     Result:= True;
     Exit;
   end;

 Result:= False;
end;

{ Функция проверяет цело ли вещественное число }
function IsInt(const X: single): boolean;
begin
 Result:= (X = Trunc(X));
end;

{ Функция проверяет, есть ли комбинация цифр, удовлетворяющих условию: X^2 + Y^2 = M. }
function IsTrue(M: LongWord; var OutX, OutY: LongWord): boolean;
var
 Y: single;
 X: LongWord;
begin
 For X:= 1 to Trunc(Sqrt(M)) do { Начинаем с 1, т.к. числа должны быть натуральными. }
 begin                          { Ищем до Trunc(Sqrt(M)), т.к. по условию X^2 + Y^2 = M, X и Y получаются должны быть меньше корня M }
   Y:= Sqrt(M - Sqr(X));
   If (Trunc(Y) <> 0) and       { 0 - откидываем, т.к. натуральные числа начинаются с 1. }
      (IsInt(Y))      then      { Y должен быть целым числом. }
       begin
         OutX:= X;
         OutY:= Trunc(Y);

         Result:= True;
         Exit;
       end;
 end;

 Result:= False;
end;

{ Функция находит все комбинации цифр, удовлетворяющих условию: X^2 + Y^2 = M. }
procedure ScanCombinations(M: LongWord);
var
 X, Y: LongWord;
begin
 Count:= 0;

 while IsTrue(M, X, Y) do
   If not IsCombination(X, Y) then { Если не нашли такую комбинацию - добавляем. }
   begin
     Inc(Count);
     
     Results[Count].X:= X;
     Results[Count].Y:= Y;
   end;
end;

{ Использование }

procedure TForm1.Button2Click(Sender: TObject);
var
 i: LongInt;
begin
 ListBox1.Clear;

 ScanCombinations(25);
 If (Count = 0) then
 begin
   ListBox1.Items.Add("NULL");
   Exit;
 end;

 For i:= 1 to Count do
 with Results[i] do
   ListBox1.Items.Add(Format("%d : %d", [X, Y]));
end;



 
брат Птибурдукова   (2012-09-10 08:45) [53]

этот пацак говорит на языках, продолжения которых не знает


 
MBo ©   (2012-09-10 08:54) [54]

function IsInt - негодная (в частности - Trunc здесь не к месту)

Зависает - значит while не завершается - ещё раз обдумать алгоритм. Если кажется верным - использовать отладку.

Однако стоит полностью переработать всё, без ненужных усложнений.
Например, ни к чему регистрировать найденные варианты - достаточно рассматривать только варианты, при которых Y не меньше X.
Кроме того, почти всё можно сделать в целых числах (оставить только Trunc(Sqrt(M)))

Задача уместится в десяток строчек.


 
Sha ©   (2012-09-10 09:06) [55]


> Опять я   (10.09.12 08:02) [52]


Наступит момент, когда ты почувствуешь, что выучил язык и можешь думать на нем.
Еще через какое-то время тебе будет казаться, что эта фаза лишняя, и можно сразу писать программу.
Это очень опасно. Получить диагноз легко, а снять в три раза дороже.


 
Опять я   (2012-09-10 09:25) [56]


> брат Птибурдукова   (10.09.12 08:45) [53]
>
> этот пацак говорит на языках, продолжения которых не знает


В смысле?


>  MBo ©   (10.09.12 08:54) [54]
>
> function IsInt - негодная (в частности - Trunc здесь не
> к месту)


А как же тогда узнать, цело ли вещественное число?


 
Опять я   (2012-09-10 09:34) [57]

Переделал так, все работает:


{ Функция проверяет, есть ли комбинация цифр, удовлетворяющих условию: X^2 + Y^2 = M. }
function IsTrue(M: LongWord): boolean;
var
 Y: single;
 X: LongWord;
begin
 For X:= 1 to Trunc(Sqrt(M)) do { Начинаем с 1, т.к. числа должны быть натуральными. }
 begin                          { Ищем до Trunc(Sqrt(M)), т.к. по условию X^2 + Y^2 = M, X и Y получаются должны быть меньше корня M }
   Y:= Sqrt(M - Sqr(X));
   If (Trunc(Y) <> 0) and       { 0 - откидываем, т.к. натуральные числа начинаются с 1. }
      (IsInt(Y))      then      { Y должен быть целым числом. }
       begin
         If not IsCombination(X, Trunc(Y)) then
         begin
           Inc(Count);
           Results[Count].X:= X;
           Results[Count].Y:= Trunc(Y);

           Result:= True;
           Exit;
         end;

       end;
 end;

 Result:= False;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 i: LongInt;
begin
 ListBox1.Clear;

 Count:= 0;
 while IsTrue(50) do;

 If (Count = 0) then
 begin
   ListBox1.Items.Add("NULL");
   Exit;
 end;

 For i:= 1 to Count do
 with Results[i] do
   ListBox1.Items.Add(Format("%d : %d", [X, Y]));
end;



Выводит для, к примеру, 50 - (5, 5) и (1, 7)


 
MBo ©   (2012-09-10 09:36) [58]

>А как же тогда узнать, цело ли вещественное число?
Лучше вообще не узнавать - большинство целых чисел точно в single или double непредставимы, и будут на самом деле иметь вид 17.00000000000023 или 20.99999999999865. Заметь, что во втором случае Trunc обрежет до 20.


 
Anatoly Podgoretsky ©   (2012-09-10 09:45) [59]

> Опять я  (10.09.2012 09:25:56)  [56]

С помощью Trunc не узнать.


 
MBo ©   (2012-09-10 09:48) [60]

Почти целочисленный вариант:

var
 X, Y, Temp, Sum: Integer;
begin
 Sum := 3125 * 2197;
 X := 1;
 Y := Trunc(Sqrt(Sum));
 while X <= Y do begin
   Temp := X * X + Y * Y;
   if Temp < Sum then
     Inc(X)
   else if Temp > Sum then
     Dec(Y)
   else begin
     Memo1.Lines.Add(Format("%d %d", [X, Y]));
     Inc(X);
     Dec(Y);
   end;
 end;


 
Опять я   (2012-09-10 09:52) [61]

Извините, если уже надоел, я только учусь у спецов.

Похожая задача.


Сколькими способами заданное натур. число N можно представить в виде 2-х кубов натур. чисел.  


Я переделал формулу



Y:= LogN(3, M - (Sqr(X) * X));



Ввожу 35 - получаю  - 2 и 3. Все правильно.
Ввожу 126 - получю - NULL. По идее должно возвратить - 1 и 5. Но почему то не пашет, почему?


 
Игорь Шевченко ©   (2012-09-10 10:33) [62]

Опять я   (10.09.12 09:52) [61]

Ты где учишься ?


 
Игорь Шевченко ©   (2012-09-10 10:34) [63]


>  while IsTrue(50) do;


Феерично.


 
Sha ©   (2012-09-10 10:43) [64]

> MBo ©   (10.09.12 09:48) [60]

Классно.

Из этого легко получить полностью целочисленный вариант,
если сделать 2 цикла, начинающихся с пифагоровой тройки,
и один крутить вверх, а другой вниз. При этом весь алгоритм
потребует 1 деление, 2 умножения и кучу сложений.


 
pasha_golub ©   (2012-09-10 10:47) [65]


> Игорь Шевченко ©   (10.09.12 10:34) [63]
> >  while IsTrue(50) do;
> Феерично.


Не, ну еще можно выжить. Вот если б было
while IsTrue(50) = True do;


 
Sha ©   (2012-09-10 10:52) [66]


> А как же тогда узнать,  цело ли вещественное число?


http://delphimaster.net/view/15-1343205350/


 
Опять я   (2012-09-10 11:12) [67]


> Игорь Шевченко ©   (10.09.12 10:33) [62]
>
> Опять я   (10.09.12 09:52) [61]
>
> Ты где учишься ?


В Нархозе. А что?


>
>
> Феерично.


Почему?
Функция будет в цикле пока находятся новые комбинации, как только они
иссякнут, то будет выход из цикла.

Подскажите по последней задаче.


 
Игорь Шевченко ©   (2012-09-10 11:21) [68]


> А что?


Здесь вроде не филиал твои задачи решать. Существуют преподаватели, коллеги по несчастью, etc.


 
имя   (2012-09-10 11:27) [69]

Удалено модератором


 
Опять я   (2012-09-10 11:29) [70]


> Игорь Шевченко ©   (10.09.12 11:21) [68]
>
>
> > А что?
>
>
> Здесь вроде не филиал твои задачи решать. Существуют преподаватели,
>  коллеги по несчастью, etc.
>


Да у меня одногруппники вообще не бум-бум.
Мне им приходится помогать, а не им мне.

Препод злой мужик, который любит дотошного докапываться, он не поможет.


 
Опять я   (2012-09-10 11:30) [71]

Подскажите по последней задаче.

Только там вместо суммы квадратов - сумма кубов.
Поменял формулу на нужную, и программа перестала работать.


 
Игорь Шевченко ©   (2012-09-10 11:31) [72]


> Препод злой мужик, который любит дотошного докапываться,
>  он не поможет.


Печально



Страницы: 1 2 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.62 MB
Время: 0.06 c
2-1347011404
alexdn
2012-09-07 13:50
2013.03.22
Текст на картинку (канву)


4-1258675071
DDorgNev
2009-11-20 02:57
2013.03.22
как перехватить LVM_SETITEMTEXT у контрола в чужом окне?


2-1336838970
АлексеЕей
2012-05-12 20:09
2013.03.22
Задача по информатике


15-1331053532
vrem
2012-03-06 21:05
2013.03.22
телевизор 42" как монитор для компьютера


2-1331468421
Димка На
2012-03-11 16:20
2013.03.22
Создать несколько экз. класса сразу.