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