Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-56380
kima
2002-08-11 15:44
2002.10.17
clipboard


7-56373
Дмитрий Баранов
2002-08-09 12:14
2002.10.17
Прибить SYSTEM-процесс


1-56090
Rouse_
2002-10-08 20:13
2002.10.17
Форма в стиле Object TreeView


1-56137
Viktor1
2002-10-09 12:41
2002.10.17
Прозрачное окно!!!


3-55932
Bishop
2002-09-18 20:32
2002.10.17
Глюк грида





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский