![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Цикл For To Do
ZV © (2010-09-14 10:05:00)Меня интересует вопрос по циклу
for to do;
А что в этом цикле нельзя задать шаг приращения ? Увеличение возможно только на один? И можно ли в нем добавить дополнительное условие сравнение?
Во основном я работаю на Си там это можно делать
Игорь Шевченко (2010-09-14 14:10:00) [1]
> потому и downto компилятор часто делает, имхо так
зачем имхо, открой view|debug windows|cpu
увидишь, что компилятор так не делает
бумбум (2010-09-14 13:44:00) [2]Когда я был маленьким мне очень было нужно при определенных условиях вернуть переменной i значение 0, но я нашел обходной вариант с whal’ом. Хотя мне и сейчас кажется было бы проще присвоить переменной i 0 и пустить один и тот же цикл заново
12 (2010-09-14 13:36:00) [3]
> Она же все равно JUNP должна делать, а перед этим - какое-
> то условие проверить?
обычно сx=0
LOOPNZ - повторять пока cx не 0. потому и downto компилятор часто делает, имхо так
Anatoly Podgoretsky (2010-09-14 13:32:00) [4]> И. Павел (14.09.2010 13:26:13) [13]
Почитай описание конструкции цикла, да и часто ни какой переменной I нет. Да
и вообще почитай, что такой цикл FOR
Anatoly Podgoretsky (2010-09-14 13:30:00) [5]> И. Павел (14.09.2010 13:22:11) [11]
Под страхом смерти запрещается изменять вручную управляющую переменную.
И. Павел (2010-09-14 13:26:00) [6]А действительно: почему нельзя менять i в цикле? Какое от этого преимущество при выполнении программы? Она же все равно JUNP должна делать, а перед этим - какое-то условие проверить? Не всегда же можно сразу развернуть цикл в последовательный код, да и не всегда это правильно, т.к. увеличится размер программы.
PS: [10] и [11] - ерунда. Я запутался, извиняюсь. Жаль, нельзя удалять посты самостоятельно...
12 (2010-09-14 13:23:00) [7]да все понятно, никогда так не делаю
это не понятно, по меньшей мере
просто, что б на D не наезжали :)
И. Павел (2010-09-14 13:22:00) [8]Хотя такое, мне кажется, запросто соптимизирует и перевернет цикл (хотя я и не разу не замечал, чтобы у меня компилятор так поступал), так что лучше не рисковать:
for i := 1 to 10 do
begin
asm
inc i
end;
sum := sum + a[i];
end;
И. Павел (2010-09-14 13:13:00) [9]> [9] И. Павел ©
Хотя оптимизирует он только если i в теле цикла не используется. А тогда и нет смысла выставлять шаг...
И. Павел (2010-09-14 13:10:00) [10]> [4] 12 © (14.09.10 10:37)
А вдруг Delphi код соптимизирует, и сделает downto. Если он на "inc i" не ругается, то и это, ИМХО, может.
Anatoly Podgoretsky (2010-09-14 12:59:00) [11]Гроссмейстер подумал, сейчас будут бить.
(с) Ильф и Петров.
Игорь Шевченко (2010-09-14 12:57:00) [12]12 © (14.09.10 10:37) [4]
> сейчас побьют
побьют
oldman (2010-09-14 12:17:00) [13]
> 12 © (14.09.10 10:37) [4]
> сейчас побьют, но можно и так примерно сделать :)
нельзя так делать!
ZV (2010-09-14 10:44:00) [14]Понятно. Буду делать на while
12 (2010-09-14 10:37:00) [15]сейчас побьют, но можно и так примерно сделать :)
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to 11 do
begin
asm
inc i
end;
ShowMessage(inttostr(i));
end;
end;
Anatoly Podgoretsky (2010-09-14 10:14:00) [16]> ZV (14.09.2010 10:05:00) [0]
В Си нет цикла For, то что там есть это по сути цикл While. Исходя из этого
факта, ты тоже можешь использовать цикл WHILE
бумбум (2010-09-14 10:12:00) [17]Есть
While <Условие> do <цикл>
Repeat <цикл> until <Условие>
мути как хочешь
Andy BitOff (2010-09-14 10:10:00) [18]Дык, для начала неплохо было бы почитать книжки по синтаксису изучаемого языка.