Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не выполняются строки кода [D7, WinXP]


Chaser ©   (2005-08-24 09:41:00) 

Имеется код:

   begin
     z:=0;
     k:=1;
     p:=4;
     if (i>1) and (i<6)
     then
      begin
       x:=1;
       z:=i-k;
       for j:=1 to 11 do
        begin
         if (j>1) and (j<6)
         then
          begin
           if (j-p)=i
           then Str.Add('...')
           else
            begin
             if (j-p)<0
             then Str.Add('...');
             if (j-p)>=1
             then Str.Add('...');
             dec(z);
            end;
          end;
          ...
        end;
     -> k:=k+2;
     -> p:=p-1;
      end;
   end;

но вот эти две строки не выполняются:
       k:=k+2;
       p:=p-1;

Если вместо if (i>1) and (i<6)
поставить цикл, то они работают.
Почему так происходит и как это обойти?


Adder   (2005-08-24 15:13:00) [1]

В смысле - "внутри цикла", а не во "внутреннем цикле" -)


Adder   (2005-08-24 15:01:00) [2]

Chaser ©   (24.08.05 14:26) [15]
Дело в том что есть еще внешний цикл по i, скажем от 0 до ListBox1.Items.Count-1.


И при этом во внутреннем цикле ты делаешь
 begin
    z:=0;
    k:=1;
    p:=4;

Если пройтись отладчиком (с отключенной оптимизацией) - наверняка увидишь, что строчки
-> k:=k+2;
    -> p:=p-1;
Ни на что не влияют


Alexander Panov   (2005-08-24 14:27:00) [3]

Тогда тебе придется весь код привести.


Chaser   (2005-08-24 14:26:00) [4]

Дело в том что есть еще внешний цикл по i, скажем от 0 до ListBox1.Items.Count-1.
Так что i попадает в интервал от 2 до 5.
Соответственно этот код

if (i>1) and (i<6)
   then
    begin
     x:=1;
     ....

выполняется.


Плохиш   (2005-08-24 14:20:00) [5]


> Chaser ©   (24.08.05 10:17) [6]
> Он почему-то пишет Хинт, что мол переменные "k", "p", и
> "z" не используются, хотя они ведь используются в программе,

1. Вообще-то компилятор говорит, что значения присвоенные переменным в отмеченных строчках не используются.
2. Кстати, ты сам ответил на свой вопрос:
> Если вместо if (i>1) and (i<6)
> поставить цикл, то они работают.


Adder   (2005-08-24 14:14:00) [6]

И второй вопрос - отладчиком смотрел?


Adder   (2005-08-24 14:12:00) [7]

Имеется код:

  begin
    z:=0;
    k:=1;
    p:=4;
    if (i>1) and (i<6)
    then
     begin
      x:=1;


А вот вопрос.... чему равно i?  
Строка x:=1 и все последующее когда-нибудь выполняется?


Alexander Panov   (2005-08-24 14:00:00) [8]

>[10] Chaser ©   (24.08.05 13:36)

> Так они же используются в if'е!


Значит и эти if ни на что не влияют. А следовательно - не нужны.


Chaser   (2005-08-24 13:36:00) [9]

Так они же используются в if'е!


Alexander Panov   (2005-08-24 12:26:00) [10]

Chaser ©   (24.08.05 10:46) [8]
И как же мне поступить в моем случае?


Я думаю, что те переменные, которые не используются, надо убрать.


Chaser   (2005-08-24 10:46:00) [11]

И как же мне поступить в моем случае?


Alexander Panov   (2005-08-24 10:30:00) [12]

Chaser ©   (24.08.05 10:17) [6]

Сравни:

function A(const c: Char): String;
var
  Sym: Char;
begin
  Sym:= c;
  Result := 'Результат - '+c;
end;


Компилятор здесь тоже скажет про Sym, что переменная не используется, потому что она действительно реально не используется.
Даже если ты присваиваешь переменной значение, а в пределах видимости эта переменная больше не используется, компилятор выбросит лишние операторы  из твоего кода как ненужные. И он в джанном случае будет прав.


Chaser   (2005-08-24 10:17:00) [13]

Он почему-то пишет Хинт, что мол переменные "k", "p", и "z" не используются, хотя они ведь используются в программе, например
есть строка
cc:=SpinEdit1.Value-z-1;
или
pp:=SpinEdit1.Value-z;
или
xx:=j-p;

Потом здесь: Str.Add(Edit2.Text+'_'+IntToStr(pp)).
В чем проблема?


Anatoly Podgoretsky   (2005-08-24 10:03:00) [14]

Значит они не выполняют реальной работы и выкинуты оптимизатором.


Adder   (2005-08-24 10:03:00) [15]

Отключи оптимизацию, а потом выполни

> КаПиБаРа ©   (24.08.05 09:43) [1]


Chaser   (2005-08-24 09:53:00) [16]

"k" и "p" то есть.


Chaser   (2005-08-24 09:52:00) [17]

Значения k и z не меняются, эти строки просто игнорируются отладчиком и компилятором соотвественно.


КаПиБаРа   (2005-08-24 09:43:00) [18]

F7, F8 - пошаговое выполнение


Наверх

Титульная страница Поиск, карта сайта Написать письмо