Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Цикл без цикла

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

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

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

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

метка:

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

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


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

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



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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.