Если Счетчик%2 = 0 Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Непростое");
Продолжить;
КонецЕсли;
// для простого числа N нельзя найти такую пару чисел p и q
// что, p * q = N
Корень = sqrt(Счетчик);
ЦелаяЧастьКорня = Цел(Корень);
Если ЦелаяЧастьКорня = Корень Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Непростое");
Продолжить;
КонецЕсли;
ЧислоПростое = Истина;
Делитель = ЦелаяЧастьКорня;
Пока Делитель >= МинимальныйЧет Цикл
Если Счетчик%Делитель = 0 Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Непростое");
ЧислоПростое = Ложь;
Прервать;
КонецЕсли;
Делитель = Делитель - 1;
КонецЦикла;
Если ЧислоПростое Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Простое");
СчетчикПростыхЧисел = СчетчикПростыхЧисел + 1;
КонецЕсли;
КонецЦикла;
Сообщить("Всего простых чисел " + СчетчикПростыхЧисел);
// обращение к структуре
Сообщить(Числа.Число591);
Если ТекущаяДата() < ВремяНачалаРаботы ИЛИ ТекущаяДата() > ВремяОкончанияРаботы Тогда
Отказ = Истина;
Предупреждение("Вход в систему сегодня возможен с " + ВремяНачалаРаботы + " по " + ВремяОкончанияРаботы + "!");
Возврат;
КонецЕсли;
// выбор блюда
Меню = Новый СписокЗначений;
Меню.Добавить("Курица");
Меню.Добавить("Рыба");
Меню.Добавить("Мясо");
РезультатВыбора = Неопределено;
Пока РезультатВыбора = Неопределено Цикл
РезультатВыбора = Меню.ВыбратьЭлемент("Выберите блюдо...",Меню[0]);
Если Не РезультатВыбора = Неопределено Тогда
глОбед.Вставить(0,РезультатВыбора);
КонецЕсли;
Если Дата(Год(ВремяНачалаРаботы),Месяц(ВремяНачалаРаботы),День(ВремяНачалаРаботы),Час(ВремяЗавершенияРаботыСистемы),Минута(ВремяЗавершенияРаботыСистемы),Секунда(ВремяЗавершенияРаботыСистемы)) < ВремяОкончанияРаботы Тогда
Если Вопрос("Рабочий день еще не завершен - хотите закрыть программу?",РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Нет) = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Еще вопрос, посмотрел бегло ответ daray19. В процедуре числа, в структуру добавляется последний элемент л1 = 1000, при этом “К” увеличивается постоянно и пример тестовый, л1=3, л2=1, (л1/л2)-Цел(л1/л2)=0, вернет истину и тогда счетчик “к” увеличится, хотя он уже отличен к этому времени от 0, и опустив этот факт в стуктуру добавился бы элемент, Число3,Непростое Хотя оно простое… Но единственное значение которое попадет в стуктуру Число1000, Непростое….
При этом у меня вопрос, в цикле “Для” на последнем шаге когда Счетчик = 1000, при вставке Элемента Коллекции Стуктура с ключом “Число1 000” выдается сообщение об ошибке:”{МодульУправляемогоПриложения(104)}: Ошибка при вызове метода контекста (Вставить)
СпецСтруктура.Вставить(СтрокаЧисло, “НеПростое”);
по причине:
Задано неправильное имя атрибута структуры”. При цикле по 999 значений ошибки нет, с чем связана данная ошибка? И как произвести поиск в Структуре по ключу содержащемуся в переменной “Х”?
Если МассивВремя[0] > МассивВремя[1] И МассивВремя[0] < МассивВремя[2] Тогда
Если Вопрос("Вы уверены, что хотите закончить работу с программой в рабочее время?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
ИначеЕсли МассивВремя[0] > МассивВремя[2]Тогда
Предупреждение("До завтра!");
Возврат Ложь;
КонецЕсли;
В процедурах ПередначаломРаботыСистемы и ПередЗавершением РаботыСистемы расположен код, проверяющий соответствие текущего времени рабочему:
перем ДатаЗапуска;
Процедура ПередНачаломРаботыСистемы(Отказ)
ДатаЗапуска=ТекущаяДата();
ДатаВ=Дата(1,1,1,0,0,0);
ВремяЗапуска=Дата(1,1,1,Час(ДатаЗапуска),Минута(ДатаЗапуска),Секунда(ДатаЗапуска));
Если ВремяЗапуска<Дата(1,1,1,9,5,38) или ВремяЗапуска>Дата(1,1,1,18,11,42)тогда
Предупреждение("Работать нельзя!",5);
Отказ=истина
КонецЕсли;
КонецПроцедуры
Процедура ПередЗавершениемРаботыСистемы(Отказ)
ДатаВыхода=ТекущаяДата();
ВремяВыхода=Дата(1,1,1,Час(ДатаВыхода),Минута(ДатаВыхода),Секунда(ДатаВыхода));
Если НачалоДня(ДатаВыхода)=НачалоДня(ДатаЗапуска) и ВремяВыхода<Дата(1,1,1,18,11,42)
Тогда
Если Вопрос("Может ещё поработаем?",РежимДиалогаВопрос.ДаНет)= КодВозвратаДиалога.Да тогда
Отказ=истина;
КонецЕсли; КонецЕсли;
КонецПроцедуры
В процедуре ПриНачалеРаботыСистемы пользователю предоставляется выбор обеда, причем он не может ничего не выбрать, т.к. пока хотя бы один элемент не отемчен в цикле будет вновь и вновь вызываться окно выбора обедов, выбор обедов также сохраняется в массиве “Выбор”:
Процедура ПриНачалеРаботыСистемы()
Обеды = Новый СписокЗначений;
Выбор=Новый массив;
Обеды.Добавить("курица");
Обеды.Добавить("рыба");
Обеды.Добавить("мясо");
ВыбранОбед=ложь;
Пока Не ВыбранОбед цикл
Обеды.ОтметитьЭлементы("Выберите обед");
Для каждого Строка из Обеды цикл
Если Строка.Пометка Тогда
ВыбранОбед= Истина;
Выбор.Добавить(Строка.Значение);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
В следующей процедуре создается структура “Числа”, в ней два цикла, один из которых вложенный:
Процедура простое()
к=0;
Числа= Новый Структура ("Ключ, Значение");
Для л1=1 по 1000 цикл
Для л2=2 по л1 цикл
Если (л1/л2)-Цел(л1/л2)=0 тогда
к=к+1; КонецЕсли;
КонецЦикла;
КонецЦикла;
Если к>1 тогда
Числа.Вставить("Ключ", "Число"+л1);
Числа.Вставить("Значение", "Не простое");
Иначе
Числа.Вставить("Ключ", "Число"+л1);
Числа.Вставить("Значение", "простое");
КонецЕсли;
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
Перем ВремяНачалаРаботы,ВремяОкончанияРаботы;
Процедура ПростыеЧисла(Предел)
Числа = Новый Структура();
Числа.Вставить("Число" + 1,"Простое");
МинимальныйЧет = 2;
СчетчикПростыхЧисел = 1;
Для Счетчик = МинимальныйЧет По Предел Цикл
Если Счетчик%2 = 0 Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Непростое");
Продолжить;
КонецЕсли;
// для простого числа N нельзя найти такую пару чисел p и q
// что, p * q = N
Корень = sqrt(Счетчик);
ЦелаяЧастьКорня = Цел(Корень);
Если ЦелаяЧастьКорня = Корень Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Непростое");
Продолжить;
КонецЕсли;
ЧислоПростое = Истина;
Делитель = ЦелаяЧастьКорня;
Пока Делитель >= МинимальныйЧет Цикл
Если Счетчик%Делитель = 0 Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Непростое");
ЧислоПростое = Ложь;
Прервать;
КонецЕсли;
Делитель = Делитель - 1;
КонецЦикла;
Если ЧислоПростое Тогда
Числа.Вставить("Число" + Формат(Счетчик,"ЧГ=0"),"Простое");
СчетчикПростыхЧисел = СчетчикПростыхЧисел + 1;
КонецЕсли;
КонецЦикла;
Сообщить("Всего простых чисел " + СчетчикПростыхЧисел);
// обращение к структуре
Сообщить(Числа.Число591);
ЗначениеСвойства = 0;
Числа.Свойство("Число332",ЗначениеСвойства);
Сообщить(ЗначениеСвойства);
КонецПроцедуры
Процедура ПередНачаломРаботыСистемы(Отказ)
Если ТекущаяДата() < ВремяНачалаРаботы ИЛИ ТекущаяДата() > ВремяОкончанияРаботы Тогда
Отказ = Истина;
Предупреждение("Вход в систему сегодня возможен с " + ВремяНачалаРаботы + " по " + ВремяОкончанияРаботы + "!");
Возврат;
КонецЕсли;
// выбор блюда
Меню = Новый СписокЗначений;
Меню.Добавить("Курица");
Меню.Добавить("Рыба");
Меню.Добавить("Мясо");
РезультатВыбора = Неопределено;
Пока РезультатВыбора = Неопределено Цикл
РезультатВыбора = Меню.ВыбратьЭлемент("Выберите блюдо...",Меню[0]);
Если Не РезультатВыбора = Неопределено Тогда
глОбед.Вставить(0,РезультатВыбора);
КонецЕсли;
КонецЦикла;
ПростыеЧисла(1000);
КонецПроцедуры
Процедура ПередЗавершениемРаботыСистемы(Отказ)
ВремяЗавершенияРаботыСистемы = ТекущаяДата();
Если Дата(Год(ВремяНачалаРаботы),Месяц(ВремяНачалаРаботы),День(ВремяНачалаРаботы),Час(ВремяЗавершенияРаботыСистемы),Минута(ВремяЗавершенияРаботыСистемы),Секунда(ВремяЗавершенияРаботыСистемы)) < ВремяОкончанияРаботы Тогда
Если Вопрос("Рабочий день еще не завершен - хотите закрыть программу?",РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Нет) = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
глОбед = Новый Массив;
ВремяНачалаРаботы = Дата(Год(ТекущаяДата()),Месяц(ТекущаяДата()),День(ТекущаяДата()),9,5,38);
ВремяОкончанияРаботы = Дата(Год(ТекущаяДата()),Месяц(ТекущаяДата()),День(ТекущаяДата()),18,11,42);
Юрий, принято
Еще вопрос, посмотрел бегло ответ daray19. В процедуре числа, в структуру добавляется последний элемент л1 = 1000, при этом “К” увеличивается постоянно и пример тестовый, л1=3, л2=1, (л1/л2)-Цел(л1/л2)=0, вернет истину и тогда счетчик “к” увеличится, хотя он уже отличен к этому времени от 0, и опустив этот факт в стуктуру добавился бы элемент, Число3,Непростое Хотя оно простое… Но единственное значение которое попадет в стуктуру Число1000, Непростое….
При этом у меня вопрос, в цикле “Для” на последнем шаге когда Счетчик = 1000, при вставке Элемента Коллекции Стуктура с ключом “Число1 000” выдается сообщение об ошибке:”{МодульУправляемогоПриложения(104)}: Ошибка при вызове метода контекста (Вставить)
СпецСтруктура.Вставить(СтрокаЧисло, “НеПростое”);
по причине:
Задано неправильное имя атрибута структуры”. При цикле по 999 значений ошибки нет, с чем связана данная ошибка? И как произвести поиск в Структуре по ключу содержащемуся в переменной “Х”?
Проблема в неразрывном пробеле. Изучите эталонное решение.
Функция ВременныеИнтервалы()
МассивВремя = Новый Массив;
МассивВремя.Добавить(Дата('00010101') + (ТекущаяДата()- НачалоДня(ТекущаяДата())));
МассивВремя.Добавить('0001.01.01.09.05.38');
МассивВремя.Добавить('0001.01.01.18.11.42');
Возврат МассивВремя;
КонецФункции
Функция ПроверкаВремениВходаВКонфигурацию()
МассивВремя = ВременныеИнтервалы();
Если МассивВремя[0] < МассивВремя[1] Тогда
Предупреждение ("Рано запускаем");
глОбед = ВыборОбеда();
//Возврат Истина;
ИначеЕсли МассивВремя[0] > МассивВремя[2] Тогда
Предупреждение("Поздновато уже, идите домой!");
//Возврат Истина;
КонецЕсли;
КонецФункции // ПроверкаВремениВходаВКонфигурацию()
Функция ПроверкаВремениВыходаИзКонфигурации()
МассивВремя = ВременныеИнтервалы();
Если МассивВремя[0] > МассивВремя[1] И МассивВремя[0] < МассивВремя[2] Тогда
Если Вопрос("Вы уверены, что хотите закончить работу с программой в рабочее время?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
ИначеЕсли МассивВремя[0] > МассивВремя[2]Тогда
Предупреждение("До завтра!");
Возврат Ложь;
КонецЕсли;
КонецФункции
Процедура ПередНачаломРаботыСистемы(Отказ)
//Отказ = ПроверкаВремениВходаВКонфигурацию();
Числа();
КонецПроцедуры
Функция ВыборОбеда()
МассивБлюд = Новый Массив;
СписокБлюд = Новый СписокЗначений;
СписокБлюд.Добавить("Чай",,Ложь);
СписокБлюд.Добавить("Кофе",,Ложь);
СписокБлюд.Добавить("Борщ",,Ложь);
Если СписокБлюд.ОтметитьЭлементы("Констуктор обеда!") Тогда
Для каждого Элемент Из СписокБлюд Цикл
Если Элемент.Пометка = Истина Тогда
МассивБлюд.Добавить(Строка(Элемент));
КонецЕсли;
КонецЦикла;
Возврат МассивБлюд;
КонецЕсли;
ВыборОбеда();
КонецФункции
Процедура ПередЗавершениемРаботыСистемы(Отказ)
Отказ = ПроверкаВремениВыходаИзКонфигурации();
КонецПроцедуры
Функция Числа()
СпецСтруктура = Новый Структура;
Для Счетчик = 1 По 1000 Цикл
Если ПоискПростыхЧисел(Счетчик) Тогда
СтрокаЧисло = "Число" + Строка(Счетчик);
СпецСтруктура.Вставить(СтрокаЧисло, "Простое");
Иначе
СтрокаЧисло = "Число" + Строка(Счетчик);
СпецСтруктура.Вставить(СтрокаЧисло, "НеПростое");
КонецЕсли;
КонецЦикла;
Сообщить(СпецСтруктура.Число591);
КонецФункции // Числа()
Функция ПоискПростыхЧисел(Счетчик)
ФлагЧисла = Истина;
Для Сч = 1 По Счетчик Цикл
Если (Счетчик%Сч = 0) И (Счетчик <> Сч) И (Сч<>1) Тогда
ФлагЧисла = Ложь;
Возврат ФлагЧисла;
КонецЕсли;
КонецЦикла;
Возврат ФлагЧисла;
КонецФункции // ПоискПростыхЧисел(Счетчик)()
idspooler, принято.
В процедурах ПередначаломРаботыСистемы и ПередЗавершением РаботыСистемы расположен код, проверяющий соответствие текущего времени рабочему:
Процедура ПередНачаломРаботыСистемы(Отказ)
ДатаЗапуска=ТекущаяДата();
ДатаВ=Дата(1,1,1,0,0,0);
ВремяЗапуска=Дата(1,1,1,Час(ДатаЗапуска),Минута(ДатаЗапуска),Секунда(ДатаЗапуска));
Если ВремяЗапуска<Дата(1,1,1,9,5,38) или ВремяЗапуска>Дата(1,1,1,18,11,42)тогда
Предупреждение("Работать нельзя!",5);
Отказ=истина
КонецЕсли;
КонецПроцедуры
Процедура ПередЗавершениемРаботыСистемы(Отказ)
ДатаВыхода=ТекущаяДата();
ВремяВыхода=Дата(1,1,1,Час(ДатаВыхода),Минута(ДатаВыхода),Секунда(ДатаВыхода));
Если НачалоДня(ДатаВыхода)=НачалоДня(ДатаЗапуска) и ВремяВыхода<Дата(1,1,1,18,11,42)
Тогда
Если Вопрос("Может ещё поработаем?",РежимДиалогаВопрос.ДаНет)= КодВозвратаДиалога.Да тогда
Отказ=истина;
КонецЕсли; КонецЕсли;
КонецПроцедуры
В процедуре ПриНачалеРаботыСистемы пользователю предоставляется выбор обеда, причем он не может ничего не выбрать, т.к. пока хотя бы один элемент не отемчен в цикле будет вновь и вновь вызываться окно выбора обедов, выбор обедов также сохраняется в массиве “Выбор”:
Обеды = Новый СписокЗначений;
Выбор=Новый массив;
Обеды.Добавить("курица");
Обеды.Добавить("рыба");
Обеды.Добавить("мясо");
ВыбранОбед=ложь;
Пока Не ВыбранОбед цикл
Обеды.ОтметитьЭлементы("Выберите обед");
Для каждого Строка из Обеды цикл
Если Строка.Пометка Тогда
ВыбранОбед= Истина;
Выбор.Добавить(Строка.Значение);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
В следующей процедуре создается структура “Числа”, в ней два цикла, один из которых вложенный:
к=0;
Числа= Новый Структура ("Ключ, Значение");
Для л1=1 по 1000 цикл
Для л2=2 по л1 цикл
Если (л1/л2)-Цел(л1/л2)=0 тогда
к=к+1; КонецЕсли;
КонецЦикла;
КонецЦикла;
Если к>1 тогда
Числа.Вставить("Ключ", "Число"+л1);
Числа.Вставить("Значение", "Не простое");
Иначе
Числа.Вставить("Ключ", "Число"+л1);
Числа.Вставить("Значение", "простое");
КонецЕсли;
КонецПроцедуры;
Darya19, принято.