Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Можно ли заданное натур. число М представить в виде суммы 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.65 MB
Время: 0.079 c
2-1326742131
Рома
2012-01-16 23:28
2013.03.22
Нужно сделать трассировку


2-1340780940
aka
2012-06-27 11:09
2013.03.22
Удаления пробелов в строке.


15-1353292991
MonoLife
2012-11-19 06:43
2013.03.22
Принтер Canon LBP-1120, HP LaserJet 1005 в Win 7 64 bit.


2-1340011274
начинающий_
2012-06-18 13:21
2013.03.22
битовые операции


1-1302439218
Luarvic
2011-04-10 16:40
2013.03.22
Плагин Миранды в свое приложение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский