Форум: "Прочее";
Текущий архив: 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.073 c