IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Глюки с условными переходами
сообщение
Сообщение #1


Гость






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

         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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 42

Репутация: -  0  +


if (m1 <> 1) or (m1 <> 3) or (m1 <> 5) or  (m1 <> 7) or (m1 <> 8) or (m1 <> 10) or (m1 <> 12) then
Честно признаюсь, программу полностью не смотрел, но проверка условия должна быть расписана так.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


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


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






каким образом?
обьясни принцип работы компилятора в данной ситуации
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 42

Репутация: -  0  +


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

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

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

Эта... Хммм... Может, книжку какую почитаешь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 20.11.2017 23:58
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"