Текущий архив: 2006.10.08;
Скачать: CL | DM;
ВнизОпять задачка :-) Найти похожие ветки
← →
Колдун © (2006-09-13 22:37) [0]Странно как-то: неужели так просто:
Упростить:
f(x;y;z) = not ( not(x) or y or z and x and not(y) )
Получится x and not(y) and (not(z) or not(x) or y) ?
← →
default © (2006-09-13 22:39) [1]в чём вопрос?
протестируй, благо вариантов входных данных всего 8
← →
Колдун © (2006-09-13 22:43) [2]вопрос в том, верно ли я сделал
← →
default © (2006-09-13 22:44) [3]протестируй, я навскидку не могу сказать да и всматриваться лень если честно
← →
Колдун © (2006-09-13 22:45) [4]Лень-матушка.
← →
guav © (2006-09-13 22:49) [5]> x and not(y) and (not(z) or not(x)or y )
подчёркнутое явно лишнее, т.к. противоречит жирному . всматриваться подробнее лень.
> Лень-матушка.
Тогда не упрощай.
← →
Колдун © (2006-09-13 22:50) [6]1. Может, поможешь с решением?
2. Это я про дефолта=)
← →
guav © (2006-09-13 22:58) [7]x and not y and not z вроде
← →
Alx2 © (2006-09-13 23:00) [8]>guav © (13.09.06 22:58) [7]
Ага. Это минимум.
← →
default © (2006-09-13 23:06) [9]у меня вышло
not (x and not(y))
это если операции слева направа выполняются
← →
Alx2 © (2006-09-13 23:12) [10]>default © (13.09.06 23:06) [9]
Это записать короче можно: not (x) or y
Но оно не эквивалентно [0]
← →
default © (2006-09-13 23:14) [11]Alx2 © (13.09.06 23:12) [10]
операции слева направо идут или учитывается приоритет and над or?
← →
Alx2 © (2006-09-13 23:17) [12]>default ©
C приоритетом, кажется.
← →
guav © (2006-09-13 23:22) [13]кстати, даже [7] не эквивлентно 0. т.к. возможен сайд-эффект при оценивании x и y :-)
← →
Mike Petrichenko (2006-09-13 23:22) [14]
> guav © (13.09.06 22:58) [7]
> x and not y and not z вроде
x and not y and z
← →
Alx2 © (2006-09-13 23:26) [15]>Mike Petrichenko (13.09.06 23:22) [14]
x and not y and not z
← →
default © (2006-09-13 23:29) [16]Alx2 © (13.09.06 23:17) [12]
я не учитывал приоритет
← →
Alx2 © (2006-09-13 23:31) [17]>default © (13.09.06 23:29) [16]
Тогда
not(x) or y or not(z)
:)
← →
Pavia © (2006-09-13 23:33) [18]Неа
x and y and not(z)
← →
palva © (2006-09-13 23:36) [19]
> guav © (13.09.06 22:58) [7]
> x and not y and not z вроде
Голосую "за".
← →
Pavia © (2006-09-13 23:37) [20]x and not (y or z )
← →
Alx2 © (2006-09-13 23:40) [21]Выражение
not ( not(x) or y or z and x and not(y) )
принимает значение true
при x = true, y = false, z=false.
Во всех остальных случаях принимает значение false.
Отсюда результат (ДНФ): x and not (y) and not (z)
C безприоритетным:
not ((((not(x) or y) or z) and x ) and not(y) )
принимает false при
x = true y = false z=true
отсюда результат (КНФ): not (x ) or (y) or not(z)
← →
default © (2006-09-13 23:41) [22]Alx2 © (13.09.06 23:31) [17]
быть может, перепроверять не буду - лень
думал типа если x ложь в скобке всегда будет нуль значит в итоге 1
если х истина...
z остался неудел
← →
guav © (2006-09-13 23:41) [23]
procedure Test(F: TF; S: string);
var I: Integer; T: DWORD; Valid: Boolean;
begin
Valid := (N0_a(X, Y, Z) = F(X, Y, Z));
T := GetTickCount();
for I := 0 to 20000000 do
F(X, Y, Z);
T := GetTickCount() - T;
Form1.Memo1.Lines.Add(Format(
"%s : Valid:%s Ticks: %d", [S, BoolToStr(Valid, True), T]));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Test(N0_a, "N0_a");
Test(N0_b, "N0_b");
Test(N7, "N7");
Test(N9, "N9");
Test(N14, "N14");
Test(N15, "N15");
Test(N17, "N17");
Test(N18, "N18");
end;
Memo1
N0_a : Valid:True Ticks: 281
N0_b : Valid:True Ticks: 188
N7 : Valid:True Ticks: 250
N9 : Valid:False Ticks: 172
N14 : Valid:False Ticks: 203
N15 : Valid:True Ticks: 172
N17 : Valid:False Ticks: 156
N18 : Valid:False Ticks: 219
← →
Alx2 © (2006-09-13 23:45) [24]>guav © (13.09.06 23:41) [23]
Еще [20] - верный и самый шустрый, кажется
← →
default © (2006-09-13 23:45) [25]Alx2 © (13.09.06 23:40) [21]
да, невнимательность
лабуда всё это:) рутина)
← →
DiamondShark © (2006-09-13 23:45) [26]ну, уже голосовать пошли ;)
а ведь фунция для упрощения в уме.
легко видеть, что для x=false функция обращается в false, а для x=true функция от x не зависит.
осталось протабулировать 4 значения.
легко видеть, что для y=true функция обращается в false, а для y=false функция от y не зависит.
осталось два варианта: x=true, y=false, z in [true, false], из которых функция обращается в true только при z=false, откуда автоматически получается
x and not(y) and not(z)
задачка на 30 секунд.
← →
default © (2006-09-13 23:47) [27]DiamondShark © (13.09.06 23:45) [26]
это есть рутина:) не интересно
← →
guav © (2006-09-13 23:49) [28]
> [24] Alx2 © (13.09.06 23:45)var
X: Cardinal = $0000FFFF;
Y: Cardinal = $00FF00FF;
Z: Cardinal = $0F0F0F0F;function N20(X, Y, Z: Cardinal): Cardinal;
begin
Result :=x and not (y or z )
end;N0_a : Valid:True Ticks: 203
N0_b : Valid:True Ticks: 203
N7 : Valid:True Ticks: 187
N9 : Valid:False Ticks: 172
N14 : Valid:False Ticks: 172
N15 : Valid:True Ticks: 172
N17 : Valid:False Ticks: 172
N18 : Valid:False Ticks: 156
N20 : Valid:True Ticks: 188
← →
palva © (2006-09-13 23:54) [29]> задачка на 30 секунд.
Тупо раскрываем скобки и приводим подобные (подобных не оказалось). Четыре строчки на клочке туалетной бумаги.
← →
Колдун © (2006-09-14 10:32) [30]1. Решение идёт без ДНФ, только с помощью законов алгебры логики.
2. В таком случае можете его расписать?
← →
palva © (2006-09-14 11:57) [31]
> Колдун © (14.09.06 10:32) [30]
> 2. В таком случае можете его расписать?
f(x;y;z) = not ( not(x) or y or z and x and not(y) ) = // убираем первый not
x and not y and not(z and x and not y) = // убираем not перед скобками
x and not y and (not z or not x or y) = // раскрываем скобки. Члены ДНФ я выделяю скобками
(x and not y and not z) or (x and not y and not x) or (x and not y and y) = // вторая и третья скобки равны false. Остается первая
x and not y and not z
Страницы: 1 вся ветка
Текущий архив: 2006.10.08;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.045 c