Просмотр полной версии : Логическая задача.
alexcon314
26.09.2007, 22:36
Задача.
Имеется три величины Boolean.
В исходном состоянии одна из них равна 1, две другие 0.
Одна из величин принимает значение 1.
Нужно, чтобы при этом две другие величины были равны 0.
Например: 100->010->100->001->... и т.д.
Кто может решить?
Я даун :wacko: - до меня не дошел смысл :(, испульзуя логические операторы или как ил где?
KidsKilla
26.09.2007, 22:52
var v1 = true;
var v2 = false;
var v3 = false;
v1 = v2 = v3 = false;
v2 = true;
???
1 и 0 вообще говоря просто числа, а не булевы значения.
Формулировка задачи несколько странная.
Элементарно.
d = 1;
function get a(){ return d < 0 };
function get b(){ return d == 0};
function get c(){ return d > 0 };
function set a(val){ if(val) d =-1; };
function set b(val){ if(val) d = 0; };
function set c(val){ if(val) d = 1; };
Что тус сложного то? IF(A==1){B=0;C=0} ELSE IF(B==1){A=0;C=0} ELSE IF(C==1){B=0;A=0}
alexcon314
26.09.2007, 23:41
Имеется циклический алгоритм, в одной из частей которого обрабатываются эти три величины.
Допустим, на выходе обработчика в очередном цикле было 100.
Далее, выполняютсе другие инструкции в теле цикла, цикл крутится,
на вход обработчика попадают 100, выдает он 100 ... Но вот по каким-то причинам где-то в цикле значения величин изменились: на вход обработчика попадает 110. Тогда он должен выдать 010. Нельзя ли здесь обойтись без буферизации? И не использовать дополнительных флагов?
IF....
Это не if-else. Это задачка из дискретной математики. Нужно записать выражение, включающее в себя комбинации a, b и с результат которого равен 1 в случае, если одна из этих величин имеет значение 1 (истина).
Если значения величин заданы в виде 001, 010, 100, то использовать побитовые операции.
PS: условие задачи не до конца понятно.
ВСЁ РАВНО ЕЁ ЧЕРЕЗ if-else можно решить 100%
ВСЁ РАВНО ЕЁ ЧЕРЕЗ if-else можно решить 100%
После после пояснения мне таже так кажется...
alexcon314
27.09.2007, 00:16
Имеется циклический алгоритм, в одной из частей которого обрабатываются эти три величины.
Допустим, на выходе обработчика в очередном цикле было 100.
Далее, выполняютсе другие инструкции в теле цикла, цикл крутится,
на вход обработчика попадают 100, выдает он 100 ... Но вот по каким-то причинам где-то в цикле значения величин изменились: на вход обработчика попадает 110. Тогда он должен выдать 010. Нельзя ли здесь обойтись без буферизации? И не использовать дополнительных флагов?
Извините. Сам не люблю, когда условия задачи формулируются нечетко.
Нужно дополнить.
Условно говоря, первая величина из тройки имеет смысл "двигаться влево", вторая - "стоп", третья - "двигаться вправо".
А я что написал? Не хотите писать код в классах, addProperty() поможет.
2morrowMan
27.09.2007, 00:28
1 и 0 вообще говоря просто числа, а не булевы значения.
Формулировка задачи несколько странная.
true = 1, false = 0 - так оно и есть.
x = 4; // 100
y = 6; // 110
trace(y - x ); // 2 -- 010
x = 1; // 001
y = 5; // 101
trace(y - x)// 100
true = 1, false = 0 - так оно и есть.
2 тоже true ;)
на вход обработчика попадает 110. Тогда он должен выдать 010.
А почему не 100?
artcraft
27.09.2007, 04:56
а если придёт 000 или 111 ? :~)
блин,
так не нужно на вход присылать 2-е или 3 единицы - присылай номер позиции который нужно изменить на true,
или так чтоб была только одна единица.
а если это невозможно то тут поможет switch case:
var income:String = '110';
var result:String;
switch(income){
case '000': result = '100'; break;
case '001': result = '001'; break;
case '010': result = '010'; break;
case '011': result = '010'; break;
case '100': result = '100'; break;
case '101': result = '100'; break;
case '110': result = '100'; break;
case '111': result = '100';
}
Mr. Fixit
27.09.2007, 05:17
странная какая-то тема...
artcraft
27.09.2007, 05:25
x = 4; // 100
y = 6; // 110
trace(y - x ); // 2 -- 010
x = 1; // 001
y = 5; // 101
trace(y - x)// 100
это не решает ничего:
x = 6; // 110
y = 1; // 001
trace(y - x ); // -5 => wtf
это не решает ничего:
x = 6; // 110
y = 1; // 001
trace(y - x ); // -5 => wtf
По уловию задачи (смотри первый пост) такой вариант невозможен. На выходе число будет всегда больше или равно предыдущему.
alexcon314
02.10.2007, 08:51
да.. хреновый из меня писатель, в смысле формулирования условий задач.:mad:.
Несмотря на это - всем спасибо. (и респект Kikasso).
Попробую еще раз.
"Имеется" три "кнопки" с залипанием. В начальном состоянии одна нажата, две другие нет. При нажатии одной из кнопок ранеее нажатая должна "отлипнуть".
Прошу учесть, что речь о "кнопках" - только аналогия.
А почему не 100?"
Потомучто 100 было в предыдущем состояни только что.
PS. Снова на форуме!!!!
function ABC () {
this.link = 0;
this.array = [1, 0, 0];
}
ABC.prototype.setOn = function (val) {
val = Math.floor (val)
if (val < this.array.length && val >= 0) {
this.array[this.link] = 0;
this.link = val;
this.array[val] = 1;
}
return this;
};
ABC.prototype.toString = function () {
return this.array.join ("");
};
abc = new ABC ();
trace (abc);
trace (abc.setOn (0));
trace (abc.setOn (1));
trace (abc.setOn (2));
trace (abc.setOn (3));
trace (abc.setOn (0));
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.