Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.06.30;
Скачать: [xml.tar.bz2];

Вниз

ШАГ в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
3-97548
_Andrew_
2003-06-07 02:05
2003.06.30
Ускорение поиска


3-97531
Viktor
2003-06-06 13:09
2003.06.30
TUpdateSQL : как удалить последнюю запись в датасете ?


1-97743
MakNik
2003-06-18 18:29
2003.06.30
Вложенные папки


8-97752
SuperMagic
2003-03-16 13:34
2003.06.30
Кривые второго порядка


14-97803
Anatoly P
2003-06-09 19:56
2003.06.30
FindFirst-FindNext





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский