|
Цикл без цикла | ☑ | ||
---|---|---|---|---|
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) > фантазер
В чем? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |