![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| LJ |
|
|||
|
Unregistered |
Прешёл с VB на Delphi, попробовал цикл For и заметил что привычного step нет. Как же его всё-таки можно реализовать?
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Такой конструкции нет (и никогда не было, к сожалению)
Заменить на While: [Code] Var i:integer; ... While i<SomeMaxValue do begin i:=i+Step; ....Do something end; [Code] -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Кстати, а что будет если ... :
procedure Cycle(Step: Integer) var I: Integer; begin for I := 1 to 100 do begin I := I + Step - 1; ...... ...... ...... end; end; -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Ничего не будет... нельзя ассигновать значение переменной цикла FOR
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Ничего хорошего не будет - компиллятор не компиллирует такие вещи начиная со 2х Дельфей -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Жаль, а С такое понимает
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
Ну там-то вообще все просто for (int i = 0; i < 10; i+=2) printf ("Test %d", i); -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: нет Всего: 12 |
На самом деле, есть возможность использование конструкции со степом...
for I := 1 to 10 do begin asm Inc ebx end; WriteLn (I); end; Как организован цикл в дельфи: каждую итерацию регистр ebx увеличивается на 1 и в конце цикла происходит сравнение регистра с 10 (в данном случае) что это может повлечь за собой: ну самое малое - это то, что увеличивая регистр на 2 мы можем просто пролетить 10 и выдет бесконечный цикл (9+2=11) Как избежать: можно в памяти исправить сравнение равности (jnz) на заменить на <=. А вообще, не стоит оно таких затрат. -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Шурик |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.10.2002 Репутация: нет Всего: нет |
Неужели всегда в цикле используется регистр ?
А если я зделаю много вложеных циклов, тогда в коде появится много PUSH и POP ? |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Я почему-то всегда думал, что там используется регистр CX. А про вложенные циклы: именно так это и делается. По крайней мере я, когда писал сортировку массива, использовал PUSH, POP. Но их не так уж и много - одна пара на каждый вложенный цикл.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
На самом деле компилляторы сейчас стали значительно умнее и просто так push-и не втыкают. Вот пример. Это оригинальный MS-овский код (Excel).
Обратите внимание, как компиллятор оформил вложенные циклы. Самый верхний цикл (метка L309AD53A) использует локальный счетчик в [esp+54h] - видимо, программист декрементировал переданный int: MD5_Update(... int Count..) { ... do // метка L309AD53A { ... } while (!--Count) ... Внутри этого цикла есть вложенный (метка L309AD54E). На этот раз компиллятор обошелся регистрами и командой lea для движения по локальному буфферу: lea eax,[esp+10h] L309AD54E: ... lea ecx,[esp+50h] cmp eax,ecx jb L309AD54E Видимо, тут программист писал что-то вроде: BYTE LocBuffer[0x40]; BYTE b; BYTE *p; p= LocBuffer; while (1) { b = p++; ... if (p == *LocBuffer + sizeof(LocBuffer)) break; } Код, конечно, грешит механистичностью и некоторые места кажутся вообще нелогичными. Но это только кажется - компиллятор оптимизировал код под конвеер Пентиума(P6). Лично мне удалось всего в 6 раз сделать его быстрее ;) -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| Шурик |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 31.10.2002 Репутация: нет Всего: нет |
А такую инфу вообще можно найти, или это экзешники надо ковырять, чтобы узнать как компилятор проги компилит ? Может где то какиенить описания есть ?
|
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Уже готовых коммерческих - надо. А свой проект ты можешь легко посмотреть сам ! -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
2Chingachguk: А MD5 это разве не алгоритм шифрования?
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Chingachguk |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Нет, это хэш-функция. (Если хочешь, могу линк на мою статью про excel дать, там я писал, что это). Обычно используется для идентификации пользователя (файл хэшей) и т.п. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |