Вход | Регистрация


1С:Предприятие :: Математика и алгоритмы

Функция на размышление

Функция на размышление
Я
   1nvertex
 
02.11.16 - 22:47
Нужна функция F(Х,У) с двумя параметрами, где
Х - целочисленное от 1 до 11111. Все числа внутри либо 0 либо 1
У - число от 1 до 5
Функция должна возвращать число из Х по номеру У
Например:
F(10101,3) = 1
F(10101,4) = 0
F(10110,1) = 1
F(1001,1) = 0
Функции доступны только арифметические операции, условия и циклы. Строковые операции недоступны.
Как решить?
 
 
   1nvertex
 
1 - 02.11.16 - 22:48
Округления тоже недоступны
   vde69
 
2 - 02.11.16 - 23:01
типа того (наверно ошибки есть но суть понятна)

если x%(y**10) > 0 тогда возврат 1 иначе возврат 0
   Lama12
 
3 - 02.11.16 - 23:04
(0) Хорошая попытка.:-)
Промолчу, пусть молодежи подумает.
   Serg_1960
 
4 - 02.11.16 - 23:07
Смеха ради вспомнилось :)
Автор: vde69

мЧисло = ТвоеЧисло % 256;
Бит8 = (мЧисло - (мЧисло % 128)) > 0
мЧисло = мЧисло % 128;
Бит7 = (мЧисло - (мЧисло % 64)) > 0
мЧисло = мЧисло % 64;
Бит6 = (мЧисло - (мЧисло % 32)) > 0
мЧисло = мЧисло % 32;
...
   Serg_1960
 
5 - 02.11.16 - 23:22
Цифра1 = Х - Цел(Х/10)*10;
Х = Цел(Х/10);
Цифра2 = Х - Цел(...
   GedKo
 
6 - 02.11.16 - 23:29
а почему?
>F(1001,1) = 0
   GedKo
 
7 - 02.11.16 - 23:30
Затупил, снимаю вопрос :(
   GedKo
 
8 - 02.11.16 - 23:31
Затупил дважды, поднимаю обратно :)
   Serg_1960
 
9 - 02.11.16 - 23:41
Хмм... думаешь автор не может тупить? Ты - можешь, а он - нет? Сама его тема говорит об обратном :)

PS: просто ошибка в последнем примере - не дописал нолик. По условию ясно же, что должно быть пять разрядов в числе.
   Злопчинский
 
10 - 02.11.16 - 23:46
Сильно смахивает на что-то с двоичным основанием,
 
 Рекламное место пустует
   Asmody
 
11 - 02.11.16 - 23:49
(0) Автор, ты разницу между числом и цифрой понимаешь?
   Злопчинский
 
12 - 02.11.16 - 23:56
(11) число не является цифрой, но  цифра сама по себе обозначает число, не придирайся
   GedKo
 
13 - 03.11.16 - 00:01
(12) вранье :)
   Йохохо
 
14 - 03.11.16 - 00:09
что то было, что при сдвиге бит переполнения устанавливался, 2^5 -х - 1 двигаем и вуаля
   Asmody
 
15 - 03.11.16 - 00:28
(12) шта?!
цифра ничего сама по себе не обозначает. цифра - это символ, крючок.
напротив, число - суть вещь. оно существует независимо от каких-то цифр.
   Злопчинский
 
16 - 03.11.16 - 00:38
(15) если у тебя нет символов обозначающих сущность ты не сможешь работать с этой сущностью
   Mauser
 
17 - 03.11.16 - 00:43
(12), (16) Ты еще скажи, что у числа есть позиция
   shpioleg
 
18 - 03.11.16 - 00:52
(0) Вроде работает
&НаКлиенте
Функция F(Знач X,Знач Y)
    Y = 5 - Y;
    Для ш = 0 по Y Цикл
        Остаток = X%10;
        X = (X - 1)/10;
    КонецЦикла;
    Возврат Остаток;
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
    Сообщить (F(X,Y));
КонецПроцедуры

   shpioleg
 
19 - 03.11.16 - 00:54
+(18) Верней
X = (X - Остаток)/10;
   Злопчинский
 
20 - 03.11.16 - 01:32
(18) некузяво
% - некошерная операция, не подходит по условиям задачи
   kuzyara
 
21 - 03.11.16 - 03:21
F = x & 1 << y
   wertyu
 
22 - 03.11.16 - 05:22
Функция F(Знач Х, Знач У)
    
    Перем Цифра;
    
    Для НЦ = 1 По 5 Цикл
        Множитель = 1;
        Для Степень = 1 По 5 - НЦ Цикл
            Множитель = Множитель * 10;
        КонецЦикла;
        //Множитель = Pow(10, 5 - НЦ);

        Х = Х - Множитель;
        Если Х >= 0 Тогда
            Цифра = 1;
        Иначе
            Цифра = 0;
            Х = Х + Множитель;
        КонецЕсли;
        Если НЦ = У Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат Цифра;
КонецФункции
   wertyu
 
23 - 03.11.16 - 05:26
пожалуй уберу "Прервать"

Функция F(Знач Х, Знач У)
    
    Перем Цифра;
    
    Для НЦ = 1 По У Цикл
        Множитель = 1;
        Для Степень = 1 По 5 - НЦ Цикл
            Множитель = Множитель * 10;
        КонецЦикла;
        //Множитель = Pow(10, 5 - НЦ);

        Х = Х - Множитель;
        Если Х >= 0 Тогда
            Цифра = 1;
        Иначе
            Цифра = 0;
            Х = Х + Множитель;
        КонецЕсли;
    КонецЦикла;
    Возврат Цифра;
КонецФункции
   d546
 
24 - 03.11.16 - 08:21
(20) Смотрим справку
Арифметические операции

В языке  определены следующие виды арифметических операций:

сложение
 (Оп1 + Оп2) 

вычитание 
 (Оп1 - Оп2)

умножение 
 (Оп1 * Оп2)
 
деление 
 (Оп1 / Оп2)
 
остаток от деления
 (Оп1 % Оп2) 
 
унарный минус
 (-Оп1)
   Ildarovich
 
25 - 03.11.16 - 10:56
Вот еще вариант:[CODE]Функция Ф(Х, У)
    Возврат ?(У < 2, 0 + (Х > 9999), Ф((Х - 10000 * (Х > 9999)) * 10, У - 1))
КонецФункции[/CODE]
   Ildarovich
 
26 - 03.11.16 - 10:57
+(25) ...
Функция Ф(Х, У)
    Возврат ?(У < 2, 0 + (Х > 9999), Ф((Х - 10000 * (Х > 9999)) * 10, У - 1))
КонецФункции

   Лефмихалыч
 
27 - 03.11.16 - 10:59
(0) почему у тебя
F(10110,1) = 1
и
F(1001,1) = 0
?
   Лефмихалыч
 
28 - 03.11.16 - 11:00
(0) log10() можно использовать?
   shpioleg
 
29 - 03.11.16 - 11:04
(27) У него со старших битов начинается. Если разрядность маленькая, то спереди нули. Я так понял...
   1nvertex
 
30 - 03.11.16 - 17:48
Во вы тут накодили! =)))
   1nvertex
 
31 - 03.11.16 - 17:48
(28) Не... нельзя
   1nvertex
 
32 - 03.11.16 - 17:49
(27) Да, все верно F(1001,1) = 0 потому что первое число отсутствует
   1nvertex
 
33 - 03.11.16 - 17:58
(23)  wertyu, работает!
 
 
   1nvertex
 
34 - 03.11.16 - 18:00
(26) Ildarovich, круто!!!
   1nvertex
 
35 - 03.11.16 - 18:09
(18) shpioleg - читер (%), зато самый скоростной =))
   1nvertex
 
36 - 03.11.16 - 18:15
Ildarovich, кинь контакт в личку, с меня угощение!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует