Имя: Пароль:
1C
1С v8
Цикл без цикла
0 JUST4LOL
 
04.03.21
09:36
Кто для примера может написать цикл без цикла с использованием операторов перехода?
1 Aleksey
 
04.03.21
09:38
а в чем проблема?
2 Irbis
 
04.03.21
09:38
goto не по феншую?
3 Aleksey
 
04.03.21
09:40
chcp 1251 >nul

:Begin
if exist = "*.xml" (goto do) else (goto end)

:do
rem Что то делаем
goto Begin

:end
exit /b
4 Конструктор1С
 
04.03.21
09:42
(0) это зло. Понимаемость и отлеживаемость такого кода уходят на дно
5 Aleksey
 
04.03.21
09:44
(4) Ну да кто то не умеет их готовит, и поэтому называет злом.
По мне так зло эот пакетные запросы на 15 страниц. Но ничего, кое кто считает их стандартами
6 Ненавижу 1С
 
гуру
04.03.21
09:49
(0) нужен еще оператор условия
7 Aleksey
 
04.03.21
09:52
(6) Ну может быть ему вечный цикл нужен :)
8 Irbis
 
04.03.21
09:52
(6)бесконечный можно и без него
9 Aleksey
 
04.03.21
09:53
(8) Без операторов переходов, условий и циклов?
10 Ненавижу 1С
 
гуру
04.03.21
09:54
(9) без регистраций и СМС
11 JUST4LOL
 
04.03.21
09:55
Не, бесконечный не нужен)
12 Irbis
 
04.03.21
09:55
(9) Да.

метка:

Тело цикла

гоуту на метка
13 Bigbro
 
04.03.21
09:57
mov eax 0x42h
rep:
dec eax
...
jnz rep
14 1Сергей
 
04.03.21
09:58
Это лабораторка на первом курсе?
15 1Сергей
 
04.03.21
09:59
или таки на собеседовании задание?
16 Irbis
 
04.03.21
09:59
(14) это фальстарт пятницы
17 Йохохо
 
04.03.21
10:01
и только секция топика намекает чего же хотел тс)
18 dka80
 
04.03.21
10:02
Процедура аааа()
    ааа()
КонецПроцедуры

и валимся с переполнением стека вызовов через непродолжительное время))
19 fisher
 
04.03.21
10:03
Первое, что приходит в голову про циклы "без циклов" - это рекурсия.
Ну, а в ассемблере ЕМНИП и нет операторов цикла. Только команды условных переходов.
20 GANR
 
04.03.21
10:04
function Factorial(N: LongInt): LongInt;
begin
Factorial := 1;
if N <> 0
then Factorial := N*Factorial(N-1);
end;

begin
WriteLn(Factorial(11));
end.
21 Ненавижу 1С
 
гуру
04.03.21
10:05
ну можно на Попытка и Перейти еще сделать )))
22 1Сергей
 
04.03.21
10:06
(17) скорее никнейм четко намекает зачем
23 JUST4LOL
 
04.03.21
10:08
(15) Что-то в этом роде
24 Bigbro
 
04.03.21
10:09
(19) а как же LOOP

mov ecx, 5
start_loop:
...
loop start_loop
25 Ненавижу 1С
 
гуру
04.03.21
10:12
А еще есть оператор Выполнить которому передается строка, а поэтому формально там не будет циклов в исходном коде (они будут в строковом параметре)
26 fisher
 
04.03.21
10:15
(24) Так это и есть команда условного перехода. Которая декрементирует регистр счетчика и прыгает по метке, если флаг обнуления АЛУ процессора не установился.
27 Конструктор1С
 
04.03.21
10:16
(5) пакетные запросы на 15 страниц нормально читаются. А один такой хитровыделанный цикл способен сделать код трудночитаемым и заложить ошибки, которые попробуй найти. Простой цикл понятен и прозрачен. В любой момент знаешь, на какой ты сейчас позиции и сколько их ещё. Тут же попробуй разберись. Плюс стек кода переполнить как два пальца об асфальт
28 fisher
 
04.03.21
10:18
(26) + Но да, она заточена под циклы со счетчиком итераций. Просто от других команд условного перехода она отличается только одним - дополнительным декрементом регистра счетчика.
29 fisher
 
04.03.21
10:19
(28) + Эдакий синтаксический сахар на микрокомандном уровне :)
30 Йохохо
 
04.03.21
10:21
(29) тогда экономили и такты и память, до сахара оставалось еще лет 30
31 fisher
 
04.03.21
10:22
(30) Память - да. А по тактам вряд ли там экономия.
32 Йохохо
 
04.03.21
10:27
(31) две загрузки в регистры и сравнение
33 fisher
 
04.03.21
10:44
(32) Команды ассемблера (машинные коды) - внутри выполняются как подпрограммы из микрокоманд процессора. Некоторые процессоры позволяют их даже перепрограммировать. И выполняются за разное количество тактов. Поэтому вовсе не обязательно, что одна сложная команда будет выполняться за меньшее количество тактов, чем две простые на которые ее можно разбить.
34 Дык ё
 
04.03.21
11:14
(28) фантазер
(30) именно по тактам - начиная с какого-то поколения пентиумов условный переход начал работать эффективнее, чем loop, и компилляторы перестали его использовать
35 Lama12
 
04.03.21
12:24
(0) Мда...
А ведь когда-то, изучая Basic на Spectrum, не дойдя до циклов, изобретал их сам. Теперь народ спрашивает как их создать :-(
Про машину Тьюринга можно видимо и не упоминать сейчас.
36 mikecool
 
04.03.21
13:02
(18) у тебя ошибка
37 vde69
 
04.03.21
13:17
Функция А(перем сч)
Если сч >= 1000 Тогда
   Возврат Ложь
Иначе
   // что-то делаем

   Если НЕ А(сч+1) Тогда
     Возврат Ложь;
   КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
38 1Сергей
 
04.03.21
13:52
(37)

Функция А(перем сч)
Если сч >= 1000 Тогда
   Возврат Ложь
Иначе
  // что-то делаем


   Возврат А(сч+1);
КонецЕсли;
КонецФункции
39 Pro-tone
 
04.03.21
14:00
1. Рекурсия типа (37)
2. Переход по метке (перейти/goto)
40 fisher
 
04.03.21
14:08
(34) > фантазер
В чем?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.