Глава 13 Задание В

Книга адресована школьникам средних и старших классов, желающим испытать себя в «олимпийских схватках». Может быть полезна студентам-первокурсникам и преподавателям информатики.

Модераторы: Oleg_D, Модераторы

Глава 13 Задание В

Сообщение Eskin » 06.12.2016 21:27:26

На 95 странице нас просят реализовать схему:
дом-->улица A->Улица B ->Шлагбаум F -> школа
I-> Улица C------> Улица D---------------------I
I-> улица E ------> Шлагбаум G-----------------I
Дело в том, что по условиям задания, закрытый шлагмаум соответствует условию TRUE, если же перед булевым выражением вставить оператор "not" то оно целиком меняет смысл, как можно реализовать данный алгоритм?
Код: Выделить всё
if (A or C or E) and (B or D)

каким образом, можно грамотно вставить оператор not, не перевернув данное логическое выражение на противоположенный знак?
Аватара пользователя
Eskin
незнакомец
 
Сообщения: 8
Зарегистрирован: 05.12.2016 22:43:34

Re: Глава 13 Задание В

Сообщение enot777 » 07.12.2016 15:43:30

>> Eskin
Вариант решения для 13в
Код: Выделить всё
program p13_w;
var
  a, b, c, d, e, f, g:boolean; //a..e - улицы, true (1) - свободна,  f and g - шлагбаум, true (1) - если закрыт
  s: string;
begin
  writeln('Укажите загруженность дорог a, b, c, d, e, f, g "0" or "1"');
  write('a: ');readln(s);a:= s='1';
  write('b: ');readln(s);b:= s='1';
  write('c: ');readln(s);c:= s='1';
  write('d: ');readln(s);d:= s='1';
  write('e: ');readln(s);e:= s='1';
  write('f: ');readln(s);f:= not(s='1');
  write('g: ');readln(s);g:= not(s='1');
  a:= (a and b and f);
  c:= (c and d);
  e:= (e and g);
  if a and c and e then writeln('Езжай по любой дороге')
  else if a then writeln('Езжай по: a b f')
    else if c then writeln('Езжай по: c d')
      else if e then writeln('Езжай по: e g')
        else writeln('Иди пешком!');
  writeln('Нажми Enter!');
  readln;
end.

1 путь: a b f
2 путь: c d
3 путь: e g
Шлагбаум f и g можно инвертировать при присвоении: f:=not(s='1'); и g:=not(s='1');
enot777
новенький
 
Сообщения: 24
Зарегистрирован: 24.11.2016 15:20:58

Re: Глава 13 Задание В

Сообщение Oleg_D » 07.12.2016 20:38:27

enot777 писал(а):Шлагбаум f и g можно инвертировать при присвоении: f:=not(s='1'); и g:=not(s='1');

Можно и так, конечно. Но цель задачи -- научить применять отрицание внутри выражений. Например:
Код: Выделить всё
  write('f: '); readln(s); f:= s='1';
  write('g: '); readln(s); g:= s='1';
  a:= (a and b and not f);
  c:= (c and d);
  e:= (e and not g);

А ещё могу предложить желающим изменить условие задачи так, чтобы уличной пробке соответствовало TRUE, т.е. инвертировать условие. И записать соответствующие выражения с учётом этого изменения.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: Глава 13 Задание В

Сообщение Eskin » 08.12.2016 00:31:42

Благодарю вас за ответы, в некоторых вариантах программы я был близок к решению, но к сожалению применял not по отношению к всему выражению, либо же ставил его как and not (e and G) из за чего компилятор выдавал ошибку, К сожалению я не подумал, что not, можно так же применять внутри скобок как операторы or и and
Олег, с удовольствием попробую решить вашу задачу в свободное время :)
Аватара пользователя
Eskin
незнакомец
 
Сообщения: 8
Зарегистрирован: 05.12.2016 22:43:34


Вернуться в Книга "Песни о Паскале"

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru