Задача с одним неизвестным...
1634
6
Здравствуйте!
Кто подскажет чайнику каким образом можно решить такую задачу (в данном случае без привязки к среде программирования):
Нашему приложению возвращается целое число, количество цифр которого не известно. Просмотреть возвращённое значение мы не можем (приложение не имеет такой возможности)... В нашем распоряжении доступны только логические и математические операторы, которые могут сравнивать возвращённое значение с какими либо значениями либо применять математические операции.
Нам необходимо определить неизвестное возращённое значение и потом через IVR проговорить...
Существует ли стандартный алгоритм который оптимально сможет вычислить возвращённое неизвестное значение?
Возможно кто подскажит куда пойти мне с моим вопросом :)), не очень далеко только если можно...
Заранее благодарен за отклик.
Кто подскажет чайнику каким образом можно решить такую задачу (в данном случае без привязки к среде программирования):
Нашему приложению возвращается целое число, количество цифр которого не известно. Просмотреть возвращённое значение мы не можем (приложение не имеет такой возможности)... В нашем распоряжении доступны только логические и математические операторы, которые могут сравнивать возвращённое значение с какими либо значениями либо применять математические операции.
Нам необходимо определить неизвестное возращённое значение и потом через IVR проговорить...
Существует ли стандартный алгоритм который оптимально сможет вычислить возвращённое неизвестное значение?
Возможно кто подскажит куда пойти мне с моим вопросом :)), не очень далеко только если можно...
Заранее благодарен за отклик.
craxx
рыжий котэ
Есть такой способ:
//*******************************************
Констатнты СамоеБольшоеЧисло,СамоеМаленькоеЧисло;
Переменные ИскомоеЧисло, НижняяГраница, ВерхняяГраница;
НижняяГраница=СамоеМаленькоеЧисло;
ВерхняяГраница=СамоеБольшоеЧисло;
Пока ИскомоеЧислоВерхняяГраница) Тогда
НижняяГраница=ВерхняяГраница;
ВерхняяГраница=ВерхняяГраница*2;
Иначе Если (ИскомоеЧисло=ВерхняяГраница) Тогда
Вернуть(ВерхняяГраница);
Иначе Если (ИскомоеЧисло=НижняяГраница) Тогда
Вернуть(НижняяГраница);
КонецЕсли;
КонецЦикла;
Вот такой в общих чертах алгоритм.
Надеюсь что доступно.
//*******************************************
Констатнты СамоеБольшоеЧисло,СамоеМаленькоеЧисло;
Переменные ИскомоеЧисло, НижняяГраница, ВерхняяГраница;
НижняяГраница=СамоеМаленькоеЧисло;
ВерхняяГраница=СамоеБольшоеЧисло;
Пока ИскомоеЧислоВерхняяГраница) Тогда
НижняяГраница=ВерхняяГраница;
ВерхняяГраница=ВерхняяГраница*2;
Иначе Если (ИскомоеЧисло=ВерхняяГраница) Тогда
Вернуть(ВерхняяГраница);
Иначе Если (ИскомоеЧисло=НижняяГраница) Тогда
Вернуть(НижняяГраница);
КонецЕсли;
КонецЦикла;
Вот такой в общих чертах алгоритм.
Надеюсь что доступно.
Спасибо за ответ!
Немного поясню конечную цель для чего это всё нужно:
Не известное значение переменной нужно разложить на отдельные цифры и проговорить каждую в отдельности…
Если возвращённое значение равно 195, то нужно вычислить что первая цифра равна 1, вторая 9, третья 5 чтобы произнести заранее записанные (десять) голосовые фрагменты (Один – девять – пять). Повторюсь что количество цифр заранее не известно и нужен алгоритм для всех возможных комбинаций цифр. (ну или до миллиона хотя бы)
Если первая цифра =1 вернуть true и проговорить число «Один»
Если вторая цифра =0 вернуть false
Если вторая цифра =1 вернуть false
Если вторая цифра =2 вернуть false
Если вторая цифра =3 вернуть false
…
Если вторая цифра =9 вернуть true и проговорить цифру «девять»
Данный анализ проделать со всеми цифрами и проговорить их правильные значения.
В нашем распоряжении только следующий набор операторов:
parentheses ( )
multiplication * and division /
addition + and subtraction –
comparison expressions =, < >, >, =, < =
logical expressions Not, And, Or
If-Then-Else-End If
Теперь даже и не знаю нужно ли нам определять само число либо либо сразу пытаться разложить его по цифрам…
Возможно ли в принципе имея указанный набор операторов без гимора разложить n-ое число на отдельные цифры? В идеале конечно алгоритм должен позвольть проговаривать не по отдельной цифре а с учётом десятков, сотен, единиц и т.д.
Не силён в области программирования поэтому обращаюсь к светлым умам.
Заранее благодарен за совет.
Немного поясню конечную цель для чего это всё нужно:
Не известное значение переменной нужно разложить на отдельные цифры и проговорить каждую в отдельности…
Если возвращённое значение равно 195, то нужно вычислить что первая цифра равна 1, вторая 9, третья 5 чтобы произнести заранее записанные (десять) голосовые фрагменты (Один – девять – пять). Повторюсь что количество цифр заранее не известно и нужен алгоритм для всех возможных комбинаций цифр. (ну или до миллиона хотя бы)
Если первая цифра =1 вернуть true и проговорить число «Один»
Если вторая цифра =0 вернуть false
Если вторая цифра =1 вернуть false
Если вторая цифра =2 вернуть false
Если вторая цифра =3 вернуть false
…
Если вторая цифра =9 вернуть true и проговорить цифру «девять»
Данный анализ проделать со всеми цифрами и проговорить их правильные значения.
В нашем распоряжении только следующий набор операторов:
parentheses ( )
multiplication * and division /
addition + and subtraction –
comparison expressions =, < >, >, =, < =
logical expressions Not, And, Or
If-Then-Else-End If
Теперь даже и не знаю нужно ли нам определять само число либо либо сразу пытаться разложить его по цифрам…
Возможно ли в принципе имея указанный набор операторов без гимора разложить n-ое число на отдельные цифры? В идеале конечно алгоритм должен позвольть проговаривать не по отдельной цифре а с учётом десятков, сотен, единиц и т.д.
Не силён в области программирования поэтому обращаюсь к светлым умам.
Заранее благодарен за совет.
craxx
рыжий котэ
А.. понятно. Короче тогда так.
(Операция % - вычисление остатка от целочисленного деления)
Переменные НачальноеЗначение, ИскомоеЧисло, Делитель, МассивЦифр[ ],НН;
ИскомоеЧисло=НачальноеЗначение;
НН=1;
Делитель=10;
Пока (ИскомоеЧисло%Делитель0) ИЛИ (ИскомоеЧисло/Делитель0) Цикл
МассивЦифр[НН]=ИскомоеЧисло%Делитель;
ИскомоеЧисло=ИскомоеЧисло/Делитель;
НН=НН+1;
КонецЦикла;
Таким образом на выходе получаем массив цифр с представлением числа любой длины, но цифры в нем располагаются в обратном порядке, т.е. например число 1587 представлено там как 7851, т.е перевернутым.
Надеюсь, рассуждения понятны.
(Операция % - вычисление остатка от целочисленного деления)
Переменные НачальноеЗначение, ИскомоеЧисло, Делитель, МассивЦифр[ ],НН;
ИскомоеЧисло=НачальноеЗначение;
НН=1;
Делитель=10;
Пока (ИскомоеЧисло%Делитель0) ИЛИ (ИскомоеЧисло/Делитель0) Цикл
МассивЦифр[НН]=ИскомоеЧисло%Делитель;
ИскомоеЧисло=ИскомоеЧисло/Делитель;
НН=НН+1;
КонецЦикла;
Таким образом на выходе получаем массив цифр с представлением числа любой длины, но цифры в нем располагаются в обратном порядке, т.е. например число 1587 представлено там как 7851, т.е перевернутым.
Надеюсь, рассуждения понятны.
Есть такой способ:если не ошибаюсь, он называется "метод половинного деления"
только, кажется, алгоритм Вы как-то усложнили - достаточно двух переменных...
Да просто некогда особо было вылизывать алгоритм, так, привел общую схему.
ТОП 5
2
4