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

Вниз

Не выполняются строки кода   Найти похожие ветки 

 
Chaser ©   (2005-08-24 09:41) [0]

Имеется код:

   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)
поставить цикл, то они работают.
Почему так происходит и как это обойти?


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

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


 
Chaser ©   (2005-08-24 09:52) [2]

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


 
Chaser ©   (2005-08-24 09:53) [3]

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


 
Adder ©   (2005-08-24 10:03) [4]

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

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


 
Anatoly Podgoretsky ©   (2005-08-24 10:03) [5]

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


 
Chaser ©   (2005-08-24 10:17) [6]

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

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


 
Alexander Panov ©   (2005-08-24 10:30) [7]

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:46) [8]

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


 
Alexander Panov ©   (2005-08-24 12:26) [9]

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


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


 
Chaser ©   (2005-08-24 13:36) [10]

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


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

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

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


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


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

Имеется код:

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


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


 
Adder ©   (2005-08-24 14:14) [13]

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


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


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

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


 
Chaser ©   (2005-08-24 14:26) [15]

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

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

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


 
Alexander Panov ©   (2005-08-24 14:27) [16]

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


 
Adder ©   (2005-08-24 15:01) [17]

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;
Ни на что не влияют


 
Adder ©   (2005-08-24 15:13) [18]

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



Страницы: 1 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.056 c
1-1126172596
AddValue
2005-09-08 13:43
2005.10.02
Delphi vs Assembler


1-1126014139
DeadMoroz
2005-09-06 17:42
2005.10.02
dxDBGrd1.SelectedNodes


14-1126279080
Ylia__
2005-09-09 19:18
2005.10.02
Подскажите алгоритм поиска всех компьютеров в локальной сети.


1-1126704720
NetFlover
2005-09-14 17:32
2005.10.02
Проиграть по телефону музычку .... :)


14-1126331085
vecna
2005-09-10 09:44
2005.10.02
английская поговорка...