Текущий архив: 2003.11.17;
Скачать: CL | DM;
ВнизПроблема с For i:=... to .... Найти похожие ветки
← →
denmin (2003-11-04 15:02) [0]Можно ли в For задать шаг.
← →
Anatoly Podgoretsky (2003-11-04 15:03) [1]Нет
← →
Song (2003-11-04 15:04) [2]
For i:=0 to .. Do
IF Odd(i) then ..
← →
ZEE (2003-11-04 15:19) [3]как вариант:
for i:=Low(MyArray) to High(MyArray) do
begin
j:=i*2;
MyArray[j]:=...; //каждый второй
end;
← →
Sodom (2003-11-04 15:21) [4]Можно так:
// надо
for i:=10 to 100 step 10
// делай так
for i:=1 to 10 do begin
k:=i*10;
// работаем с k
end;
← →
Song (2003-11-04 15:25) [5]2Sodom © (04.11.03 15:21) [4]
Молодец! :)
← →
denmin (2003-11-04 15:25) [6]но мне надо арифметическую прогрессию, но не
// делай так
for i:=1 to 10 do begin
k:=i*10;
а пробовал
for i:=1 to 10 do begin
k:=i+10;
не работает
← →
Anatoly Podgoretsky (2003-11-04 15:29) [7]Зачем извращения, для этого существует цикл while, которые позволяет изменять порядок прохода и использовать не только перечислимые типы.
← →
denmin (2003-11-04 15:58) [8]-> Зачем извращения, для этого существует цикл while, которые позволяет изменять порядок прохода и использовать не только перечислимые типы.
Спасибо.
← →
Skier (2003-11-04 15:58) [9]>denmin © (04.11.03 15:02)
> Можно ли в For задать шаг.
Есть хорошая веСЧь Continue называется. Иногда помогает.
А вообще-то смотри [7]
← →
Regis (2003-11-04 23:43) [10]Вообще
for i := 1 to 10 do
k := i * 10;
это и есть арифметическая прогрессия ...
← →
Mihey (2003-11-05 00:26) [11]Имхо нужно выработать общий алгоритм:
Step := 10;
N := 100;
For i := 1 to (N div Step) do
begin
i := i * Step;
end;
← →
Slavian (2003-11-05 00:41) [12]а вы while использовать не пробовали?
i:=0
и всё. не обязательно всё через for делать!
while i<= 100 do begin
i:=i+5
//....
end;
← →
default (2003-11-05 01:54) [13]а зачем для арифметической прогрессии какие-то циклы?
вроде формулы есть...
← →
Спрашивающий_ (2003-11-05 04:22) [14]Repeat
Что то делаем
Inc(I,шаг) или Dec(I,шаг);
Until до чего то
← →
default (2003-11-05 04:23) [15]Slavian © (05.11.03 00:41) [12]
прочитай сабж
← →
Думкин (2003-11-05 05:30) [16]Ровное повторение вчерашнего цирка.
Ответ дан первым же постом - но ... Колумбам несть числа.
← →
Beginner3000 (2003-11-05 05:41) [17]можно и так:
for i := 1 to 10 do
begin
i := i + 9;
...
end;
но имхо по сравнению с [4] это - извращение
← →
KSergey (2003-11-05 08:07) [18]> [17] Beginner3000 (05.11.03 05:41)
> можно и так:
> for i := 1 to 10 do
> begin
> i := i + 9;
> ...
> end;
Не надо обманывать народ!
Цитата и Тейксерры, Пачеко "D5...":
" Внимание!: ...начиная с D2 присвоение значений счетчику цикла в теле этого цикла недопустимо." (стр. 102)
Впрочем, если бы вы потрудились проверить свой совет - то наткнулись бы на ошибку компиляции.
← →
NAlexey (2003-11-05 08:13) [19]>присвоение значений счетчику цикла в теле этого цикла недопустимо
Всмысле невозможно, или нельзя так делать?
← →
NAlexey (2003-11-05 08:31) [20]>Впрочем, если бы вы потрудились проверить свой совет - то наткнулись бы на ошибку компиляции.
Можно и не наткнуться на ошибку компиляции:
procedure TForm1.Button1Click(Sender: TObject);
var
I, J: Integer;
procedure Foo;
begin
I := 10;
end;
begin
J := 0;
for I := 1 to 10 do
begin
Inc(J);
if I mod 5 = 0 then
Foo;
end;
ShowMessage(IntToStr(I) + " / " + IntToStr(J));
end;
← →
Amoeba (2003-11-05 11:27) [21]Не пора ли перенести эту ветку в "Потрепаться"?
← →
Stas (2003-11-05 11:31) [22]NAlexey © (05.11.03 08:31) [20]
Зачем писать кучу кода, когда можно использовать While ?
← →
KSergey (2003-11-05 11:51) [23]> [20] NAlexey © (05.11.03 08:31)
Хорошо, как иллюстрация пойдет, однако вы, уверен, не станете это кому-либо рекомендовать?
← →
Anatoly Podgoretsky (2003-11-05 11:51) [24]Amoeba (05.11.03 11:27) [21]
С чего бы?
← →
vpman (2003-11-05 12:56) [25]
> Не пора ли перенести эту ветку в "Потрепаться"?
Явно пора.
← →
app (2003-11-05 13:04) [26]Спасибо, но модератор сам решит, а вот продолжение настаивать на этом привед у удалению сообщеий, как не по теме.
← →
NAlexey (2003-11-05 13:04) [27]>Хорошо, как иллюстрация пойдет
Иллюстрация чего? Того что так делать нельзя? Или иллюстрация того что всетаки компилятор не ругнется на изменение переменной цикла?
>не станете это кому-либо рекомендовать?
Всем рекомендую так делать и почаще, скучно жить скучно.
← →
KSergey (2003-11-05 13:27) [28]> [27] NAlexey © (05.11.03 13:04)
> >Хорошо, как иллюстрация пойдет
> Иллюстрация чего? Того что так делать нельзя? Или иллюстрация
> того что всетаки компилятор не ругнется на изменение переменной
> цикла?
Что у компилятора все же ограничены возможности и обдурить его можно ;)
Хотя рискну предположить, что данная техника при определенном подходе может дать непредсказуемый результат после работы оптимизатора. Правда, пример такой составить не удалось. Явно мало по этому вопросу знаю.
Т.е. интересно: как только переменная цикла встречается в какой-либо процедуре (Foo) - тут же оптимизатор прекращает свой любимый трюк с обратным отсчетом переменной. Даже если функция не вызывается в теле цикла. Думаю, так следано на всякий случай: мало ли какие хитрые связи вздумает программист замудрить в теле цикла. То же присходит при получении адреса переменной цикла, даже если его и не использовать никак...
> Всем рекомендую так делать и почаще, скучно жить скучно.
Хм, а наверное я и впрямь начну активно пользоваться этой технологией. Прямо с завтрашнего дня, спасибо.
← →
KSergey (2003-11-05 13:29) [29][28] KSergey © (05.11.03 13:27)
Что у компилятора все же ограничены возможности и обдурить его можно ;)
Имелись в виду возможности по телепатии. ;) Да и просто по разбору как же программа будет реально работать, что в чем-то так же сродни телепатии, т.к. выполнять программы компилятор не умеет. ;)
Страницы: 1 вся ветка
Текущий архив: 2003.11.17;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.009 c