Составим программу для вывода библиографических ссылок. В этом списке могут быть ссылки на книги и на журнальные статьи. Например,
1. Ахо А.,Хопкрофт Дж., Ульман Дж. Структуры данных и алгоритмы – М.: Вильямс, 2000.-382с.
1. Bayer R.S., Moore J.S. A fast string searching algorithm.- Communication ACM, 20, N10, (1977), 762 – 772
const m_rev=2;
type select = ( book, magazine); { тип, задающий две альтернативы}
entry = record { фиксированная часть}
author, title : string[100];
year : 1..2200;
case tag: select of {вариантная часть}
book : ( publisher, city : sstring[50];
page :1..10000);
magazine : ( mag_name: string[100];
valume, issue:byte;
page_low, page_up:1..10000)
end;
ref_list = array[1..m_ref] of entry;
var x : ref_list;
procedure ReadRef(var rf:ref_list); {процедура ввода данных}
begin
with rf[1] do begin
tag := book;
author :=’Ахо А.,Хопкрофт Дж., Ульман Дж.’;
title:=’Структуры данных и алгоритмы’;
year:=2000;
page:=382;
pablisher :=’Вильямс’;
city := ‘M.:’;
end;
with rf[2] do begin
tag := magazine;
author :=’Bayer R.S., Moore J.S.’;
title:=’A fast string searching algorithm’;
year:=1977;
mag_name:=’Communication ACM;
valume := 20;
issue := 10;
page_low :=762; page_up :=772;
end;
end;
procedure WriteRef(rf:ref_list); { процедура вывода}
var I: integer;
begin
for I:= 1 to m_ref do
with rf[I] do begin
writeln(I:2, auther, ‘ ‘,title,’.’);
if rf[I].tag = book then writeln(‘_’, city, publisher,’.’,year,’.’,page,’c.’)
else writeln(‘_’,mag_name,’,’,volume,’,N’,issue,’,(‘,year,’),’,
page_low,’_’,page_up)
end
end;
Begin { основная программа}
ReadRef(x); WriteRef(x);
End.
Найти ошибку в программе
Из таблицы мы видим, что F=1, если Х=1 и хотя бы один из Y,Z равен 1.
"Хотя бы один из" - тут уже повеяло функцией "ИЛИ".
Смотрим варианты ответов. a) и б) сразу же отбрасываем, потому что там нет "ИЛИ". А вот в оставшихся двух это "ИЛИ" везде.
Смотрим снова в таблицу. В в) присутствует Х и по "ИЛИ" с остальными переменными он даст всегда F=1. Следовательно, в) подходит.
А вот в г) стоит Х с отрицанием, т.е. при Х=1 мы получаем ¬Х=0 и тут Х нам не А что в г) с Y и Z? В соответствии г) F=1 получится, если Y=1 "ИЛИ" Z=0. Но у нас в последней строке есть "нехороший" результат Y=0, Z=1, а F все равно 1. Поэтому мы вынуждены признать, что г) не подходит.
ответ: в)
Сначала приведу таблицы истинности конъюнкции, дизъюнкции и инверсии. Сразу стоит отметить, что приоритет инверсии выше конъюнкции и дизъюнкции, а приоритет конъюнкции выше дизъюнкции. То есть, например, отрицание будет выполнено раньше логического ИЛИ.
Логическое И, конъюнкция (&)
X Y F
0 0 0
0 1 0
1 0 0
1 1 1
Логическое ИЛИ, дизъюнкция (|)
X Y F
0 0 0
0 1 1
1 0 1
1 1 1
Инверсия(¬)
X F
0 1
1 0
Перейдём непосредственно к перебору вариантов:
а) X & Y & ¬ Z
1 1 1 0 - не подходит, 1 И 1=1, 1 И 0=0, а должно быть 1
б) X & Y & Z
1 1 1 1
1 1 0 0 - не подходит, 1 И 1=1, 1 И 0=0, а должно быть 1
в) X | ¬ Y | Z
1 1 1 1
1 1 0 1
1 0 1 1
в) подходит
г) ¬X | Y | ¬Z
1 1 1 1
1 1 0 1
1 0 1 0 - не подходит, так 0 ИЛИ 0=0, 0 ИЛИ 0=0, а нужно 1
ответ: в)