Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Цикл 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]

Дык, для начала неплохо было бы почитать книжки по синтаксису изучаемого языка.


Наверх

Титульная страница Поиск, карта сайта Написать письмо