Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2021, 18:50   #1
Sandra#26
Новичок
Джуниор
 
Регистрация: 20.06.2021
Сообщений: 3
По умолчанию Паскаль ABC игнорирует условие

Паскаль не выполняет все условия оператора. В данном случае "(i mod 13<>0)" игнорируется, хотя стоит and
Код:
var
  l:integer;
  count:=0;
  min:=100000;
  begin
    for var i:=16015 to 48989 do
    begin
      if (i mod 7=0) or (i mod 11=0) and (i mod 9<>0) and(i mod 12<>0)and (i mod 13<>0) then begin
        l:=i; 
        inc(count);
        if (l<m) then min:=l;
    end;
    end;
    write(count,min);
  end.
выдает в качестве минимального значения 16016, несмотря на то что это число делится на 13.

вот так выглядит верный вариант, но я не вижу разницы:
Код:
if (i mod 7 = 0) or (i mod 11 = 0) then
          if i mod 9 <> 0 then
              if i mod 12 <> 0 then
                  if i mod 13 <> 0 then  begin
                      count := count + 1;
                      if i < min then 
                          min := i;
                      end;
Подскажите, в чем ошибка в 1 коде.

Последний раз редактировалось Sandra#26; 20.06.2021 в 18:55.
Sandra#26 вне форума Ответить с цитированием
Старый 20.06.2021, 19:17   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

У and приоритет выше, чем у or. Поэтому 1 код не эквивалентен второму. Добавьте скобки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 20.06.2021, 19:31   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Напомню таблицы истинности для
Код:
A B   И    ИЛИ
0 0   0     0
0 1   0     1
1 0   0     1
1 1   1     1
Из этого следует, что логическое условие будет истинным при делимости числа на 7 или 11.
Следующие далее условия не будут рассматриваться (если работает оптимизатор) и не изменят значения этого логического условия.
Числа 7 и 11 так же являются делителями числа 16016, так что проблема не в ABC.
Тут следует подумать о том, как расставить скобки.

Пока писал ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 20.06.2021, 22:18   #4
Sandra#26
Новичок
Джуниор
 
Регистрация: 20.06.2021
Сообщений: 3
По умолчанию

BDA, Спасибо, увидела ошибку
Sandra#26 вне форума Ответить с цитированием
Старый 20.06.2021, 22:20   #5
Sandra#26
Новичок
Джуниор
 
Регистрация: 20.06.2021
Сообщений: 3
По умолчанию

ViktorR, Таблицу-то я помню, с внимательностью проблемы...
Sandra#26 вне форума Ответить с цитированием
Старый 21.06.2021, 15:25   #6
canadamoscow
Пользователь
 
Аватар для canadamoscow
 
Регистрация: 16.05.2020
Сообщений: 57
По умолчанию

Код:
begin
  Writeln(true or true and false); // = true
  Writeln((true or true) and false); // = false
end.
canadamoscow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль ABC. Программа на языке Паскаль. Helen1 Паскаль, Turbo Pascal, PascalABC.NET 6 13.01.2018 21:46
Паскаль.Почему условие не срабатывает? Max$$ Помощь студентам 12 26.09.2017 20:10
Помогите переделать из паскаля abc в паскаль abc.net Smile189 Паскаль, Turbo Pascal, PascalABC.NET 3 09.11.2016 08:12
паскаль abc. Используя графические средства языка Паскаль на одной координатной сетке построить графики функций кириллюк Помощь студентам 5 15.09.2013 12:11
правильно написать условие в паскаль Александр1991 Помощь студентам 1 31.10.2010 11:14