Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Глюки с условными переходами

Автор: serg 14.04.2003 1:17

Привет всем.
Чем больше работаешь в борланде тем больше разочаровываеся.
Накрапал маленькую прогу лабы.
При дебаге, в  условном переходе независимо что хранится в перемненой срабатывает.
кто сталкивался с таким чудом подскажите как из этой ситуации выходить.
За ранее благодарень
Исходник:

         var e,m,l:integer;
        label 1,2,3,4,5;
        var e1,m1,l1,d,f,q,c,n:integer;
         begin
          writeln (' Введите год: ');
read (e);
writeln (' Введите месяц: ');
read (m);
writeln (' Введите число: ');
read (l);
         n:=0 ;
         m1:=1;
         d:=7;
         f:=d;
        4: if f > 7 then f :=1;


        if m = m1 then
         begin

         if l = 1 then goto 5;

         for q:=2 to l do

         begin
            f:=f+1;
          writeln (f,'-день');
     if f = 8 then
     begin
     f:=1;
       writeln (f,'--день');
     end;

            writeln (f,'-день');
         end;
         5:
                   writeln (f,'-день недели');
         goto 1;
         end;

         writeln (n,' -', f,' ','-день');

         if n <> 28 then goto 3;

          writeln (m1,'-m1');
         if m1 = 2 then
           begin
                       m1:=m1+1;
            writeln (m1,'-д m1');

           { f:=f+1;
               if f=8 then f:=1;
          }  goto 2;
            end;



{вот тут глюк}

         if m1 <> 1 or 3 or 5 or  7 or 8 or 10 or 12 then
         begin
          writeln (m1,'-д m1');

         for c:= 1 to 3 do
         begin
         f:=f+1;
         if f=8 then f:=1;
         end;
         m1:=m1+1;
         n :=0;
         goto 2;
         end
         else

         for c:= 1 to 2 do
         begin
         f:=f+1;
         if f = 8 then f :=1;
         end;
          m1:=m1+1;
           n:=0;
           goto 4;
        3:
         n:=28 ;
       2:   goto 4;


      1:
      end.

Автор: ozzy 14.04.2003 8:00

if (m1 <> 1) or (m1 <> 3) or (m1 <> 5) or  (m1 <> 7) or (m1 <> 8) or (m1 <> 10) or (m1 <> 12) then
Честно признаюсь, программу полностью не смотрел, но проверка условия должна быть расписана так.

Автор: trminator 14.04.2003 20:25

1 or 3 or 5 or  7 or 8 or 10 or 12 = 15
if m1 <> 1 or 3 or 5 or  7 or 8 or 10 or 12 эквивалентно if m1 <> 15

Автор: serg 16.04.2003 20:03

каким образом?
обьясни принцип работы компилятора в данной ситуации

Автор: ozzy 17.04.2003 8:04

Цитата
каким образом?
обьясни принцип работы компилятора в данной ситуации

Операции производятся слева направо, но у оr приоритет операций выше, чем у <>, поэтому or выполняется раньше.  

Цитата
Чем больше работаешь в борланде тем больше разочаровываеся.

Эта... Хммм... Может, книжку какую почитаешь?