Vovka
14.06.2004, 18:00
Здравствуйте коллеги!
Возможно кто сталкивался с проблемами интеграции SCCS 5.0/DataBase/CallPilot подскажите как решить задачку...
Поясню конечную цель для чего это всё нужно:
Не известное значение возвращаемое в скрипт из базы данных нужно разложить на отдельные цифры и проговорить каждую в отдельности…
Если возвращённое значение равно 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
Теперь даже и не знаю нужно ли нам определять само число либо либо сразу пытаться разложить его по цифрам…
Возможно ли в принципе имея указанный набор операторов без гимора разложить n-ое число на отдельные цифры?
Конечно получится тупой IVR но пока нет выбора...
Не силён в области программирования поэтому обращаюсь к светлым умам.

Заранее благодарен за совет.

PhoneMan
15.06.2004, 09:38
Если вторая цифра =3 вернуть false

Если вторая цифра =9 вернуть true и проговорить цифру «девять»


1. Не совсем понятно, куда и зачем "вернуть" false/true , может достаточно просто "проговорить значения" каждого разряда?

2. Структуры типа If .. Else.. End If присутствуют?

Vovka
15.06.2004, 10:51
Спасибо за отклик!

1. Не совсем понятно, куда и зачем "вернуть" false/true , может достаточно просто "проговорить значения" каждого разряда?

Имеется в веду что если предыдущее условие не выполняется то выполняется следующая по списку операция до момента выполнения условия...


2. Структуры типа If .. Else.. End If присутствуют?
Да такие операции допустимы типа (If-Then-Else-End If)

Братья програмёры говорят что на С++ или Delphi такая задача решается просто... а вот как это выполнить без использования специализированных функций большой ???? (для меня :)) )

PhoneMan
15.06.2004, 11:30
Возможно ли в принципе имея указанный набор операторов без гимора разложить n-ое число на отдельные цифры?

Задача решаема imho, если найти способ выделения целой части числа. Насчет "без гимора", это вряд ли...

IMHO проще дополнительно "нагрузить" базу данных, обычно там есть какой-никакой более развитый язык. Например, заставить ее в ответ на запрос возвращать в скрипт не одно значение, а последовательность целых чисел, первое из которых будет количеством значимых разрядов, а дальше сами цифры разрядов.

Urri
15.06.2004, 12:03
PhoneMan в целом прав, задача разобрать число по цифрам. Есть 2 пути:
1. Нагрузить БД, шоб она разбирала
2. Если есть операторы больше-равно, меньше-равно и т.д., то с помощью последовательного деления на 10, 100 и т.д. (в зависимости от диапазона возможных чисел) можно разобрать. Но скрипт получится немаленький.

fara
15.06.2004, 16:30
У нас эту работу выполняет процедура БД. В SCCS возвращаются ID соответствующие переменным SCCS , кот в свою очередь соответствуют ID фрагментов в CP.
Удачи.