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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
3-56008
Шурик Ш
2002-09-26 14:10
2002.10.17
Поиск в Query


1-56129
NN_Nikita
2002-10-09 11:39
2002.10.17
TMtsDataModule - входной рараметр PChar


7-56388
2UT
2002-08-07 12:45
2002.10.17
И снова о СОМ - портах (скорость выше 115200 ???)


1-56161
Шурик Ш
2002-10-07 12:18
2002.10.17
Вызов MDIChild формы


14-56288
AL2002
2002-09-23 15:42
2002.10.17
Есть ли здесь человек, который живет