Задания
Версия для печати и копирования в MS Word
Тип 2 № 16878
i

Ло­ги­че­ская функ­ция F задаётся вы­ра­же­ни­ем (x ≡ ¬y) → (z ≡ (y ∨ w)).

Дан ча­стич­но за­пол­нен­ный фраг­мент, со­дер­жа­щий не­по­вто­ря­ю­щи­е­ся стро­ки таб­ли­цы ис­тин­но­сти функ­ции F.

Опре­де­ли­те, ка­ко­му столб­цу таб­ли­цы ис­тин­но­сти со­от­вет­ству­ет каж­дая из пе­ре­мен­ных x, y, z, w.

 

Пе­ре­мен­ная 1Пе­ре­мен­ная 2Пе­ре­мен­ная 3Пе­ре­мен­ная 4Функ­ция
????????????F
000
0000
000

 

В от­ве­те на­пи­ши­те буквы x, y, z, w в том по­ряд­ке, в ко­то­ром идут со­от­вет­ству­ю­щие им столб­цы (сна­ча­ла  — буква, со­от­вет­ству­ю­щая пер­во­му столб­цу; затем  — буква, со­от­вет­ству­ю­щая вто­ро­му столб­цу, и т. д.). Буквы в от­ве­те пи­ши­те под­ряд, ни­ка­ких раз­де­ли­те­лей между бук­ва­ми ста­вить не нужно.

 

При­мер. Пусть за­да­но вы­ра­же­ние xy, за­ви­ся­щее от двух пе­ре­мен­ных x и y, и фраг­мент таб­ли­цы ис­тин­но­сти:

 

Пе­ре­мен­ная 1Пе­ре­мен­ная 1Функ­ция
??????F
010

 

Тогда пер­во­му столб­цу со­от­вет­ству­ет пе­ре­мен­ная y, а вто­ро­му столб­цу со­от­вет­ству­ет пе­ре­мен­ная x. В от­ве­те нужно на­пи­сать: yx.

Спрятать решение

Ре­ше­ние.

Рас­смот­рим дан­ное вы­ра­же­ние. Пре­об­ра­зу­ем ло­ги­че­ское вы­ра­же­ние (x ≡ ¬y) → (z ≡ (y ∨ w)) и по­лу­чим си­сте­му, при ко­то­рой оно ложно:

 си­сте­ма вы­ра­же­ний x \equiv \bar y z не равно y плюс w конец си­сте­мы . левая круг­лая скоб­ка * пра­вая круг­лая скоб­ка

 

За­ме­тим, что тре­тий и четвёртый столб­цы таб­ли­цы ис­тин­но­сти  — это y и x. Из усло­вия z не равно y плюс w сле­ду­ет, что пер­во­му столб­цу таб­ли­цы ис­тин­но­сти со­от­вет­ству­ет пе­ре­мен­ная z. Сле­до­ва­тель­но, вто­ро­му столб­цу таб­ли­цы ис­тин­но­сти со­от­вет­ству­ет w.

 

При­ве­дем дру­гое ре­ше­ние.

Со­ста­вим таб­ли­цу ис­тин­но­сти для вы­ра­же­ния (x ≡ ¬y) → (z ≡ (y ∨ w)) вруч­ную или при по­мо­щи языка Python:

print("x y z w")

for x in range(0, 2):

for y in range(0, 2):

for z in range(0, 2):

for w in range(0, 2):

if not((x == (not y)) <= (z == (y or w))):

print(x, y, z, w)

Далее вы­пи­шем те на­бо­ры пе­ре­мен­ных, при ко­то­рых дан­ное вы­ра­же­ние равно 0. В на­бо­рах пе­ре­мен­ные за­пи­шем в по­ряд­ке х, y, z, w.

По­лу­чим сле­ду­ю­щие на­бо­ры:

(0, 1, 0, 0)

(0, 1, 0, 1),

(1, 0, 0, 1),

(1, 0, 1, 0).

Со­по­ста­вим эти на­бо­ры с при­ве­ден­ным в за­да­нии фраг­мен­том таб­ли­цы ис­тин­но­сти.

Вто­рая стро­ка таб­ли­цы может со­от­вет­ство­вать толь­ко на­бо­ру (0, 1, 0, 0). Сле­до­ва­тель­но, тре­тий стол­бец со­от­вет­ству­ет пе­ре­мен­ной y, ко­то­рая в этом на­бо­ре при­ни­ма­ет еди­нич­ное зна­че­ние.

За­ме­тим, что пе­ре­мен­ная z при­ни­ма­ет ну­ле­вое зна­че­ние в трех из име­ю­щих­ся че­ты­рех на­бо­рах, а осталь­ные пе­ре­мен­ные  — толь­ко в двух. Сле­до­ва­тель­но, пер­вый стол­бец таб­ли­цы со­от­вет­ству­ет пе­ре­мен­ной z.

Пер­вая стро­ка таб­ли­цы может со­от­вет­ство­вать толь­ко на­бо­ру (1, 0, 0, 1), где пе­ре­мен­ные y и z при­ни­ма­ют ну­ле­вые зна­че­ния. Сле­до­ва­тель­но, тре­тья стро­ка со­от­вет­ству­ет на­бо­ру (0, 1, 0, 1), в ко­то­ром ну­ле­вое зна­че­ние при­ни­ма­ет пе­ре­мен­ная x. Тогда x  — это чет­вер­тый стол­бец, а w  — вто­рой стол­бец.

 

Ответ: zwyx.

 

 

При­ведём ре­ше­ние Сер­гея Га­ле­е­ва на языке C++.

#include

#include

#include

#include

#include

using namespace std;

bool null(int x, int y, int z, int w) {

return ((x == !y) <= (z == (y || w))); //(x ≡ ¬y) → (z ≡ (y ∨ w)).

}

int main() {

srand(time(0));

vectorbool act = true;

while (act) {

int active = 0;

vector f(4);

generate(f.begin(), f.end(), []() {return rand() % 2; });

if (f[0] == 0 && f[2] == 0 && s.empty()) s.push_back(f);

if (f[0] == 0 && f[1] == 0 && f[3] == 0 && find(s.begin(), s.end(), f) == s.end()) s.push_back(f);

if (f[0] == 0 && f[3] == 0 && find(s.begin(), s.end(), f) == s.end()) s.push_back(f);

if (s.size() == 3) {

while (active != 1000) {

active++;

int mass[4] = { 0, 1, 2, 3 };

for (int i = 0; i < 4; i++)

swap(mass[rand() % 4], mass[rand() % 4]);

if (!null(s[0][mass[0]], s[0][mass[1]], s[0][mass[2]], s[0][mass[3]]))

if (!null(s[1][mass[0]], s[1][mass[1]], s[1][mass[2]], s[1][mass[3]]))

if (!null(s[2][mass[0]], s[2][mass[1]], s[2][mass[2]], s[2][mass[3]]) && act)

{

cout « "x = " « mass[0] + 1 « " y = " « mass[1] + 1 « " z = " « mass[2] + 1 « " w = " « mass[3] + 1;

act = false;

}

}

if (active == 1000) s.clear();

}

}

return 0;

}


Аналоги к заданию № 16805: 16878 Все

Раздел кодификатора ФИПИ: 1.5.1 Вы­ска­зы­ва­ния, ло­ги­че­ские опе­ра­ции, кван­то­ры, ис­тин­ность вы­ска­зы­ва­ния