Имя: Пароль:
1C
1С v8
Нужна задачка, которую можно сделать только бесконечным циклом
,
0 rutony
 
23.09.11
10:42
Без рекурсий. Без счетчиков.
7 SeregaMW
 
23.09.11
10:49
(4) Месть бухгалтерии за недоплаченную зарплату )))
8 aleks-id
 
23.09.11
10:50
подсчет молекул водорода во вселенной не?
9 extrim-style
 
23.09.11
10:52
число пи рассчитай
10 Stim213
 
23.09.11
10:53
ЗППрограммиста = ПолучитьЗППрограммиста();
отстатыщ = 100000;
Пока ЗП <> Отстатыщ Цикл
отстатыщ = ?(ПолучитьЗППрограммиста() = 100000,отстатыщ*2,отстатыщ);
КонецЦикла;
11 zak555
 
23.09.11
10:53
разложение в ряд
12 Stim213
 
23.09.11
10:54
Пока ЗППрограммиста <> Отстатыщ Цикл
13 zak555
 
23.09.11
10:54
разложение  в ряд функции экспоненты около точки 0 =)
14 jump if zero
 
23.09.11
10:54
на шахаматную доске
на одну клетку кладем одно зернышко пшеницы , на другую два зернышка, на третью в 2 раза больше чем на втроую и т.д. ,сколько зернышек будет на последней клетке шахматной доски
15 zak555
 
23.09.11
10:55
фигню сомтрозил в (13) =)
16 SeraFim
 
23.09.11
10:55
1. Нанести шампунь на влажные волосы
2. вспенить
3. смыть
4. повторить
17 Leksus
 
23.09.11
10:58
(0) Подсчет размера множества натуральных чисел
18 andrewks
 
23.09.11
10:59
(9) если только _абсолютно точно_
(17) _без_ счётчиков

(0)
задача: обеспечить бесконечный вывод слова "Пятница!" в область сообщений.

решение:
Пока Истина Цикл
Сообщить("Пятница!");
КонецЦикла;
19 rutony
 
23.09.11
11:12
Да, просто спор образовался, на ящик пива. Что любую задачу можно реализовать без бесконечного цикла.
Я уверен что нет, не любую.

Вот и нужен пример.
20 aleks-id
 
23.09.11
11:18
(19) любую
21 Kookish
 
23.09.11
11:18
(19) Зря ты так уверен. Бесконечный цикл должен когда-то закончиться. Для этого нужно, чтобы выполнилось какое-то условие. В зависимости от этого условия можно присвоить то или иное значение какой-нибудь переменной. Соответственно, можно то же самое получить при помощи цикла с условием.
Но ведь тут же не принято признавать, что ты не прав, не так ли?
22 Axel2009
 
23.09.11
11:20
(21) имеется ввиду что без
Пока Истина Цикл не обойтись
типа любую можно конвертнуть в определенный цикл от и до
23 H A D G E H O G s
 
23.09.11
11:21
Обработка очереди сообщений окна Windows - вот вам бесконечный цикл.
24 H A D G E H O G s
 
23.09.11
11:21
Никогда окна на чистом API не писали штоле?
25 rutony
 
23.09.11
11:25
(1)
Не вижу ни одного примера который нельзя было сделать бы обычной рекурсией...

(20) (21)
Речь о конструкции Пока Истина Цикл, понятно что она когда то завершится, но нужно что бы шапка была именно такая.

(23)(24) Нужен 1с, другие языки не подойдут

Пока в голову пришла идея только про обработку ответа HTTPСоединения, но задача на слабую троечку...
26 Axel2009
 
23.09.11
11:28
(25) вопрос ставится в быстродействии? или типа в 100 раз дольше работает, но можно обойтись без бесконечного? =)
27 rutony
 
23.09.11
11:33
(26) Вопрос в невозможности без него обойтись к каком то случае.
28 Axel2009
 
23.09.11
11:36
(27) ну тогда скорее всего проиграл ящик пива..
29 PR
 
23.09.11
11:36
(0) Такой нет.
30 PR
 
23.09.11
11:37
(19) Уверен, так придумай :))
31 Kookish
 
23.09.11
11:37
(25) Еще раз внимательно прочитай (21). Я понимаю, там много букв, но все-таки постарайся.

Пока Истина Цикл
 ...
 Если Условие Тогда
   Прервать;
 КонецЕсли;
КонецЦикла;

ВСЕГДА можно заменить на

Перем = 1;
Пока Перем = 1 Цикл
 ...
 Если Условие Тогда
   Перем = 0;
 КонецЕсли;
КонецЦикла;
32 PR
 
23.09.11
11:39
(31) Это два бесконечных цикла :))
33 Lama12
 
23.09.11
11:41
(0)Попробуй рекурсию заменить на цикл. Любая рекурсия может быть заменена на цикл. Вот там и будешь видеть применение.
34 mikeA
 
23.09.11
11:42
(31) это вопрос семантики. по-моему с точки зрения условия (0) данные конструкции идентичны. да они так и выглядят.
35 Kookish
 
23.09.11
11:45
(32) Тогда что такое не бесконечный цикл? Цикл со счетчиком? А цикл "Пока Условие Цикл" автоматически считать бесконечным?
36 Lama12
 
23.09.11
11:45
(33) Условие "только бесконечным циклом" - вытекает из того, что рекурсию нельзя использовать когда ограничена память.
37 rutony
 
23.09.11
11:46
(31) -> (25)
Речь про нормально синтаксически оформленный код, а не "индийский". Я почему то более чем уверен, что Вы так не пишите. Так что давайте не будет впадать в крайности.

(36) +1, все к это и сводиться, нужен именно такой пример.
38 Inform
 
23.09.11
11:46
(0) Попробуй в синтакс-помощнике поискать (именно поиском):
"Пока Истина Цикл"

Вот самое простое например:

Пока Истина Цикл
   ЭлементыФормы.Надпись.Значение = ТекущаяДата();
   ОбработкаПрерыванияПользователя();
КонецЦикла;

P.S.: Половина ящика с тебя :)
39 rutony
 
23.09.11
11:52
(38) Отличный пример))
40 aleks-id
 
23.09.11
11:54
я надеюсь что автора (38) уже поперли оттуда? ))
41 aleks-id
 
23.09.11
11:56
(31) твой гомнокод можно легко заменить на
Пока НЕ Условие Цикл
...
КонецЦикла;
42 Kookish
 
23.09.11
11:56
Чувствую, начинает пахнуть холиваром. Предлагаю вам с друзьями остаться при своих и раздавить пиво в теплой дружеской обстановке. (39)
43 rutony
 
23.09.11
11:59
(41) Не "Твой гомнокод", а фирмы 1С, это вырезка из справки.

Если ты так реализуешь бесконечный цикл, мне тебя жаль.

Думаю тема, закрыта, не стоит ее развивать.
44 Inform
 
23.09.11
11:59
(40) за что?
45 PR
 
23.09.11
11:59
(35) IMHO
Бесконечный цикл - это цикл, который будет выполняться бесконечно, если в его теле ничего не делать, кроме заранее предусмотренного изменения счетчика цикла.

Бесконечный цикл
Счетчик = 0;
Пока Счетчик = 0 Цикл
Если ТемператураНаУлице() > 10 Тогда
Счетчик = 1;
КонецЕсли;
КонецЦикла;

Конечный цикл
Счетчик = 0;
Пока Счетчик = 0 Цикл
Счетчик = Счетчик + 1;
КонецЦикла;
46 aleks-id
 
23.09.11
12:00
(43) ты бы для начала поглядел об чем я
47 aleks-id
 
23.09.11
12:02
(45) еще один гомнокодер

Пока НЕ ТемператураНаУлице() > 10 Цикл
...трампапам...
КонецЦикла;
48 rutony
 
23.09.11
12:04
(46) Сорри, думал Вы про (38)
49 Sserj
 
23.09.11
12:04
(25) Расчет статистики генератора случайных чисел, через сколько шагов получения случайного числа в определенном диапазоне будут выданы повторяющиеся значения.
50 alxxsssar
 
23.09.11
12:07
вижу только одно применение бесконечного цикла - показывать что то на форме, например температуру или текущее время, с обращением к внешнему событию. Другие задачи все равно должны выводить результат, а значит циклы должны рано-поздно заканчиваться. ИМХО бесконечный цикл этому противоречит.
51 Axel2009
 
23.09.11
12:07
(49) Пока Не СписокЗначений.НайтиПоЗначению(СлучайноеЧисло) = Неопределено Цикл
52 Sserj
 
23.09.11
12:10
(51) Ну так он фактически бесконечный, потому что СписокЗначений не определен завомо и может вообще никогда не найтись, если числа бесконечно большие и генератор бесконечно не повторяющийся :)

А вообще по сути любой сетевой сервер, ожидающий соединения висит в бесконечном цикле, пока к нему не постучатся или не завершат работу.
53 aleks-id
 
23.09.11
12:11
(50) для этого существует ПодключитьОбработчикОжидания
55 Fragster
 
гуру
23.09.11
12:13
познание бесконечности требует бесконечного времени, а потому работай, не работай - всё едино (с) АБС
56 Sserj
 
23.09.11
12:14
(53) О блин истинный 1С-овец :)
А обработчик ожидания или таймер как работает? Уж не в бесконечном ли цикле он запрашивает время?
57 PR
 
23.09.11
12:14
(56) LOL :))
58 y22-k
 
23.09.11
12:18
(56) он имел ввиду что толку от формы открытой с таким колдом все висеть будет
59 alxxsssar
 
23.09.11
12:21
(53) это понятно, просто единственный возможный вариант задачи по моему
60 aleks-id
 
23.09.11
12:24
(56) открой для себя волшебный и удивительный мир прерываний
61 Sserj
 
23.09.11
12:30
(60) Да конечно, такой волшебный прям как этот форум :)
А кто же бесконечно ходит и смотрит уж не пора ли разбудить прерванный поток то?

А вообще кстати любую рекурсивная программа может запросто упасть, все зависит только от количества свободной памяти, и вообще то это накладно, постоянно копировать области память, так что бесконечный цикл просто быстрее и эффективнее рекурсии.
62 PR
 
23.09.11
12:33
(61) Дружище, почитай про то, что такое процессор и как он работает :))
63 aleks-id
 
23.09.11
12:40
(61) хоть бы книжки почитал, прежде чем так позориться
64 Sserj
 
23.09.11
12:43
(62)(63) Не пытайтесь показаться сверх умными дружищи :)
Как минимум азы схемотехники мы все проходили и как оно там работает на физическом уровне все прекрасно знаем.
Но неужели вы забыли что мы работаем над софтовыми задачами а не над железными, да еще в замечательной среде виндовз, которая нифига вам не даст работать с железом на прямую, она сама там чего то напрерывается а все ваши процессы висят в очереди и тупо постоянно опрашиваются когда он там должен проснуться и если наступило(прошло) время просыпания поставятся в поток выполнения.
65 EvgeniuXP
 
23.09.11
12:43
при активации вкладки активировать вкладку :)
66 aleks-id
 
23.09.11
12:45
(64) так вот опрашиваются они как раз через те же прерывания, но никак не в бесконечном цикле
67 Sserj
 
23.09.11
12:56
(66) "Через прерывания" чего именно? Где именно планируются эти прерывания в "железе" или таки есть некий диспетчер у операционки, который вечно обходит таблицу процессов и решает кому сейчас пойти на выполнение.
68 PR
 
23.09.11
13:06
(64) Прочитай (63) _вдумчиво_, он прав.
69 PR
 
23.09.11
13:07
(67) Пля, у процессора есть _железячная_ поддержка прерываний, которая используется операционкой. Почитай книжки.
70 Sserj
 
23.09.11
13:12
(69) У процессора есть и что это конкретно дает приложениям запущенным в операционной системе?
Какая программа в среде виндовз кроме драйверов работающих в режиме ядра может напрямую управлять этими прерываниями?
Все процессы включены в некую таблицу в памяти операционки, которую вечно обходит некий диспетчер и решает запускать их или нет.
71 PR
 
23.09.11
13:15
(70) Почитай книжки.
72 Ненавижу 1С
 
гуру
23.09.11
13:16
определение "бесконечного цикла" дайте
73 vmv
 
23.09.11
13:20
(0) вопрос дурацки поставлен.

задачи решают не бесконечным циклом, а циклом без итератора.

Вот так задал бы вопроос я

Нужна задачка, которую можно сделать только циклом без итератора
74 fisher
 
23.09.11
13:20
(72) Цикл, завершение которого не предусмотрено в самом операторе цикла.
75 Sserj
 
23.09.11
13:20
(71) Читал, много, могу даже направление определить - тематика "диспетчер операционной системы". И что даже больше скажу - глядел в иходниках древней версии линуксового ядра на предмет изучения кокраз этого самого диспетчера. Ну так не поверишь - обычный бесконечный цикл.
76 Krendel
 
23.09.11
13:22
(73) Часы разве не бесконечным циклом работают?
77 ado
 
23.09.11
13:26
(19) Ты попал на пиво: wiki:Теорема_Бёма_%E2%80%94_Якопини
78 Ненавижу 1С
 
гуру
23.09.11
13:28
(74) такая задача не сможет завершится (если конечно войдет в цикл)
79 fisher
 
23.09.11
13:29
(76) Не. Аппаратная схема таймера генерит аппаратные прерывания, при обработке которых и происходит изменение времени компа. Можно сказать, что таймер на уровне аппаратной реализации работает в бесконечном цикле. А компьютерное время - нет.
80 Krendel
 
23.09.11
13:31
(79) Сделай програмное прерывание на ассемблеере или это нереально?
81 aleks-id
 
23.09.11
13:33
(70) объясняю на пальцах. пишем в программе код, который обрабатывается при наступлении некоего события (в нашем случае прерывания) и забываем про него, потому что этот код выполнится обязательно при наступлении события. понимаешь? не надо в цикле ничего обходить.
82 aleks-id
 
23.09.11
13:35
(79) таймер не работает в цикле. таймер тупо "тикает", ибо цикл подразумевает собой наличие конструкции jmp begin
83 aleks-id
 
23.09.11
13:36
(75) код в студию
84 Sserj
 
23.09.11
13:48
(80) Винда не даст физически запустить приложение обращающееся к железу на прямую. Хотя можешь конечно запустить вне винды и вообще вне операционки, но пользы от этого не много.

(81) Так операционка будет просто за место твоего приложения в цикле что-то там обходить, а по сути любое приложение это расширение операционки, потому они и называются "приложения к операционной системе", а сокращенно "приложение", так что по сути твое расширение к операционной системе будет просто использовать ее бесконечные циклы.

(83) cd /usr/src и читать, на всю жизнь хватит, это было не меньше 10 лет назад, сейчас уже нет, просто в памяти отложилось.
85 Sserj
 
23.09.11
13:53
+(84) Можно точнее так:

cd /usr/src/sys/kern/Attic/sched_core.c
86 aleks-id
 
23.09.11
13:54
(81) ясен пень, если операционка написана косоруким гомнокодером, то она будет в цикле все обходить. что касается невозможности запуска приложения, которое обращается напрямую к железу, то тут ты тоже облажался, ибо драйвер устройства по сути своей тоже является приложением.
87 fisher
 
23.09.11
13:55
(80) Ничего не понял. Зачем мне делать программное прерывание и для чего? Программные прерывания - это всего лишь удобный способ вызова системных подпрограмм, которые удобно использовать в разных программах.
88 Sserj
 
23.09.11
13:57
(86) Драйвер не является "обычным" приложением, он работает в режиме ядра, это несколько меняет для него правила игры. И я об этом уже писал в (70)
89 aleks-id
 
23.09.11
13:58
(86) к (84)
90 aleks-id
 
23.09.11
14:00
(88) тоесть в (70) ты не веришь, что обычное приложение, сосущее на третьем кольце, может работать с прерываниями???
91 Sserj
 
23.09.11
14:13
(90) Именно это я и говорю, обычные приложения работающие в виндовз (заметьте именно виндовз) не имеют доступа к физическому оборудованию. Все идет только через API, а вот как это реализованно с той стороны этого самого АПИ большой вопрос, но не думаю что планировщик винды очень сильно идеологически отличается от юниксовых.
92 aleks-id
 
23.09.11
14:35
(91) а зачем приложению иметь доступ к оборудованию? я где-то об этом говорил? и кто мешает приложению в процессе запуска и инициализации задействовать драйвер?
93 fisher
 
23.09.11
15:30
Народ. Вы как в той притче про слепых и слона.
Хоть бы не позорились.
94 Steel_Wheel
 
23.09.11
15:35
(0) Симулятор жизни не предлагать?
95 vladenoff
 
23.09.11
15:45
Использую:

Пока Истина Цикл
....
Если <Условие> Тогда
прервать;
КонецЕсли;
КонецЦикла

использую, когда условие повторного повторения (вхождение в цикл) должно проверяться в конце алгоритма самого цикла. Это обеспечит их выполнения хотя бы раз.

В паскале были конструкции "While do..." и "reaped until", вот второй конструкции у 1С нету. Её заменяю "Пока Истина Цикл
...."

заменить можно, но наверное гемора больше. Пришлось бы, наверное, указывать булевую переменную, типа "ПрошлоРазЦикл".
96 ado
 
23.09.11
16:02
(95) Больше, не больше, но, если код не твой -- задересси условие выхода искать. Лучше так:


Повторять = Истина;
Пока Повторять Цикл
...........
   Если <Условие> Тогда
       Повторять = Ложь;
   КонецЕсли;
КонецЦикла;
97 ado
 
23.09.11
16:06
Впрочем, вопрос то не в том, как лучше. Вопрос в том, есть ли такая задача, для которой условие(я) выхода из цикла НЕВОЗМОЖНО прописать в заголовке, можно сделать только бесконечным циклом с брейками. Ответ, такой задачи нет и это математически доказано. Топикстартер должен ящик пива.
98 likesport
 
23.09.11
16:20
А как на счет числа Пи?
99 Fragster
 
гуру
23.09.11
16:22
(96) когда 1сники научатся тому, что булевым переменным можно по нормальному присваивать значения, а не только Истина/Ложь?
100 aleks-id
 
23.09.11
21:01
сотка
101 aleks-id
 
23.09.11
21:02
(99) взять и поотрывать руки некоторым...
102 Pasha_mix
 
24.09.11
01:59
(0) запустил поиск "Пока Истина Цикл" в типовой БП... Дофига примеров.
103 Pasha_mix
 
24.09.11
02:01
Пока Истина Цикл
       
       ПутьККаталогу = КаталогВременныхФайлов () + Идентификатор + строка(Индекс) + "\";
       КаталогНаДиске = Новый Файл(ПутьККаталогу);
       Если НЕ КаталогНаДиске.Существует() Тогда
           СоздатьКаталог(ПутьККаталогу);
           Возврат ПутьККаталогу;
       КонецЕсли;
       Индекс = Индекс + 1;
       
   КонецЦикла;
------------------------------
   Пока Истина Цикл
       Если ТекущийЭлемент_HTML.tagName = "BODY" Тогда
           Возврат Неопределено;
       ИначеЕсли ТекущийЭлемент_HTML.tagName = НазваниеТега Тогда
           Возврат ТекущийЭлемент_HTML;
       Иначе
           ТекущийЭлемент_HTML = ТекущийЭлемент_HTML.parentNode;
       КонецЕсли;
   КонецЦикла;
104 orefkov
 
24.09.11
18:24
(0)
Учитывая, что любая рекурсия сама есть цикл + стек, крайне странно желание найти задачу, решаемую циклом, но не решаемую циклом со стеком.
105 Escander
 
24.09.11
18:30
(0) нет рекурсионной задачи которую нельзя решить циклом.
Если так нужно задачу - найдите точное значение числа Пи
106 s410
 
24.09.11
22:09
Нахождение числа ПИ, вечная тема.