diff --git a/01_introduction_to_algorithms/1C/Module.bsl b/01_introduction_to_algorithms/1C/Module.bsl new file mode 100644 index 0000000..9f6f054 --- /dev/null +++ b/01_introduction_to_algorithms/1C/Module.bsl @@ -0,0 +1,54 @@ + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура НайтиЧисло(Команда) + ИскомоеЧисло = 75; + Сообщение = Новый СообщениеПользователю; + + КоличествоПопыток = БинарныйПоиск(ИскомоеЧисло); + + Если КоличествоПопыток = Неопределено Тогда + ТекстСообщения = НСтр("ru = 'Число не входит в диапозон 1..100'"); + Иначе + ШаблонСообщения = НСтр("ru = 'Число %1 найдено за %2 попыток'"); + ТекстСообщения = СтрШаблон(ШаблонСообщения, ИскомоеЧисло, КоличествоПопыток); + КонецЕсли; + + Сообщение.Текст = ТекстСообщения; + Сообщение.Сообщить(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Функция БинарныйПоиск(ИскомоеЧисло) + + Массив = Новый Массив; + + Для Счетчик = 1 По 100 Цикл + Массив.Добавить(Счетчик); + КонецЦикла; + + КоличествоПопыток = 0; + МинимальноеЧисло = Массив[0]; + МаксимальноеЧисло = Массив[Массив.Количество() - 1]; + Пока МинимальноеЧисло <= МаксимальноеЧисло Цикл + КоличествоПопыток = КоличествоПопыток + 1; + НайденноеЧисло = Цел((МинимальноеЧисло + МаксимальноеЧисло) / 2); + Если НайденноеЧисло = ИскомоеЧисло Тогда + Возврат КоличествоПопыток; + ИначеЕсли НайденноеЧисло > ИскомоеЧисло Тогда + МаксимальноеЧисло = НайденноеЧисло - 1; + Иначе // НайденноеЧисло < ИскомоеЧисло + МинимальноеЧисло = НайденноеЧисло + 1; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +#КонецОбласти