Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл for c наворотами?! 
:(
    Опции темы
Delphist
  Дата 4.5.2005, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 2
Всего: 3



В одной статье прочитал, что оказывается в цикле for можно задавать
любой шаг приращения, а не только значание по умолчанию = 1.
Так я и не смог понять либо статья "слишком умная", либо я отстал от
жизни.



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
Rouse_
Дата 4.5.2005, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



В какой статье? Аналога как в бейсике
Код

for I = 1 to 20 step 5
в Дельфи не существует, только искусственными методами...


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Poseidon
Дата 4.5.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Видать действительно для Basic'a статья. Я тоже ранше заинтересован был этим вопросом, но ответа так и не нашел. Теперь использую такой "искусственный" метод:
Код
for i:= 1 to 100 do
if Frac(i/10) = 0 then // дествие, выполняемое если i кратно 10



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Bes
Дата 4.5.2005, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



не парьтесь делайте репитом туда и любой шаг запихать можно

i:=-4.5;
Repeat
i:=i+0.05;
//sdgsdfgsddf----
until i>=10.45;
PM MAIL   Вверх
Yanis
Дата 4.5.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Самый грамотный, на мой взгляд, способ установить шаг это варант придложеный в DRKB:
Код

const
  Step = 10;
{ ... }
for i := 0 to 100 do
  if i mod Step = 0 then 
    begin 

    end; 

Хотя, вариант с Repeat тоже удобный :^) Всё зависит от задачи.

Это сообщение отредактировал(а) Yanis - 4.5.2005, 16:20


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ch0bits
Дата 4.5.2005, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Чего ж они(Borland) не могли нормальный for сделать(как в C)??? Издеваются над людьми... smile smile smile
PM WWW   Вверх
Ищущий!
Дата 4.5.2005, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 19.4.2005

Репутация: нет
Всего: нет



Цитата(Vadim999 @ 4.5.2005, 21:00)
Чего ж они(Borland) не могли нормальный for сделать(как в C)??? Издеваются над людьми... smile smile smile

Не было и них папочки нормального! smile

PM MAIL   Вверх
drinkOut
Дата 4.5.2005, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 10.2.2005
Где: мой стакан?

Репутация: нет
Всего: нет



Цитата(Vadim999 @ 4.5.2005, 21:00)
Чего ж они(Borland) не могли нормальный for сделать(как в C)???

Для тебя это столь важно? Тогда рекомендую обратить внимание на Borland C++ Builder. smile
--------------------
Жизнь жестока - когда у меня на руках все карты, она начинает играть в шахматы...www.certifications.ru - проверь себя
PM MAIL ICQ   Вверх
Snowy
Дата 4.5.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А смысл? Любой цикл с шагом не кратным единице, легко приводится к таковому.
В крайнем случае - мотать счетчик вручную, как это и делает C++.
Только он это делает в единой конструкции, а тут придется ее реализовывать на 3 разных шага. Но в итоге бинарный exe делает те же операции.
PM MAIL   Вверх
Ch0bits
Дата 4.5.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Зато писать меньше -> читать легче -> понятней.
Ещё сильно нехватает foreach. smile
PM WWW   Вверх
Medved
Дата 4.5.2005, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Да... есть такая бодяга.... в этом отношении мне нравиться С. Это действительно язык для программистов, написанный программистами. В прниципе как и Java. Ребята из Sun отлично знают свое дело. А самая удобная среда разработки которую я видел - это IntelliJ IDEA от JetBrains.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
~FoX~
Дата 5.5.2005, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Гы......smile

Была уже похожая тема тут
Код

for i := 0 to 1000 do begin
  if i mod 5 = 0 then begin
    asm    
      dec i;    
    end;
  end;
end;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Bes
Дата 5.5.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



Цитата
Это действительно язык для программистов, написанный программистами
.
т.е. ленивыми талантливыми людми. smile
Это я про отладчик в отношении выделяемых динамически переменных.
Вообще справедливости ради стоит отметить, что цикл с дробным шагом работает гораздо медленнее чем с еденицй т.е. все время вызывается конструкция
a:=a+0.00342; // например
а для единицы можно выполнять inc(i)
а это на несколько порядков быстрее.
А уж внутри цикла дели ты эти единицы, умножай - делай че хочешь.




PM MAIL   Вверх
Rouse_
Дата 5.5.2005, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 5
Всего: 29



Цитата(Bes @ 5.5.2005, 14:06)
Вообще справедливости ради стоит отметить, что цикл с дробным шагом работает гораздо медленнее чем с еденицй т.е. все время вызывается конструкция
a:=a+0.00342; // например

Справедливости ради нужно отметить что данная конструкция вообще не эффективна так как значение 0.00342 сначала считывается из стек в регистр сопроцессора 8087, что по себе не затратно по времени, там происходит увеличение, ну а результат проверки еще обратно двинуть.
т.е. вместо

Код

        mov    cx,10
@@0:
        // что-то делаем
        loop   @@0:

получаем что-то вроде
Код

        // грузим счетчик
        fild    dword ptr [esp]
        // грузим начальное значение
        fild    dword ptr [esp+$08]
@@0:
        // грузим шаг
        fild    dword ptr [esp+$10]
        // складываем
        fadd
        //
        // вот тут что-то делаем
        //

        // смотрим, не кончился ли цикл?
        fcom    st(1)
        // скидываем результат в регистр
        fstsw   ax
        sahf
        // не закончился - крутим цикл
        jnae    @@0



--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Bes
Дата 5.5.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 5
Всего: 7



2Rouse_: Примерно это я и хотел сказать. Только по-русски, а не на ассемлере - не знаю я его, просто механизм представляю.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0895 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.