Files
2021-03-14 10:47:15 -05:00

55 lines
2.3 KiB
Plaintext

#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура НайтиЧисло(Команда)
ИскомоеЧисло = 75;
Сообщение = Новый СообщениеПользователю;
КоличествоПопыток = БинарныйПоиск(ИскомоеЧисло);
Если КоличествоПопыток = Неопределено Тогда
ТекстСообщения = НСтр("ru = 'Число не входит в диапозон 1..100'");
Иначе
ШаблонСообщения = НСтр("ru = 'Число %1 найдено за %2 попыток'");
ТекстСообщения = СтрШаблон(ШаблонСообщения, ИскомоеЧисло, КоличествоПопыток);
КонецЕсли;
Сообщение.Текст = ТекстСообщения;
Сообщение.Сообщить();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Функция БинарныйПоиск(ИскомоеЧисло)
Массив = Новый Массив;
Для Счетчик = 1 По 100 Цикл
Массив.Добавить(Счетчик);
КонецЦикла;
КоличествоПопыток = 0;
МинимальноеЧисло = Массив[0];
МаксимальноеЧисло = Массив[Массив.Количество() - 1];
Пока МинимальноеЧисло <= МаксимальноеЧисло Цикл
КоличествоПопыток = КоличествоПопыток + 1;
НайденноеЧисло = Цел((МинимальноеЧисло + МаксимальноеЧисло) / 2);
Если НайденноеЧисло = ИскомоеЧисло Тогда
Возврат КоличествоПопыток;
ИначеЕсли НайденноеЧисло > ИскомоеЧисло Тогда
МаксимальноеЧисло = НайденноеЧисло - 1;
Иначе // НайденноеЧисло < ИскомоеЧисло
МинимальноеЧисло = НайденноеЧисло + 1;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
#КонецОбласти