Форум: "Основная";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
Внизfor i=1 to 10 do i=i+1- ошибка в дельфи .как отключить эту фишку Найти похожие ветки
← →
denisww (2002-10-07 13:11) [0]for i=1 to 10 do i=i+1- ошибка в дельфи .как отключить эту фишку
← →
RV (2002-10-07 13:14) [1]for i:=1 to 10 do i:=i+1
если не поможет - uninstal (delphi, но лучше и Винды, потом формат С, потом снять разделы, диски. И далее в обратной последовательности.)
← →
RV (2002-10-07 13:15) [2]опять фигню несу
← →
Игорь Шевченко (2002-10-07 13:15) [3]Документацию почитать.
← →
AlexSam (2002-10-07 13:18) [4]Круто, такого я еще не видел. Ты претендент на самый крутой ФАК.
А если серьезно, то не нужно производить изменения переменных в цикле, по которым он отсчитывается. Если тебе так нравится i:=i+1, то замени while i<=10 do inc(i);
← →
denisww (2002-10-07 13:47) [5]Это где написанно что ненадо
а мне надо!!
← →
denisww (2002-10-07 13:50) [6]если информация на этой строке неполная тогда берём следующую строчку а к счётчику прибовляем +1 чтобы следующий раз считал через строчку
и паскаль раньше разрешал это делать
а вдруг я.....
он мне такое заявляет
← →
BizonWar (2002-10-07 13:52) [7]Если надо пропустить итерацию, поставь в теле цикла Continue, обработка перейдет к следующему значению i.
← →
Демонов Е.В. (2002-10-07 13:52) [8]попробуй с указателями и/или ф-ией move, Fillchar
← →
Reindeer Moss Eater (2002-10-07 13:53) [9]Есть хорошее слово
Continue
Специально для таких случаев
← →
Кот Бегемот (2002-10-07 13:53) [10]Это в голове у тебя ошибка !!!
>и паскаль раньше разрешал это делать
Нифига - позволял но все равно цикл for отрабатывался как надо а не так как тебе вздумается
← →
denisww (2002-10-07 13:55) [11]for i:=1 to 100 do if a[i]="бздец" then I:=101;
работало в паскале а тут неееееее......................
← →
Reindeer Moss Eater (2002-10-07 13:58) [12]
for i:=1 to 100 do if a[i]="бздец" then Continue (*I:=101*);
← →
denisww (2002-10-07 14:00) [13]for i:=1 to 100 do if a[i]="Внимание прыгаю на -10" then i:=i-10;
← →
still (2002-10-07 14:03) [14]юзай while
← →
denisww (2002-10-07 14:03) [15]ну что сьели
и это хочу я сделать
← →
denisww (2002-10-07 14:06) [16]где я наступил на логику тов паскаля
← →
Sectey (2002-10-07 14:24) [17]Delphi не позволяет изменять счетчик цикла оператора for. Данная переменная в теле цикла for to do имеет статус Read-only. Это реализовано для сохранения целлосности цикла. Если есть необходимость изменять переменную счетчика то можно использовать операторы цикла while do или repeat until.
← →
denisww (2002-10-07 14:29) [18]есть предложения для борланда
платишь 1000бакинских дельфи работает
платишь 100 бакинских в дельфи обьектноорентированное програмирование неработает
за 10 баков нерабоает умножение , деление, 1 оператор цикла и тд
ну и так далее
← →
denisww (2002-10-07 14:30) [19]дельпхи это не сиси два крестика:(
← →
still (2002-10-07 14:34) [20]а еще в паскале можно было получить длину строки как
s[0]
хотя во всей документации было сказано - НЕ ДЕЛАЙТЕ так.
в delphi строки физически представляются по-другому,
так что это работать не будет, а вот стандартное рекомендованное решение length(s) будет работать и там, и там.
Если еще по недокументированным функциям сохранять совместимость, то монстроидальность системы расти будет быстрей на порядок.
← →
Юрий Зотов (2002-10-08 01:44) [21]> denisww
Ну, если Вы так уж сильно хотите узнать детали, то проделайте следующее.
1. Напишите любой цикл for, внутри него поставьте BreakPoint и запустите программу.
2. После остановки на BreakPoint"е откройте окно CPU и внимательно посмотрите ассемблерный код Вашего цикла.
3. Вы увидите, что для счетчика цикла компилятор использовал регистр, а не память. Надо ли объяснять, почему?
4. По этой причине менять счетчик цикла for внутри самого цикла бессмысленно. О чем и Вам и сообщается. И в Delphi используется уже далеко не тот Pascal, который был в TP для DOS. Это другой язык и у него другие правила. Похож - да, но не более.
5. Прежде, чем ругать Delphi или что-либо другое, было бы неплохо более детально ознакомиться с тем, что ругаешь. Иначе вспоминается басня одна... про мартышку и очки. Не читали?
← →
Юрий Зотов (2002-10-08 08:48) [22]Дополнение.
Регистр используется, когда счетчиком цикла выступает локальная переменная. Если же глобальная - используется память. Почему - тоже понятно (событийное програмирование, однако - эта глобальная переменная может быть задействована в другом месте).
В последнем случае компилятор выдает предупреждение. И правильно делает - глобальная переменная мешает ему построить оптимальный код, о чем он честно сообщает. Но в этом случае можно написать, например, следующее (и ошибки не будет):
var
g: integer;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
for g := 0 to 2 do MessageBeep(0)
end;
procedure TForm1.FormClick(Sender: TObject);
begin
Inc(g)
end;
← →
REA (2002-10-08 10:57) [23]Используйте C для таких наворотов. Там и как-то так можно:
for (i=i+1,i--;i<i+1;i+=2,i-=i-2);
и победите в конкурсе на самую нечитаемую программу, хотя работать наверно будет быстрее.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.17;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c