Имя: Пароль:
1C
1С v8
Задачка по 1С
,
0 Cray12
 
05.03.14
11:55
Всем доброго дня.
Попалась нам в отделе задачка по 1С:

Количество = 5;
Пока Сч = 1 По Количество Цикл
Количество = ?(Сч>=3,Количество+1,Количество-1);
КонецЦикла
Сообщить(Количество);

Нужно без помощи 1С сказать, чему в конечном итоге будет равно количество.
Мы подумали, что цикл пойдет бесконечно, решили узнать у самой 1С-ки, она сообщила, что цикл закончится после 6.
То есть, при Сч=3 и Кол-ве=3, а так же при обоих значениях, равных 4 и 5, цикл пойдет. Но как только в цикле количество увеличивается до 6, а после прохождения и счетчик - в цикл система не зашла. Вопрос: почему?
1 shuhard
 
05.03.14
11:56
(0) ржака
целый отдел не умеет читать ЖКК и пользоваться отладчиком
2 1Сергей
 
05.03.14
11:57
цикл будет бесконечным. Не?
3 Cray12
 
05.03.14
11:59
(2) Я тоже так думал. Поэтому и смотрели через отладчик. При 3, 4 и 5 в цикл заходит, при 6 - нет. Потому и полез на форум.
4 ссылка
 
05.03.14
12:00
Пока <> Для
5 Wobland
 
05.03.14
12:00
двоешники. условие в такой поке вычисляется один раз
6 Irbis
 
05.03.14
12:01
Это в школе объясняют, классе так примерно в восьмом, когда ещё я учился.
7 1Сергей
 
05.03.14
12:01
(5) если б было "Пока", но там "Для" на самом деле
8 Cray12
 
05.03.14
12:01
(5) Ой ё, я же не исправил, извините. Пока заменили на Для, иначе 1С вообще ошибку выдаст.
9 1Сергей
 
05.03.14
12:01
(5) и, кстати, нет. В "Пока" условие будет каждый раз вычисляться заново
10 Wobland
 
05.03.14
12:02
ё-маё.. опять кто-то придумал то, что нормальному человеку в голову не придут
11 1Сергей
 
05.03.14
12:02
Кароче, ответ 6
12 Cray12
 
05.03.14
12:03
(11) Да, это понятно. Вопрос в том, почему цикл дальше не идет.
13 Любопытная
 
05.03.14
12:03
(12)потому что 6=6 разве нет?
14 1Сергей
 
05.03.14
12:03
(12) а с куяли он должен дальше идти, если Сч=6 и Количество=6?
15 Cray12
 
05.03.14
12:04
(13) Я же говорю, при обоих значениях = 3, 4 и 5 все норм, идет дальше. Как только 6 - все, останавливается.
16 1Сергей
 
05.03.14
12:04
(15)
Сч - Количество
1 - 4
2 - 3
3 - 4
4 - 5
5 - 6
6
17 Cray12
 
05.03.14
12:05
(16) При сч = 1 кол-во будет 5, а не 4.
18 Cray12
 
05.03.14
12:06
(16) При сч=1 кол-во будет 5, а не 6
19 1Сергей
 
05.03.14
12:06
(17) я показываю результаты в конце цикла
20 1Сергей
 
05.03.14
12:06
(19) + непосредственно перед проверкой
21 Любопытная
 
05.03.14
12:07
(17) При Сч=5 количество станет равным 6, дальше идем в начало цикла: Сч=6, количество = 6, все, до свидания.
22 Cray12
 
05.03.14
12:07
(20) Ну, опять-таки, при 3-4, 4-5 дальше идет, почему потом останавливается?
23 Cray12
 
05.03.14
12:08
(21) Так же уже было? При сч=4 кол-во тоже будет 4 и при 5 то же самое.
24 1Сергей
 
05.03.14
12:11
(22) тогда прав Wobland
Читай СП. конец цикла высчитывается в самом начале один раз
25 Ненавижу 1С
 
гуру
05.03.14
12:11
в конструкции

Для Сч = 1 По Количество Цикл

обе границы вычисляются один раз перед выполнением цикла, учите матчасть
26 Cray12
 
05.03.14
12:11
(24) Тогда почему при шестерке он полез? Если высчитывается в начале, прошел бы до 5 и успокоился.
27 1Сергей
 
05.03.14
12:12
(26) Какой шестерке? Сч не был равен 6
28 Cray12
 
05.03.14
12:12
(27) Был, в конце. Через отладчик смотрели, были оба значения = 6.
29 Серго62
 
05.03.14
12:13
(28) Он в цикл при 6 не заходит.
30 hhhh
 
05.03.14
12:14
(28) ну и что? Главное Для его не пропустило. Потому что больше 5.
31 1Сергей
 
05.03.14
12:14
(28) именно, когда стал 6 - вышли из цикла, не выполняя тела
32 Серго62
 
05.03.14
12:14
+(29) Посмотри еще раз внимательно отладчиком, каждую итерацию
33 hhhh
 
05.03.14
12:14
(29) цикл до 5, поэтому и не заходит в 6.
34 Ненавижу 1С
 
гуру
05.03.14
12:15
короче ответ в конце будет 2*Количество-4
35 Серго62
 
05.03.14
12:17
Это случайно не из тестов для ЕГЭ по информатике? Там любят подобную хрень спрашивать...
36 Cray12
 
05.03.14
12:19
Так, короче, дело в элементарном незнании. Пределы цикла и правда не меняются в процессе его прохождения. То, что интриговало в начале, оказалось банальным результатом неведения. Всем спасибо за ответы и пояснения!
37 Ненавижу 1С
 
гуру
05.03.14
12:21
а так?

int c = 5;
for(int i=1; i<=5; i++)
{
  c>=3 ? i++ : i--;
}
38 Godofsin
 
05.03.14
12:23
Скучно...
39 1Сергей
 
05.03.14
12:25
(37) Встроенный язык: Строка 1: {(1,5)}: Неопознанный оператор
40 МойКодУныл
 
05.03.14
12:26
(38) надо написать свой 1С, интересный. Где  подобный цикл будет кончаться на 11, причем просто так.
41 Fedor-1971
 
05.03.14
12:26
(37) for(int i=1; i<=C; i++) ошибся, там в условии стоит Количество
42 Godofsin
 
05.03.14
12:27
(40) Неее, должно хитрое, не сразу понятное логичное объяснение, почему цикл кончается на 11.
43 МойКодУныл
 
05.03.14
12:28
(42) Потому что 2*5 + 1 = 11. С 1 начинается счетчик, а на 2 умножаем потому что цикл!
44 Godofsin
 
05.03.14
12:29
(43) Гениально!!!
45 DS
 
05.03.14
12:32
Сообщение (5), как я смотрю, не у всех отображается...
46 Aleksey
 
05.03.14
12:41
(45) ну тут никто не ищет решения. Все хотят пообщаться