Отбор чисел по заданному условию

Форум пользователей пакета Maple

Модератор: Admin

berg
Сообщения: 37
Зарегистрирован: Чт янв 19, 2012 8:33 pm

Отбор чисел по заданному условию

Сообщение berg » Вт июл 30, 2013 8:43 pm

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

Markiyan Hirnyk
Сообщения: 1366
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Отбор чисел по заданному условию

Сообщение Markiyan Hirnyk » Ср июл 31, 2013 7:56 am

berg писал(а):Подскажите, какой оператор нужно использовать, чтобы из массива результатов отбирались и выводились на экран только числа, состоящие из одинаковых цифр?
Условие выглядит надуманным, однако ради спортивного интереса сделал это:
A := Array([1.23, 3.33, 4.4]);
B := map(c -> convert(floor(c*10^(-op(2, frac(c)))), base, 10), A);

Matrix(1, 3, {(1, 1) = [3, 2, 1], (1, 2) = [3, 3, 3], (1, 3) = [4, 4]})
C := {};
for j to nops(A)-1 do if nops(convert(B[j], set)) = 1 then C := `union`(C, {A[j]}) end if end do;
C;

{3.33, 4.4}
Серьезный подход использует средства пакета ?StringTools .

berg
Сообщения: 37
Зарегистрирован: Чт янв 19, 2012 8:33 pm

Сообщение berg » Ср июл 31, 2013 3:58 pm

Извините, Markiyan Hirnyk, но я не вижу, как можно применить Ваш совет конкретно, например, в такой задаче:
for n from 1 to 100000 do
for k from 1 to 100000 do
H:=n+2*k-1;
a:=H^2-n^2;
С:=2*H*n;
c:=H^2+n^2;
if igcd(a,b,c)=1 then print(a,b,c,n,k);
end if;
end do:end do;
Нужно отобрать все числа b, которые состоят только из одних четверок. Как это сделать?

Markiyan Hirnyk
Сообщения: 1366
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Сообщение Markiyan Hirnyk » Ср июл 31, 2013 4:06 pm

berg писал(а):Извините, Markiyan Hirnyk, но я не вижу, как можно применить Ваш совет конкретно, например, в такой задаче:
for n from 1 to 100000 do
for k from 1 to 100000 do
H:=n+2*k-1;
a:=H^2-n^2;
С:=2*H*n;
c:=H^2+n^2;
if igcd(a,b,c)=1 then print(a,b,c,n,k);
end if;
end do:end do;
Нужно отобрать все числа b, которые состоят только из одних четверок. Как это сделать?

Уважаемый berg! Я полностью ответил на Ваш вопрос, а Вы задаете другой, не связанный с предыдущим: нет массива, отбирать (куда?) числа b, которые состоят только из четверок. Это по меньшей мере не солидно и не производит о Вас положительного впечатления. Вы меня поняли?

berg
Сообщения: 37
Зарегистрирован: Чт янв 19, 2012 8:33 pm

Сообщение berg » Ср июл 31, 2013 7:29 pm

Уважаемый berg! Я полностью ответил на Ваш вопрос, а Вы задаете другой, не связанный с предыдущим: нет массива, отбирать (куда?) числа b, которые состоят только из четверок. Это по меньшей мере не солидно и не производит о Вас положительного впечатления. Вы меня поняли?[/quote]

В моей программе на экран выводятся все результаты подряд. Из этого массива нужно отобрать числа b, состоящие из четверок. Что здесь не так?
Что касается положительного впечатления, то вы на этом форуме уже давно его не производите.

Markiyan Hirnyk
Сообщения: 1366
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Сообщение Markiyan Hirnyk » Ср июл 31, 2013 8:37 pm

berg писал(а):В моей программе на экран выводятся все результаты подряд. Из этого массива нужно отобрать числа b, состоящие из четверок. Что здесь не так?
Что касается положительного впечатления, то вы на этом форуме уже давно его не производите.

Глубокоуважаемый berg! Увы, не знаю ответа на Ваш нечетко сформулированный второй вопрос (в коде отсутствует b). При случае посмотрите справку ?Array и какие бывают числа. Уточнение: в моем коде следует заменить nops(A)-1 на nops(op(3, A)). На этом категорически заканчиваю участие в этой теме.
Искренне, М.Г.

Kitonum
Сообщения: 2084
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Ср июл 31, 2013 10:51 pm

Уважаемый г-н berg! Хочу дать Вам два совета:

1) Если Вы намерены в чём-то как следует разобраться, то постарайтесь по-максимуму сделать это самому и только в крайнем случае обращаться за посторонней помощью. Уважаемый г-н M.Hirnyk написал Вам готовый код, а Вы вместо того, чтобы в нём разобраться, что решило бы все Ваши проблемы, задаёте новый вопрос.

2) Отвечу всё-же на Ваш последний вопрос. Так как у Вас все числа целые, то код M.Hirnyk можно значительно упростить. Если Вам нужно извлечь цифры натурального числа a в десятичной системе счисления, то можно использовать команду convert(a, base, 10) . Эта команда возвращает список цифр справа налево. Далее конвертируете этот список в множество и, если список состоит из одинаковых цифр, то полученное множество будет иметь всего 1 элемент, который извлекается из множества командой op .

Пример:

L1 := convert(1234, base, 10); L2 := convert(4444, base, 10);
S := convert(L2, set);
op(S);


L1 := [4, 3, 2, 1]

L2 := [4, 4, 4, 4]

S := {4}

4

berg
Сообщения: 37
Зарегистрирован: Чт янв 19, 2012 8:33 pm

Сообщение berg » Чт авг 01, 2013 3:13 pm

Тысячу раз извиняюсь, господа.
В силу своей непроходимой глупости я так и не понял, каким образом в приведённую мной программу вставить
команду convert(a, base, 10), чтобы на экран выводились результаты примерно в таком виде:
a, b, c
3, 4, 5
483, 44, 485
49283, 444, 49285
4937283, 4444, 4937285

Мой вопрос состоял именно в этом: какой оператор (или команда) будет выводить на экран числа a, b, c такие, в которых b состоит только из одинаковых цифр?
Мне очень неловко за возникшее по моей вине недоразумение.

Kitonum
Сообщения: 2084
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Сообщение Kitonum » Чт авг 01, 2013 3:35 pm

berg писал(а):... каким образом в приведённую мной программу вставить
команду convert(a, base, 10), чтобы на экран выводились результаты примерно в таком виде:
a, b, c
3, 4, 5
483, 44, 485
49283, 444, 49285
4937283, 4444, 4937285

Мой вопрос состоял именно в этом: какой оператор (или команда) будет выводить на экран числа a, b, c такие, в которых b состоит только из одинаковых цифр?
...



for n from 1 to 1000 do
for k from 1 to 1000 do
H:=n+2*k-1;
a:=H^2-n^2;
b:=2*H*n;
c:=H^2+n^2;
if igcd(a,b,c)=1 and nops(convert(convert(b, base, 10), set))=1 then print(a,b,c,n,k);
end if;
end do: end do;


Если Вы хотите, чтобы b не просто состояла из одинаковых цифр, а только, например, из четвёрок, то вместо nops(convert(convert(b, base, 10), set))=1 напишите op(convert(convert(b, base, 10), set))=4

berg
Сообщения: 37
Зарегистрирован: Чт янв 19, 2012 8:33 pm

Сообщение berg » Чт авг 01, 2013 7:17 pm

Вопрос исчерпан.БЛАГОДАРЮ ВСЕХ ЗА УЧАСТИЕ!