Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.30;
Скачать: CL | DM;

Вниз

ШАГ в for   Найти похожие ветки 

 
Silentium! ©   (2003-06-13 11:49) [0]

Люди добрые помогите мне ! Как мне указать шаг в цикле for. В справке ничего по этому поводу. Надо что бы он считал через каждые три... ничего не могу поделать... помогите... чем сможете :) Заранее


 
Song ©   (2003-06-13 11:50) [1]

Никак. Используй While .. Do или Repeat .. Until


 
Юрий Зотов ©   (2003-06-13 12:51) [2]

Можно и for, только нужно самому сформировать индекс:

for i := 0 to (Count div 3) do Arr[i * 3] := ...


 
_ALEXey_ ©   (2003-06-13 13:27) [3]

Пишешь в начале цикла условие If i mod 3 <> 0 then Continue;, дальше свой код.


 
Федя   (2003-06-13 14:53) [4]

step:=3;
for i:=0 to 100 do
begin
//тело цикла
i:=i+step;
end

И ни каких извратов...


 
clickmaker ©   (2003-06-13 14:56) [5]

Федя (13.06.03 14:53)
step:=3;
for i:=0 to 100 do
begin
//тело цикла
i:=i+step;
end

И ни каких извратов...


Не пойдет, Федя. На это Дельфя ругнется "Assignment to FOR-Loop variable "i""


 
Федя   (2003-06-13 15:02) [6]

Тогда вот-так:

procedure Step(Var i:integer; inc:integer);
begin
i:=i+inc;
end;

for i:=0 to 100 do
begin
//тело цикла
step(i,3);
end

Про "Assignment to FOR-Loop variable "i"" не знал хотя в Pascal 7.0 нормально работало и я бы вынес это в варнинг


 
Anatoly Podgoretsky ©   (2003-06-13 15:51) [7]

А зачем Федя заниматься извращениями


 
Федя   (2003-06-13 15:55) [8]

2Anatoly Podgoretsky ©
А конкретно?


 
Palladin ©   (2003-06-13 16:01) [9]


> Федя (13.06.03 15:55)

зачем вызов функции в цикл пихать?
там повыше, красивые решения ситуации...


 
Федя   (2003-06-13 16:05) [10]

Например?


 
Anatoly Podgoretsky ©   (2003-06-13 16:10) [11]

Не твое - не трогай


 
Silentium! ©   (2003-06-13 16:24) [12]

ээм.. не хочу мешать вашим обсуждениям :) Но разрешите вас поблагодарить господа :)


 
Silentium! ©   (2003-06-13 16:27) [13]

Федору в частности и всем остальным спасибо. А song тебе, Циклы "до" и "пока" меня не интерисовали.


 
Silentium! ©   (2003-06-13 16:38) [14]

эээ нет Мастера. Федя тебе, твой вариант не работает. Весь листинг просисан на процедуру нажатия кнопки. Присутствие второй процедуры вызывает характерную брань. _ALEXey_ тебе, на твой вариант тоже ругается :)


 
MsGuns ©   (2003-06-13 16:48) [15]

ИМХО, вариант Ю.Зотова - самый изящный для обработки каждого n-го индекса.
А вообще, если надо "квадратно-гнездовое" сканирование, чем не нравится простой While/Until с модификаций индекса рученьками как треба ?


 
Федя   (2003-06-13 16:49) [16]

Странно у меня работает. А что, у тебя пишет?


 
Моджахед   (2003-06-13 21:21) [17]

2 Федя

У всех пишет одинаковое. Грешно, мол, Федор, пытаться модифицировать переменную-счетчик цикла. Ай-да Федор!


 
Федя   (2003-06-13 23:44) [18]

И что это у вас такое пишет?

У меня на D7 в таких случаях как:


Prcedure XXX(Var i:integer)
begin
i:=i+x
end


или


Var i:integer;
pi:^integer;
begin
pi:=@i;
for i:=0 to 100 do
begin
pi^:=i+1;
end;
end;


проходит нето что, без err но даже без war


 
Юрий Зотов ©   (2003-06-14 00:36) [19]

Эх, Федя! Нехорошо обманывать компилятор. И себя заодно, и других тоже. Во-первых, это уже ДРУГОЙ код. Во-вторых, кто как, а лично я не дам и ломаного гроша за то, что он будет нормально работать при включенной оптимизации и локальном объявлении счетчика цикла.


 
Palladin ©   (2003-06-14 01:10) [20]


> Федя (13.06.03 16:05)

например смотри Юрий Зотов © (13.06.03 12:51)
ибо это наиболее правильно и надежно для for!


 
Silentium! ©   (2003-06-14 03:48) [21]

Можно и for, только нужно самому сформировать индекс:

for i := 0 to (Count div 3) do Arr[i * 3] := ...


Я так понял мне надо описать одномерный массив ? Господа ну поймите меня. У меня есть memo... в нем строчки. И в for у меня обрабатывается по три записи из поле за раз (предложения сделдать три for не принимается, интим и маркетинг тоже). С шагом один (по умолчанию) получается такая ситуация что каждая запись обрабатывается по три раза. Вот именн для этого мне и надо сделать шаг 3. Надеюсь ситуация стала была более ясной.


 
Юрий Зотов ©   (2003-06-14 04:41) [22]

Не очень подробное описание задачи, но уже конкретнее. Вам нужно примерно вот что:

with Memo1 do
begin
// Обрабатываеи по три строки в одном цикле
for i := 0 to (Count - 1) div 3 do
begin
j := 3 * i;
Lines[j] := ...;
Lines[j + 1] := ...;
Lines[j + 2] := ...
end;
// Обрабатываем оставшиеся одну или две строки
j := Count mod 3;
if j = 2 then Lines[Count - 2] := ...;
if j >= 1 then Lines[Count - 1] := ...
end;


 
Silentium! ©   (2003-06-14 06:34) [23]

Юрий Зотов :) Большое вам спасибо. Я сейчас потестил программу все работает. Все оказалось до смешного просто... и как у меня у самого мозгов не хватило. Очень благодарен вам и всем остальным.



Страницы: 1 вся ветка

Текущий архив: 2003.06.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.02 c
1-97582
Vihr
2003-06-18 21:12
2003.06.30
Оптимизация кода


1-97728
Alex Shulg
2003-06-18 14:08
2003.06.30
Значения констант?


14-97857
leseal1
2003-06-13 04:47
2003.06.30
Компонент для создания *.gif на кнопке


14-97872
Inkognito_Man
2003-06-13 14:12
2003.06.30
AcrobatReder


3-97502
Akademik
2003-06-05 12:51
2003.06.30
Нет каскадного удаления в таблицах Paradox